<?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>205778</bug_id>
          
          <creation_ts>2020-01-05 12:42:40 -0800</creation_ts>
          <short_desc>Rename GraphicsContext3D to GraphicsContextGL</short_desc>
          <delta_ts>2020-01-06 21:54:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>japhet</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>noam</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>rniwa</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1602877</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-05 12:42:40 -0800</bug_when>
    <thetext>Rename GraphicsContext3D to GraphicsContextGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602887</commentid>
    <comment_count>1</comment_count>
      <attachid>386797</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-05 13:41:07 -0800</bug_when>
    <thetext>Created attachment 386797
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602888</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-05 13:41:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/58327597&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602895</commentid>
    <comment_count>3</comment_count>
      <attachid>386797</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-05 15:21:34 -0800</bug_when>
    <thetext>Comment on attachment 386797
Patch

rs=me, but get it building first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602933</commentid>
    <comment_count>4</comment_count>
      <attachid>386806</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-05 20:09:46 -0800</bug_when>
    <thetext>Created attachment 386806
EWS test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603091</commentid>
    <comment_count>5</comment_count>
      <attachid>386854</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-06 09:36:18 -0800</bug_when>
    <thetext>Created attachment 386854
EWS test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603103</commentid>
    <comment_count>6</comment_count>
      <attachid>386856</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-06 09:53:37 -0800</bug_when>
    <thetext>Created attachment 386856
EWS test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603155</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-01-06 11:15:21 -0800</bug_when>
    <thetext>Committed r254064: &lt;https://trac.webkit.org/changeset/254064&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603348</commentid>
    <comment_count>8</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-01-06 15:59:06 -0800</bug_when>
    <thetext>Reopening to land build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603350</commentid>
    <comment_count>9</comment_count>
      <attachid>386908</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-01-06 16:10:12 -0800</bug_when>
    <thetext>Created attachment 386908
Build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603367</commentid>
    <comment_count>10</comment_count>
      <attachid>386908</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-01-06 16:43:42 -0800</bug_when>
    <thetext>Comment on attachment 386908
Build fix

Mac and GTK seem happy. Asking for a review since I modified Platform.h and added USE_ macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603368</commentid>
    <comment_count>11</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-01-06 16:43:48 -0800</bug_when>
    <thetext>Mac and GTK seem happy. Asking for a review since I modified Platform.h and added USE_ macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603370</commentid>
    <comment_count>12</comment_count>
      <attachid>386908</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-01-06 16:44:13 -0800</bug_when>
    <thetext>Comment on attachment 386908
Build fix

Mac and GTK seem happy. Asking for a review since I modified Platform.h and added USE_ macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603410</commentid>
    <comment_count>13</comment_count>
      <attachid>386908</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-06 18:52:34 -0800</bug_when>
    <thetext>Comment on attachment 386908
Build fix

Clearing flags on attachment: 386908

Committed r254103: &lt;https://trac.webkit.org/changeset/254103&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603452</commentid>
    <comment_count>14</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-01-06 21:54:00 -0800</bug_when>
    <thetext>Build is back to green</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386797</attachid>
            <date>2020-01-05 13:41:07 -0800</date>
            <delta_ts>2020-01-05 15:21:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205778-20200106084104.patch</filename>
            <type>text/plain</type>
            <size>1743376</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDlhZGIxMjdhYzMwNjI4ZDBmM2M0OWRj
YmY1NWEyY2UyN2I1Mzk2NGEuLjM5ODk1MmIzNTRlM2JhYjZkMzBmZGM4ZGJhODdiOWNkMGFiZTQ4
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGlj
c0NvbnRleHRHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA1Nzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29u
dGV4dEdMCisgICAgICAgIChpbmNsdWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRF
WFRfM0QpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFw
aGljc0NvbnRleHRHTC4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMIChzaW5jZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wg
aW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSSkuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmlu
ZXMuaDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAyMC0wMS0wMyAgRGVhbiBKYWNr
c29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBFbmFibGUgQU5HTEUgYnkg
ZGVmYXVsdCBmb3IgQ29jb2EgcGxhdGZvcm1zIChleGNlcHQgc2ltdWxhdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGRhYTNlZTEwNWM3OWZhM2Q0YTEzMjFiMjgzMDlhMjJlNjdkODNjY2EuLjgyNThiODE4NWUw
YjYyZGIyNjgzMTdhMjU1MTRmMTMwMTUzNTk2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzIg
QEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGljc0NvbnRleHRHTAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1Nzc4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIGFsbCB0aGUgR3Jh
cGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAgIChpbmNs
dWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRFWFRfM0QpLgorCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFwaGljc0NvbnRleHRHTC4KKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIChzaW5j
ZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEFQSSkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBIZWFkZXJzLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZToKKyAg
ICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAg
ICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwOgorICAgICAgICAq
IGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFz
LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTEFjdGl2ZUluZm8uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91
cC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RGVidWdTaGFkZXJzLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVy
ZS5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmNwcDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFF1ZXJ5Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xT
YW1wbGVyLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMU3luYy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTeW5j
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRy
YW5zZm9ybUZlZWRiYWNrLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9y
bUZlZWRiYWNrLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHA6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQ6CisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRXh0ZW5zaW9uc0dMLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbnNpb25zM0QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb3Jt
YXRDb252ZXJ0ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZl
cnRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmguCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
REF0dHJpYnV0ZXMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGlt
cy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5H
TEUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
M0RBTkdMRS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5
QU5HTEVTZXR0aW5nLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dDNEQ0cuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR0xMYXllci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L0dyYXBoaWNzQ29udGV4dEdMTkVPTi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHQzRE5FT04uaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2VnbC9HTENvbnRleHRFR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xD
b250ZXh0R0xYLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0
R0xYLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQzRElPUy5oLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RB
TkdMRUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUdDM0RMYXllci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zR0xPcGVuR0xDb21tb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTEVTLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xFUy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTFByaXZhdGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBv
cmFyeU9wZW5HTFNldHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZUdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHQzRFRleHR1cmVN
YXBwZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0RE
aXJlY3QyRC5jcHAuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorCiAyMDIwLTAx
LTA0ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBz
dXBwb3J0IGZvciBpT1MgU2ltdWxhdG9yIHRvIEFOR0xFIGJhY2tlbmQgZm9yIFdlYkdMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDY4NmQ5ZjNkNWM3M2ZkNWUwOGZlZjU0YWEzODNiYWQ2NmNkNzBiMDcuLmRiYjIyMDMw
OTI5YWU3ZjUwMWY3OTA1NzZjYjJhZWM0YmEwYTY2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGljc0NvbnRleHRHTAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1Nzc4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIGFsbCB0aGUgR3Jh
cGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAgIChpbmNs
dWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRFWFRfM0QpLgorCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFwaGljc0NvbnRleHRHTC4KKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIChzaW5j
ZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEFQSSkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Z3RrL1dheWxhbmRDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2F5bGFuZENvbXBv
c2l0b3I6OmluaXRpYWxpemVFR0wpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvSGlnaFBlcmZv
cm1hbmNlR1BVTWFuYWdlci5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVk
aWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpc3Bs
YXlDb25maWd1cmF0aW9uQ2hhbmdlZCk6CisKIDIwMjAtMDEtMDQgIEtlaXRoIFJvbGxpbiAgPGty
b2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZm9ybWF0IFdlYlBhZ2UgbG9nZ2luZwpkaWZm
IC0tZ2l0IGEvU291cmNlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDhiY2VkNjg1Njk4NzFhNzhlZDkxYzMxZDU1YzFiYjc0MWM4OTE2ZmEuLjYyYjA1NmM3ZWNl
NzYyNjk4YzYyODU0MzM3MWVlNGMyMDU4YWE2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvQ01ha2VMaXN0cy50eHQKQEAgLTEzLDcgKzEzLDcgQEAgZW5k
aWYgKCkKIAogYWRkX3N1YmRpcmVjdG9yeShKYXZhU2NyaXB0Q29yZSkKIAotaWYgKEVOQUJMRV9H
UkFQSElDU19DT05URVhUXzNEKQoraWYgKEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMKQogICAg
IGFkZF9zdWJkaXJlY3RvcnkoVGhpcmRQYXJ0eS9BTkdMRSkKIGVuZGlmICgpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0
dXJlRGVmaW5lcy5oCmluZGV4IDY4MmExZTg5NWEyZjZjMGYyZDU1ZmJkMDFiNmFkNTMwMWNmMDAw
NjYuLjk4MDQ1OTNmMTY3ODgxYzE4MzM0ZWFlZWVmZmZjNTRjNjViNGQzMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKKysrIGIvU291cmNlL1dURi93dGYvRmVh
dHVyZURlZmluZXMuaApAQCAtNzIyLDggKzcyMiw4IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gU2Vl
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzkxNjc+LiAqLwogI2RlZmluZSBFTkFCTEVfV0VCR0wg
MAogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNk
ZWZpbmUgRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgRU5BQkxFX1dFQkdMCisjaWYgIWRlZmlu
ZWQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wpCisjZGVmaW5lIEVOQUJMRV9HUkFQSElDU19D
T05URVhUX0dMIEVOQUJMRV9XRUJHTAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfV0VC
X0FSQ0hJVkUpCkBAIC03NjQsOCArNzY0LDggQEAgdGhlIHB1YmxpYyBpT1MgU0RLLiBTZWUgPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE3OTE2Nz4uICovCiAjZXJyb3IgIkVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKSByZXF1aXJlcyBFTkFCTEUoVE9VQ0hfRVZFTlRTKSIKICNlbmRpZgogCi0jaWYgRU5B
QkxFKFdFQkdMKSAmJiAhRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jZXJyb3IgIkVOQUJM
RShXRUJHTCkgcmVxdWlyZXMgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpIgorI2lmIEVOQUJM
RShXRUJHTCkgJiYgIUVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorI2Vycm9yICJFTkFCTEUo
V0VCR0wpIHJlcXVpcmVzIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdFQkdMMikgJiYgIUVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDBkNjVi
MzY0MDcxZWIxMTU1MTQ2YjQ3Y2E0NWNiNzU0MmI4ZjRlMTMuLjI3YjBmNGZmODkwODlkM2ZhYTlm
ZDE4MzM1ZTNmOTRlMzA1YjViNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTE0OCw3ICsxMTQ4LDcgQEAK
ICNlbmRpZgogI2VuZGlmCiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUXzNEKSAmJiAhZGVmaW5lZChVU0VfVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgIWRl
ZmluZWQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMKQogI2RlZmluZSBVU0VfVEVYVFVSRV9NQVBQRVJf
R0wgMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNGZjODNjZjJiOTg2OTQyZTY0
ZTAwYzM5M2ViY2ZiZmUyMjAyYzlmMC4uNTY3MzIwNGI0MDQ4N2JmNzdiNjMxMzk5MDRiYTdiYjE5
NjRkYzFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE0ODgsMTEgKzE0ODgsMTEgQEAgaWYg
KEVOQUJMRV9RVU9UQSkKICAgICApCiBlbmRpZiAoKQogCi1pZiAoRU5BQkxFX0dSQVBISUNTX0NP
TlRFWFRfM0QpCitpZiAoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wpCiAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0
QnJpZGdlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCiAgICAg
KQogCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgQU5HTEVGcmFtZXdvcmspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQppbmRleCBhYTE2MDNjZTNjMzNlN2RjYzIxY2UyYjhjNTBhYWYyMzg3NjVh
YTY3Li41N2RkMTRlMjgzMGJjMTU3ZTNjYjY0ZGNhNTc2ZDkyYTQwMWQxMWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UKQEAgLTEwMjYsNyArMTAyNiw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFn
ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9u
c0dMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50M0QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5o
CkBAIC0xMDU3LDEwICsxMDU3LDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RNYW5hZ2VyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyQ2xpZW50LmgKQEAgLTExMjMsNyArMTEyMyw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aENhY2hlLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9XaW5kUnVsZS5oCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zM0RBTkdMRS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5z
aW9uc0dMQU5HTEUuaAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oCkBAIC0xMTQyLDkgKzExNDIsOSBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9saWJ3cGUvUGxhdGZvcm1EaXNwbGF5
TGliV1BFLmgKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDExMjdiZWQwYTgyZDhjMjVlNzAwOWFkOWI3NTcyODU1
NjAyNWM4YTMuLmY3MTI5MjdjYzkxOGYzYWIwZmU3MDhhOGFjMDE3YmQwZjNjZjk0MGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtMTI5LDcgKzEyOSw3IEBAIGVsc2Ug
KCkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHQzRENHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9v
bC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1GVFcuY21ha2UKaW5kZXggNWMwY2EzOGExZDNiMzJlMTZiYjhlMjgxOGFiN2Qz
MzU0MGRjN2ZmMy4uNTgwZTg4MjkzMjJjMjc5ZTYxMGQ1NzA0NTM1OGE5ODFiZmFlMmMzOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTQ2LDE2ICs0NiwxNiBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMu
Y3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtRGlzcGxheS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wu
Y3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xF
Uy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
c0dMT3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCkBAIC03OCw3ICs3OCw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRERpcmVjdDJELmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IGEzMGE1NDVjYzYzNTE0MzFlOTM2OTc4NjJmYTM4OWIwZjk2OTNlN2MuLmNkOTI1
MzE5ZDM5MzQ1YWYwYTkyNjZlN2Y4YzI4NjlkZjYzN2ZkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RL
LmNtYWtlCkBAIC0xMzEsMjggKzEzMSwyOCBAQCBlbmRpZiAoKQogCiBpZiAoVVNFX0FOR0xFX1dF
QkdMKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAKICAgICApCiBlbHNlICgp
CiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZy5jcHAKICAgICApCiAKICAgICBpZiAoVVNFX09QRU5HTF9FUykKICAgICAgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKyAgICAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKKyAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVT
LmNwcAogICAgICAgICApCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChVU0VfT1BFTkdMKQogICAg
ICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCi0gICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcAorICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFz
ZS5jcHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQppbmRleCA3MWYwODA1ZDBmMWM2MGJlMWNiODAwMzMyZjQwZGRkNmU3YmYyZDhhLi5j
MDNjZTZiNTEzMTgyMWEwMWNjN2Q2NjUzZDE2OTE5MWRiYjc5YTgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQpAQCAtMjg2LDcgKzI4Niw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YWRpZW50Q0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMwNCw3ICszMDQsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJp
eENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTM0NiwxMCArMzQ2LDEwIEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9T
aW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJM
YXllci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTEJhc2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9U
ZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5
cGUvT3BlblR5cGVDRy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtUGxh
eVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtl
CmluZGV4IDI2NzhjMzFhZDYyYmRiODI2OTc5ZmJiNzNhM2NlMTM1ZGQzNDZlNjYuLjZkNjI1NjQ4
NDJjM2MzMzc2NDM4MDFlYTQ3YTlkYTJjMGIyMjFhMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1QbGF5U3RhdGlvbi5jbWFrZQpAQCAtMzcsNyArMzcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRl
eHRFR0wuY3BwCkBAIC00NSwxMCArNDUsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9saWJ3cGUvUGxhdGZvcm1EaXNwbGF5TGliV1BFLmNw
cAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xP
cGVuR0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKIAogICAgIHBsYXRmb3JtL2xpYndwZS9QYXN0ZWJvYXJk
TGliV1BFLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBkMWZkNGViMTJkZDk3MTEw
MDE4MGVhODA1NmVkNDg2NTY5ZmM5MDZlLi42NDAzMmI4MWZjYzYyZTliN2FjNTk5MWY3MjFjNGQ1
NjlhY2ExZGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtMzcsMTQgKzM3LDE0IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vYXVkaW8vUGxhdGZv
cm1NZWRpYVNlc3Npb25NYW5hZ2VyLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMUHJpdmF0ZS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENv
bnRleHRFR0wuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xFUy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDkyOTdk
MDQ0ZTQ0ODI3OGRiZTdjOTE2OWJiMzI2YzlkZmI3MDQyNWIuLmFjYWU2ZmUzOGRkZTI2YzI4Y2Y1
ZDQ0OTExZmM1YWMzMGIyNTg2NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODU3LDggKzE4NTcsNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRyeVV0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNEQmFzZS5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNETWFuYWdlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVHJh
bnNmb3JtLmNwcApAQCAtMTk0Nyw2ICsxOTQ2LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lT
T1NjaGVtZVR5cGVCb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPVHJhY2tFbmNyeXB0
aW9uQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1ZUVEN1ZS5jcHAKIAorcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcAorCiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAogCiBwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IDIyZTBkZmYwZGU2YThkMzhiMGVmMDhjNGI4YTEwZjkxMjQxZjMxOWIuLmIzNmY5MGI2
NGQ4ZWMzODU3NjcwMmUxOTNiNjgwMzMwY2Y5MDVmNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dApAQCAtMjI2LDggKzIyNiw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXIuY3BwCiAKIC8vIFRoZXNlIHNvdXJjZXMgY2FuJ3QgYmUgdW5pZmllZCB3aXRoIG90
aGVycyBpbiBjYXNlIHRoZXkgYXJlIG1lcmdlZAogLy8gd2l0aCBmaWxlcyB0aGF0IHVzZSB0aGUg
c3lzdGVtIE9wZW5HTC4KLXBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xF
LmNwcCBAbm8tdW5pZnkKLXBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dDNE
QU5HTEUuY3BwIEBuby11bmlmeQorcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dM
QU5HTEUuY3BwIEBuby11bmlmeQorcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250
ZXh0R0xBTkdMRS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9UZW1wb3Jh
cnlBTkdMRVNldHRpbmcuY3BwIEBuby11bmlmeQogCiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbSBAbm8tdW5pZnkKQEAgLTI4NSw3ICsy
ODUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6
ZUNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKLXBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMwNSw3ICszMDUsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9y
Q29jb2EubW0KLXBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2Eu
bW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2Eu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTM3NSwxMCArMzc1LDExIEBAIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9Td2l0Y2hpbmdHUFVDbGllbnQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJLaXROU0ltYWdlRXh0
cmFzLm1tCiAKLXBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3Bw
Ci1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAot
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAotcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNHLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApp
bmRleCBjMmMyNzA5Yjg3OWE4Mzg2OTI4OWZlMjg3MTM1N2NkZTYyNmExYWE0Li4xYTRmNTVlZmU4
MTk4ZjE3Yjg0YTI3YWM5ZGI4MzYxMDE0MzVhNjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAt
NjksNyArNjksNyBAQCBwbGF0Zm9ybS9Vc2VyQWdlbnRRdWlya3MuY3BwCiBwbGF0Zm9ybS9nZW5l
cmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250
ZXh0LmNwcCBAbm8tdW5pZnkKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0
ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAgQG5vLXVuaWZ5CiAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAg
QG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CmluZGV4IDVhYjIxMTk0ZTdjNDA0ZDRmMjgwMTk4
MzlmMzI4ZDY1NjY2ZjRhZWEuLjRkZDExNWFkZTNhMTUzNGJhYWVlZjQxZjhjYmNmOWMxMTZjNzVl
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBAIC02Miw3ICs2Miw3IEBAIHBhZ2Uvc2Nyb2xsaW5n
L2dlbmVyaWMvU2Nyb2xsaW5nVGhyZWFkR2VuZXJpYy5jcHAKIHBsYXRmb3JtL1VzZXJBZ2VudFF1
aXJrcy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAotcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1EaXNwbGF5LmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcApA
QCAtNzAsMTAgKzcwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0xMaWJX
UEUuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9ybURpc3BsYXlMaWJXUEUu
Y3BwCiAKLXBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
Y3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwIEBu
by11bmlmeQotcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMRVMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNw
cCBAbm8tdW5pZnkKK3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvbW1vbi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTEVTLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNl
dHRpbmcuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxE
YXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDA3OWU5NDY5YjExZmJiZjE2N2ExNzAyMmY1OTk5NzQwY2Y2NjFiNTguLmJk
MjJiMjUyZDgwYjQxOTNjMzNlODcwYzdhZjI5ZGE0ZWRiM2VlYzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkxMyw3ICs5MTMs
NyBAQAogCQkzMTM1OTEwQTFFN0REQzczMDBGMzA2MzAgLyogUlRDU2RwVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzNTkxMDQxRTdEREM2MDAw
RjMwNjMwIC8qIFJUQ1NkcFR5cGUuaCAqLzsgfTsKIAkJMzEzNTkxMEIxRTdEREM3MzAwRjMwNjMw
IC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTM1OTEwNTFFN0REQzYwMDBGMzA2MzAgLyogUlRDU2lnbmFsaW5nU3Rh
dGUuaCAqLzsgfTsKIAkJMzEzQkNFMUMyMzVFM0JFNTAwRkMzOUU1IC8qIEVsZW1lbnRDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNCQ0Ux
QjIzNUUzQkRCMDBGQzM5RTUgLyogRWxlbWVudENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzMTNERTg3MDIzQTk2OTczMDA4RkM0N0Ig
LyogR3JhcGhpY3NDb250ZXh0M0RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0IgLyogR3JhcGhpY3NDb250
ZXh0M0RCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMzEzREU4NzAyM0E5Njk3MzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dEdMLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTNERTg2RjIzQTk2
OTY3MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTQwMzc5QjEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxNDAzNzk3MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFu
YWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTMxNDAzNzlEMTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0MDM3OTkx
MjRCRUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggKi87IH07CiAJ
CTMxNDBDNTIwMUZERjE1MUEwMEQyQTg3MyAvKiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
NDBDNTFFMUZERjE1MUEwMEQyQTg3MyAvKiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCAqLzsgfTsKQEAgLTk0Nyw2ICs5NDcsNyBAQAogCQkzMTk1NUE4ODE2MEQxOTkyMDA4NTgw
MjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxRThEOEJCMTYwQkM5NEMwMDRDRThGNSAvKiBSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTMxOTg0ODAxMUExRDgxN0IwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5ODQ3RkYx
QTFEODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggKi87IH07CiAJCTMxOTg0ODBDMUEx
RTZDRTgwMEExMzMxOCAvKiBKU0FuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTk4NDgwNDFBMUU2QjVEMDBBMTMzMTggLyogSlNB
bmltYXRpb25FdmVudC5oICovOyB9OworCQkzMTlBNzI4ODIzQzI2N0ZFMDA4NTM1M0MgLyogR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlBNzI4NzIzQzI2N0U3MDA4NTM1M0MgLyogR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzE5QUUwNjQxNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmlsdGVy
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5
QUUwNjIxNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmlsdGVyRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMxOUZCRDVGMTVEMkY0NjQwMDk2
NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE5RkJENUQxNUQyRjQ0NDAwOTY0MEE2IC8qIENhY2hlZEltYWdl
Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMzFBMDg5NTYxRTczOEQ1OTAwM0I2NjA5IC8qIEpTV2ViR1BVQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUEwODkxRDFFNzM4RDU5MDAz
QjY2MDkgLyogSlNXZWJHUFVCdWZmZXIuaCAqLzsgfTsKQEAgLTk2OSw3ICs5NzAsNyBAQAogCQkz
MUEwODk4OTFFNzM4RDVBMDAzQjY2MDkgLyogSlNXZWJHUFVUZXh0dXJlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUEwODk1MDFFNzM4RDU5MDAzQjY2
MDkgLyogSlNXZWJHUFVUZXh0dXJlLmggKi87IH07CiAJCTMxQTA4OThDMUU3MzhENUEwMDNCNjYw
OSAvKiBKU1dlYkdQVVRleHR1cmVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUEwODk1MzFFNzM4RDU5MDAzQjY2MDkgLyogSlNXZWJH
UFVUZXh0dXJlRGVzY3JpcHRvci5oICovOyB9OwogCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAg
LyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxQTc5NUMyMTg4OEI3MjQwMDM4MkY5MCAvKiBBTkdMRUluc3RhbmNl
ZEFycmF5cy5oICovOyB9OwotCQkzMUFCNTAwMDEyMjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3ND
b250ZXh0M0RJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxQUI0RkZGMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElPUy5oICov
OyB9OworCQkzMUFCNTAwMDEyMjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFU0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1Mu
aCAqLzsgfTsKIAkJMzFDMEZGMjIwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMw
RkYxQzBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsKIAkJ
MzFDMEZGMjUwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUYwRTRDRUI2
RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5oICovOyB9OwogCQkzMUMwRkYzRTBF
NENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGM0EwRTRDRUZBQzAwN0Q2RkU1
IC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsKQEAgLTEyMTQsNyArMTIxNSw3IEBA
CiAJCTQ0QTI4QUFGMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBMjhBQUUxMkRGQjhCRjAwQUU5
MjNCIC8qIE1hdGhNTE5hbWVzLmggKi87IH07CiAJCTQ0Qzk5MTg2MEYzRDFFQkUwMDU4NjY3MCAv
KiBTY3JvbGxiYXJUaGVtZUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDRDOTkxODUwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRoZW1lSU9T
LmggKi87IH07CiAJCTQ0Qzk5MTlGMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRDOTkxOUQwRjNEMjEw
RTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggKi87IH07Ci0JCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFF
NCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uaCAqLzsgfTsKKwkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8q
IEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5oICovOyB9OwogCQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFi
ZWxhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NTEyNTAyMzE1
RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MTI1MDIxMTVEQ0UzN0QwMDJGODRFMiAvKiBT
cGluQnV0dG9uRWxlbWVudC5oICovOyB9OwogCQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyog
RGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ1M0VCNjM1MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzA3LDcgKzEz
MDgsNyBAQAogCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CiAJ
CTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMU2hhZGVyLmggKi87IH07CiAJCTQ5QzdCOUU2MTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFRleHR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5QzdCOUM2MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaCAqLzsgfTsKLQkJ
NDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlGQjEwNDJEMzY1MDAw
OUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQ5RDVEQzJDMEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlENURDMjgw
RjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlENURDMkUwRjQyM0E3
MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUQ1REMyQTBGNDIzQTczMDA4RjIw
RkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUU5MTFDNDBFRjg2RDQ3MDA5RDBDQUYg
LyogVHJhbnNmb3JtYXRpb25NYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUI0MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0yMDExLDcgKzIwMTIsNiBAQAogCQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkM2Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJl
c291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk2RTBCOTA2OTIzMjFBNjhEMDA2MjIzQjIgLyogV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUVUQzEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFMEI5MDY1MjMyMUE2OEMwMDYyMjNCMiAvKiBXZWJHTENvbXByZXNzZWRUZXh0
dXJlRVRDMS5oICovOyB9OwogCQk2RTBFNTY5QzE4M0JGRkU2MDBFMEU4RDUgLyogRmxvYXRSb3Vu
ZGVkUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkUwRTU2OUExODNCRkZFNjAwRTBFOEQ1IC8qIEZsb2F0Um91bmRlZFJlY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2RTIxQzZDMDExMjYzMzg1
MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyMUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBo
aWNzQ29udGV4dDNELmNwcCAqLzsgfTsKIAkJNkUyNDJCMkIyMzM1OTQwNTAwMkNBREQ0IC8qIEpT
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjQyQjJBMjMzNTkzRDgwMDJDQURENCAvKiBKU1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVFVEMxLmggKi87IH07CiAJCTZFMjQyQjJDMjMzNTk0MDkwMDJDQURENCAv
KiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjQyQjI4MjMzNTkzRDcwMDJDQURENCAvKiBKU1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVFVEMuaCAqLzsgfTsKIAkJNkUzRkFEMzkxNDczM0Y0MDAwRTQyMzA2
IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFM0ZBRDM3MTQ3MzNGNDAwMEU0MjMwNiAvKiBKU1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmggKi87IH07CkBAIC0yMDIzLDEyICsyMDIzLDEyIEBA
CiAJCTZFNDdFNjYxMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEFueS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0N0U2NUYxMEI3OTQ0QjAwQjE4NkM4
IC8qIFdlYkdMQW55LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkU0QUJDRDUxMzhFQTBCNzAwNzFEMjkxIC8qIEpTSFRNTFVua25vd25FbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTRBQkNE
MzEzOEVBMEI3MDA3MUQyOTEgLyogSlNIVE1MVW5rbm93bkVsZW1lbnQuaCAqLzsgfTsKIAkJNkU0
RTkxQUYxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNEU5MUFBMTBGN0ZCMzEw
MEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5H
TC5oICovOyB9OwotCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBODEy
ODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi87IH07Ci0JCTZFNzJGNTRDMjI5RENE
MEMwMEIzRTE1MSAvKiBFeHRlbnNpb25zM0RBTkdMRS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI3RjI0MzIyOUM5Rjg0MDBGMUY2MzIgLyogRXh0
ZW5zaW9uczNEQU5HTEUuY3BwICovOyB9OwotCQk2RTcyRjU0RTIyOURDRDEwMDBCM0UxNTEgLyog
R3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250
ZXh0M0RBTkdMRS5jcHAgKi87IH07CisJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRl
bnNpb25zR0xPcGVuR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0xPcGVuR0wuaCAq
LzsgfTsKKwkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThC
RDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTC5oICovOyB9OworCQk2RTcyRjU0QzIyOURDRDBDMDBC
M0UxNTEgLyogRXh0ZW5zaW9uc0dMQU5HTEUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVuc2lv
bnNHTEFOR0xFLmNwcCAqLzsgfTsKKwkJNkU3MkY1NEUyMjlEQ0QxMDAwQjNFMTUxIC8qIEdyYXBo
aWNzQ29udGV4dEdMQU5HTEUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdM
QU5HTEUuY3BwICovOyB9OwogCQk2RTcyRjU0RjIyOURDRDEzMDBCM0UxNTEgLyogVGVtcG9yYXJ5
QU5HTEVTZXR0aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFMjkwODYxMjI5REI5NTAwMDA5ODZFMiAvKiBUZW1wb3JhcnlBTkdMRVNldHRpbmcu
Y3BwICovOyB9OwotCQk2RTcyRjU1MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0ZW5zaW9uczNEQU5H
TEUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjdG
MjQ0MjI5QzlGOEQwMEYxRjYzMiAvKiBFeHRlbnNpb25zM0RBTkdMRS5oICovOyB9OworCQk2RTcy
RjU1MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0ZW5zaW9uc0dMQU5HTEUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjdGMjQ0MjI5QzlGOEQwMEYxRjYz
MiAvKiBFeHRlbnNpb25zR0xBTkdMRS5oICovOyB9OwogCQk2RTcyRjU1MTIyOURDRDFBMDBCM0Ux
NTEgLyogVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI5MDg2MzIyOURCOTcwMDAwOTg2RTIgLyogVGVtcG9yYXJ5
QU5HTEVTZXR0aW5nLmggKi87IH07CiAJCTZFODRFOUUxMTc2NjhCRjEwMDgxNUI2OCAvKiBSYXN0
ZXJTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkU4NEU5REYxNzY2OEJBRDAwODE1QjY4IC8qIFJhc3RlclNoYXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkU4QUNERUQyMzM0NUNCQzAwMjRB
QUY1IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFOEFDREVCMjMzNDVDQUYwMDI0QUFGNSAvKiBXZWJH
TENvbXByZXNzZWRUZXh0dXJlRVRDLmggKi87IH07CkBAIC0yMjIwLDcgKzIyMjAsNyBAQAogCQk3
QzJGQTYxMjFFQTk1QTNDMDBBMDMxMDggLyogUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzJGQTYxMDFF
QTk1QTMyMDBBMDMxMDggLyogUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzMEQ5ODQxRjgxNUFF
QzAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMwRDk4MDFGODE1QUMxMDAyNjgzNTYgLyogSlNBYm9y
dENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJN0MzMEQ5ODYxRjgxNUFFQzAwMjY4MzU2IC8qIEpTQWJv
cnRTaWduYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMzBEOTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi87IH07Ci0JCTdD
MzMwQTAyMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzMwQTAxMURG
OEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzMzMEEwMjFERjhGQUM2
MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMg
LyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzMzBBMDgxREY5Rjk1MTAwRDMzOTVDIC8qIEpT
UG9zaXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzMzMEEwNjFERjlGOTUxMDBEMzM5NUMgLyogSlNQb3NpdGlvbk9wdGlvbnMuaCAq
LzsgfTsKIAkJN0MzQTkxRTYxQzk2M0I4ODAwRDFBN0UzIC8qIENsaXBib2FyZEFjY2Vzc1BvbGlj
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQTkx
RTUxQzk2M0I4ODAwRDFBN0UzIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDM0I3OTcxMTkwODc1N0Iw
MEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzQjc5NkYxOTA4NzU3QjAwQjQ3QTJEIC8qIFVzZXJN
ZXNzYWdlSGFuZGxlci5jcHAgKi87IH07CkBAIC00MjQyLDcgKzQyNDIsNiBAQAogCQlEMDVDRUQy
QTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDVDRUQyODBBNDBCQjJDMDBDNUFGMzgg
LyogRm9ybWF0QmxvY2tDb21tYW5kLmggKi87IH07CiAJCUQwNkMwRDhGMENGRDExNDYwMDY1RjQz
RiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0
Q29tbWFuZC5oICovOyB9OwogCQlEMDdERUFCQTBBMzY1NTRBMDBDQTMwRjggLyogSW5zZXJ0TGlz
dENvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQwN0RFQUI4MEEzNjU1NEEwMENBMzBGOCAvKiBJbnNlcnRMaXN0Q29tbWFuZC5oICovOyB9Owot
CQlEMDg0M0E0QjIwRkVCRTNEMDBGRTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDg0M0E0QTIw
RkVCRTNEMDBGRTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDA4NkZFOTgwOUQ1M0FBQjAw
NUJDNzREIC8qIFVubGlua0NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQwODZGRTk2MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5k
LmggKi87IH07CiAJCUQwOEIwMEU0MjBBMjgyNTkwMDA0QkMwQSAvKiBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVNUQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDBBMjBENTQyMDkyQTBBNjAwRTBDMjU5IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RD
LmggKi87IH07CiAJCUQwQTNBNzMxMTQwNUEzOTgwMEZCOEVEMyAvKiBSZXNvdXJjZUxvYWRlck9w
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQw
QTNBNzMwMTQwNUEzOTgwMEZCOEVEMyAvKiBSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzAwMyw4ICs3MDAy
LDggQEAKIAkJMzEzNTkxMDUxRTdEREM2MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ1NpZ25hbGluZ1N0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMzU5MTBDMUU3RERDQjYwMEYzMDYzMCAvKiBS
VENCdW5kbGVQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDQnVu
ZGxlUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxM0JDRTFCMjM1RTNC
REIwMEZDMzlFNSAvKiBFbGVtZW50Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbGVtZW50Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
MTNERTg2RDIzQTk2OTY2MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0M0RCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNEQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxM0RFODZGMjNBOTY5NjcwMDhGQzQ3
QiAvKiBHcmFwaGljc0NvbnRleHQzREJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0M0RCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxM0RFODZEMjNBOTY5NjYwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxM0RFODZGMjNBOTY5NjcwMDhGQzQ3QiAv
KiBHcmFwaGljc0NvbnRleHRHTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHRHTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQwMzc5
NzEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZU1vdGlvbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzE0MDM3OTgxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rp
b25NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
Q29yZU1vdGlvbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNDAz
Nzk5MTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzA4OSw2ICs3MDg4LDcgQEAKIAkJMzE5
ODQ4MDAxQTFEODE2NzAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBBbmltYXRpb25FdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxOTg0ODAzMUExRTZCNUQwMEExMzMxOCAvKiBKU0FuaW1hdGlvbkV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9uRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTk4NDgwNDFBMUU2QjVEMDBBMTMzMTggLyog
SlNBbmltYXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fu
aW1hdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxOUE3Mjg3MjND
MjY3RTcwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxOUFFMDYxMTQyRDZCMjQwMDY1NjNB
MSAvKiBTdHlsZUZpbHRlckRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3R5bGVGaWx0ZXJEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzE5QUUwNjIxNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmlsdGVyRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUZpbHRlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzE5QkRFNEYxRTdBODU4QTAwQkEyOTZDIC8qIEpTUlRDSWNlVHJhbnNw
b3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUlRDSWNlVHJh
bnNwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNDEsNyArNzE0MSw3
IEBACiAJCTMxQTc5NUMzMTg4OEI3MjQwMDM4MkY5MCAvKiBBTkdMRUluc3RhbmNlZEFycmF5cy5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQU5HTEVJbnN0YW5jZWRBcnJheXMuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUE3OTVDNDE4ODhCQUQxMDAzODJGOTAgLyogSlNB
TkdMRUluc3RhbmNlZEFycmF5cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzFBNzk1QzUxODg4QkFEMTAwMzgyRjkwIC8qIEpTQU5HTEVJbnN0YW5jZWRBcnJheXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBTkdMRUluc3RhbmNlZEFycmF5
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMUFCNEZGRjEyMjg3OEEyMDAxQTdE
QjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0M0RJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJ
T1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFU0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYxQjBFNENF
QjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYxQzBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5p
bWF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0QW5p
bWF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFDMEZGMUQwRTRD
RUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC03Njk0LDggKzc2OTQsOCBAQAogCQk0NEM5OTE5RTBGM0QyMTBFMDA1ODY2NzAgLyog
VGhlbWVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUaGVt
ZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDREOERBOTgxMzk1NDVCRTAw
MzM3Qjc1IC8qIFNWR01QYXRoRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZH
TVBhdGhFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDREOERBOUEx
Mzk1NDVDRDAwMzM3Qjc1IC8qIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQ0REFCNUFGMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDREQUI1QUYxNUE2MjM1ODAwOTdDMUU0
IC8qIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0NERBQjVCMDE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uc0dM
T3BlbkdMQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lv
bnNHTE9wZW5HTENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEU4OEU0
QzIzNjkxMjhBMDA5QjQ4NDcgLyogSGlnaGxpZ2h0TWFwLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBIaWdobGlnaHRNYXAuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEU4
OEU0RDIzNjkxMjhCMDA5QjQ4NDcgLyogSGlnaGxpZ2h0UmFuZ2VHcm91cC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gSGlnaGxpZ2h0UmFuZ2VHcm91cC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ0RTg4RTUwMjM2QTU2QUMwMDlCNDg0NyAvKiBIaWdobGlnaHRNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGlnaGxpZ2h0TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03ODkyLDcgKzc4OTIsNyBAQAogCQk0OUM3QjlDNTEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xUZXh0dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdM
VGV4dHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUM2MTA0MkQz
MkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViR0xUZXh0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdC
OUM3MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYkdMVGV4dHVyZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5
QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0JBOEMx
MDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNEb2N1bWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ5RDVEQzI3MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5RDVEQzI4MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRyaXgzRFRyYW5zZm9ybU9w
ZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzkzMCw3ICs3OTMwLDcg
QEAKIAkJNDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcx
MTggLyogR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNEQ29jb2EubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDlGRkJGM0QxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xMYXllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMTGF5ZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBMERBMkZDMTI5QjI0MTkwMEFCNjFFMSAvKiBG
b3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTkyNTgsMTUgKzkyNTgsMTUgQEAKIAkJNkUwQjkwNjgyMzIxQTY4RDAwNjIyM0IyIC8q
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkUwRTU2OTkxODNCRkZFNjAwRTBFOEQ1IC8qIEZsb2F0Um91bmRl
ZFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRSb3Vu
ZGVkUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMEU1NjlBMTgzQkZG
RTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZsb2F0Um91bmRlZFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNkUyMUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNELmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8q
IEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTZFMjFDNkJGMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFMjFDNkMxMTEyNjMz
OTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RTI0MkIyNjIzMzU5M0Q3MDAyQ0FERDQgLyogSlNXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlRVRDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUVUQy5jcHA7IHBhdGggPSAuLi8uLi8uLi8uLi8uLi8uLi9XZWJLaXRCdWlsZC9EZWJ1
Zy9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMjQyQjI4MjMzNTkzRDcwMDJDQURENCAv
KiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJHTENv
bXByZXNzZWRUZXh0dXJlRVRDLmg7IHBhdGggPSAuLi8uLi8uLi8uLi8uLi8uLi9XZWJLaXRCdWls
ZC9EZWJ1Zy9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVU
Qy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTI0MkIyOTIzMzU5M0Q3MDAyQ0FE
RDQgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmNwcDsgcGF0aCA9IC4uLy4uLy4uLy4uLy4u
Ly4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlRVRDMS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMjQy
QjJBMjMzNTkzRDgwMDJDQURENCAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuaDsgcGF0aCA9IC4uLy4u
Ly4uLy4uLy4uLy4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNX
ZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzREFO
R0xFLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkUyN0YyNDMyMjlDOUY4NDAw
RjFGNjMyIC8qIEV4dGVuc2lvbnMzREFOR0xFLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzREFOR0xFLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnMzREFOR0xFLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzREFOR0xFLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFMjdGMjQyMjI5OENFNEIwMEYxRjYzMiAvKiBH
cmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RTI3RjI0MzIyOUM5Rjg0MDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uc0dMQU5HTEUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTI3RjI0NDIyOUM5RjhEMDBGMUY2
MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRXh0ZW5zaW9uc0dMQU5HTEUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUy
OTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wb3JhcnlBTkdMRVNldHRpbmcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTI5MDg2MzIyOURCOTcwMDAwOTg2RTIg
LyogVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRlbXBvcmFyeUFOR0xFU2V0dGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RTNGQUQzNjE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Qy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkyODgs
OSArOTI4OCw5IEBACiAJCTZFNEFCQ0QzMTM4RUEwQjcwMDcxRDI5MSAvKiBKU0hUTUxVbmtub3du
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxVbmtub3du
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRFOTFBQTEwRjdGQjMx
MDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZFNEU5MUFCMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU2N0QyQTQxMjgwRThBNDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lv
bnMzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTY3RDJBNDEyODBFOEE0MDA4
NzU4RjcgLyogRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4dGVuc2lvbnNHTE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0xPcGVuR0wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uc0dMT3BlbkdMLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAv
KiBFeHRlbnNpb25zR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uc0dMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFODRFOURFMTc2NjhCQUQw
MDgxNUI2OCAvKiBSYXN0ZXJTaGFwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSYXN0ZXJTaGFwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZF
ODRFOURGMTc2NjhCQUQwMDgxNUI2OCAvKiBSYXN0ZXJTaGFwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSYXN0ZXJTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RThBQ0RFOTIzMzQ1Q0FGMDAyNEFBRjUgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVU
Qy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MjUsNyArOTgyNSw3IEBACiAJCTdDMzBE
OTgwMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fib3J0Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzMwRDk4MTFGODE1QUMxMDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fib3J0U2lnbmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBEOTgyMUY4MTVBQzIwMDI2ODM1NiAvKiBKU0Fi
b3J0U2lnbmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWJv
cnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzMzMEEwMTFERjhG
QUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QzMzMEEwMzFERjlFOTVCMDBEMzM5NUMgLyogUG9zaXRpb25PcHRpb25zLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBQb3NpdGlvbk9wdGlvbnMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzMzMEEwNTFERjlGOTUxMDBEMzM5NUMgLyogSlNQb3NpdGlvbk9wdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQb3NpdGlvbk9wdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMzMEEwNjFERjlGOTUxMDBEMzM5NUMgLyogSlNQ
b3NpdGlvbk9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQb3Np
dGlvbk9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNjg5LDcgKzEw
Njg5LDcgQEAKIAkJOTMzMDlERDUwOTlFNjQ5MTAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVt
bXlTcGFuQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcmFwQ29u
dGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTMzMDlFQTAwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMzA5RUExMDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1lci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTkzMzJBQjNEMTY1MTVENzcwMEQ4MjdFQyAvKiBHcmFwaGljc0NvbnRleHQzRE5F
T04uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RO
RU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzJBQjNEMTY1MTVENzcwMEQ4
MjdFQyAvKiBHcmFwaGljc0NvbnRleHRHTE5FT04uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMzJBQjg3MTY1M0E5NzkwMEQ4MjdFQyAvKiBGRUJsZW5kTkVPTi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUJsZW5kTkVPTi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzMyQUI4ODE2NTNBOTc5MDBEODI3RUMgLyogRkVDb21wb3NpdGVBcml0
aG1ldGljTkVPTi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGRUNvbXBvc2l0
ZUFyaXRobWV0aWNORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzJBQjg5
MTY1M0E5NzkwMEQ4MjdFQyAvKiBGRUdhdXNzaWFuQmx1ck5FT04uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRkVHYXVzc2lhbkJsdXJORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDkzMSw3ICsxMDkzMSw3IEBACiAJCTk1MjA3NjAwMUYyNjc1RjkwMDdE
MkFBQiAvKiBDYWxsVHJhY2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxUcmFjZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTIwNzYwMTFGMjY3NUY5MDA3RDJBQUIg
LyogQ2FsbFRyYWNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsVHJhY2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk1MjA3NjAyMUYyNjc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2Vy
VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFRyYWNlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk3MDU5OTc1MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbGljeUNoZWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NzA1OTk3NjEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5
Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2xpY3lDaGVja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MEI3Mjg5MTQ0RkZBQzYwMEYwMEEz
NyAvKiBFdmVudEludGVyZmFjZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RXZlbnRJbnRlcmZhY2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0V2ZW50SW50
ZXJmYWNlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTQyMzcs
OCArMTQyMzcsNyBAQAogCQlEMDdERUFCODBBMzY1NTRBMDBDQTMwRjggLyogSW5zZXJ0TGlzdENv
bW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc2VydExpc3RDb21t
YW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODQwMzNBMjIxQ0JGNTQwMDAw
NzIwNSAvKiBHUFVCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR1BVQnVmZmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NDAzM0QyMjFFMTg2NDAwMDA3MjA1IC8q
IFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR1BV
QmluZEdyb3VwRGVzY3JpcHRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQw
ODQzQTRBMjBGRUJFM0QwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUQwODQzQTRDMjBGRUMxNjUwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQz
RE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDA4NDNBNEMyMEZFQzE2NTAwRkU4
NjBFIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEMDg1RTY0QTIyMzZERUFFMDBDM0UxRTIgLyogR1BVQmluZEdyb3VwTWV0
YWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHUFVCaW5kR3JvdXBNZXRhbC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NkZFOTYwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlu
a0NvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5saW5rQ29tbWFu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDg2RkU5NzA5RDUzQUFCMDA1QkM3
NEQgLyogVW5saW5rQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVbmxpbmtDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1
NTkxLDcgKzE1NTkwLDcgQEAKIAkJRkI5MkRGNDkxNUZFRDA4NzAwOTk0NDMzIC8qIENsaXBQYXRo
T3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBQYXRoT3Bl
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCOTY1QjgxMTdCQkI1Rjkw
MEU4MzVCOSAvKiBDU1NGaWx0ZXJJbWFnZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU0ZpbHRlckltYWdlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkI5NjVCODIxN0JCQjYyQzAwRTgzNUI5IC8qIENTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCQzIyMERFMTIzN0ZCRUIwMEJD
Rjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkJENkFGODIxNUVGMjFBMzAwOEI3MTEwIC8qIEJhc2ljU2hhcGVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhc2ljU2hhcGVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkJENkFGODMxNUVGMjFBMzAwOEI3MTEwIC8qIEJhc2lj
U2hhcGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhc2ljU2hhcGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCRDZBRjg0MTVFRjIxRDQwMDhCNzExMCAv
KiBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTg0NDMsNyArMTg0NDIsNyBAQAogCQkJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAv
KiBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW0gKi8sCiAJCQkJMUFDMkQ4OUMxQjFFMjkxRjAw
RDUyRTg3IC8qIEZvbnRBbnRpYWxpYXNpbmdTdGF0ZVNhdmVyLmggKi8sCiAJCQkJMzcyN0RGRDQx
NDJBQUU0NTAwRDQ0OUNCIC8qIEZvbnRDYWNoZUlPUy5tbSAqLywKLQkJCQkzMUFCNEZGRjEyMjg3
OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLywKKwkJCQkzMUFCNEZGRjEy
Mjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oICovLAogCQkJ
CUZFRDEzRDNGMENFQTkzOTQwMEQ4OTQ2NiAvKiBJY29uSU9TLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBpb3M7CkBAIC0yMDkxMyw5ICsyMDkxMiw5IEBACiAJCTZFMjdGMjQxMjI5OENFMkUwMEYx
RjYzMiAvKiBhbmdsZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVuc2lvbnMzREFOR0xFLmNwcCAq
LywKLQkJCQk2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0ZW5zaW9uczNEQU5HTEUuaCAq
LywKLQkJCQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250ZXh0M0RBTkdM
RS5jcHAgKi8sCisJCQkJNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFO
R0xFLmNwcCAqLywKKwkJCQk2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dM
QU5HTEUuaCAqLywKKwkJCQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250
ZXh0R0xBTkdMRS5jcHAgKi8sCiAJCQkJNkUyOTA4NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBv
cmFyeUFOR0xFU2V0dGluZy5jcHAgKi8sCiAJCQkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8q
IFRlbXBvcmFyeUFOR0xFU2V0dGluZy5oICovLAogCQkJKTsKQEAgLTIxNzIwLDcgKzIxNzE5LDcg
QEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJOTMzMkFCODYxNjUz
QTk3OTAwRDgyN0VDIC8qIGZpbHRlcnMgKi8sCi0JCQkJOTMzMkFCM0QxNjUxNUQ3NzAwRDgyN0VD
IC8qIEdyYXBoaWNzQ29udGV4dDNETkVPTi5oICovLAorCQkJCTkzMzJBQjNEMTY1MTVENzcwMEQ4
MjdFQyAvKiBHcmFwaGljc0NvbnRleHRHTE5FT04uaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYXJt
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI0ODg0LDkgKzI0ODgzLDkgQEAKIAkJ
CQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLAogCQkJCUIy
NzUzNTJEMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVDRy5jcHAgKi8sCiAJCQkJQkM1M0M2
MEEwREE1NkNGMTAwMjFFQjVEIC8qIEdyYWRpZW50Q0cuY3BwICovLAotCQkJCTZFMjFDNkMxMTEy
NjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNwcCAqLywKIAkJCQlCMkVEOTc3
MDBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCTkzNDkw
N0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAorCQkJCTZFMjFD
NkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLywKIAkJCQlB
ODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCAqLywKIAkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5j
cHAgKi8sCiAJCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNH
LmNwcCAqLywKQEAgLTI0OTk0LDcgKzI0OTkzLDcgQEAKIAkJCQkyRDI5RUNDNDE5MkVDQzgzMDA5
ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oICovLAogCQkJCTMxRENERjQx
MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmNwcCAqLywKIAkJCQkzMURDREY0MjFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oICovLAotCQkJCTZFNjdEMkE4MTI4MEU4
QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLywKKwkJCQk2RTY3RDJBODEyODBFOEJEMDA4
NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50LmggKi8sCiAJCQkJQjJFMjdDOUQwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9p
bnQzRC5jcHAgKi8sCkBAIC0yNTA1NSwxMyArMjUwNTQsOSBAQAogCQkJCTJEMkZDMDU3MTQ2MENE
NkYwMDI2MzYzMyAvKiBHcmFkaWVudEltYWdlLmggKi8sCiAJCQkJQjJBMDE1OTIwQUY2Q0Q1MzAw
NkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5jcHAgKi8sCiAJCQkJQjJBMDE1OTMwQUY2Q0Q1MzAw
NkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oICovLAotCQkJCTZFMjFDNkJGMTEyNjMzODUwMEE3
QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgKi8sCi0JCQkJNDlDN0I5RkIxMDQyRDM2NTAw
MDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi8sCi0JCQkJN0MzMzBBMDExREY4RkFDNjAw
RDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oICovLAotCQkJCTMxM0RFODZE
MjNBOTY5NjYwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHQzREJhc2UuY3BwICovLAotCQkJCTMx
M0RFODZGMjNBOTY5NjcwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHQzREJhc2UuaCAqLywKLQkJ
CQlEMDg0M0E0QzIwRkVDMTY1MDBGRTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmNw
cCAqLywKLQkJCQlEMDg0M0E0QTIwRkVCRTNEMDBGRTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RN
YW5hZ2VyLmggKi8sCisJCQkJMzEzREU4NkQyM0E5Njk2NjAwOEZDNDdCIC8qIEdyYXBoaWNzQ29u
dGV4dEdMLmNwcCAqLywKKwkJCQkzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0IgLyogR3JhcGhpY3ND
b250ZXh0R0wuaCAqLywKKwkJCQk3QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmggKi8sCiAJCQkJMEYwMDEyNDAxRkFEODgxMDAwNTMxRDc2IC8q
IEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovLAogCQkJCTBGMDAxMjNGMUZBRDg3RDYwMDUzMUQ3
NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8sCiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuY3BwICovLApAQCAtMjUyOTUsOCArMjUyOTAsOCBAQAogCQkJ
CTFDMTJBQzI4MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVU
ZXh0LmNwcCAqLywKIAkJCQkxQzEyQUMyOTFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWlseVNw
ZWNpZmljYXRpb25Db3JlVGV4dC5oICovLAogCQkJCUI1MzIwRDZBMTIyQTI0RTkwMDJEMTQ0MCAv
KiBGb250UGxhdGZvcm1EYXRhQ29jb2EubW0gKi8sCi0JCQkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3
MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0gKi8sCiAJCQkJQjI3N0I0MDMwQjIyRjM3
QzAwMDRCRUM2IC8qIEdyYXBoaWNzQ29udGV4dENvY29hLm1tICovLAorCQkJCTQ5RkZCRjFDMTFD
ODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tICovLAogCQkJ
CUNEQTU5NTk2MjE0NkRGNzgwMEE4NDE4NSAvKiBIRVZDVXRpbGl0aWVzQ29jb2EuaCAqLywKIAkJ
CQlDREE1OTU5NzIxNDZERjc4MDBBODQxODUgLyogSEVWQ1V0aWxpdGllc0NvY29hLm1tICovLAog
CQkJCTJEMEI0QUE5MThEQTFDQ0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCAqLywKQEAgLTI4NTI4
LDEyICsyODUyMywxNiBAQAogCQlGQkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2RTY3RDJBNDEy
ODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLywKLQkJCQk2RTY3RDJB
NTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8sCi0JCQkJNDREQUI1
QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgKi8sCi0J
CQkJNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5o
ICovLAotCQkJCUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAgKi8sCi0JCQkJOTZBQkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLywKKwkJCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4Rjcg
LyogRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcCAqLywKKwkJCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4
RjcgLyogRXh0ZW5zaW9uc0dMT3BlbkdMLmggKi8sCisJCQkJNDREQUI1QUYxNUE2MjM1ODAwOTdD
MUU0IC8qIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAgKi8sCisJCQkJNDREQUI1QjAxNUE2
MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oICovLAorCQkJCTZFMjFD
NkJGMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAgKi8sCisJ
CQkJNDlDN0I5RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgg
Ki8sCisJCQkJRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQmFzZS5jcHAgKi8sCisJCQkJOTZBQkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCAqLywKKwkJCQlEMDg0M0E0QzIwRkVDMTY1MDBGRTg2
MEUgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcCAqLywKKwkJCQkzMTlBNzI4
NzIzQzI2N0U3MDA4NTM1M0MgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggKi8s
CiAJCQkJN0EyOUJBNjkxODdCNzgxQzAwRjI5Q0VCIC8qIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcu
Y3BwICovLAogCQkJCTdBMjlCQTY3MTg3QjczMjIwMEYyOUNFQiAvKiBUZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nLmggKi8sCiAJCQkpOwpAQCAtMjk4NDYsMTAgKzI5ODQ1LDEwIEBACiAJCQkJOTNEMTk2
MzExRDZDQUI3NjAwRkM3RTQ3IC8qIEV4Y2VwdGlvbk9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
MzdGQjM0NTFGOUVBMDZEMDBEMEZDMzEgLyogRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzFEQ0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3Iu
aCBpbiBIZWFkZXJzICovLAotCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0QuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFNzJGNTUwMjI5RENEMTcwMEIzRTE1MSAvKiBF
eHRlbnNpb25zM0RBTkdMRS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkU2N0QyQTcxMjgwRThBNDAw
ODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDREQUI1
QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNkU3MkY1NTAyMjlEQ0QxNzAwQjNFMTUxIC8qIEV4dGVuc2lvbnNH
TEFOR0xFLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyog
RXh0ZW5zaW9uc0dMT3BlbkdMLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NERBQjVCMjE1QTYyMzU4
MDA5N0MxRTQgLyogRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRXh0ZW5zaW9uU3R5bGVTaGVldHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNDMwNEIxMTkxQUM5MDgwMDBFMkJDMCAvKiBFWFRTaGFkZXJUZXh0
dXJlTE9ELmggaW4gSGVhZGVycyAqLywKIAkJCQk3NzI4Njk0RjE0Rjg4ODI1MDBGNDg0REMgLyog
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDQ1LDEy
ICszMDA0NCwxMiBAQAogCQkJCUIyMjI3OTY0MEQwMEJGMjIwMDcxQjc4MiAvKiBHcmFkaWVudEF0
dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENDgxRjA0MTQ2QjVDNkIwMEFBNzgzNCAv
KiBHcmFkaWVudEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkEwMTVBOTBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUM3QjlGQzEw
NDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMu
aCBpbiBIZWFkZXJzICovLAotCQkJCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3QiAvKiBHcmFwaGlj
c0NvbnRleHQzREJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTMxQUI1MDAwMTIyODc4QTIwMDFB
N0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElPUy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRDA4NDNB
NEIyMEZFQkUzRDAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM0OTA3RTQxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENH
LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTNERTg3MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhp
Y3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1
QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzFBQjUwMDAxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMRVNJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxOUE3Mjg4MjNDMjY3RkUwMDg1
MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwQjBEMEYxMkEy
NjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMzNTk0LDcg
KzMzNTkzLDcgQEAKIAkJCQlCRTIzNDgwQzE4QTk4NzBCMDBFNEI2RTggLyogRGF0YUN1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0NDYzQ0Y2ODIyMTJGQTY4MDAxQTg1NzcgLyogRGF0YURldGVj
dG9yc0NvcmVTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNUJFMThGMUQ1NEY1RkIw
MEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2
RTcyRjU0QzIyOURDRDBDMDBCM0UxNTEgLyogRXh0ZW5zaW9uczNEQU5HTEUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNkU3MkY1NEMyMjlEQ0QwQzAwQjNFMTUxIC8qIEV4dGVuc2lvbnNHTEFOR0xF
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRTZDQkZEMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3Jt
YXRDb252ZXJ0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBNEJCMEExOTU0RDYxNjAwRkE1
QzJFIC8qIEdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4RjRGRjYxOTRDQTRFNjAw
ODFCQUFFIC8qIEdhbWVwYWRCdXR0b24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMzYwMiw4ICsz
MzYwMSw3IEBACiAJCQkJNTFBOUQ5RTkxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUJFMTkxMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1l
cGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM3OTY0Q0YxRjhEQjY5RDAwMjE4
RUEwIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25EYXRhSU9TLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NkUyMUM2QzAxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTZFNzJGNTRFMjI5RENEMTAwMEIzRTE1MSAvKiBHcmFwaGljc0NvbnRleHQz
REFOR0xFLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFNzJGNTRFMjI5RENEMTAwMEIzRTE1MSAv
KiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDM0U1MTBC
MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThEMDZCM0EwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQUM5MDBDMzE5NDNDMEZDMDA4NjI1QjUgLyogSFRUUEhlYWRlck5hbWVzLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXgg
NjQzMTIxYjU5YjJjZjI5MmJhNjBmNTg4MDI0MGNmODczYzExOGJjYS4uY2M5M2FkYTk1YTViM2Rh
ZGQ3NjU1NGE5N2ZhMGFlZTk1N2U5ZTVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBIVE1MVmlkZW9FbGVtZW50Ojpw
YWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnMK
ICAgICBwbGF5ZXItPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGNvbnRleHQsIGRlc3RSZWN0
KTsKIH0KIAotYm9vbCBIVE1MVmlkZW9FbGVtZW50Ojpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgZmxpcFkpCitib29sIEhUTUxWaWRlb0VsZW1lbnQ6OmNvcHlWaWRlb1RleHR1cmVU
b1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICBpZiAoIXBsYXllcigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxW
aWRlb0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCmlu
ZGV4IGIzYTA2ZGRjZjZjNmEwYTU0ZDJkNzc5YzI5NDdmNTYyNmYwNGMwOTQuLjRjODgyMDg0NGZh
NGM3YzkyNWQzZTljNmM5ZGQwMjBhMjQzYjY0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFVzZWQgYnkg
V2ViR0wgdG8gZG8gR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IGlmIHBvc3NpYmxlLgogICAgIC8vIFNl
ZSBtb3JlIGRldGFpbHMgYXQgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3Jt
VGV4dHVyZSgpIGRlZmluZWQgaW4gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaC4KLSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOwor
ICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CiAKICAgICBi
b29sIHNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGRpc3BsYXlNb2Rl
KCkgPT0gUG9zdGVyIHx8IGRpc3BsYXlNb2RlKCkgPT0gUG9zdGVyV2FpdGluZ0ZvclZpZGVvOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAppbmRleCA5Zjc4ZThiMmJl
Y2IxOGI5ODlmNjI4ZGUxM2MxM2VkYTkwYjZiMjkxLi4wOTFhMzY5OTJhOWMzNWYxMzBmODVkY2M4
MThmOTU5N2UyNzJkZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
CkBAIC0xNDcsNyArMTQ3LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zm
c2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICBpZiAoIWltYWdl
Qml0bWFwLT5idWZmZXIoKSkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1h
cD4geyBudWxscHRyIH0gfTsKIAotICAgICAgICBhdXRvKiBnYzNkID0gd2ViR0xDb250ZXh0LT5n
cmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBhdXRvKiBnYzNkID0gd2ViR0xDb250ZXh0LT5n
cmFwaGljc0NvbnRleHRHTCgpOwogICAgICAgICBnYzNkLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhpbWFnZUJpdG1hcC0+YnVmZmVyKCkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGUg
dHJhbnNmZXIgYWxnb3JpdGhtIHJlcXVpcmVzIHRoYXQgdGhlIGNhbnZhcyBlZmZlY3RpdmVseQpA
QCAtMTU1LDkgKzE1NSw5IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNj
cmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgLy8gbmVlZCB0byBl
cmFzZSB3aGF0J3MgdGhlcmUuCiAKICAgICAgICAgR0MzRGZsb2F0IGNsZWFyQ29sb3JbNF07Ci0g
ICAgICAgIGdjM2QtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFM
VUUsIGNsZWFyQ29sb3IpOworICAgICAgICBnYzNkLT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0
R0w6OkNPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKICAgICAgICAgZ2MzZC0+Y2xlYXJD
b2xvcigwLCAwLCAwLCAwKTsKLSAgICAgICAgZ2MzZC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAgICBnYzNkLT5j
bGVhcihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVS
X0JJVCk7CiAgICAgICAgIGdjM2QtPmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xv
clsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CiAKICAgICAgICAgcmV0dXJuIHsg
V1RGTW92ZShpbWFnZUJpdG1hcCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcAppbmRleCA3NDBkNTRiMjU0NzVjZjc4MzI0NDZl
N2FiNzNhZmNhYzJlZjM1ODNiLi44ZDc0ZTQwOTgyMzc1NjAwMThlYzBlMzlhOTFlOTZjNzAxZTc5
MmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNl
ZEFycmF5cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5j
ZWRBcnJheXMuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRB
cnJheXMuaCIKIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgVVNFKEFOR0xFKQotI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM4LDcgQEAgQU5HTEVJbnN0YW5jZWRBcnJheXM6OkFO
R0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAg
ICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogI2lmIFVTRShBTkdMRSkKLSAgICBjb250
ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJH
TF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRleHRH
TCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2Fy
cmF5cyIpOwogI2VuZGlmCiB9CiAKQEAgLTUzLDEzICs1MywxMyBAQCBib29sIEFOR0xFSW5zdGFu
Y2VkQXJyYXlzOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkK
IHsKICNpZiBQTEFURk9STShDT0NPQSkKICNpZiBVU0UoQU5HTEUpCi0gICAgcmV0dXJuIGNvbnRl
eHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdM
RV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0
R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlz
Iik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICByZXR1cm4gdHJ1ZTsK
ICNlbmRpZgogI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNz
Q29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVfaW5zdGFuY2Vk
X2FycmF5cyIpOworICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4
dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCmluZGV4
IDQyYmIzZTI5MzU4YThlMTBlZDY4MjkwZjM5Njc4NDk5ODRmZDUyNTEuLjQxMGNlYTVmNGRiYTU4
NjE0N2Y4MmVlNzhiNWRiYTc5OTkxOTdhMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MSwxMyArNjEsMTMgQEAgdm9pZCBPRVNWZXJ0ZXhBcnJh
eU9iamVjdDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyog
YXJyYXkKICAgICBpZiAoIWFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSAmJiBhcnJheU9i
amVjdCA9PSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQmPihtX2NvbnRleHQpLm1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdCkKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0Jj4obV9jb250ZXh0KS5zZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KG51bGxwdHIp
OwogCi0gICAgYXJyYXlPYmplY3QtPmRlbGV0ZU9iamVjdChtX2NvbnRleHQuZ3JhcGhpY3NDb250
ZXh0M0QoKSk7CisgICAgYXJyYXlPYmplY3QtPmRlbGV0ZU9iamVjdChtX2NvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0R0woKSk7CiB9CiAKIEdDM0Rib29sZWFuIE9FU1ZlcnRleEFycmF5T2JqZWN0Ojpp
c1ZlcnRleEFycmF5T0VTKFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMqIGFycmF5T2JqZWN0KQog
ewogICAgIHJldHVybiBhcnJheU9iamVjdCAmJiAhbV9jb250ZXh0LmlzQ29udGV4dExvc3QoKSAm
JiBhcnJheU9iamVjdC0+aGFzRXZlckJlZW5Cb3VuZCgpCi0gICAgICAgICYmIG1fY29udGV4dC5n
cmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJh
eU9iamVjdC0+b2JqZWN0KCkpOworICAgICAgICAmJiBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0
R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXlPYmplY3QtPm9iamVj
dCgpKTsKIH0KIAogdm9pZCBPRVNWZXJ0ZXhBcnJheU9iamVjdDo6YmluZFZlcnRleEFycmF5T0VT
KFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMqIGFycmF5T2JqZWN0KQpAQCAtNzYsMTEgKzc2LDEx
IEBAIHZvaWQgT0VTVmVydGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyhXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTKiBhcnJheU9iCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChh
cnJheU9iamVjdCAmJiAoYXJyYXlPYmplY3QtPmlzRGVsZXRlZCgpIHx8ICFhcnJheU9iamVjdC0+
dmFsaWRhdGUobnVsbHB0ciwgY29udGV4dCgpKSkpIHsKLSAgICAgICAgbV9jb250ZXh0LmdyYXBo
aWNzQ29udGV4dDNEKCktPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIG1fY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgZXh0ZW5zaW9ucyA9IG1fY29udGV4
dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CisgICAgYXV0byYgZXh0ZW5z
aW9ucyA9IG1fY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCk7CiAg
ICAgYXV0byYgY29udGV4dCA9IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4obV9jb250
ZXh0KTsKICAgICBpZiAoYXJyYXlPYmplY3QgJiYgIWFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmpl
Y3QoKSAmJiBhcnJheU9iamVjdC0+b2JqZWN0KCkpIHsKICAgICAgICAgZXh0ZW5zaW9ucy5iaW5k
VmVydGV4QXJyYXlPRVMoYXJyYXlPYmplY3QtPm9iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMGIz
ZGJmZmZlMWIwZGMzZjUwYjFhYmMxODUxMTdjYTM3NmYxYmZjYS4uZTkyMzA4M2UyMzRjYmI5ZTg3
NzA5MjExZTI1NTE1Y2Y5ODhiZDNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9u
c0dMLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1h
Z2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgpAQCAtNjcsNyArNjcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0KTsKIAotc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52
YXMsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorc3RkOjp1bmlxdWVf
cHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZShDYW52YXNCYXNlJiBjYW52YXMsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQogewogICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0
dHJpYnV0ZXMpKTsKIApAQCAtNzYsNyArNzYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dD4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhcwog
ICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0wy
UmVuZGVyaW5nQ29udGV4dD4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jh
c2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBj
YW52YXMsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiBjb250ZXh0LCBHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIHsKICAgICBhdXRvIHJlbmRlcmluZ0NvbnRl
eHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQoY2FudmFzLCBXVEZNb3ZlKGNvbnRleHQpLCBhdHRyaWJ1dGVzKSk7CiAK
QEAgLTg1LDEyICs4NSwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0JhcwogICAgIHJldHVybiBy
ZW5kZXJpbmdDb250ZXh0OwogfQogCi1XZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCitXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5kZXJpbmdD
b250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCiAgICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKGNhbnZhcywgYXR0cmli
dXRlcykKIHsKIH0KIAotV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dChDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiBjb250ZXh0
LCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKGNhbnZh
cywgV1RGTW92ZShjb250ZXh0KSwgYXR0cmlidXRlcykKIHsKICAgICBpbml0aWFsaXplU2hhZGVy
RXh0ZW5zaW9ucygpOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGNvbnN0IEFycmF5QnVmZmVyVmlldyYK
IHsKICAgICBhdXRvIG9wdGlvbmFsRWxlbWVudFNpemUgPSBhcnJheUJ1ZmZlclZpZXdFbGVtZW50
U2l6ZShkYXRhKTsKICAgICBpZiAoIW9wdGlvbmFsRWxlbWVudFNpemUpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYnVm
ZmVyRGF0YSIsICJJbnZhbGlkIHR5cGUgb2YgQXJyYXkgQnVmZmVyIFZpZXciKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAi
YnVmZmVyRGF0YSIsICJJbnZhbGlkIHR5cGUgb2YgQXJyYXkgQnVmZmVyIFZpZXciKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIGVsZW1lbnRTaXplID0gb3B0aW9uYWxFbGVtZW50
U2l6ZS52YWx1ZSgpOwpAQCAtMTU3LDEzICsxNTcsMTMgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgY29uc3QgQXJyYXlCdWZmZXJWaWV3
JgogICAgICAgICB8fCBjaGVja2VkQnl0ZUxlbmd0aC5oYXNPdmVyZmxvd2VkKCkKICAgICAgICAg
fHwgY2hlY2tlZEJ5dGVTcmNPZmZzZXQudW5zYWZlR2V0KCkgPiBkYXRhLmJ5dGVMZW5ndGgoKQog
ICAgICAgICB8fCBjaGVja2VkQnl0ZUxlbmd0aC51bnNhZmVHZXQoKSA+IGRhdGEuYnl0ZUxlbmd0
aCgpIC0gY2hlY2tlZEJ5dGVTcmNPZmZzZXQudW5zYWZlR2V0KCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgInNyY09mZnNldCBvciBsZW5ndGggaXMgb3V0IG9mIGJvdW5kcyIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRh
dGEiLCAic3JjT2Zmc2V0IG9yIGxlbmd0aCBpcyBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBhdXRvIHNsaWNlID0gVWludDhBcnJheTo6dHJ5Q3JlYXRlKGRh
dGEucG9zc2libHlTaGFyZWRCdWZmZXIoKSwgZGF0YS5ieXRlT2Zmc2V0KCkgKyBjaGVja2VkQnl0
ZVNyY09mZnNldC51bnNhZmVHZXQoKSwgY2hlY2tlZEJ5dGVMZW5ndGgudW5zYWZlR2V0KCkpOwog
ICAgIGlmICghc2xpY2UpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJidWZmZXJEYXRhIiwgIkNvdWxkIG5vdCBjcmVhdGUgaW50
ZXJtZWRpYXRlIEFycmF5QnVmZmVyVmlldyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6T1VUX09GX01FTU9SWSwgImJ1ZmZlckRhdGEiLCAiQ291bGQgbm90
IGNyZWF0ZSBpbnRlcm1lZGlhdGUgQXJyYXlCdWZmZXJWaWV3Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YSh0YXJnZXQs
IEJ1ZmZlckRhdGFTb3VyY2Uoc2xpY2UuZ2V0KCkpLCB1c2FnZSk7CkBAIC0xNzMsNyArMTczLDcg
QEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgbG9uZyBsb25nIG9mZnNldCwgY28KIHsKICAgICBhdXRvIG9wdGlvbmFsRWxlbWVudFNp
emUgPSBhcnJheUJ1ZmZlclZpZXdFbGVtZW50U2l6ZShkYXRhKTsKICAgICBpZiAoIW9wdGlvbmFs
RWxlbWVudFNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYnVmZmVyU3ViRGF0YSIsICJJbnZhbGlkIHR5cGUgb2Yg
QXJyYXkgQnVmZmVyIFZpZXciKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiYnVmZmVyU3ViRGF0YSIsICJJbnZhbGlkIHR5
cGUgb2YgQXJyYXkgQnVmZmVyIFZpZXciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBh
dXRvIGVsZW1lbnRTaXplID0gb3B0aW9uYWxFbGVtZW50U2l6ZS52YWx1ZSgpOwpAQCAtMTg4LDEz
ICsxODgsMTMgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgY28KICAgICAgICAgfHwgY2hlY2tlZEJ5
dGVMZW5ndGguaGFzT3ZlcmZsb3dlZCgpCiAgICAgICAgIHx8IGNoZWNrZWRCeXRlU3JjT2Zmc2V0
LnVuc2FmZUdldCgpID4gZGF0YS5ieXRlTGVuZ3RoKCkKICAgICAgICAgfHwgY2hlY2tlZEJ5dGVM
ZW5ndGgudW5zYWZlR2V0KCkgPiBkYXRhLmJ5dGVMZW5ndGgoKSAtIGNoZWNrZWRCeXRlU3JjT2Zm
c2V0LnVuc2FmZUdldCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJzcmNPZmZzZXQgb3IgbGVu
Z3RoIGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgInNyY09mZnNldCBv
ciBsZW5ndGggaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgYXV0byBzbGljZSA9IFVpbnQ4QXJyYXk6OnRyeUNyZWF0ZShkYXRhLnBvc3NpYmx5U2hhcmVk
QnVmZmVyKCksIGRhdGEuYnl0ZU9mZnNldCgpICsgY2hlY2tlZEJ5dGVTcmNPZmZzZXQudW5zYWZl
R2V0KCksIGNoZWNrZWRCeXRlTGVuZ3RoLnVuc2FmZUdldCgpKTsKICAgICBpZiAoIXNsaWNlKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVN
T1JZLCAiYnVmZmVyU3ViRGF0YSIsICJDb3VsZCBub3QgY3JlYXRlIGludGVybWVkaWF0ZSBBcnJh
eUJ1ZmZlclZpZXciKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6Ok9VVF9PRl9NRU1PUlksICJidWZmZXJTdWJEYXRhIiwgIkNvdWxkIG5vdCBjcmVhdGUgaW50
ZXJtZWRpYXRlIEFycmF5QnVmZmVyVmlldyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yMDUsMTkgKzIwNSwxOSBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNvcHlCdWZm
ZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoKHJlYWRU
YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSICYmIHdyaXRl
VGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAg
ICAgfHwgKHdyaXRlVGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUiAmJiByZWFkVGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAiRWl0aGVyIGJvdGggdGFyZ2V0
cyBuZWVkIHRvIGJlIEVMRU1FTlRfQVJSQVlfQlVGRkVSIG9yIG5laXRoZXIgc2hvdWxkIGJlIEVM
RU1FTlRfQVJSQVlfQlVGRkVSLiIpOworICAgIGlmICgocmVhZFRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIgJiYgd3JpdGVUYXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICB8fCAod3JpdGVUYXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSICYmIHJlYWRUYXJnZXQg
IT0gR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJj
b3B5QnVmZmVyU3ViRGF0YSIsICJFaXRoZXIgYm90aCB0YXJnZXRzIG5lZWQgdG8gYmUgRUxFTUVO
VF9BUlJBWV9CVUZGRVIgb3IgbmVpdGhlciBzaG91bGQgYmUgRUxFTUVOVF9BUlJBWV9CVUZGRVIu
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHJlYWRPZmZzZXQgPCAwIHx8IHdy
aXRlT2Zmc2V0IDwgMCB8fCBzaXplIDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIm9m
ZnNldCA8IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiByZWFkQnVmZmVyID0g
dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiY29weUJ1ZmZlclN1YkRhdGEiLCByZWFkVGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gd3JpdGVCdWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJjb3B5QnVm
ZmVyU3ViRGF0YSIsIHdyaXRlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcp
OworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0
YVBhcmFtZXRlcnMoImNvcHlCdWZmZXJTdWJEYXRhIiwgcmVhZFRhcmdldCwgR3JhcGhpY3NDb250
ZXh0R0w6OlNUQVRJQ19EUkFXKTsKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IHdyaXRlQnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiY29weUJ1ZmZlclN1YkRhdGEiLCB3cml0
ZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlNUQVRJQ19EUkFXKTsKICAgICBpZiAoIXJlYWRC
dWZmZXIgfHwgIXdyaXRlQnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAiSW52YWxp
ZCByZWFkVGFyZ2V0IG9yIHdyaXRlVGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAi
SW52YWxpZCByZWFkVGFyZ2V0IG9yIHdyaXRlVGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTIyNSwxMiArMjI1LDEyIEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Y29weUJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpCiAgICAg
Q2hlY2tlZDxHQzNEaW50cHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFdyaXRlT2Zmc2V0KHdy
aXRlT2Zmc2V0KTsKICAgICBDaGVja2VkPEdDM0RzaXplaXB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNo
ZWNrZWRTaXplKHNpemUpOwogICAgIGlmIChjaGVja2VkUmVhZE9mZnNldC5oYXNPdmVyZmxvd2Vk
KCkgfHwgY2hlY2tlZFdyaXRlT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkU2l6ZS5o
YXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJPZmZzZXQgb3Igc2l6
ZSBpcyB0b28gYmlnIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAiT2Zmc2V0IG9yIHNpemUg
aXMgdG9vIGJpZyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCF3cml0ZUJ1
ZmZlci0+YXNzb2NpYXRlQ29weUJ1ZmZlclN1YkRhdGEoKnJlYWRCdWZmZXIsIGNoZWNrZWRSZWFk
T2Zmc2V0LnVuc2FmZUdldCgpLCBjaGVja2VkV3JpdGVPZmZzZXQudW5zYWZlR2V0KCksIGNoZWNr
ZWRTaXplLnVuc2FmZUdldCgpKSkgewotICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIm9m
ZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJvZmZz
ZXQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI0OCwyOSAr
MjQ4LDI5IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyU3ViRGF0YShH
QzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNCeXRlCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4g
YnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRh
cmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRh
dGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEFUSUNfRFJBVyk7CiAgICAgaWYgKCFi
dWZmZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJObyBXZWJHTEJ1ZmZlciBpcyBi
b3VuZCB0byB0YXJnZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJObyBXZWJHTEJ1
ZmZlciBpcyBib3VuZCB0byB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgIklmIHRhcmdldCBpcyBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSLCBhbmQgYW55IHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QgaXMgY3VycmVudGx5IGFjdGl2
ZSwgYW4gSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IgaXMgZ2VuZXJhdGVkLiIKIAogICAgIGlmICgh
ZHN0RGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIk51bGwgZHN0RGF0YSIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIk51bGwgZHN0RGF0YSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgYXV0byBvcHRpb25hbEVsZW1lbnRTaXplID0gYXJyYXlCdWZmZXJW
aWV3RWxlbWVudFNpemUoKmRzdERhdGEpOwogICAgIGlmICghb3B0aW9uYWxFbGVtZW50U2l6ZSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIkludmFsaWQgdHlwZSBvZiBBcnJheSBCdWZm
ZXIgVmlldyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIkludmFsaWQgdHlwZSBvZiBB
cnJheSBCdWZmZXIgVmlldyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8gZWxl
bWVudFNpemUgPSBvcHRpb25hbEVsZW1lbnRTaXplLnZhbHVlKCk7CiAgICAgYXV0byBkc3REYXRh
TGVuZ3RoID0gZHN0RGF0YS0+Ynl0ZUxlbmd0aCgpIC8gZWxlbWVudFNpemU7CiAKICAgICBpZiAo
ZHN0T2Zmc2V0ID4gZHN0RGF0YUxlbmd0aCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwg
ImRzdE9mZnNldCBpcyBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXN0aW5hdGlvbiBi
dWZmZXIuIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiZHN0T2Zmc2V0IGlzIGxhcmdl
ciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4iKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjgwLDE3ICsyODAsMTcgQEAgdm9pZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0OjpnZXRCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNy
Y0J5dGUKICAgICBDaGVja2VkPEdDM0R1aW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZENvcHlM
ZW5ndGgoY29weUxlbmd0aCk7CiAgICAgYXV0byBjaGVja2VkRGVzdGluYXRpb25FbmQgPSBjaGVj
a2VkRHN0T2Zmc2V0ICsgY2hlY2tlZENvcHlMZW5ndGg7CiAgICAgaWYgKGNoZWNrZWREZXN0aW5h
dGlvbkVuZC5oYXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJk
c3RPZmZzZXQgKyBjb3B5TGVuZ3RoIGlzIHRvbyBoaWdoIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1
YkRhdGEiLCAiZHN0T2Zmc2V0ICsgY29weUxlbmd0aCBpcyB0b28gaGlnaCIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGNoZWNrZWREZXN0aW5hdGlvbkVuZC51bnNhZmVHZXQo
KSA+IGRzdERhdGFMZW5ndGgpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJlbmQgb2Yg
d3JpdHRlbiBkZXN0aW5hdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRCdWZmZXJTdWJEYXRhIiwgImVuZCBvZiB3cml0dGVuIGRlc3RpbmF0aW9uIGlzIHBh
c3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAoc3JjQnl0ZU9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJz
cmNCeXRlT2Zmc2V0IGlzIGxlc3MgdGhhbiAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEi
LCAic3JjQnl0ZU9mZnNldCBpcyBsZXNzIHRoYW4gMCIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yOTksMTcgKzI5OSwxNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dEJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc3JjQnl0ZQogICAgIENo
ZWNrZWQ8R0MzRGludHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRFbGVtZW50U2l6ZShlbGVt
ZW50U2l6ZSk7CiAgICAgYXV0byBjaGVja2VkU291cmNlRW5kID0gY2hlY2tlZFNyY0J5dGVPZmZz
ZXQgKyBjaGVja2VkQ29weUxlbmd0aFB0ciAqIGNoZWNrZWRFbGVtZW50U2l6ZTsKICAgICBpZiAo
Y2hlY2tlZFNvdXJjZUVuZC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFNvdXJjZUVuZC51bnNh
ZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRh
dGEiLCAiUGFyYW1ldGVycyB3b3VsZCByZWFkIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgc291
cmNlIGJ1ZmZlciIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIlBhcmFtZXRlcnMgd291
bGQgcmVhZCBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNvdXJjZSBidWZmZXIiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gRklYTUU6IENvYWxlc2Nl
IG11bHRpcGxlIGdldEJ1ZmZlclN1YkRhdGEoKSBjYWxscyB0byB1c2UgYSBzaW5nbGUgbWFwKCkg
Y2FsbAotICAgIHZvaWQqIHB0ciA9IG1fY29udGV4dC0+bWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBj
aGVja2VkU3JjQnl0ZU9mZnNldC51bnNhZmVHZXQoKSwgc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRy
PihjaGVja2VkQ29weUxlbmd0aFB0ci51bnNhZmVHZXQoKSAqIGNoZWNrZWRFbGVtZW50U2l6ZS51
bnNhZmVHZXQoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpNQVBfUkVBRF9CSVQpOworICAgIHZvaWQq
IHB0ciA9IG1fY29udGV4dC0+bWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBjaGVja2VkU3JjQnl0ZU9m
ZnNldC51bnNhZmVHZXQoKSwgc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihjaGVja2VkQ29weUxl
bmd0aFB0ci51bnNhZmVHZXQoKSAqIGNoZWNrZWRFbGVtZW50U2l6ZS51bnNhZmVHZXQoKSksIEdy
YXBoaWNzQ29udGV4dEdMOjpNQVBfUkVBRF9CSVQpOwogICAgIG1lbWNweShzdGF0aWNfY2FzdDxj
aGFyKj4oZHN0RGF0YS0+YmFzZUFkZHJlc3MoKSkgKyBkc3REYXRhLT5ieXRlT2Zmc2V0KCkgKyBk
c3RPZmZzZXQgKiBlbGVtZW50U2l6ZSwgcHRyLCBjb3B5TGVuZ3RoICogZWxlbWVudFNpemUpOwog
ICAgIGlmICghbV9jb250ZXh0LT51bm1hcEJ1ZmZlcih0YXJnZXQpKQotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZm
ZXJTdWJEYXRhIiwgIkZhaWxlZCB3aGlsZSB1bm1hcHBpbmcgYnVmZmVyIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEJ1ZmZlclN1YkRhdGEiLCAiRmFpbGVkIHdoaWxlIHVubWFwcGluZyBidWZmZXIiKTsKICNlbmRp
ZgogICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CiB9CkBA
IC0zMjksMzkgKzMyOSwzOSBAQCBzdGF0aWMgYm9vbCBpc1JlbmRlcmFibGVJbnRlcm5hbGZvcm1h
dChHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICAvLyBPcGVuR0wgRVMgMzogaW50ZXJu
YWxmb3JtYXQgbXVzdCBiZSBhIGNvbG9yLXJlbmRlcmFibGUsIGRlcHRoLXJlbmRlcmFibGUsIG9y
IHN0ZW5jaWwtcmVuZGVyYWJsZSBmb3JtYXQsIGFzIHNob3duIGluIFRhYmxlIDEgYmVsb3cuCiAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2SToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRzhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRzE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1JHQjhfQUxQSEE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThVSToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCMTBfQTJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIMjRfU1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZf
U1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOFVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMy
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEx
Nkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05F
TlQyNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX0lOREVYODoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTM3MywxNCArMzczLDE0IEBAIFdlYkdMQW55IFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmdldEludGVybmFsZm9ybWF0UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwg
R0MzCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVMpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldEludGVybmFsZm9ybWF0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRVMpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdl
dEludGVybmFsZm9ybWF0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaW50IG51bVZhbHVlcyA9IDA7CiAj
aWYgVVNFKE9QRU5HTF9FUykKLSAgICBtX2NvbnRleHQtPmdldEludGVybmFsZm9ybWF0aXYodGFy
Z2V0LCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5VTV9TQU1QTEVfQ09VTlRT
LCAxLCAmbnVtVmFsdWVzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVybmFsZm9ybWF0aXYodGFy
Z2V0LCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6Ok5VTV9TQU1QTEVfQ09VTlRT
LCAxLCAmbnVtVmFsdWVzKTsKIAogICAgIEdDM0RpbnQgcGFyYW1zW251bVZhbHVlc107CiAgICAg
bV9jb250ZXh0LT5nZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBu
YW1lLCBudW1WYWx1ZXMsIHBhcmFtcyk7CkBAIC0zODgsMjEgKzM4OCwyMSBAQCBXZWJHTEFueSBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlcihHQzNEZW51
bSB0YXJnZXQsIEdDMwogICAgIC8vIE9uIGRlc2t0b3AgT3BlbkdMIDQuMSBvciBiZWxvdyB3ZSBt
dXN0IGVtdWxhdGUgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2LgogCiAgICAgLy8gR0xfSU5WQUxJRF9F
TlVNIGlzIGdlbmVyYXRlZCBpZiB0YXJnZXQgaXMgbm90IEdMX1JFTkRFUkJVRkZFUi4KLSAgICBp
ZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldElu
dGVybmFsZm9ybWF0UGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRJbnRlcm5hbGZv
cm1hdFBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICAvLyBHTF9JTlZBTElEX0VOVU0gaXMgZ2VuZXJhdGVkIGlmIGludGVy
bmFsZm9ybWF0IGlzIG5vdCBjb2xvci0sIGRlcHRoLSwgb3Igc3RlbmNpbC1yZW5kZXJhYmxlLgog
ICAgIGlmICghaXNSZW5kZXJhYmxlSW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlciIsICJpbnZhbGlkIGludGVybmFsIGZvcm1hdCIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCAiZ2V0SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBpbnRlcm5hbCBmb3Jt
YXQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgVmVjdG9yPEdDM0Rp
bnQ+IHNhbXBsZXM7CiAgICAgLy8gVGhlIHdheSBJIHVuZGVyc3RhbmQgdGhpcyBpcyB0aGF0IHRo
aXMgd2lsbCByZXR1cm4gYSBNSU5JTVVNIG51bVNhbXBsZXMgZm9yIGFsbCBhY2NlcGV0ZWQgaW50
ZXJuYWxmb3JtYXRzLgogICAgIC8vIEhvd2V2ZXIsIHRoZSB0cnVlIHZhbHVlIG9mIHRoaXMgb24g
c3VwcG9ydGVkIEdMIHZlcnNpb25zIGlzIGdsZWFuZWQgdmlhIGEgZ2V0SW50ZXJuYWxmb3JtYXRp
diBjYWxsIHRoYXQgZGVwZW5kcyBvbiBpbnRlcm5hbGZvcm1hdC4KLSAgICBpbnQgbnVtU2FtcGxl
c01hc2sgPSBnZXRJbnRQYXJhbWV0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9TQU1QTEVTKTsK
KyAgICBpbnQgbnVtU2FtcGxlc01hc2sgPSBnZXRJbnRQYXJhbWV0ZXIoR3JhcGhpY3NDb250ZXh0
R0w6Ok1BWF9TQU1QTEVTKTsKIAogICAgIHdoaWxlIChudW1TYW1wbGVzTWFzayA+IDApIHsKICAg
ICAgICAgc2FtcGxlcy5hcHBlbmQobnVtU2FtcGxlc01hc2spOwpAQCAtNDM5LDU3ICs0MzksNTcg
QEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzMKIHsKICAgICAvLyBUbyBiZSBiYWNrd2FyZCBjb21w
YXRpYmxlIHdpdGggV2ViR0wgMSwgYWxzbyBhY2NlcHRzIGludGVybmFsIGZvcm1hdCBERVBUSF9T
VEVOQ0lMLAogICAgIC8vIHdoaWNoIHNob3VsZCBiZSBtYXBwZWQgdG8gREVQVEgyNF9TVEVOQ0lM
OCBieSBpbXBsZW1lbnRhdGlvbnMuCi0gICAgaWYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMKQotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OworICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCkKKyAgICAgICAgaW50ZXJuYWxmb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODsKIAogICAgIC8vIEVTIDM6
IEdMX0lOVkFMSURfT1BFUkFUSU9OIGlzIGdlbmVyYXRlZCBpZiBpbnRlcm5hbGZvcm1hdCBpcyBh
IHNpZ25lZCBvciB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1hdCBhbmQgc2FtcGxlcyBpcyBncmVhdGVy
IHRoYW4gMC4KICAgICBpZiAoaXNJbnRlZ2VyRm9ybWF0KGludGVybmFsZm9ybWF0KSAmJiBzYW1w
bGVzID4gMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUiLCAibXVs
dGlzYW1wbGluZyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGZvcm1hdCIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUiLCAibXVsdGlzYW1wbGluZyBub3Qgc3VwcG9ydGVk
IGZvciB0aGlzIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMy
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQyNDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTJVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkcxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHODoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRzhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
ODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOEk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQ
VEhfQ09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4SToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTVEVOQ0lMX0lOREVYODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9B
TFBIQTg6CiAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0
KTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKHRydWUpOwogICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODoKICAgICAgICAgaWYgKCFpc0RlcHRoU3RlbmNp
bFN1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGlu
dGVybmFsZm9ybWF0Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGlu
dGVybmFsZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
bV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CkBAIC00OTgsNyArNDk4LDcgQEAgdm9p
ZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R0MzRGVudW0gdGFyZ2V0LCBHQzMKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJ
bnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKQEAgLTUwNyw4OCAr
NTA3LDg4IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzCiBib29sIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlVGV4U3RvcmFnZUZ1bmNQYXJhbWV0ZXJzKEdDM0RlbnVtIHRhcmdldCwg
R0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQogewogICAgIGlm
ICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3Ig
aGVpZ2h0IDwgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKHdpZHRoID4gbV9tYXhUZXh0
dXJlU2l6ZSB8fCBoZWlnaHQgPiBtX21heFRleHR1cmVTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
InRleHR1cmUgZGltZW5zaW9ucyBhcmUgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gdGV4dHVyZSBz
aXplIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgInRleHR1cmUgZGltZW5zaW9ucyBhcmUgbGFyZ2VyIHRo
YW4gdGhlIG1heGltdW0gdGV4dHVyZSBzaXplIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQKSB7CisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJF
X01BUCkgewogICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIndpZHRoICE9IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Cisg
ICAgfSBlbHNlIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAogICAgIGlmIChsZXZlbHMgPCAwIHx8IGxldmVscyA+IG1fbWF4VGV4dHVyZUxl
dmVsKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgIm51bWJlciBvZiBsZXZlbHMgaXMgb3V0IG9mIGJvdW5k
cyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJudW1iZXIgb2YgbGV2ZWxzIGlzIG91dCBvZiBib3VuZHMi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHN3aXRjaCAoaW50ZXJuYWxG
b3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSODoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOEk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UjE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkY6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukcz
MlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFG
X0IxMEY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
MzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2SToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0IzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMySToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTUkdCOF9BTFBIQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThf
U05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ix
MF9BMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QThVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCMTBfQTJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ujg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJGOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyVUk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4X1NOT1JNOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOFVJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlIxMUZfRzExRl9CMTBGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjlfRTU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4VUk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjVfQTE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQTE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVO
VDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4OgogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJVbmtub3duIGludGVybmFsRm9ybWF0Iik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgIlVua25vd24gaW50ZXJuYWxGb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0Mz
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh0ZXh0dXJlLT5pbW11dGFibGUoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ0ZXhTdG9yYWdlMkQiLCAidGV4U3RvcmFnZTJEIGFscmVhZHkgY2FsbGVkIG9uIHRoaXMg
dGV4dHVyZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sICJ0ZXhTdG9yYWdlMkQiLCAidGV4U3RvcmFnZTJEIGFscmVhZHkg
Y2FsbGVkIG9uIHRoaXMgdGV4dHVyZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHRl
eHR1cmUtPnNldEltbXV0YWJsZSgpOwpAQCAtNjIxLDggKzYyMSw4IEBAIHZvaWQgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxl
dmVscywgR0MzCiAgICAgewogICAgICAgICBHQzNEZW51bSBmb3JtYXQ7CiAgICAgICAgIEdDM0Rl
bnVtIHR5cGU7Ci0gICAgICAgIGlmICghR3JhcGhpY3NDb250ZXh0M0Q6OnBvc3NpYmxlRm9ybWF0
QW5kVHlwZUZvckludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAidGV4U3RvcmFnZTJEIiwgIlRleHR1cmUgaGFzIHVua25vd24gaW50ZXJuYWwgZm9y
bWF0Iik7CisgICAgICAgIGlmICghR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvc3NpYmxlRm9y
bWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUp
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9FTlVNLCAidGV4U3RvcmFnZTJEIiwgIlRleHR1cmUgaGFzIHVua25vd24gaW50ZXJuYWwg
Zm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNjMxLDcgKzYz
MSw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzCiAKICAgICAgICAgdW5zaWduZWQgc2l6ZTsK
ICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXpl
LCBudWxscHRyKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikgeworICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9S
KSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInRleFN0b3JhZ2UyRCIs
ICJiYWQgZGltZW5zaW9ucyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02
NDAsMTMgKzY0MCwxMyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3JhZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgICAgICBtZW1zZXQo
ZGF0YS5kYXRhKCksIDAsIHNpemUpOwogCiAgICAgICAgIGZvciAoR0MzRHNpemVpIGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7ICsrbGV2ZWwpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVApIHsKLSAgICAgICAgICAgICAgICBt
X2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCwgbGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1
YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwg
bGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEu
ZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgbGV2ZWwsIDAsIDAsIGxl
dmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKLSAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgbGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVs
SGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBtX2Nv
bnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWiwgbGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGRhdGEuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1Yklt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgbGV2
ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0
YSgpKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfQ1VCRV9NQVApIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQo
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgbGV2ZWwsIDAs
IDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgbGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgs
IGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWSwgbGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRl
eFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WSwgbGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRh
dGEuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgbGV2ZWwsIDAsIDAs
IGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgbGV2ZWwsIDAsIDAsIGxldmVsV2lkdGgsIGxl
dmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEo
KSk7CiAgICAgICAgICAgICBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgbGV2ZWxXaWR0aCAvIDIp
OwpAQCAtNjU1LDE1ICs2NTUsMTUgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzMKICAgICB9CiAK
ICAgICBmb3IgKEdDM0RzaXplaSBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyArK2xldmVsKSB7
Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVApIHsKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICAgICAg
ICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnNl
dExldmVsSW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
KTsKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICAgICAgICAg
IHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgICAgICAgICAgdGV4dHVyZS0+
c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUpOworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIGxldmVsLCBpbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZ
VEUpOworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpOworICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ksIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpOworICAgICAgICAgICAgdGV4dHVyZS0+c2V0
TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1os
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0JZVEUpOworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURSk7CiAgICAgfQogfQogCkBAIC04NzcsMTcgKzg3NywxNyBAQCB2
b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQogewog
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0JVRkZFUl9CSVQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAiaW52YWxpZCBtYXNrIik7CisgICAgaWYgKG1h
c2sgJiB+KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250
ZXh0R0w6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZG
RVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRl
IjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04sICJjbGVhciIsIHJlYXNvbik7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0R0woKSwgJnJl
YXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAobWFzayAmIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSAmJiBpc0ludGVnZXJGb3JtYXQobV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCkpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNs
ZWFyIiwgImNhbm5vdCBjbGVhciBhbiBpbnRlZ2VyIGJ1ZmZlciIpOworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJf
QklUKSAmJiBpc0ludGVnZXJGb3JtYXQobV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVm
ZmVyRm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNsZWFyIiwgImNhbm5vdCBjbGVhciBhbiBpbnRlZ2Vy
IGJ1ZmZlciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghY2xlYXJJZkNvbXBv
c2l0ZWQobWFzaykpCkBAIC05MzIsMjUgKzkzMiwyNSBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdCdWZmZXJzKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZmZlcnMpCiAgICAg
Y29uc3QgR0MzRGVudW0qIGJ1ZnMgPSBidWZmZXJzLmRhdGEoKTsKICAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIGlmIChuICE9IDEpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZl
cnMiLCAibW9yZSB0aGFuIG9uZSBidWZmZXIiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnMiLCAibW9y
ZSB0aGFuIG9uZSBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBpZiAoYnVmc1swXSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSyAmJiBidWZzWzBdICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QnVmZmVycyIsICJC
QUNLIG9yIE5PTkUiKTsKKyAgICAgICAgaWYgKGJ1ZnNbMF0gIT0gR3JhcGhpY3NDb250ZXh0R0w6
OkJBQ0sgJiYgYnVmc1swXSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAiZHJhd0J1ZmZlcnMiLCAiQkFDSyBvciBOT05FIik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgLy8gQmVjYXVzZSB0aGUgYmFja2J1ZmZlciBpcyBzaW11bGF0ZWQg
b24gYWxsIGN1cnJlbnQgV2ViS2l0IHBvcnRzLCB3ZSBuZWVkIHRvIGNoYW5nZSBCQUNLIHRvIENP
TE9SX0FUVEFDSE1FTlQwLgotICAgICAgICBHQzNEZW51bSB2YWx1ZSA9IChidWZzWzBdID09IEdy
YXBoaWNzQ29udGV4dDNEOjpCQUNLKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMCA6IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOwotICAgICAgICBncmFwaGljc0NvbnRleHQz
RCgpLT5nZXRFeHRlbnNpb25zKCkuZHJhd0J1ZmZlcnNFWFQoMSwgJnZhbHVlKTsKKyAgICAgICAg
R0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBHcmFwaGljc0NvbnRleHRHTDo6QkFDSykgPyBH
cmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgOiBHcmFwaGljc0NvbnRleHRHTDo6
Tk9ORTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmRyYXdC
dWZmZXJzRVhUKDEsICZ2YWx1ZSk7CiAgICAgICAgIHNldEJhY2tEcmF3QnVmZmVyKGJ1ZnNbMF0p
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChuID4gZ2V0TWF4RHJhd0J1ZmZlcnMoKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJkcmF3QnVmZmVycyIsICJtb3JlIHRoYW4gbWF4IGRyYXcgYnVmZmVycyIpOworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFM
VUUsICJkcmF3QnVmZmVycyIsICJtb3JlIHRoYW4gbWF4IGRyYXcgYnVmZmVycyIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGZvciAoR0MzRHNpemVpIGkgPSAwOyBp
IDwgbjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYnVmc1tpXSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9ORSAmJiBidWZzW2ldICE9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpKSkgewotICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZm
ZXJzIiwgIkNPTE9SX0FUVEFDSE1FTlRpIG9yIE5PTkUiKTsKKyAgICAgICAgICAgIGlmIChidWZz
W2ldICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FICYmIGJ1ZnNbaV0gIT0gc3RhdGljX2Nhc3Q8
R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGkpKSB7Cisg
ICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnMiLCAiQ09MT1JfQVRUQUNITUVOVGkgb3IgTk9ORSIp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
OTYxLDI0ICs5NjEsMjQgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpkcmF3QnVmZmVy
cyhjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKQogdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpjbGVhckJ1ZmZlcml2KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVy
LCBJbnQzMkxpc3QmJiwgR0MzRHVpbnQpCiB7CiAgICAgc3dpdGNoIChidWZmZXIpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpDT0xPUjoKICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gZ2V0
TWF4RHJhd0J1ZmZlcnMoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcml2IiwgImJ1ZmZlciBpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJpdiIsICJidWZmZXIgaW5kZXgg
b3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ly8gVE9ETzogQ2FsbCBjbGVhckJ1ZmZlcml2LCByZXF1aXJlcyBnbDMuaCBhbmQgRVMzL2dsLmgK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMOgogICAgICAgICBpZiAoZHJhd2J1ZmZl
cikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcml2IiwgImJ1ZmZlciBpbmRleCBtdXN0IGJlIDAiKTsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFLCAiY2xlYXJCdWZmZXJpdiIsICJidWZmZXIgaW5kZXggbXVzdCBiZSAwIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gVE9ETzogQ2FsbCBjbGVhckJ1
ZmZlcml2LCByZXF1aXJlcyBnbDMuaCBhbmQgRVMzL2dsLmgKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImNsZWFyQnVmZmVyaXYiLCAiYnVmZmVyIGFyZ3VtZW50IG11c3QgYmUgQ09MT1Igb3Ig
U1RFTkNJTCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcml2IiwgImJ1ZmZlciBhcmd1bWVudCBtdXN0
IGJlIENPTE9SIG9yIFNURU5DSUwiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtOTg2
LDE4ICs5ODYsMTggQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhckJ1ZmZlcml2
KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVyLAogdm9pZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0OjpjbGVhckJ1ZmZlcnVpdihHQzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1
ZmZlciwgVWludDMyTGlzdCYmLCBHQzNEdWludCkKIHsKICAgICBzd2l0Y2ggKGJ1ZmZlcikgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkNPTE9SOgogICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+
PSBnZXRNYXhEcmF3QnVmZmVycygpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVydWl2IiwgImJ1ZmZl
ciBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJ1aXYiLCAiYnVmZmVy
IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIC8vIFRPRE86IENhbGwgY2xlYXJCdWZmZXJ1aXYsIHJlcXVpcmVzIGdsMy5oIGFuZCBF
UzMvZ2wuaAogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNs
ZWFyQnVmZmVydWl2IiwgImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIENPTE9SIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ImNsZWFyQnVmZmVydWl2IiwgImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIENPTE9SIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTEwMDUsMjQgKzEwMDUsMjQgQEAgdm9pZCBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0OjpjbGVhckJ1ZmZlcnVpdihHQzNEZW51bSBidWZmZXIsIEdDM0RpbnQg
ZHJhd2J1ZmZlciwKIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJmdihH
QzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwgRmxvYXQzMkxpc3QmJiwgR0MzRHVp
bnQpCiB7CiAgICAgc3dpdGNoIChidWZmZXIpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUjoKICAgICAgICAgaWYg
KGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gZ2V0TWF4RHJhd0J1ZmZlcnMoKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJjbGVhckJ1ZmZlcmZ2IiwgImJ1ZmZlciBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gVE9ETzogQ2FsbCBjbGVhckJ1
ZmZlcmZ2LCByZXF1aXJlcyBnbDMuaCBhbmQgRVMzL2dsLmgKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEg6CiAgICAgICAgIGlmIChkcmF3YnVmZmVyKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVy
ZnYiLCAiYnVmZmVyIGluZGV4IG11c3QgYmUgMCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcmZ2Iiwg
ImJ1ZmZlciBpbmRleCBtdXN0IGJlIDAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAvLyBUT0RPOiBDYWxsIGNsZWFyQnVmZmVyZnYsIHJlcXVpcmVzIGdsMy5oIGFu
ZCBFUzMvZ2wuaAogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9TVEVOQ0lMOgogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNsZWFyQnVmZmVyZnYi
LCAiYnVmZmVyIGFyZ3VtZW50IG11c3QgYmUgQ09MT1IgT1IgREVQVEgiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xl
YXJCdWZmZXJmdiIsICJidWZmZXIgYXJndW1lbnQgbXVzdCBiZSBDT0xPUiBPUiBERVBUSCIpOwog
ICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC0xMDMwLDE4ICsxMDMwLDE4IEBAIHZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJmdihHQzNEZW51bSBidWZmZXIsIEdDM0Rp
bnQgZHJhd2J1ZmZlciwKIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJm
aShHQzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwgR0MzRGZsb2F0LCBHQzNEaW50
KQogewogICAgIHN3aXRjaCAoYnVmZmVyKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lM
OgogICAgICAgICBpZiAoZHJhd2J1ZmZlcikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcmZ2IiwgImJ1
ZmZlciBpbmRleCBtdXN0IGJlIDAiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIg
aW5kZXggbXVzdCBiZSAwIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgLy8gVE9ETzogQ2FsbCBjbGVhckJ1ZmZlcmZpLCByZXF1aXJlcyBnbDMuaCBhbmQgRVMzL2ds
LmgKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1I6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTVEVOQ0lMOgogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVy
IGFyZ3VtZW50IG11c3QgYmUgREVQVEhfU1RFTkNJTCIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcmZ2
IiwgImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIERFUFRIX1NURU5DSUwiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogfQpAQCAtMTIyNywxNiArMTIyNywxNiBAQCB2b2lkIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRCdWZmZXJSYW5nZShHQzNEZW51bSwgR0MzRHVpbnQsIFdlYkdMQnVmZmVy
KiwgRwogV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW5kZXhlZFBhcmFtZXRl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0R1aW50KQogewogICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5E
SU5HOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVJfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX1NUQVJUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVS
X0JJTkRJTkc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVJfU0la
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUl9TVEFSVDoKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldEluZGV4ZWRQYXJhbWV0ZXIiLCAicGFyYW1ldGVyIG5hbWUgbm90IHlldCBzdXBwb3J0ZWQi
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
X0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUl9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfU1RBUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9C
VUZGRVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZF
Ul9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSX1NUQVJU
OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCAiZ2V0SW5kZXhlZFBhcmFtZXRlciIsICJwYXJhbWV0ZXIgbmFtZSBub3QgeWV0IHN1cHBv
cnRlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBkZWZhdWx0OgotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW5k
ZXhlZFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRJbmRleGVk
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogfQpAQCAtMTI1MywyMCArMTI1MywyMCBAQCBXZWJHTEFueSBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtcyhXZWJHTFByb2dyYW0mIHByb2dyYW0s
IGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3dpdGNoIChwbmFtZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fVFlQRToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTklGT1JNX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5JRk9STV9CTE9DS19JTkRFWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JN
X09GRlNFVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0FSUkFZX1NUUklE
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX01BVFJJWF9TVFJJREU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9JU19ST1dfTUFKT1I6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9UWVBFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOSUZPUk1fU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JN
X0JMT0NLX0lOREVYOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fT0ZGU0VU
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQVJSQVlfU1RSSURFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fTUFUUklYX1NUUklERToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0lTX1JPV19NQUpPUjoKICAgICAgICAgewogICAg
ICAgICAgICAgVmVjdG9yPEdDM0RpbnQ+IHBhcmFtcyh1bmlmb3JtSW5kaWNlcy5zaXplKCksIDAp
OwogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3Jtcyhwcm9ncmFtLm9iamVj
dCgpLCB1bmlmb3JtSW5kaWNlcywgcG5hbWUsIHBhcmFtcyk7CiAgICAgICAgICAgICByZXR1cm4g
V1RGTW92ZShwYXJhbXMpOwogICAgICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEFjdGl2ZVVu
aWZvcm1zIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEFjdGl2ZVVuaWZvcm1z
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogfQpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjpkZWxldGVWZXJ0ZXhBcnJheShXZWJHTFZlcnRleEFycmF5T2JqZWN0KiBhcnJheU9iamUKICAg
ICAgICAgYmluZFZlcnRleEFycmF5KG51bGxwdHIpOyAvLyBUaGUgZGVmYXVsdCBWQU8gd2FzIHJl
bW92ZWQgaW4gT3BlbkdMIDMuMyBidXQgbm90IGZyb20gV2ViR0wgMjsgYmluZCB0aGUgZGVmYXVs
dCBmb3IgV2ViR0wgdG8gdXNlLgogI2VuZGlmCiAgICAgCi0gICAgYXJyYXlPYmplY3QtPmRlbGV0
ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBhcnJheU9iamVjdC0+ZGVsZXRlT2Jq
ZWN0KGdyYXBoaWNzQ29udGV4dEdMKCkpOwogfQogCiBHQzNEYm9vbGVhbiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Ojppc1ZlcnRleEFycmF5KFdlYkdMVmVydGV4QXJyYXlPYmplY3QqIGFycmF5T2Jq
ZWN0KQpAQCAtMTMzOSw3ICsxMzM5LDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpi
aW5kVmVydGV4QXJyYXkoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdCogYXJyYXlPYmplY3QKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGlmIChhcnJheU9iamVjdCAmJiAoYXJyYXlPYmplY3QtPmlz
RGVsZXRlZCgpIHx8ICFhcnJheU9iamVjdC0+dmFsaWRhdGUoMCwgKnRoaXMpIHx8ICFtX2NvbnRl
eHRPYmplY3RzLmNvbnRhaW5zKGFycmF5T2JqZWN0KSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGFycmF5
T2JqZWN0ICYmICFhcnJheU9iamVjdC0+aXNEZWZhdWx0T2JqZWN0KCkgJiYgYXJyYXlPYmplY3Qt
Pm9iamVjdCgpKSB7CkBAIC0xMzgwLDcgKzEzODAsNyBAQCBXZWJHTEV4dGVuc2lvbiogV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBF
TkFCTEVfSUZfUkVRVUVTVEVEKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLCBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVFVEMxLCAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiLCBXZWJH
TENvbXByZXNzZWRUZXh0dXJlRVRDMTo6c3VwcG9ydGVkKCp0aGlzKSk7CiAgICAgRU5BQkxFX0lG
X1JFUVVFU1RFRChXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMsIG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDLCAiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIsIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKCp0aGlzKSk7CiAgICAgRU5BQkxF
X0lGX1JFUVVFU1RFRChXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQywgbV93ZWJnbENvbXByZXNz
ZWRUZXh0dXJlUzNUQywgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiwgV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCgqdGhpcykpOwotICAgIEVOQUJMRV9JRl9SRVFV
RVNURUQoV2ViR0xEZXB0aFRleHR1cmUsIG1fd2ViZ2xEZXB0aFRleHR1cmUsICJXRUJHTF9kZXB0
aF90ZXh0dXJlIiwgV2ViR0xEZXB0aFRleHR1cmU6OnN1cHBvcnRlZCgqZ3JhcGhpY3NDb250ZXh0
M0QoKSkpOworICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoV2ViR0xEZXB0aFRleHR1cmUsIG1fd2Vi
Z2xEZXB0aFRleHR1cmUsICJXRUJHTF9kZXB0aF90ZXh0dXJlIiwgV2ViR0xEZXB0aFRleHR1cmU6
OnN1cHBvcnRlZCgqZ3JhcGhpY3NDb250ZXh0R0woKSkpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNU
RUQoV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbywgbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvLCAiV0VC
R0xfZGVidWdfcmVuZGVyZXJfaW5mbyIsIHRydWUpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNURUQo
V2ViR0xEZWJ1Z1NoYWRlcnMsIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMsICJXRUJHTF9kZWJ1Z19zaGFk
ZXJzIiwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5z
bGF0ZWRfc2hhZGVyX3NvdXJjZSJfcykpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQxOSw3
ICsxNDE5LDcgQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQogICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJL
SVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIl9zKTsKICAgICBpZiAoV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCgqdGhpcykpCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIl9zKTsKLSAgICBpZiAoV2ViR0xEZXB0
aFRleHR1cmU6OnN1cHBvcnRlZCgqZ3JhcGhpY3NDb250ZXh0M0QoKSkpCisgICAgaWYgKFdlYkdM
RGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoKmdyYXBoaWNzQ29udGV4dEdMKCkpKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0dXJlIl9zKTsKICAgICByZXN1bHQuYXBwZW5k
KCJXRUJHTF9sb3NlX2NvbnRleHQiX3MpOwogICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKCJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiX3MpKQpAQCAtMTQzMiwxMiArMTQzMiwx
MiBAQCBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
U3VwcG9ydGVkRXh0ZW5zaW9ucygpCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZURlZmF1bHRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnQoR0MzRGVudW0mIGF0dGFjaG1lbnQpCiB7CiAgICAgc3dpdGNoIChhdHRh
Y2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpCQUNLOgogICAgICAgICAvLyBCZWNhdXNlIHRoZSBiYWNrYnVmZmVy
IGlzIHNpbXVsYXRlZCBvbiBhbGwgY3VycmVudCBXZWJLaXQgcG9ydHMsIHdlIG5lZWQgdG8gY2hh
bmdlIEJBQ0sgdG8gQ09MT1JfQVRUQUNITUVOVDAuCi0gICAgICAgIGF0dGFjaG1lbnQgPSBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA7CisgICAgICAgIGF0dGFjaG1lbnQgPSBH
cmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDA7CiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTDoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC0xNDUwLDEyICsxNDUwLDEyIEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJn
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZl
clRhcmdldChmdW5jdGlvbk5hbWUsIHRhcmdldCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgYXV0byB0YXJnZXRGcmFtZWJ1ZmZlciA9ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFQURfRlJBTUVCVUZGRVIpID8gbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nIDogbV9mcmFt
ZWJ1ZmZlckJpbmRpbmc7CisgICAgYXV0byB0YXJnZXRGcmFtZWJ1ZmZlciA9ICh0YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIpID8gbV9yZWFkRnJhbWVidWZmZXJC
aW5kaW5nIDogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CiAKICAgICBpZiAoIXRhcmdldEZyYW1lYnVm
ZmVyKSB7CiAgICAgICAgIC8vIE9wZW5HTCBFUyAzOiBEZWZhdWx0IGZyYW1lYnVmZmVyIGlzIGJv
dW5kLgogICAgICAgICBpZiAoIXZhbGlkYXRlRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNobWVudChh
dHRhY2htZW50KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOwpA
QCAtMTQ2NywyMCArMTQ2NywyMCBAQCBXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZwogCiAgICAgYXV0
byBvYmplY3QgPSBtYWtlUmVmUHRyKHRhcmdldEZyYW1lYnVmZmVyLT5nZXRBdHRhY2htZW50T2Jq
ZWN0KGF0dGFjaG1lbnQpKTsKICAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBpZiAocG5hbWUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4
dDNEOjpOT05FKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7CisgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9TVEVO
Q0lMX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9DT01QT05FTlRfVFlQRTogeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9TVEVOQ0lM
X1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9DT01QT05FTlRfVFlQRTogewogICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICAgICAg
bV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC0xNDg5
LDQxICsxNDg5LDQxIEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnCiAgICAgCiAgICAgaWYgKG9i
amVjdC0+aXNUZXh0dXJlKCkpIHsKICAgICAgICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBF
OgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFKTsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfTkFNRToKICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xUZXh0dXJlJj4oKm9iamVjdCkpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9G
QUNFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0NPTE9SX0VOQ09ESU5HOiB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
Q09MT1JfRU5DT0RJTkc6IHsKICAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBBU1NFUlQob2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKTsKICAgICAgICAgc3dpdGNo
IChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhp
Y3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CiAgICAgICAgICAgICByZXR1
cm4gbWFrZVJlZlB0cihyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyJj4oKm9iamVj
dCkpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0NPTE9SX0VOQ09ESU5HIDogeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HIDogewogICAgICAgICAgICAgYXV0
byYgcmVuZGVyQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlciY+KCpv
YmplY3QpOwogICAgICAgICAgICAgYXV0byBmb3JtYXQgPSByZW5kZXJCdWZmZXIuZ2V0SW50ZXJu
YWxGb3JtYXQoKTsKLSAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNSR0I4X0FMUEhBOAotICAgICAgICAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyCi0gICAgICAgICAgICAgICAgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQwotICAg
ICAgICAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9T
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCKTsKKyAgICAgICAg
ICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBOAorICAgICAg
ICAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9TUkdC
OF9FVEMyCisgICAgICAgICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQworICAgICAgICAgICAgICAgIHx8IGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQ
SEExX0VUQzIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dEdM
OjpMSU5FQVIpOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVy
YnVmZmVyIGF0dGFjaG1lbnQiKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTUzNywzNiArMTUzNywzNiBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dAogYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyVGFyZ2V0
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0KQogewogICAgIHN3aXRj
aCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVI6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19GUkFNRUJVRkZFUjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfRlJB
TUVCVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUjoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJn
ZXQiKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZU5vbkRlZmF1bHRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBhdHRh
Y2htZW50KQogewogICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRB
Q0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChhdHRhY2htZW50
ID49IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDwg
c3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5U
MCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCisgICAgICAgIGlmIChhdHRhY2htZW50ID49
IEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDwgc3Rh
dGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCAr
IGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIGF0dGFjaG1lbnQiKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIEdDM0RpbnQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQogewogICAgIGlmICghbV9t
YXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0RSQVdfQlVGRkVSUywgJm1fbWF4RHJhd0J1ZmZlcnMpOworICAgICAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRFJBV19CVUZGRVJT
LCAmbV9tYXhEcmF3QnVmZmVycyk7CiAgICAgcmV0dXJuIG1fbWF4RHJhd0J1ZmZlcnM7CiB9CiAK
QEAgLTE1NzQsNyArMTU3NCw3IEBAIEdDM0RpbnQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
TWF4Q29sb3JBdHRhY2htZW50cygpCiB7CiAgICAgLy8gRHJhd0J1ZmZlcnMgcmVxdWlyZXMgTUFY
X0NPTE9SX0FUVEFDSE1FTlRTID09IE1BWF9EUkFXX0JVRkZFUlMKICAgICBpZiAoIW1fbWF4Q29s
b3JBdHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0RSQVdfQlVGRkVSUywgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAg
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9EUkFXX0JV
RkZFUlMsICZtX21heENvbG9yQXR0YWNobWVudHMpOwogICAgIHJldHVybiBtX21heENvbG9yQXR0
YWNobWVudHM7CiB9CiAKQEAgLTE1ODIsNTggKzE1ODIsNTggQEAgdm9pZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
aW50ZXIKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5k
ZXJidWZmZXIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5k
ZXJidWZmZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlU2l6
ZSgicmVuZGVyYnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICByZXR1cm47
CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05F
TlQyNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QThJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
MTBfQTJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMy
VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkcxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOEk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfSU5ERVg4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBODoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJVSToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
MTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4SToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2
VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4VUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCODoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0lOREVYODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTUkdCOF9BTFBIQTg6CiAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFn
ZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKICAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIMjRfU1RFTkNJTDg6CiAgICAgICAgIGlmICghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZv
cm1hdCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZv
cm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fY29udGV4
dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKQEAgLTE2NDIsNyArMTY0Miw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVyCiAgICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFn
ZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwg
ImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBh
cHBseVN0ZW5jaWxUZXN0KCk7CkBAIC0xNjU0LDEzICsxNjU0LDEzIEBAIHZvaWQgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCiAgICAg
ICAgIHJldHVybjsKICAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKICAgICBzd2l0Y2ggKHRhcmdl
dCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJ
TlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElO
VDoKICAgICAgICAgaXNWYWxpZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBp
ZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImhpbnQiLCAi
aW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQt
PmhpbnQodGFyZ2V0LCBtb2RlKTsKQEAgLTE2NzAsOTcgKzE2NzAsOTcgQEAgR0MzRGVudW0gV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6YmFzZUludGVybmFsRm9ybWF0RnJvbUludGVybmFsRm9ybWF0
KEdDM0RlbnVtIGkKIHsKICAgICAvLyBIYW5kbGVzIHNpemVkLCB1bnNpemVkLCBhbmQgY29tcHJl
c3NlZCBpbnRlcm5hbCBmb3JtYXRzLgogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZGOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09N
UFJFU1NFRF9SMTFfRUFDOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURf
U0lHTkVEX1IxMV9FQUM6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkVEOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMy
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToKLSAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JNOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
MzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfUkcxMV9FQUM6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUM6Ci0g
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Ukc7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhVSToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHX0lOVEVHRVI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCODoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6Ci0gICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZVSToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCMzJVSToKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdF
UjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4
X0FMUEhBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1JHQjhfUFVOQ0hU
SFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNT
RURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6Ci0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IxMF9BMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBMzJVSToKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVI7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSDI0X1NURU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NU
RU5DSUw4OgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZG
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkY6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Q09NUFJFU1NFRF9SMTFfRUFDOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHRHTDo6UkVEOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4X1NOT1JN
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURf
UkcxMV9FQUM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9TSUdORURf
UkcxMV9FQUM6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Ukc7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMlVJOgorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4X1NOT1JNOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6CisgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkdCOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
MTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMzJVSToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JfSU5URUdFUjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4X1NOT1JNOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNSR0I4X0FMUEhBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZG
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VE
X1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6CisgICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkExNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBMzJVSToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBX0lOVEVHRVI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5U
MTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX1NURU5DSUw7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpBTFBIQToKICAgICAgICAgcmV0dXJuIGludGVybmFsZm9ybWF0OwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6Tk9ORTsKICAgICB9CiB9CiAKIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6aXNJbnRl
Z2VyRm9ybWF0KEdDM0RlbnVtIGludGVybmFsZm9ybWF0KQogewogICAgIHN3aXRjaCAoYmFzZUlu
dGVybmFsRm9ybWF0RnJvbUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVH
RVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTc3MSwzMjkgKzE3NzEsMzI5
IEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUNUSVZFX1RFWFRVUkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZF
X1RFWFRVUkU6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKICAg
ICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKICAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QUxQSEFfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBI
QV9CSVRTOgogICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0
ZXMuYWxwaGEpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
X0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6CiAgICAgICAgIHJldHVybiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkQ6CiAg
ICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpC
TEVORF9DT0xPUjoKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0RTVF9BTFBIQToKICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORF9EU1RfUkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0RT
VF9SR0I6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CiAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJM
RU5EX0VRVUFUSU9OX1JHQjoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfQUxQSEE6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfU1JDX0FMUEhBOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EX1NSQ19SR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRf
U1JDX1JHQjoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTFVFX0JJVFM6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QkxVRV9CSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9DTEVBUl9WQUxVRToKICAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkNPTE9SX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJF
X0ZPUk1BVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9URVhUVVJF
X0ZPUk1BVFM6CiAgICAgICAgIHJldHVybiBVaW50MzJBcnJheTo6dHJ5Q3JlYXRlKG1fY29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6
ZSgpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6Q1VMTF9GQUNFOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFX01P
REU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VMTF9GQUNFX01PREU6CiAgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkNVUlJFTlRfUFJPR1JBTToKICAgICAgICAgcmV0dXJuIG1fY3VycmVudFByb2dyYW07Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9CSVRTOgogICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2F0dHJpYnV0ZXMuZGVwdGgpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQ0xFQVJfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ0xF
QVJfVkFMVUU6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9GVU5DOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1JBTkdFOgogICAgICAgICByZXR1cm4gZ2V0
V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1RFU1Q6
CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfV1JJVEVNQVNLOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRJVEhFUjoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlf
QlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJB
WV9CVUZGRVJfQklORElORzoKICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIobV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJp
bmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfRkFDRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpGUk9OVF9GQUNFOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVS
QVRFX01JUE1BUF9ISU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkdFTkVSQVRFX01J
UE1BUF9ISU5UOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6R1JFRU5fQklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9GT1JNQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9GT1JNQVQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfVFlQRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX1RZUEU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TElORV9XSURUSDoKICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9J
TUFHRV9VTklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgog
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfUkVO
REVSQlVGRkVSX1NJWkU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgogICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVEVYVFVSRV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9U
RVhUVVJFX1NJWkU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKICAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZF
UlRFWF9BVFRSSUJTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfQVRU
UklCUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKICAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVX
UE9SVF9ESU1TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WSUVXUE9SVF9ESU1T
OgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgogICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQQUNLX0FM
SUdOTUVOVDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKICAgICAgICAgcmV0dXJuIGdl
dEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZ
R09OX09GRlNFVF9GSUxMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBPTFlHT05fT0ZG
U0VUX0ZJTEw6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9VTklUUzoKICAgICAgICAgcmV0dXJu
IGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RURfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfQklUUzoKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVO
REVSQlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmc7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkVOREVSRVI6CiAgICAgICAgIHJldHVybiAiV2ViS2l0IFdlYkdMIl9zdHI7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0JVRkZFUlM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0JVRkZFUlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZF
UkFHRV9JTlZFUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0NPVkVSQUdF
X0lOVkVSVDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRV9WQUxVRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6CiAgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVTOgogICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX0JPWDoK
ICAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTQ0lTU09SX1RFU1Q6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZF
UlNJT046Ci0gICAgICAgIHJldHVybiAiV2ViR0wgR0xTTCBFUyAxLjAgKCIgKyBtX2NvbnRleHQt
PmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OKSAr
ICIpIjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046CisgICAg
ICAgIHJldHVybiAiV2ViR0wgR0xTTCBFUyAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhH
cmFwaGljc0NvbnRleHRHTDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OKSArICIpIjsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVO
Q0lMX0JBQ0tfRlVOQzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9GQUlMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUw6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFT
UzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9Q
QVNTOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19SRUY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1JFRjoKICAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1ZB
TFVFX01BU0s6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgogICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0JJVFM6CiAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0
cmlidXRlcy5zdGVuY2lsKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQ0xFQVJfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9DTEVB
Ul9WQUxVRToKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNURU5DSUxfRkFJTDoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0ZVTkM6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9GVU5DOgogICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFT
U19ERVBUSF9QQVNTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfUEFTU19E
RVBUSF9QQVNTOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUkVGOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNURU5DSUxfUkVGOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9URVNUOgogICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9WQUxVRV9NQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
VkFMVUVfTUFTSzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTVUJQSVhFTF9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNVQlBJWEVM
X0JJVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX0JJTkRJTkdfMkQ6CiAgICAgICAgIHJldHVybiBtX3RleHR1cmVV
bml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6CiAgICAgICAgIHJldHVybiBt
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5UOgogICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
RkxJUF9ZX1dFQkdMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19GTElQX1lf
V0VCR0w6CiAgICAgICAgIHJldHVybiBtX3VucGFja0ZsaXBZOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CiAgICAgICAgIHJl
dHVybiBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgogICAgICAgICBy
ZXR1cm4gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWRU5ET1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVORE9SOgogICAg
ICAgICByZXR1cm4gIldlYktpdCJfc3RyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlNJT046CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSU0lPTjoKICAgICAgICAgcmV0
dXJuICJXZWJHTCAyLjAiX3N0cjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9S
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWSUVXUE9SVDoKICAgICAgICAgcmV0dXJu
IGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwogICAgIGNhc2UgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CiAgICAgICAgIGlmIChtX3dlYmds
RGVidWdSZW5kZXJlckluZm8pIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAg
ICAgcmV0dXJuICJBcHBsZSBHUFUiX3N0cjsKICNlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV9j
b250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
RVIpOwogI2VuZGlmCiAgICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJn
ZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVy
ZXJfaW5mbyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNl
IFdlYkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VEX1ZFTkRPUl9XRUJHTDoKICAgICAgICAg
aWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgIHJldHVybiBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKTsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5v
dCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTdHJpbmcoR3Jh
cGhpY3NDb250ZXh0R0w6OlZFTkRPUik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBF
WFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKICAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljKQotICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKEV4
dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290
cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRl
cihFeHRlbnNpb25zR0w6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElO
VDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYXzNEX1RFWFRVUkVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfM0RfVEVYVFVSRV9TSVpFOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQVJSQVlfVEVYVFVS
RV9MQVlFUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0FSUkFZX1RFWFRVUkVf
TEFZRVJTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTOgogICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09N
QklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6CiAgICAgICAg
IHJldHVybiBnZXRJbnQ2NFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzoKICAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJ
TkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6TUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CiAgICAgICAgIHJldHVy
biBnZXRJbnQ2NFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0RSQVdfQlVGRkVSUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRFJBV19C
VUZGRVJTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRUxFTUVOVF9JTkRFWDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpNQVhfRUxFTUVOVF9JTkRFWDoKICAgICAgICAgcmV0dXJuIGdldEludDY0UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRUxFTUVOVFNf
SU5ESUNFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRUxFTUVOVFNfSU5ESUNF
UzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6Ok1BWF9FTEVNRU5UU19WRVJUSUNFUzoKICAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5U
X1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRlJB
R01FTlRfVU5JRk9STV9DT01QT05FTlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9S
TV9CTE9DS1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fQkxPQ0tTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfUFJPR1JBTV9URVhFTF9PRkZTRVQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUOgogICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfU0FNUExFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfU0FNUExFUzoK
ICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6CiAgICAgICAgIHJldHVybiBnZXRJbnQ2
NFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRV
UkVfTE9EX0JJQVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RFWFRVUkVfTE9E
X0JJQVM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09N
UE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVFJBTlNGT1JNX0ZFRURC
QUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfU0VQQVJBVEVfQVRUUklCUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6CiAgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9VTklGT1JNX0JMT0NLX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6TUFYX1VOSUZPUk1fQkxPQ0tfU0laRToKICAgICAgICAgcmV0dXJuIGdldEludDY0UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVU5JRk9STV9CVUZG
RVJfQklORElOR1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1VOSUZPUk1fQlVG
RkVSX0JJTkRJTkdTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19DT01QT05FTlRTOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WQVJZSU5HX0NPTVBPTkVOVFM6CiAgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WRVJURVhfT1VUUFVUX0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6TUFYX1ZFUlRFWF9PVVRQVVRfQ09NUE9ORU5UUzoKICAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9V
TklGT1JNX0JMT0NLUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX1VO
SUZPUk1fQkxPQ0tTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzog
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVO
VFM6IAogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUlOX1BST0dSQU1f
VEVYRUxfT0ZGU0VUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1JTl9QUk9HUkFNX1RF
WEVMX09GRlNFVDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19ST1dfTEVOR1RIOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlBBQ0tfUk9XX0xFTkdUSDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19TS0lQX1BJWEVM
UzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQQUNLX1NLSVBfUElYRUxTOgogICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQQUNLX1NLSVBfUk9XUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQQUNLX1NL
SVBfUk9XUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0lNQUdFX0hFSUdIVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlBBQ0tfSU1BR0VfSEVJR0hUOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUk9X
X0xFTkdUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfUk9XX0xFTkdUSDoK
ICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5QQUNLX1NLSVBfSU1BR0VTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOUEFDS19TS0lQX0lNQUdFUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1NLSVBfUElYRUxTOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19TS0lQX1BJWEVMUzoKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX1NLSVBfUk9XUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tf
U0tJUF9ST1dTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSQVNURVJJWkVSX0RJU0NBUkQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkFTVEVSSVpFUl9ESVNDQVJEOgogICAgICAgICByZXR1cm4gZ2V0Qm9v
bGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9B
TFBIQV9UT19DT1ZFUkFHRToKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJBR0U6CiAgICAgICAgIHJldHVybiBn
ZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
UkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRS
QU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfUEFVU0VEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFD
S19QQVVTRUQ6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5U
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElH
Tk1FTlQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlZFUlRFWF9BUlJBWV9CSU5ESU5HOgogICAgICAgICBpZiAobV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxXZWJHTFZlcnRl
eEFycmF5T2JqZWN0Jj4oKm1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCkpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpEUkFXX0JVRkZFUjE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIy
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RFJBV19CVUZGRVI1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVS
NjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjc6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRSQVdfQlVGRkVSOToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZF
UjEwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMTE6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIxMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpEUkFXX0JVRkZFUjEzOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdf
QlVGRkVSMTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIxNToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjA6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RFJBV19CVUZGRVIxOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRS
QVdfQlVGRkVSMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjM6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVI0OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
UkFXX0JVRkZFUjY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVI3Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RFJBV19CVUZGRVIxMDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjEx
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSMTI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIxMzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEUkFXX0JVRkZFUjE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVG
RkVSMTU6CiAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgICAgIHJl
dHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0RHJhd0J1ZmZlcihwbmFtZSk7CiAgICAgICAg
IHJldHVybiBtX2JhY2tEcmF3QnVmZmVyOyAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCi0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVJfQklORElORzoKICAgICAgICAgcmV0
dXJuIG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpDT1BZX1JFQURfQlVGRkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfV1JJ
VEVfQlVGRkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVGRkVS
X0JJTkRJTkc6ICAgCi0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfVU5QQUNLX0JV
RkZFUl9CSU5ESU5HOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfQlVGRkVSOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQklORElORzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0JJTkRJTkdfMkRfQVJSQVk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzNEOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwg
InBhcmFtZXRlciBuYW1lIG5vdCB5ZXQgc3VwcG9ydGVkIik7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
T1BZX1dSSVRFX0JVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9QQUNL
X0JVRkZFUl9CSU5ESU5HOiAgIAorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1VO
UEFDS19CVUZGRVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0JV
RkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVSX0JJTkRJTkc6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQklORElOR18zRDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFt
ZXRlciIsICJwYXJhbWV0ZXIgbmFtZSBub3QgeWV0IHN1cHBvcnRlZCIpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIH0KQEAgLTIxMjIsMTMgKzIxMjIs
MTMgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25z
ZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWcKICAgICBpZiAoIW1heEluZGV4KSB7CiAgICAg
ICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXggaW4gdGhlIGVudGlyZSBidWZmZXIgZm9y
IHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKICAgICAgICAgICAgIG1heEluZGV4ID0g
Z2V0TWF4SW5kZXg8R0MzRHVieXRlPihidWZmZXIsIDAsIG51bUVsZW1lbnRzKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CiAgICAg
ICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1c2hvcnQ+KGJ1ZmZlciwgMCwgbnVt
RWxlbWVudHMgLyBzaXplb2YoR0MzRHVzaG9ydCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgogICAgICAgICAgICAgbWF4SW5kZXggPSBn
ZXRNYXhJbmRleDxHQzNEdWludD4oYnVmZmVyLCAwLCBudW1FbGVtZW50cyAvIHNpemVvZihHQzNE
dWludCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTU0LDE0
ICsyMTU0LDE0IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnCiBib29sIFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlVOQ19BREQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19T
VUJUUkFDVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VCVFJB
Q1Q6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUlOOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGVU5DX0FERDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGVU5DX1NVQlRSQUNUOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpNSU46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiB9CkBAIC0yMTY5LDE5ICsyMTY5LDE5IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzCiBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKIHsKICAgICBzd2l0Y2ggKGNhcCkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9U
RVNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVfQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSQVNURVJJWkVSX0RJU0NBUkQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QkxFTkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VMTF9G
QUNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1RFU1Q6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RElUSEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBP
TFlHT05fT0ZGU0VUX0ZJTEw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0FM
UEhBX1RPX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9DT1ZF
UkFHRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1Q6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJBU1RFUklaRVJfRElTQ0FSRDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5oCmluZGV4IDkyYzE4MzJiOWVjOWEzMzVjZDk4MDVkOTAzOTc1MjQzYzBkMzAyYzEu
LmNlZDE4Y2Q0ZmE4ZGFhZDhjMjQ2MGI1YTc5YzIxMzMyNzY4NTBiMDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTQx
LDggKzQxLDggQEAgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdDsKIGNsYXNzIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJsaWMgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJHTDJSZW5kZXJpbmdDb250ZXh0KTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
IGNyZWF0ZShDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzKTsKLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52
YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBHcmFwaGljc0NvbnRleHQzREF0dHJp
YnV0ZXMpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENh
bnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYsIEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyk7CiAKICAgICAvLyBCdWZmZXIgb2JqZWN0cwogICAgIHVzaW5nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGE7CkBAIC0yMDYsOCArMjA2LDggQEAgcHVi
bGljOgogICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpIGZpbmFs
OwogCiBwcml2YXRlOgotICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdy
YXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7Ci0gICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChD
YW52YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBHcmFwaGljc0NvbnRleHQzREF0
dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52
YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmLCBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMpOwogCiAgICAgYm9vbCBpc1dlYkdMMigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xB
Y3RpdmVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8u
aAppbmRleCA2NWMwODM0NDhlZmIyZDdiMzVlNTJmYmEyZGM3NGY1Y2Q5MmM3ZTQyLi42ZjQzYzA0
MTA3YjM2MWQxNGM5OTlmNmQ5OGM1MGRjNzA0NWFmM2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5B
QkxFKFdFQkdMKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQnVmZmVyLmNwcAppbmRleCBkODdjYWUyNTA2M2M3NmE3ZjdkMDNiMjZjODgyM2Y2
ZTcyMjE3OWM0Li5iOGVlMjVmYWNmNjg1MGYwMmZkZGM0ODY4NjUyYTBjYjUzYzZmODBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCkBAIC00Miw3ICs0Miw3
IEBAIFJlZjxXZWJHTEJ1ZmZlcj4gV2ViR0xCdWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjdHgpCiBXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSYgY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogewotICAgIHNl
dE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCkpOworICAgIHNl
dE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0R0woKS0+Y3JlYXRlQnVmZmVyKCkpOwogICAgIGNs
ZWFyQ2FjaGVkTWF4SW5kaWNlcygpOwogfQogCkBAIC01MSw3ICs1MSw3IEBAIFdlYkdMQnVmZmVy
Ojp+V2ViR0xCdWZmZXIoKQogICAgIGRlbGV0ZU9iamVjdCgwKTsKIH0KIAotdm9pZCBXZWJHTEJ1
ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0
Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmpl
Y3QpCiB7CiAgICAgY29udGV4dDNkLT5kZWxldGVCdWZmZXIob2JqZWN0KTsKIH0KQEAgLTYyLDcg
KzYyLDcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoY29uc3Qg
dm9pZCogZGF0YSwgR0MzRHNpemVpcHRyIGJ5dGVMZW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgc3dpdGNoIChtX3RhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRf
QVJSQVlfQlVGRkVSOgogICAgICAgICBpZiAoYnl0ZUxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
bV9ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDsKQEAgLTgyLDE4ICs4MiwxOCBAQCBib29sIFdlYkdM
QnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhSW1wbChjb25zdCB2b2lkKiBkYXRhLCBHQzNEc2l6
ZWlwdHIgYnl0ZUxlbgogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fZWxlbWVudEFycmF5
QnVmZmVyID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFS
UkFZX0JVRkZFUjoKICAgICAgICAgbV9ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBz
d2l0Y2ggKG1fdGFyZ2V0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlf
UkVBRF9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfV1JJVEVf
QlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZF
UjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfVU5QQUNLX0JVRkZFUjoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
UjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfUkVBRF9CVUZGRVI6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfV1JJVEVfQlVGRkVSOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpQSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVI6CiAgICAgICAgICAgICBtX2J5dGVMZW5ndGggPSBi
eXRlTGVuZ3RoOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEzNSw3
ICsxMzUsNyBAQCBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhSW1wbChH
QzNEaW50cHRyIG9mZnNldCwgY29uc3Qgdm9pZCogZGF0YQogICAgIH0KIAogICAgIHN3aXRjaCAo
bV90YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoK
ICAgICAgICAgY2xlYXJDYWNoZWRNYXhJbmRpY2VzKCk7CiAgICAgICAgIGlmIChieXRlTGVuZ3Ro
KSB7CiAgICAgICAgICAgICBpZiAoIW1fZWxlbWVudEFycmF5QnVmZmVyKQpAQCAtMTQzLDE3ICsx
NDMsMTcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwoR0Mz
RGludHB0ciBvZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEKICAgICAgICAgICAgIG1lbWNweShzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9lbGVtZW50QXJyYXlCdWZmZXItPmRhdGEoKSkgKyBv
ZmZzZXQsIGRhdGEsIGJ5dGVMZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVI6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgc3dpdGNoIChtX3RhcmdldCkg
ewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JFQURfQlVGRkVSOgotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpDT1BZX1JFQURfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpDT1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UElYRUxfUEFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVM
X1VOUEFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9S
TV9GRUVEQkFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZP
Uk1fQlVGRkVSOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICNlbmRpZgpA
QCAtMTk0LDcgKzE5NCw3IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUNvcHlCdWZmZXJT
dWJEYXRhKGNvbnN0IFdlYkdMQnVmZmVyJiByZWFkQnVmZmVyLCBHQzNECiAgICAgfQogCiAgICAg
c3dpdGNoIChtX3RhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRf
QVJSQVlfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlf
QlVGRkVSOgogICAgICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKICAgICAgICAgaWYgKHNp
emUpIHsKICAgICAgICAgICAgIGlmICghbV9lbGVtZW50QXJyYXlCdWZmZXIpCkBAIC0yMDIsMTcg
KzIwMiwxNyBAQCBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVDb3B5QnVmZmVyU3ViRGF0YShj
b25zdCBXZWJHTEJ1ZmZlciYgcmVhZEJ1ZmZlciwgR0MzRAogICAgICAgICAgICAgbWVtY3B5KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtX2VsZW1lbnRBcnJheUJ1ZmZlci0+ZGF0YSgpKSAr
IHdyaXRlT2Zmc2V0LCBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocmVhZEJ1ZmZl
ci5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHJlYWRPZmZzZXQsIHNpemUpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVI6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAjaWYgRU5BQkxFKFdFQkdMMikK
ICAgICAgICAgc3dpdGNoIChtX3RhcmdldCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT1BZX1JFQURfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
T1BZX1dSSVRFX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxf
UEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFD
S19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVG
RkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1JFQURfQlVGRkVSOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1dSSVRFX0JVRkZFUjoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfUEFDS19CVUZGRVI6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMjU4LDE3ICsyNTgsMTcgQEAgdm9pZCBXZWJH
TEJ1ZmZlcjo6c2V0VGFyZ2V0KEdDM0RlbnVtIHRhcmdldCwgYm9vbCBmb3JXZWJHTDIpCiAgICAg
Ly8gSW4gV2ViR0wsIGEgYnVmZmVyIGlzIGJvdW5kIHRvIG9uZSB0YXJnZXQgaW4gaXRzIGxpZmV0
aW1lCiAgICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSIHx8IHRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSIHx8IHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6
RUxFTUVOVF9BUlJBWV9CVUZGRVIpCiAgICAgICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OwogICAgIGVs
c2UgaWYgKGZvcldlYkdMMikgewogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfUkVBRF9CVUZG
RVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfV1JJVEVfQlVGRkVSOgot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZFUjoKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfUkVBRF9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkNPUFlfV1JJVEVfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpQSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VU5JRk9STV9CVUZGRVI6CiAgICAgICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKICAgICAg
ICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAppbmRl
eCBlMzNkOTczN2MzNTkyMzk4MzJjNmRhNWYzZjU4MDhmYjRhNjc4OTAzLi5iZDQzY2RkMDk5NDc3
N2RlZDc1N2VjYjgyOGJhODc3N2Q4Zjk4MzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQnVmZmVyLmgKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAg
IFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIEdDM0RlbnVtIG1f
dGFyZ2V0IHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFTVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEMuY3BwCmluZGV4IDEzMmYzZTYwYjdiYTYzMzFhMzlk
ZDg4Yjc2MWIwMmM1MDdiYWUyYzQuLjFiZmY0M2I3N2U3OGM4ZDE2MzhlMjg3OTE3MDAyMmNiYzJl
YThkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVBU1RDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbXByZXNzZWRUZXh0dXJlQVNUQy5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJHTCkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lv
bnNHTC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKQEAgLTM2LDQxICszNiw0MSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQzo6V2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFTVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICAg
ICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCi0gICAgLCBtX2lzSERSU3VwcG9ydGVkKGNvbnRl
eHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9LSFJf
dGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hkciJfcykpCi0gICAgLCBtX2lzTERSU3VwcG9ydGVk
KGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJH
TF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2xkciJfcykpCisgICAgLCBtX2lzSERSU3Vw
cG9ydGVkKGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBv
cnRzKCJHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hkciJfcykpCisgICAgLCBtX2lz
TERSU3VwcG9ydGVkKGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygp
LnN1cHBvcnRzKCJHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2xkciJfcykpCiB7Ci0g
ICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5h
YmxlZCgiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIiX3MpOwotICAgIGNvbnRl
eHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdM
X0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyIl9zKTsKKyAgICBjb250ZXh0LmdyYXBo
aWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9LSFJfdGV4
dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hkciJfcyk7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRl
eHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfS0hSX3RleHR1cmVfY29t
cHJlc3Npb25fYXN0Y19sZHIiX3MpOwogCi0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFIpOwotICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ181eDRfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUik7Ci0gICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzZ4NV9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSKTsKLSAgICBj
b250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfOHg1X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIpOwotICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ184eDhfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIpOwotICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ18xMHg2X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSKTsKLSAgICBj
b250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfMTB4MTBfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSKTsKLSAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUik7Cisg
ICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSKTsKKyAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfNng1X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFIpOworICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ184eDVfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUik7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzh4OF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUik7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzEweDZfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFIpOworICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ18xMHgxMF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFIpOwor
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFIpOwogICAgIAotICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzR4NF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFIpOwotICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4
NV9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFIpOwotICAgIGNvbnRleHQu
YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4
X0FMUEhBOF9BU1RDXzh4NV9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFIp
OwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzEweDVfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0
KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUik7Ci0g
ICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzEweDEwX0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSKTsKLSAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzR4NF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFIpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4
NV9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFIpOworICAgIGNvbnRleHQu
YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4
X0FMUEhBOF9BU1RDXzh4NV9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFIp
OworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzEweDVfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0
KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUik7Cisg
ICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzEweDEwX0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSKTsKKyAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIpOwogfQogCiBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVNUQzo6fldlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RDKCkgPSBkZWZhdWx0OwpAQCAt
OTQsOCArOTQsOCBAQCBWZWN0b3I8U3RyaW5nPiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQzo6
Z2V0U3VwcG9ydGVkUHJvZmlsZXMoKQogCiBib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RD
OjpzdXBwb3J0ZWQoY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKIHsK
LSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCku
c3VwcG9ydHMoIkdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfaGRyIl9zKQotICAgICAg
ICB8fCBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0
cygiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIiX3MpOworICAgIHJldHVybiBj
b250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xf
S0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIiX3MpCisgICAgICAgIHx8IGNvbnRleHQu
Z3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9LSFJfdGV4
dHVyZV9jb21wcmVzc2lvbl9hc3RjX2xkciJfcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFUQy5jcHAKaW5kZXggMjE2OGRhMzVmYmFmNjljODQ0ODk0Mjg3MjYyYmI2MWIw
ZDg3NzhmZi4uOWY4MWZiMDgxZTE1ZThiNmFlOWViNzBiNWFhNjgxNzRjNDJjODlkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5jcHAKQEAgLTI5LDE4ICsyOSwxOCBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFUQy5oIgogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAgICBj
b250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVk
KCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSIpOworICAgIGNvbnRleHQuZ3JhcGhpY3ND
b250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FNRF9jb21wcmVz
c2VkX0FUQ190ZXh0dXJlIik7CiAKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCX0FNRCk7Ci0gICAgY29udGV4dC5h
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JH
QkFfRVhQTElDSVRfQUxQSEFfQU1EKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQ
SEFfQU1EKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9BVENfUkdCX0FNRCk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRf
QUxQSEFfQU1EKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EKTsKIH0K
IAogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6fldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMo
KSA9IGRlZmF1bHQ7CkBAIC01Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25O
YW1lIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OmdldE5hbWUoKSBjb25zdAogCiBib29sIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlJiBjb250ZXh0KQogewotICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUi
KTsKKyAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25z
KCkuc3VwcG9ydHMoIkdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlIik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHAKaW5kZXggZjRjOTRhNmQ2M2Y0OWIyNjY4
MWRhMzU3NjI1YmNiZDUxZDFiYzc2NC4uYTZhNTRhYTE1MzcwODZmZTI5ZjFjNjJlNzNhOWIwMTM1
YWYzZjc4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUVUQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUo
V0VCR0wpCiAjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5oIgogCi0jaW5jbHVk
ZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
NiwxOCArMzYsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZUVUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
JiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAgICBjb250ZXh0
LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9B
TkdMRV9jb21wcmVzc2VkX3RleHR1cmVfZXRjIik7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRl
eHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfY29tcHJlc3Nl
ZF90ZXh0dXJlX2V0YyIpOwogCi0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUjExX0VBQyk7Ci0gICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9F
QUMpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHMTFfRUFDKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMpOwotICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQjhfRVRDMik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfRVRDMik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVz
c2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQo
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMik7
Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQThfRVRDMl9FQUMpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyk7
CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUjExX0VBQyk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMpOworICAgIGNvbnRleHQu
YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHMTFf
RUFDKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhfRVRDMik7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfRVRDMik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIpOwor
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMik7CisgICAgY29udGV4dC5hZGRD
b21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQThfRVRD
Ml9FQUMpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyk7CiB9CiAKIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVFVEM6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDKCkgPSBkZWZhdWx0OwpA
QCAtNTksNyArNTksNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlRVRDOjpnZXROYW1lKCkgY29uc3QKIAogYm9vbCBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlRVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkK
IHsKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25z
KCkuc3VwcG9ydHMoIkdMX0FOR0xFX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKTsKKyAgICByZXR1
cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMo
IkdMX0FOR0xFX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUVUQzEuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwCmluZGV4IGJkYzNiZWUwYTg3NmFjZjY5ODFiMDA0OGM2
NzUwM2QzYzRjZmJjZTYuLmZiM2RmZWFmZmE2MGJmNThlMmI2ZGViNDE0MTU4Y2QzZjE5ZTc4ODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVFVEMxLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlRVRDMS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR0wp
CiAjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuaCIKIAotI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsOSAr
MzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMTo6
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC5ncmFw
aGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfT0VTX2Nv
bXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4
dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9PRVNfY29tcHJlc3NlZF9F
VEMxX1JHQjhfdGV4dHVyZSIpOwogCi0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkVUQzFfUkdCOF9PRVMpOworICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpFVEMxX1JHQjhfT0VTKTsKIH0KIAogV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUVUQzE6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMSgpID0g
ZGVmYXVsdDsKQEAgLTUwLDcgKzUwLDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzE6OmdldE5hbWUoKSBjb25zdAogCiBib29sIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVFVEMxOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5n
ZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0
dXJlIik7CisgICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5z
aW9ucygpLnN1cHBvcnRzKCJHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZSIpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcAppbmRleCA0YmQw
YWY0NzQwOTA0MTgzNTRiNjU2MDNhN2I2MGM1ZGZlMmQ5OGY2Li45MzU5OWFjM2M3ZTc5YmMwOTY5
MDBlN2ZkNDIxZmMwNDVkMzRmN2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKQEAgLTI5LDcgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgogCi0jaW5j
bHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNywxMiArMzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7Ci0gICAg
Y29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxl
ZCgiR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMiKTsKKyAgICBjb250ZXh0LmdyYXBo
aWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9JTUdfdGV4
dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyIpOwogCi0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUcp
OwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBW
MV9JTUcpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyk7CisgICAgY29udGV4dC5hZGRD
b21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1BWUlRD
XzRCUFBWMV9JTUcpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HKTsKKyAgICBjb250ZXh0
LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JB
X1BWUlRDXzRCUFBWMV9JTUcpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyk7CiB9CiAK
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6fldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
QygpID0gZGVmYXVsdDsKQEAgLTU0LDcgKzU0LDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lv
bk5hbWUgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpnZXROYW1lKCkgY29uc3QKIAogYm9v
bCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQogewotICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfSU1HX3RleHR1cmVfY29tcHJlc3Np
b25fcHZydGMiKTsKKyAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRF
eHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcAppbmRleCA1ZGZm
MTkwNGQ3Njk0MjA5Y2U5OTZmYjAyZWY0NTljYjYwYTYyM2NkLi5hM2QxNTFlZDljYTM2ZWQ1MzFl
MTg0ZmNiY2E0NTQwYmVkNjE5YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCkBAIC0yOSw3ICsyOSw3
IEBACiAKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgogCi0jaW5jbHVk
ZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
NywxNSArMzcsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGF1dG8m
IGV4dGVuc2lvbnMgPSBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMo
KTsKKyAgICBhdXRvJiBleHRlbnNpb25zID0gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5n
ZXRFeHRlbnNpb25zKCk7CiAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4
dHVyZV9jb21wcmVzc2lvbl9keHQxIik7CiAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJH
TF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMiKTsKICAgICBleHRlbnNpb25zLmVuc3Vy
ZUVuYWJsZWQoIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSIpOwogCi0gICAgY29u
dGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCk7Ci0gICAgY29u
dGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDNfRVhUKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0VYVCk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUKTsKIH0KIAog
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQygp
ID0gZGVmYXVsdDsKQEAgLTU3LDcgKzU3LDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5h
bWUgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OmdldE5hbWUoKSBjb25zdAogCiBib29sIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYgY29udGV4dCkKIHsKLSAgICBhdXRvJiBleHRlbnNpb25zID0gY29udGV4dC5ncmFwaGlj
c0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CisgICAgYXV0byYgZXh0ZW5zaW9ucyA9IGNv
bnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpOwogI2lmIFVTRShBTkdM
RSkKICAgICByZXR1cm4gZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0MSIpCiAgICAgICAgICYmIGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MyIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgKaW5kZXggZWE2NzQyMzljMDAwODZjYjgzYzAz
MzM2YTFmMTYzNzEwZWI2ZWY5Yy4uOTg4ZDM2ODIzZDU4Y2UxZjlmMTcyYzk1OWFiMDdkMWU4YjAz
NGMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaApAQCAtMjksMTIgKzI5LDEyIEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2lu
ZyBXZWJHTFBvd2VyUHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNl
OwotdXNpbmcgV2ViR0xDb250ZXh0QXR0cmlidXRlcyA9IEdyYXBoaWNzQ29udGV4dDNEQXR0cmli
dXRlczsKK3VzaW5nIFdlYkdMUG93ZXJQcmVmZXJlbmNlID0gR3JhcGhpY3NDb250ZXh0R0xQb3dl
clByZWZlcmVuY2U7Cit1c2luZyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzID0gR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAppbmRleCA5ZGRlZjE1
OGNkMGFjZGU2YjY4Y2FkZGQyYmM5M2NlZDVhODNkZWZhLi40MmI5Y2NmNDIzZTIwMzBkZjY0YzFm
NjU5NGJhZDM5ZTVlZGI5YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0R3JvdXAuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VC
R0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
IgogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKQEAgLTQ0LDEwICs0NCwxMCBAQCBX
ZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29udGV4dEdyb3VwKCkKICAgICBkZXRhY2hBbmRSZW1v
dmVBbGxPYmplY3RzKCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEJiBXZWJHTENvbnRleHRHcm91
cDo6Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBXZWJH
TENvbnRleHRHcm91cDo6Z2V0QUdyYXBoaWNzQ29udGV4dEdMKCkKIHsKICAgICBBU1NFUlQoIW1f
Y29udGV4dHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gKigqbV9jb250ZXh0cy5iZWdpbigpKS0+
Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICByZXR1cm4gKigqbV9jb250ZXh0cy5iZWdpbigpKS0+
Z3JhcGhpY3NDb250ZXh0R0woKTsKIH0KIAogdm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRkQ29u
dGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKaW5kZXggZWFjZDIyZWM3NjNhZTAz
YzI2ZTAxNGYzZDUwZjA3ZWQ2YjU5MTM2Ny4uNjNkMWQyOTAxOWE3MWQ3NzhlY2VjM2M5MTNmYjRm
MWFiMWE1MjA1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0R3JvdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRl
eHRHcm91cC5oCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZE9iamVjdChX
ZWJHTFNoYXJlZE9iamVjdCYpOwogICAgIHZvaWQgcmVtb3ZlT2JqZWN0KFdlYkdMU2hhcmVkT2Jq
ZWN0Jik7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCYgZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCk7
CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGdldEFHcmFwaGljc0NvbnRleHRHTCgpOwog
CiAgICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxv
c3RDb250ZXh0TW9kZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29udGV4dE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRPYmplY3QuY3BwCmluZGV4IDZhMWM3YWIyOTk5Yzg0NWNlOWZlNDMxMjkxNDBlYzNj
YmJjNDA1ZWEuLjQ1MTQxMjhiNTFmODRlYjdjNzBiODAyMWY1OWQ4NzVkMWY1NThjMTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcApA
QCAtNDcsMTUgKzQ3LDE1IEBAIHZvaWQgV2ViR0xDb250ZXh0T2JqZWN0OjpkZXRhY2hDb250ZXh0
KCkKIHsKICAgICBkZXRhY2goKTsKICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGRlbGV0
ZU9iamVjdChtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgICAgICBkZWxldGVP
YmplY3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHRHTCgpKTsKICAgICAgICAgbV9jb250ZXh0
LT5yZW1vdmVDb250ZXh0T2JqZWN0KCp0aGlzKTsKICAgICAgICAgbV9jb250ZXh0ID0gbnVsbHB0
cjsKICAgICB9CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRPYmplY3Q6Omdl
dEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CitHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogV2Vi
R0xDb250ZXh0T2JqZWN0OjpnZXRBR3JhcGhpY3NDb250ZXh0R0woKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NvbnRleHQgPyBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCkgOiBudWxscHRy
OworICAgIHJldHVybiBtX2NvbnRleHQgPyBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dEdMKCkg
OiBudWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29udGV4dE9iamVjdC5oCmluZGV4IDM2ZjIyNDg1MjQwMmQ5ZWI1ODFmYzUwMTFhNTA4Nzc0Y2Iy
YmU2YzEuLmMzOGU2NDg3MjNlNDdiNTcyM2YwOTA1Yjg1ZGIyMWYzOGIxMTUxZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCkBAIC0zMSw3
ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKIGNsYXNzIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U7CiAKIC8vIFdlYkdMQ29udGV4dE9iamVjdCB0aGUgYmFzZSBjbGFzcyBmb3Ig
b2JqZWN0cyB0aGF0IGFyZSBvd25lZCBieSBhIHNwZWNpZmljCkBAIC01Nyw3ICs1Nyw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG1fY29udGV4dDsKICAgICB9CiAKLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGdldEFHcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29u
dGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdT
aGFkZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJz
LmNwcAppbmRleCBiOGE4MjFiYjdlZTdlNTcyNGYzNmEzODE3YWNmMDA0ZWU0ZjQ1ZWU1Li5jNTU4
NDhiZjdmNTZiMDY3ZDg3NDY2YjQ4Yzg2ZmE3MTYzZjQzMmFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCkBAIC0yOSw3ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgogCi0jaW5jbHVkZSAiRXh0ZW5zaW9u
czNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKQEAgLTM4LDcgKzM4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdT
aGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0
RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3Nv
dXJjZSIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygp
LmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpOwogfQog
CiBXZWJHTERlYnVnU2hhZGVyczo6fldlYkdMRGVidWdTaGFkZXJzKCkgPSBkZWZhdWx0OwpAQCAt
NTQsNyArNTQsNyBAQCBTdHJpbmcgV2ViR0xEZWJ1Z1NoYWRlcnM6OmdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXImIHNoYWRlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgIGlmICghbV9jb250ZXh0LnZhbGlkYXRlV2ViR0xPYmplY3QoImdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UiLCAmc2hhZGVyKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAg
cmV0dXJuIG1fY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZ2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlci5vYmplY3QoKSk7CisgICAgcmV0dXJu
IG1fY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZ2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlci5vYmplY3QoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVwdGhUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhU
ZXh0dXJlLmNwcAppbmRleCAwZDFiN2E3NTFhY2Q3YTgxNGE0ZGU1MTNjOTlmMjY5ZDZmYTkwZDAz
Li40NTMxZTlmNmNhMWFmMDYyOGE0NmQ3ZWRiNmM3MzUxMGM4NDgxMjRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCkBAIC0yOSwxNSAr
MjksMTUgQEAKIAogI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCiAKLSNpbmNsdWRlICJF
eHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBXZWJHTERlcHRoVGV4dHVyZTo6V2ViR0xEZXB0aFRleHR1cmUoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQp
CiB7Ci0gICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX2RlcHRoX3RleHR1cmUiKTsKLSAgICBjb250ZXh0LmdyYXBoaWNz
Q29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BUkJfZGVwdGhf
dGV4dHVyZSIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9u
cygpLmVuc3VyZUVuYWJsZWQoIkdMX09FU19kZXB0aF90ZXh0dXJlIik7CisgICAgY29udGV4dC5n
cmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQVJC
X2RlcHRoX3RleHR1cmUiKTsKIH0KIAogV2ViR0xEZXB0aFRleHR1cmU6On5XZWJHTERlcHRoVGV4
dHVyZSgpID0gZGVmYXVsdDsKQEAgLTQ3LDkgKzQ3LDkgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVu
c2lvbk5hbWUgV2ViR0xEZXB0aFRleHR1cmU6OmdldE5hbWUoKSBjb25zdAogICAgIHJldHVybiBX
ZWJHTERlcHRoVGV4dHVyZU5hbWU7CiB9CiAKLWJvb2wgV2ViR0xEZXB0aFRleHR1cmU6OnN1cHBv
cnRlZChHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKK2Jvb2wgV2ViR0xEZXB0aFRleHR1cmU6
OnN1cHBvcnRlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKIHsKLSAgICBFeHRl
bnNpb25zM0QmIGV4dGVuc2lvbnMgPSBjb250ZXh0LmdldEV4dGVuc2lvbnMoKTsKKyAgICBFeHRl
bnNpb25zR0wmIGV4dGVuc2lvbnMgPSBjb250ZXh0LmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1
cm4gZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfT0VTX2RlcHRoX3RleHR1cmUiKQogICAgICAgICB8
fCBleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BUkJfZGVwdGhfdGV4dHVyZSIpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgKaW5kZXggNTJjZTk2
ZGFjODlhNDM3MWM3M2VlMzNhNWY1NDdiMDZjYzQyYjdhOC4uMGY4Yjk5ZDQyNDRkZTNiMmI4M2E2
YmZmZTIyNGE4YjIzYWM2NzEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xEZXB0aFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTERlcHRoVGV4dHVyZS5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNp
dCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAgICAgdmly
dHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChH
cmFwaGljc0NvbnRleHQzRCYpOworICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYpOwogCiAgICAgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3Zl
cnJpZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xE
cmF3QnVmZmVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZm
ZXJzLmNwcAppbmRleCA2NTA5YTkyMjQ3MmYxZTA3OWFjOTExMzRhM2Y2OTdkYThlMmM2MzhlLi5j
ZTM0NWU2OTgyZDMxZWZhOTNiM2Y5MjgxNWYwYzBkNzBiN2ViOWQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcApAQCAtMjgsMTQgKzI4LDE0
IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogI2luY2x1ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIKIAot
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdlYkdMRHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9u
KGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNp
b25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVycyIpOworICAgIGNvbnRleHQu
Z3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0VY
VF9kcmF3X2J1ZmZlcnMiKTsKIH0KIAogV2ViR0xEcmF3QnVmZmVyczo6fldlYkdMRHJhd0J1ZmZl
cnMoKSA9IGRlZmF1bHQ7CkBAIC00OCw5ICs0OCw5IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNp
b25OYW1lIFdlYkdMRHJhd0J1ZmZlcnM6OmdldE5hbWUoKSBjb25zdAogYm9vbCBXZWJHTERyYXdC
dWZmZXJzOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKIHsK
ICNpZiBVU0UoQU5HTEUpCi0gICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+
Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAgcmV0
dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRz
KCJHTF9FWFRfZHJhd19idWZmZXJzIik7CiAjZWxzZQotICAgIHJldHVybiBjb250ZXh0LmdyYXBo
aWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVm
ZmVycyIpCisgICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5z
aW9ucygpLnN1cHBvcnRzKCJHTF9FWFRfZHJhd19idWZmZXJzIikKICAgICAgICAgJiYgc2F0aXNm
aWVzV2ViR0xSZXF1aXJlbWVudHMoY29udGV4dCk7CiAjZW5kaWYKIH0KQEAgLTYzLDI1ICs2Mywy
NSBAQCB2b2lkIFdlYkdMRHJhd0J1ZmZlcnM6OmRyYXdCdWZmZXJzV0VCR0woY29uc3QgVmVjdG9y
PEdDM0RlbnVtPiYgYnVmZmVycykKICAgICBjb25zdCBHQzNEZW51bSogYnVmcyA9IGJ1ZmZlcnMu
ZGF0YSgpOwogICAgIGlmICghbV9jb250ZXh0Lm1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAg
ICAgIGlmIChuICE9IDEpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZmZXJzV0VCR0wiLCAi
bW9yZSB0aGFuIG9uZSBidWZmZXIiKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZmZXJzV0VC
R0wiLCAibW9yZSB0aGFuIG9uZSBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBpZiAoYnVmc1swXSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSyAmJiBi
dWZzWzBdICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKSB7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZHJhd0J1ZmZlcnNXRUJHTCIsICJCQUNLIG9yIE5PTkUiKTsKKyAgICAgICAgaWYgKGJ1ZnNb
MF0gIT0gR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0sgJiYgYnVmc1swXSAhPSBHcmFwaGljc0NvbnRl
eHRHTDo6Tk9ORSkgeworICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZmZXJzV0VCR0wiLCAi
QkFDSyBvciBOT05FIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ly8gQmVjYXVzZSB0aGUgYmFja2J1ZmZlciBpcyBzaW11bGF0ZWQgb24gYWxsIGN1cnJlbnQgV2Vi
S2l0IHBvcnRzLCB3ZSBuZWVkIHRvIGNoYW5nZSBCQUNLIHRvIENPTE9SX0FUVEFDSE1FTlQwLgot
ICAgICAgICBHQzNEZW51bSB2YWx1ZSA9IChidWZzWzBdID09IEdyYXBoaWNzQ29udGV4dDNEOjpC
QUNLKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCA6IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FOwotICAgICAgICBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0
RXh0ZW5zaW9ucygpLmRyYXdCdWZmZXJzRVhUKDEsICZ2YWx1ZSk7CisgICAgICAgIEdDM0RlbnVt
IHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0spID8gR3JhcGhpY3ND
b250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwIDogR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7Cisg
ICAgICAgIG1fY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZHJh
d0J1ZmZlcnNFWFQoMSwgJnZhbHVlKTsKICAgICAgICAgbV9jb250ZXh0LnNldEJhY2tEcmF3QnVm
ZmVyKGJ1ZnNbMF0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChuID4gbV9jb250ZXh0Lmdl
dE1heERyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZmZXJzV0VCR0wi
LCAibW9yZSB0aGFuIG1heCBkcmF3IGJ1ZmZlcnMiKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImRyYXdC
dWZmZXJzV0VCR0wiLCAibW9yZSB0aGFuIG1heCBkcmF3IGJ1ZmZlcnMiKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IG47
ICsraSkgewotICAgICAgICAgICAgaWYgKGJ1ZnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
TkUgJiYgYnVmc1tpXSAhPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQgKyBpKSkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3
QnVmZmVyc1dFQkdMIiwgIkNPTE9SX0FUVEFDSE1FTlRpX0VYVCBvciBOT05FIik7CisgICAgICAg
ICAgICBpZiAoYnVmc1tpXSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSAmJiBidWZzW2ldICE9
IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQwX0VY
VCArIGkpKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZmZXJzV0VCR0wiLCAi
Q09MT1JfQVRUQUNITUVOVGlfRVhUIG9yIE5PTkUiKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTkyLDE4ICs5MiwxOCBAQCB2b2lkIFdlYkdM
RHJhd0J1ZmZlcnM6OmRyYXdCdWZmZXJzV0VCR0woY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVm
ZmVycykKIC8vIHN0YXRpYwogYm9vbCBXZWJHTERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJl
cXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiB3ZWJnbENvbnRleHQpCiB7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSB3ZWJnbENvbnRleHQuZ3JhcGhpY3NDb250
ZXh0M0QoKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCA9IHdlYmdsQ29u
dGV4dC5ncmFwaGljc0NvbnRleHRHTCgpOwogCiAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIg
d2UgbWFrZSBzdXJlIEdMX0VYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLgogICAgIEdDM0Rp
bnQgbWF4RHJhd0J1ZmZlcnMgPSAwOwogICAgIEdDM0RpbnQgbWF4Q29sb3JBdHRhY2htZW50cyA9
IDA7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZG
RVJTX0VYVCwgJm1heERyYXdCdWZmZXJzKTsKLSAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihFeHRl
bnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtYXhDb2xvckF0dGFjaG1lbnRz
KTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9EUkFXX0JVRkZF
UlNfRVhULCAmbWF4RHJhd0J1ZmZlcnMpOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEV4dGVu
c2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1heENvbG9yQXR0YWNobWVudHMp
OwogICAgIGlmIChtYXhEcmF3QnVmZmVycyA8IDQgfHwgbWF4Q29sb3JBdHRhY2htZW50cyA8IDQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBsYXRmb3JtM0RPYmplY3QgZmJvID0gY29u
dGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmYm8pOworICAgIGNvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIGZibyk7CiAKICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XSA9IHsgMCwgMCwgMCwgMCB9OyAvLyB0ZXh0dXJl
cyBhcmUgcmVxdWlyZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIG90aGVyIHBvcnRzLgogICAgIGJv
b2wgc3VwcG9ydHNEZXB0aCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xf
T0VTX2RlcHRoX3RleHR1cmUiKQpAQCAtMTEzLDE0ICsxMTMsMTQgQEAgYm9vbCBXZWJHTERyYXdC
dWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlJiB3ZWIKICAgICBQbGF0Zm9ybTNET2JqZWN0IGRlcHRoU3RlbmNpbCA9IDA7CiAgICAgaWYg
KHN1cHBvcnRzRGVwdGhTdGVuY2lsKSB7CiAgICAgICAgIGRlcHRoU3RlbmNpbCA9IGNvbnRleHQt
PmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCk7Ci0gICAgICAgIGNvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9TVEVOQ0lMLCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84LCBidWZmZXIpOworICAg
ICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwg
ZGVwdGhTdGVuY2lsKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwsIDEs
IDEsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMLCBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfSU5UXzI0XzgsIGJ1ZmZlcik7CiAgICAgfQogICAgIFBsYXRmb3JtM0RPYmpl
Y3QgZGVwdGggPSAwOwogICAgIGlmIChzdXBwb3J0c0RlcHRoKSB7CiAgICAgICAgIGRlcHRoID0g
Y29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZGVwdGgpOwotICAgICAgICBjb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQ09NUE9ORU5ULCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5ULCBidWZmZXIpOworICAg
ICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwg
ZGVwdGgpOworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCAxLCAxLCAw
LCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfSU5ULCBidWZmZXIpOwogICAgIH0KIAogICAgIFZlY3RvcjxQbGF0Zm9ybTNET2Jq
ZWN0PiBjb2xvcnM7CkBAIC0xMjksMzAgKzEyOSwzMCBAQCBib29sIFdlYkdMRHJhd0J1ZmZlcnM6
OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIHdl
YgogICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IG1heEFsbG93ZWRCdWZmZXJzOyArK2kpIHsK
ICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBjb2xvciA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUo
KTsKICAgICAgICAgY29sb3JzLmFwcGVuZChjb2xvcik7Ci0gICAgICAgIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb2xvcik7Ci0gICAgICAgIGNv
bnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJ1ZmZlcik7Ci0gICAgICAgIGNvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsgaSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIGNvbG9yLCAwKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIGNvbG9yKTsKKyAgICAgICAgY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgYnVmZmVyKTsKKyAgICAgICAgY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpLCBHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV8yRCwgY29sb3IsIDApOworICAgICAgICBpZiAoY29udGV4dC0+Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICAgICAgb2sgPSBmYWxzZTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c0RlcHRo
KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5U
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZGVwdGgsIDApOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBkZXB0aCwgMCk7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAg
ICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hN
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgICAgICAgICBj
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV8yRCwgMCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN1cHBvcnRzRGVw
dGhTdGVuY2lsKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9B
VFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgZGVwdGhTdGVuY2lsLCAw
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVO
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7Ci0gICAg
ICAgICAgICBpZiAoY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01Q
TEVURSkgeworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNI
TUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUp
IHsKICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOwotICAgICAg
ICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgICAgICAgICBjb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8y
RCwgMCwgMCk7CisgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwLCAwKTsKICAgICAgICAg
fQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAppbmRleCBmYzBjZGU2NjU3MTA2MWE3ZGUxNDZjZGY3ZGRkOWY1ZjFhNTUxZDg0Li5i
OTM2OWY4NzY2MzljY2YzMmI5Y2JjNWYyODM1ZTI2NmFiOTRjMzliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcApAQCAtMjgsNyArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5j
bHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNp
bmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgpAQCAtNTEsOSArNTEsOSBAQCBuYW1lc3BhY2UgewogICAgICAgICBib29sIGlz
VmFsaWQoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgc2V0SW5pdGlhbGl6ZWQoKSBvdmVycmlkZTsKLSAg
ICAgICAgdm9pZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dDNEKikgb3ZlcnJpZGU7Ci0gICAg
ICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCkg
b3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0M0QqLCBHQzNE
ZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBvbkRldGFjaGVkKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKikgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgYXR0YWNoKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CisgICAg
ICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBHQzNEZW51bSBhdHRh
Y2htZW50KSBvdmVycmlkZTsKIAogICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQo
KSB7IH07CiAKQEAgLTExMSwyNiArMTExLDI2IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgICAgICBt
X3JlbmRlcmJ1ZmZlci0+c2V0SW5pdGlhbGl6ZWQoKTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdM
UmVuZGVyYnVmZmVyQXR0YWNobWVudDo6b25EZXRhY2hlZChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6b25EZXRhY2hlZChH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKICAgICB7CiAgICAgICAgIG1fcmVuZGVy
YnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQpOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xSZW5k
ZXJidWZmZXJBdHRhY2htZW50OjphdHRhY2goR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6
OmF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgR0MzRGVudW0gYXR0YWNo
bWVudCkKICAgICB7CiAgICAgICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0ID0gb2JqZWN0T3Ja
ZXJvKG1fcmVuZGVyYnVmZmVyLmdldCgpKTsKLSAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBvYmplY3QpOworICAgICAgICBjb250ZXh0
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIG9iamVjdCk7CiAg
ICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6OnVuYXR0YWNoKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2htZW50KQorICAgIHZvaWQg
V2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50Ojp1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dCwgR0MzRGVudW0gYXR0YWNobWVudCkKICAgICB7CiAjaWYgIVVTRShBTkdM
RSkKLSAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVCkgewotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgICAgICBpZiAoYXR0
YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5U
LCBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0
R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAgICAg
ICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDAp
OworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6UkVO
REVSQlVGRkVSLCAwKTsKICAgICB9CiAKICAgICBjbGFzcyBXZWJHTFRleHR1cmVBdHRhY2htZW50
IDogcHVibGljIFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudCB7CkBAIC0xNDcsOSAr
MTQ3LDkgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAg
ICB2b2lkIHNldEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgb25EZXRhY2hl
ZChHcmFwaGljc0NvbnRleHQzRCopIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGF0dGFjaChHcmFw
aGljc0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2
b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCkgb3Zl
cnJpZGU7CisgICAgICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCop
IG92ZXJyaWRlOworICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOworICAgICAgICB2b2lkIHVuYXR0YWNoKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAK
ICAgICAgICAgV2ViR0xUZXh0dXJlQXR0YWNobWVudCgpIHsgfTsKIApAQCAtMjExLDI2ICsyMTEs
MjYgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgLy8gVGV4dHVyZXMgYXJlIGFzc3VtZWQgdG8gYmUg
aW5pdGlhbGl6ZWQuCiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50Ojpv
bkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIHZvaWQgV2ViR0xUZXh0
dXJlQXR0YWNobWVudDo6b25EZXRhY2hlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4
dCkKICAgICB7CiAgICAgICAgIG1fdGV4dHVyZS0+b25EZXRhY2hlZChjb250ZXh0KTsKICAgICB9
CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OmF0dGFjaChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgR0MzRGVudW0gYXR0YWNobWVudCkKKyAgICB2b2lkIFdlYkdMVGV4dHVy
ZUF0dGFjaG1lbnQ6OmF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgR0Mz
RGVudW0gYXR0YWNobWVudCkKICAgICB7CiAgICAgICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
ID0gb2JqZWN0T3JaZXJvKG1fdGV4dHVyZS5nZXQoKSk7Ci0gICAgICAgIGNvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgYXR0YWNobWVu
dCwgbV90YXJnZXQsIG9iamVjdCwgbV9sZXZlbCk7CisgICAgICAgIGNvbnRleHQtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgYXR0YWNobWVudCwg
bV90YXJnZXQsIG9iamVjdCwgbV9sZXZlbCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1
cmVBdHRhY2htZW50Ojp1bmF0dGFjaChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgR0MzRGVu
dW0gYXR0YWNobWVudCkKKyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6OnVuYXR0YWNo
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2htZW50KQog
ICAgIHsKICNpZiAhVVNFKEFOR0xFKQotICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBtX3RhcmdldCwgMCwgbV9sZXZl
bCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQsIG1fdGFyZ2V0LCAwLCBtX2xldmVsKTsKKyAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgeworICAgICAgICAgICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgbV90YXJnZXQsIDAsIG1f
bGV2ZWwpOworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRB
Q0hNRU5ULCBtX3RhcmdldCwgMCwgbV9sZXZlbCk7CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCi0g
ICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIG1fdGFyZ2V0LCAwLCBtX2xldmVsKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUiwgYXR0YWNobWVudCwgbV90YXJnZXQsIDAsIG1fbGV2ZWwpOwogICAgIH0KIAog
ICAgIGJvb2wgaXNBdHRhY2htZW50Q29tcGxldGUoV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRh
Y2htZW50KiBhdHRhY2hlZE9iamVjdCwgR0MzRGVudW0gYXR0YWNobWVudCwgY29uc3QgY2hhcioq
IHJlYXNvbikKQEAgLTIzOCw4ICsyMzgsOCBAQCBuYW1lc3BhY2UgewogICAgICAgICBBU1NFUlQo
YXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3QtPmlzVmFsaWQoKSk7CiAgICAgICAgIEFT
U0VSVChyZWFzb24pOwogICAgICAgICBHQzNEZW51bSBmb3JtYXQgPSBhdHRhY2hlZE9iamVjdC0+
Z2V0Rm9ybWF0KCk7Ci0gICAgICAgIHVuc2lnbmVkIG5lZWQgPSBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50KTsKLSAgICAgICAgdW5zaWdu
ZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQp
OworICAgICAgICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENs
ZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudCk7CisgICAgICAgIHVuc2lnbmVkIGhh
dmUgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2xlYXJCaXRzQnlGb3JtYXQoZm9ybWF0
KTsKIAogICAgICAgICBpZiAoKG5lZWQgJiBoYXZlKSAhPSBuZWVkKSB7CiAgICAgICAgICAgICAq
cmVhc29uID0gImF0dGFjaG1lbnQgdHlwZSBpcyBub3QgY29ycmVjdCBmb3IgYXR0YWNobWVudCI7
CkBAIC0yNDksOCArMjQ5LDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAgICpyZWFzb24gPSAi
YXR0YWNobWVudCBoYXMgYSAwIGRpbWVuc2lvbiI7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQVRUQUNITUVOVCkKLSAgICAgICAgICAgICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfU1RFTkNJTCkgeworICAgICAgICBpZiAoKGF0dGFjaG1lbnQgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQgfHwgYXR0YWNobWVudCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICAgICAgJiYgZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMKSB7CiAgICAgICAgICAgKnJlYXNvbiA9ICJh
dHRhY2htZW50IERFUFRIX1NURU5DSUwgbm90IGFsbG93ZWQgb24gREVQVEggb3IgU1RFTkNJTCBh
dHRhY2htZW50IjsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTI3Miw3
ICsyNzIsNyBAQCBXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdMQ29udGV4dE9iamVjdChjdHgpCiAgICAg
LCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiB7Ci0gICAgc2V0T2JqZWN0KGN0eC5ncmFwaGlj
c0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKKyAgICBzZXRPYmplY3QoY3R4Lmdy
YXBoaWNzQ29udGV4dEdMKCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOwogfQogCiBXZWJHTEZyYW1l
YnVmZmVyOjp+V2ViR0xGcmFtZWJ1ZmZlcigpCkBAIC0zMTEsNyArMzExLDcgQEAgdm9pZCBXZWJH
TEZyYW1lYnVmZmVyOjphdHRhY2goR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gYXR0YWNo
bWVudFBvaW50KQogICAgIEFTU0VSVChpc0JvdW5kKCkpOwogICAgIFJlZlB0cjxXZWJHTEF0dGFj
aG1lbnQ+IGF0dGFjaG1lbnRPYmplY3QgPSBnZXRBdHRhY2htZW50KGF0dGFjaG1lbnQpOwogICAg
IGlmIChhdHRhY2htZW50T2JqZWN0KQotICAgICAgICBhdHRhY2htZW50T2JqZWN0LT5hdHRhY2go
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLCBhdHRhY2htZW50UG9pbnQpOworICAgICAg
ICBhdHRhY2htZW50T2JqZWN0LT5hdHRhY2goY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgp
LCBhdHRhY2htZW50UG9pbnQpOwogfQogCiBXZWJHTFNoYXJlZE9iamVjdCogV2ViR0xGcmFtZWJ1
ZmZlcjo6Z2V0QXR0YWNobWVudE9iamVjdChHQzNEZW51bSBhdHRhY2htZW50KSBjb25zdApAQCAt
MzM2LDIwICszMzYsMjAgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50
RnJvbUJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCkKIAogICAgIFJlZlB0cjxX
ZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRPYmplY3QgPSBnZXRBdHRhY2htZW50KGF0dGFjaG1l
bnQpOwogICAgIGlmIChhdHRhY2htZW50T2JqZWN0KSB7Ci0gICAgICAgIGF0dGFjaG1lbnRPYmpl
Y3QtPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAg
YXR0YWNobWVudE9iamVjdC0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdM
KCkpOwogICAgICAgICBtX2F0dGFjaG1lbnRzLnJlbW92ZShhdHRhY2htZW50KTsKICAgICAgICAg
ZHJhd0J1ZmZlcnNJZk5lY2Vzc2FyeShmYWxzZSk7CiAjaWYgIVVTRShBTkdMRSkKICAgICAgICAg
c3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgICAgIGF0dGFjaChHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQpOwotICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQpOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAg
ICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgICAgIGF0dGFjaChHcmFwaGlj
c0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJ
TF9BVFRBQ0hNRU5UKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
QVRUQUNITUVOVDoKKyAgICAgICAgICAgIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1F
TlQ6CisgICAgICAgICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCkBAIC0zNzEsNyArMzcxLDcgQEAgdm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjpyZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIo
V2ViR0xTaGFyZWRPYmplY3QqIGEKICAgICAgICAgICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+
IGF0dGFjaG1lbnRPYmplY3QgPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChh
dHRhY2htZW50T2JqZWN0LT5pc1NoYXJlZE9iamVjdChhdHRhY2htZW50KSkgewogICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gZW50cnkua2V5OwotICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRPYmplY3QtPnVuYXR0YWNoKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0
M0QoKSwgYXR0YWNobWVudFR5cGUpOworICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3Qt
PnVuYXR0YWNoKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKSwgYXR0YWNobWVudFR5cGUp
OwogICAgICAgICAgICAgICAgIHJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihh
dHRhY2htZW50VHlwZSk7CiAgICAgICAgICAgICAgICAgY2hlY2tNb3JlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTM4NCw3ICszODQsNyBAQCBHQzNEc2l6ZWkgV2ViR0xGcmFt
ZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJXaWR0aCgpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNo
bWVudCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
KTsKKyAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVu
dChHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDApOwogICAgIGlmICghYXR0YWNo
bWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM5NSw3ICszOTUsNyBAQCBHQzNEc2l6ZWkg
V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJIZWlnaHQoKSBjb25zdAogewogICAgIGlm
ICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1l
bnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCk7CisgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVudCA9IGdl
dEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwKTsKICAgICBp
ZiAoIWF0dGFjaG1lbnQpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00MDYsNyArNDA2LDcgQEAg
R0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKSBjb25zdAog
ewogICAgIGlmICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxXZWJH
TEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCk7CisgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNo
bWVudCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQw
KTsKICAgICBpZiAoIWF0dGFjaG1lbnQpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBh
dHRhY2htZW50LT5nZXRGb3JtYXQoKTsKQEAgLTQyMiwyOSArNDIyLDI5IEBAIEdDM0RlbnVtIFdl
YkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0CiAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYXR0YWNobWVudHMpIHsKICAgICAgICAgUmVmUHRyPFdl
YkdMQXR0YWNobWVudD4gYXR0YWNobWVudCA9IGVudHJ5LnZhbHVlLmdldCgpOwogICAgICAgICBp
ZiAoIWlzQXR0YWNobWVudENvbXBsZXRlKGF0dGFjaG1lbnQuZ2V0KCksIGVudHJ5LmtleSwgcmVh
c29uKSkKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIGlmICghYXR0
YWNobWVudC0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQg
aXMgbm90IHZhbGlkIjsKLSAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICB9CiAgICAgICAgIEdDM0RlbnVt
IGF0dGFjaG1lbnRGb3JtYXQgPSBhdHRhY2htZW50LT5nZXRGb3JtYXQoKTsKIAogICAgICAgICAv
LyBBdHRhY2hpbmcgYW4gU1JHQl9FWFQgZm9ybWF0IGF0dGFjaG1lbnQgdG8gYSBmcmFtZWJ1ZmZl
ciBpcyBpbnZhbGlkLgotICAgICAgICBpZiAoYXR0YWNobWVudEZvcm1hdCA9PSBFeHRlbnNpb25z
M0Q6OlNSR0JfRVhUKQorICAgICAgICBpZiAoYXR0YWNobWVudEZvcm1hdCA9PSBFeHRlbnNpb25z
R0w6OlNSR0JfRVhUKQogICAgICAgICAgICAgYXR0YWNobWVudEZvcm1hdCA9IDA7CiAKICAgICAg
ICAgaWYgKCFhdHRhY2htZW50Rm9ybWF0KSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFj
aG1lbnQgaXMgYW4gdW5zdXBwb3J0ZWQgZm9ybWF0IjsKLSAgICAgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ7CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChlbnRyeS5rZXkpIHsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVDoKICAgICAgICAgICAgIGhhdmVE
ZXB0aCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CiAgICAgICAgICAgICBoYXZlU3RlbmNpbCA9IHRydWU7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CiAgICAgICAgICAgICBoYXZlRGVwdGhTdGVuY2lsID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC00NTQsNDMgKzQ1NCw0MyBA
QCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjb25zdCBjaGFyKiogcmVh
c29uKSBjb25zdAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHdpZHRoICE9IGF0
dGFjaG1lbnQtPmdldFdpZHRoKCkgfHwgaGVpZ2h0ICE9IGF0dGFjaG1lbnQtPmdldEhlaWdodCgp
KSB7CiAgICAgICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50cyBkbyBub3QgaGF2ZSB0
aGUgc2FtZSBkaW1lbnNpb25zIjsKLSAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5T
SU9OUzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICArK2NvdW50OwogICAgIH0K
ICAgICBpZiAoIWNvdW50KSB7CiAgICAgICAgICpyZWFzb24gPSAibm8gYXR0YWNobWVudHMiOwot
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
TUlTU0lOR19BVFRBQ0hNRU5UOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOwogICAgIH0KICAgICBpZiAo
IXdpZHRoIHx8ICFoZWlnaHQpIHsKICAgICAgICAgKnJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBoYXMg
YSAwIGRpbWVuc2lvbiI7Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICB9CiAgICAgLy8g
V2ViR0wgc3BlY2lmaWM6IG5vIGNvbmZsaWN0aW5nIERFUFRIL1NURU5DSUwvREVQVEhfU1RFTkNJ
TCBhdHRhY2htZW50cy4KICAgICBpZiAoKGhhdmVEZXB0aFN0ZW5jaWwgJiYgKGhhdmVEZXB0aCB8
fCBoYXZlU3RlbmNpbCkpIHx8IChoYXZlRGVwdGggJiYgaGF2ZVN0ZW5jaWwpKSB7CiAgICAgICAg
ICpyZWFzb24gPSAiY29uZmxpY3RpbmcgREVQVEgvU1RFTkNJTC9ERVBUSF9TVEVOQ0lMIGF0dGFj
aG1lbnRzIjsKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9V
TlNVUFBPUlRFRDsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKICAgICB9Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFOwogfQogCi1ib29sIFdlYkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIGNvbnN0IGNoYXIqKiByZWFzb24pCitib29sIFdlYkdM
RnJhbWVidWZmZXI6Om9uQWNjZXNzKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2Qs
IGNvbnN0IGNoYXIqKiByZWFzb24pCiB7Ci0gICAgaWYgKGNoZWNrU3RhdHVzKHJlYXNvbikgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIGlmIChjaGVja1N0
YXR1cyhyZWFzb24pICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBpbml0aWFsaXplQXR0YWNobWVudHMo
Y29udGV4dDNkLCByZWFzb24pOwogfQogCiBib29sIFdlYkdMRnJhbWVidWZmZXI6Omhhc1N0ZW5j
aWxCdWZmZXIoKSBjb25zdAogewotICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1l
bnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQp
OworICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50
KEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQpOwogICAgIGlmICghYXR0YWNo
bWVudCkKLSAgICAgICAgYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk7CisgICAgICAgIGF0dGFjaG1lbnQgPSBnZXRB
dHRhY2htZW50KEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOwog
ICAgIHJldHVybiBhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQtPmlzVmFsaWQoKTsKIH0KIAotdm9p
ZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTEZyYW1lYnVmZmVy
OjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBs
YXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGZvciAoYXV0byYgYXR0YWNobWVudCA6IG1f
YXR0YWNobWVudHMudmFsdWVzKCkpCiAgICAgICAgIGF0dGFjaG1lbnQtPm9uRGV0YWNoZWQoY29u
dGV4dDNkKTsKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0
ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRAogICAg
IGNvbnRleHQzZC0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KIAotYm9vbCBXZWJHTEZy
YW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0
dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnM2QsIGNvbnN0IGNoYXIqKiByZWFz
b24pCiB7CiAgICAgQVNTRVJUKG9iamVjdCgpKTsKICAgICBHQzNEYml0ZmllbGQgbWFzayA9IDA7
CkBAIC01MDcsMjEgKzUwNywyMSBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVB
dHRhY2htZW50cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgICAgICBH
QzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGVudHJ5LmtleTsKICAgICAgICAgUmVmUHRyPFdlYkdM
QXR0YWNobWVudD4gYXR0YWNobWVudCA9IGVudHJ5LnZhbHVlLmdldCgpOwogICAgICAgICBpZiAo
IWF0dGFjaG1lbnQtPmlzSW5pdGlhbGl6ZWQoKSkKLSAgICAgICAgICAgbWFzayB8PSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7
CisgICAgICAgICAgICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRDbGVhckJp
dHNCeUF0dGFjaG1lbnRUeXBlKGF0dGFjaG1lbnRUeXBlKTsKICAgICB9CiAgICAgaWYgKCFtYXNr
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIFdlIG9ubHkgY2xlYXIgdW4taW5pdGlh
bGl6ZWQgcmVuZGVyYnVmZmVycyB3aGVuIHRoZXkgYXJlIHJlYWR5IHRvIGJlCiAgICAgLy8gcmVh
ZCwgaS5lLiwgd2hlbiB0aGUgZnJhbWVidWZmZXIgaXMgY29tcGxldGUuCi0gICAgaWYgKGczZC0+
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgIGlmIChnM2Qt
PmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSKSAh
PSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgKnJl
YXNvbiA9ICJmcmFtZWJ1ZmZlciBub3QgY29tcGxldGUiOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgYm9vbCBpbml0Q29sb3IgPSBtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgYm9vbCBpbml0RGVwdGggPSBtYXNrICYgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgYm9vbCBpbml0U3RlbmNpbCA9IG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgIGJvb2wgaW5pdENv
bG9yID0gbWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUOworICAgIGJv
b2wgaW5pdERlcHRoID0gbWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklU
OworICAgIGJvb2wgaW5pdFN0ZW5jaWwgPSBtYXNrICYgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5D
SUxfQlVGRkVSX0JJVDsKIAogICAgIEdDM0RmbG9hdCBjb2xvckNsZWFyVmFsdWVbXSA9IHswLCAw
LCAwLCAwfSwgZGVwdGhDbGVhclZhbHVlID0gMDsKICAgICBHQzNEaW50IHN0ZW5jaWxDbGVhclZh
bHVlID0gMDsKQEAgLTUzMCwyNyArNTMwLDI3IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5p
dGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIqCiAg
ICAgR0MzRGJvb2xlYW4gaXNTY2lzc29yRW5hYmxlZCA9IDA7CiAgICAgR0MzRGJvb2xlYW4gaXNE
aXRoZXJFbmFibGVkID0gMDsKICAgICBpZiAoaW5pdENvbG9yKSB7Ci0gICAgICAgIGczZC0+Z2V0
RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRSwgY29sb3JDbGVhclZh
bHVlKTsKLSAgICAgICAgZzNkLT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
V1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgICAgICBnM2QtPmdldEZsb2F0dihHcmFwaGljc0Nv
bnRleHRHTDo6Q09MT1JfQ0xFQVJfVkFMVUUsIGNvbG9yQ2xlYXJWYWx1ZSk7CisgICAgICAgIGcz
ZC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX1dSSVRFTUFTSywgY29sb3JN
YXNrKTsKICAgICAgICAgZzNkLT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwogICAgICAgICBnM2Qt
PmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKICAgICB9CiAgICAgaWYgKGluaXRE
ZXB0aCkgewotICAgICAgICBnM2QtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q0xFQVJfVkFMVUUsICZkZXB0aENsZWFyVmFsdWUpOwotICAgICAgICBnM2QtPmdldEJvb2xlYW52
KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAg
ICBnM2QtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ0xFQVJfVkFMVUUsICZk
ZXB0aENsZWFyVmFsdWUpOworICAgICAgICBnM2QtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwogICAgICAgICBnM2QtPmNsZWFyRGVw
dGgoMS4wZik7CiAgICAgICAgIGczZC0+ZGVwdGhNYXNrKHRydWUpOwogICAgIH0KICAgICBpZiAo
aW5pdFN0ZW5jaWwpIHsKLSAgICAgICAgZzNkLT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9DTEVBUl9WQUxVRSwgJnN0ZW5jaWxDbGVhclZhbHVlKTsKLSAgICAgICAgZzNk
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0ssIHJlaW50
ZXJwcmV0X2Nhc3Q8R0MzRGludCo+KCZzdGVuY2lsTWFzaykpOworICAgICAgICBnM2QtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmc3RlbmNpbENs
ZWFyVmFsdWUpOworICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHQzNEaW50Kj4oJnN0ZW5jaWxNYXNr
KSk7CiAgICAgICAgIGczZC0+Y2xlYXJTdGVuY2lsKDApOwogICAgICAgICBnM2QtPnN0ZW5jaWxN
YXNrKDB4ZmZmZmZmZmYpOwogICAgIH0KLSAgICBpc1NjaXNzb3JFbmFibGVkID0gZzNkLT5pc0Vu
YWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgZzNkLT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlzRGl0aGVyRW5hYmxlZCA9
IGczZC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOwotICAgIGczZC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKKyAgICBpc1NjaXNzb3JFbmFibGVkID0g
ZzNkLT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCk7CisgICAgZzNk
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVy
RW5hYmxlZCA9IGczZC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dEdMOjpESVRIRVIpOworICAg
IGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6RElUSEVSKTsKIAogICAgIGczZC0+Y2xl
YXIobWFzayk7CiAKQEAgLTU2NywxOCArNTY3LDE4IEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6
aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIq
CiAgICAgICAgIGczZC0+c3RlbmNpbE1hc2soc3RlbmNpbE1hc2spOwogICAgIH0KICAgICBpZiAo
aXNTY2lzc29yRW5hYmxlZCkKLSAgICAgICAgZzNkLT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCk7CisgICAgICAgIGczZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpT
Q0lTU09SX1RFU1QpOwogICAgIGVsc2UKLSAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0R0w6OlNDSVNTT1JfVEVTVCk7CiAgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkKLSAgICAgICAg
ZzNkLT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisgICAgICAgIGczZC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dEdMOjpESVRIRVIpOwogICAgIGVsc2UKLSAgICAgICAgZzNkLT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworICAgICAgICBnM2QtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0R0w6OkRJVEhFUik7CiAKICAgICBmb3IgKEF0dGFjaG1lbnRNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9hdHRhY2htZW50cy5iZWdpbigpOyBpdCAhPSBtX2F0dGFjaG1lbnRzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIEdDM0RlbnVtIGF0dGFjaG1lbnRUeXBlID0gaXQtPmtleTsK
ICAgICAgICAgYXV0byBhdHRhY2htZW50ID0gaXQtPnZhbHVlOwotICAgICAgICBHQzNEYml0Zmll
bGQgYml0cyA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBl
KGF0dGFjaG1lbnRUeXBlKTsKKyAgICAgICAgR0MzRGJpdGZpZWxkIGJpdHMgPSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlw
ZSk7CiAgICAgICAgIGlmIChiaXRzICYgbWFzaykKICAgICAgICAgICAgIGF0dGFjaG1lbnQtPnNl
dEluaXRpYWxpemVkKCk7CiAgICAgfQpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgV2ViR0xGcmFt
ZWJ1ZmZlcjo6ZHJhd0J1ZmZlcnMoY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmcykKICAgICBt
X2RyYXdCdWZmZXJzID0gYnVmczsKICAgICBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnMucmVzaXplKG1f
ZHJhd0J1ZmZlcnMuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1fZmlsdGVyZWRE
cmF3QnVmZmVycykKLSAgICAgICAgYnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7Cisg
ICAgICAgIGJ1ZmZlciA9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogICAgIGRyYXdCdWZmZXJz
SWZOZWNlc3NhcnkodHJ1ZSk7CiB9CiAKQEAgLTYxMSwzMyArNjExLDMzIEBAIHZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6ZHJhd0J1ZmZlcnNJZk5lY2Vzc2FyeShib29sIGZvcmNlKQogICAgIGJvb2wg
cmVzZXQgPSBmb3JjZTsKICAgICAvLyBUaGlzIGZpbHRlcmluZyB3b3JrcyBhcm91bmQgZ3JhcGhp
Y3MgZHJpdmVyIGJ1Z3Mgb24gTWFjIE9TIFguCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2RyYXdCdWZmZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2RyYXdCdWZmZXJzW2ld
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FICYmIGdldEF0dGFjaG1lbnQobV9kcmF3QnVmZmVy
c1tpXSkpIHsKKyAgICAgICAgaWYgKG1fZHJhd0J1ZmZlcnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0
R0w6Ok5PTkUgJiYgZ2V0QXR0YWNobWVudChtX2RyYXdCdWZmZXJzW2ldKSkgewogICAgICAgICAg
ICAgaWYgKG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSAhPSBtX2RyYXdCdWZmZXJzW2ldKSB7CiAg
ICAgICAgICAgICAgICAgbV9maWx0ZXJlZERyYXdCdWZmZXJzW2ldID0gbV9kcmF3QnVmZmVyc1tp
XTsKICAgICAgICAgICAgICAgICByZXNldCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9maWx0ZXJlZERyYXdCdWZmZXJzW2ldICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpOT05FKSB7Ci0gICAgICAgICAgICAgICAgbV9maWx0ZXJlZERyYXdC
dWZmZXJzW2ldID0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7CisgICAgICAgICAgICBpZiAobV9m
aWx0ZXJlZERyYXdCdWZmZXJzW2ldICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKSB7CisgICAg
ICAgICAgICAgICAgbV9maWx0ZXJlZERyYXdCdWZmZXJzW2ldID0gR3JhcGhpY3NDb250ZXh0R0w6
Ok5PTkU7CiAgICAgICAgICAgICAgICAgcmVzZXQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIGlmIChyZXNldCkgewotICAgICAgICBjb250ZXh0KCktPmdyYXBo
aWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5kcmF3QnVmZmVyc0VYVCgKKyAgICAgICAg
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZHJhd0J1ZmZl
cnNFWFQoCiAgICAgICAgICAgICBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnMuc2l6ZSgpLCBtX2ZpbHRl
cmVkRHJhd0J1ZmZlcnMuZGF0YSgpKTsKICAgICB9CiB9CiAKIEdDM0RlbnVtIFdlYkdMRnJhbWVi
dWZmZXI6OmdldERyYXdCdWZmZXIoR0MzRGVudW0gZHJhd0J1ZmZlcikKIHsKLSAgICBpbnQgaW5k
ZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRyYXdCdWZmZXIgLSBFeHRlbnNpb25zM0Q6OkRSQVdfQlVG
RkVSMF9FWFQpOworICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oZHJhd0J1ZmZlciAt
IEV4dGVuc2lvbnNHTDo6RFJBV19CVUZGRVIwX0VYVCk7CiAgICAgQVNTRVJUKGluZGV4ID49IDAp
OwogICAgIGlmIChpbmRleCA8IHN0YXRpY19jYXN0PGludD4obV9kcmF3QnVmZmVycy5zaXplKCkp
KQogICAgICAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1tpbmRleF07Ci0gICAgaWYgKGRyYXdCdWZm
ZXIgPT0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUKQotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOwotICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9ORTsKKyAgICBpZiAoZHJhd0J1ZmZlciA9PSBFeHRlbnNpb25zR0w6OkRSQVdf
QlVGRkVSMF9FWFQpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRU
QUNITUVOVDA7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKaW5kZXggZWUw
YTk0MzFiNzA3MTZkOWJjNzBmYWQwYjE5YjBjNWUzOGQxNjRiYS4uOGI0Yjk1YWJjOTUzMWRiNzll
MzI1ZDM1ZWNiNmRjNmVjMDc1Yzg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaApAQCAtNTIsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJ
bml0aWFsaXplZCgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEluaXRpYWxp
emVkKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRl
eHQzRCopID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHQz
RCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVuYXR0
YWNoKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopID0gMDsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdD
M0RlbnVtIGF0dGFjaG1lbnQpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVuYXR0YWNoKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0YWNobWVudCkgPSAwOwogCiAgICAg
cHJvdGVjdGVkOgogICAgICAgICBXZWJHTEF0dGFjaG1lbnQoKTsKQEAgLTgyLDcgKzgyLDcgQEAg
cHVibGljOgogICAgIC8vIFJldHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21w
bGV0ZTsgb3RoZXJ3aXNlIGluaXRpYWxpemUKICAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhh
dmVuJ3QgYmVlbiBpbml0aWFsaXplZCBhbmQKICAgICAvLyBuZWVkVG9Jbml0aWFsaXplQXR0YWNo
bWVudHMgaXMgdHJ1ZS4KLSAgICBib29sIG9uQWNjZXNzKEdyYXBoaWNzQ29udGV4dDNEKiwgY29u
c3QgY2hhcioqIHJlYXNvbik7CisgICAgYm9vbCBvbkFjY2VzcyhHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCosIGNvbnN0IGNoYXIqKiByZWFzb24pOwogCiAgICAgLy8gU29mdHdhcmUgdmVyc2lvbiBv
ZiBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoKSwgZXhjZXB0IHRoYXQgd2hlbgogICAgIC8vIEZS
QU1FQlVGRkVSX0NPTVBMRVRFIGlzIHJldHVybmVkLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSBmb3IK
QEAgLTEwNCwxMyArMTA0LDEzIEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTEZyYW1l
YnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdMQXR0YWNobWVudCog
Z2V0QXR0YWNobWVudChHQzNEZW51bSkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYg
ZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZS4KLSAgICBib29sIGluaXRpYWxpemVBdHRhY2htZW50
cyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqKiByZWFzb24pOworICAgIGJvb2wgaW5p
dGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgY29uc3QgY2hhcioq
IHJlYXNvbik7CiAKICAgICAvLyBDaGVjayBpZiB0aGUgZnJhbWVidWZmZXIgaXMgY3VycmVudGx5
IGJvdW5kLgogICAgIGJvb2wgaXNCb3VuZCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xPYmplY3QuY3BwCmluZGV4IDQ4ZjkzOWUwZGE4ZjRlMzJjODIyZDI5MTIxMjRm
ZmNiZTRlNWFhOTkuLmFmMjg0OWNkODk4M2FkYTc3YmI5Y2QzNDViMjM4ZGVhMTYxYjZiZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKQEAgLTQ0LDcgKzQ0
LDcgQEAgdm9pZCBXZWJHTE9iamVjdDo6c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQogICAgIG1fb2JqZWN0ID0gb2JqZWN0OwogfQogCi12b2lkIFdlYkdMT2JqZWN0OjpkZWxldGVP
YmplY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKK3ZvaWQgV2ViR0xPYmplY3Q6OmRl
bGV0ZU9iamVjdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkKQogewogICAgIG1f
ZGVsZXRlZCA9IHRydWU7CiAgICAgaWYgKCFtX29iamVjdCkKQEAgLTU1LDcgKzU1LDcgQEAgdm9p
ZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2Qp
CiAKICAgICBpZiAoIW1fYXR0YWNobWVudENvdW50KSB7CiAgICAgICAgIGlmICghY29udGV4dDNk
KQotICAgICAgICAgICAgY29udGV4dDNkID0gZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAg
ICAgICAgICBjb250ZXh0M2QgPSBnZXRBR3JhcGhpY3NDb250ZXh0R0woKTsKIAogICAgICAgICBp
ZiAoY29udGV4dDNkKQogICAgICAgICAgICAgZGVsZXRlT2JqZWN0SW1wbChjb250ZXh0M2QsIG1f
b2JqZWN0KTsKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBXZWJHTE9iamVjdDo6ZGV0YWNoKCkKICAg
ICBtX2F0dGFjaG1lbnRDb3VudCA9IDA7IC8vIE1ha2Ugc3VyZSBPcGVuR0wgcmVzb3VyY2UgaXMg
ZGVsZXRlZC4KIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6b25EZXRhY2hlZChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNkKQordm9pZCBXZWJHTE9iamVjdDo6b25EZXRhY2hlZChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogY29udGV4dDNkKQogewogICAgIGlmIChtX2F0dGFjaG1lbnRDb3VudCkK
ICAgICAgICAgLS1tX2F0dGFjaG1lbnRDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTE9iamVjdC5oCmluZGV4IDBkYTVkNzE4ZDZjYjVjMjViNDFmYTI2NDQ4MGU0ZjgzYWQ0MTc2
MjMuLjQ5MjRmZjhhMThmNWQyY2MyMTIzYzBlOWFmODQxOGMzZGJhMjM4ZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBXZWJHTENvbnRleHRHcm91cDsKIGNsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKQEAgLTQ1LDEwICs0NSwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gZGVsZXRlT2JqZWN0IG1heSBub3QgYWx3YXlzIGRlbGV0ZSB0aGUgT3BlbkdMIHJlc291cmNl
LiAgRm9yIHByb2dyYW1zIGFuZAogICAgIC8vIHNoYWRlcnMsIGRlbGV0aW9uIGlzIGRlbGF5ZWQg
dW50aWwgdGhleSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkLgogICAgIC8vIEZJWE1FOiByZXZpc2l0
IHRoaXMgd2hlbiByZXNvdXJjZSBzaGFyaW5nIGJldHdlZW4gY29udGV4dHMgYXJlIGltcGxlbWVu
dGVkLgotICAgIHZvaWQgZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdm9p
ZCBkZWxldGVPYmplY3QoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKIAogICAgIHZvaWQgb25B
dHRhY2hlZCgpIHsgKyttX2F0dGFjaG1lbnRDb3VudDsgfQotICAgIHZvaWQgb25EZXRhY2hlZChH
cmFwaGljc0NvbnRleHQzRCopOworICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCopOwogCiAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpZW50IHNp
ZGUgaXNzdWUgYSBkZWxldGUgY2FsbCBhbHJlYWR5LCBub3QKICAgICAvLyB3aGV0aGVyIHRoZSBP
cGVuR0wgcmVzb3VyY2UgaXMgZGVsZXRlZC4KQEAgLTY1LDEzICs2NSwxMyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICAvLyBkZWxldGVP
YmplY3RJbXBsIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIHRvIGRlbGV0ZSB0aGUgT3BlbkdM
IHJlc291cmNlLgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29u
dGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgPSAw
OwogCiAgICAgdmlydHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29uc3QgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogCi0gICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQz
RCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqIGdldEFHcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0ID0gMDsKIAog
cHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2JqZWN0IHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKaW5kZXggZGVlYWM3NTBmNGZkYTI0
M2U2YTM3MTY2ZWY0M2E5MWE5YjQzZmQ1OC4uM2VmZWZmYmExMDNhN2E5ZmYwZTIxYTNlMTZmNmFk
Y2NkNDc3MzhmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCkBAIC03MCw3ICs3MCw3IEBAIFdlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICAgICAgaW5zdGFuY2VzKGxvY2spLmFkZCh0aGlz
LCAmY3R4KTsKICAgICB9CiAKLSAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmNyZWF0ZVByb2dyYW0oKSk7CisgICAgc2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRleHRHTCgp
LT5jcmVhdGVQcm9ncmFtKCkpOwogfQogCiBXZWJHTFByb2dyYW06On5XZWJHTFByb2dyYW0oKQpA
QCAtOTMsNyArOTMsNyBAQCB2b2lkIFdlYkdMUHJvZ3JhbTo6Y29udGV4dERlc3Ryb3llZCgpCiAg
ICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6OmNvbnRleHREZXN0cm95ZWQoKTsKIH0KIAot
dm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmopCit2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRl
T2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNE
T2JqZWN0IG9iaikKIHsKICAgICBjb250ZXh0M2QtPmRlbGV0ZVByb2dyYW0ob2JqKTsKICAgICBp
ZiAobV92ZXJ0ZXhTaGFkZXIpIHsKQEAgLTE1MSw5ICsxNTEsOSBAQCB2b2lkIFdlYkdMUHJvZ3Jh
bTo6aW5jcmVhc2VMaW5rQ291bnQoKQogV2ViR0xTaGFkZXIqIFdlYkdMUHJvZ3JhbTo6Z2V0QXR0
YWNoZWRTaGFkZXIoR0MzRGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlZFUlRFWF9TSEFERVI6CiAgICAgICAgIHJldHVybiBtX3ZlcnRleFNoYWRlci5n
ZXQoKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSOgogICAgICAgICByZXR1cm4g
bV9mcmFnbWVudFNoYWRlci5nZXQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsK
QEAgLTE2NSwxMiArMTY1LDEyIEBAIGJvb2wgV2ViR0xQcm9ncmFtOjphdHRhY2hTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKICAgICBpZiAoIXNoYWRlciB8fCAhc2hhZGVyLT5vYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN3aXRjaCAoc2hhZGVyLT5nZXRUeXBlKCkpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVI6CiAgICAgICAgIGlmIChtX3ZlcnRleFNoYWRl
cikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV92ZXJ0ZXhTaGFkZXIgPSBz
aGFkZXI7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQUdNRU5UX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9T
SEFERVI6CiAgICAgICAgIGlmIChtX2ZyYWdtZW50U2hhZGVyKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBtX2ZyYWdtZW50U2hhZGVyID0gc2hhZGVyOwpAQCAtMTg1LDEyICsx
ODUsMTIgQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihXZWJHTFNoYWRlciogc2hh
ZGVyKQogICAgIGlmICghc2hhZGVyIHx8ICFzaGFkZXItPm9iamVjdCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgc3dpdGNoIChzaGFkZXItPmdldFR5cGUoKSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VkVSVEVYX1NIQURFUjoKICAgICAgICAgaWYgKG1fdmVydGV4U2hhZGVyICE9IHNoYWRlcikK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV92ZXJ0ZXhTaGFkZXIgPSBudWxs
cHRyOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFHTUVOVF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hB
REVSOgogICAgICAgICBpZiAobV9mcmFnbWVudFNoYWRlciAhPSBzaGFkZXIpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBudWxscHRyOwpAQCAt
MjAwLDE1ICsyMDAsMTUgQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRlcihXZWJHTFNo
YWRlciogc2hhZGVyKQogICAgIH0KIH0KIAotdm9pZCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZl
QXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCit2b2lkIFdlYkdM
UHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQzZCkKIHsKICAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5jbGVhcigpOwog
CiAgICAgR0MzRGludCBudW1BdHRyaWJzID0gMDsKLSAgICBjb250ZXh0M2QtPmdldFByb2dyYW1p
dihvYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVTLCAmbnVtQXR0
cmlicyk7CisgICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29u
dGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJpYnMpOwogICAgIG1fYWN0aXZlQXR0
cmliTG9jYXRpb25zLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KG51bUF0dHJpYnMpKTsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dHJpYnM7ICsraSkgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRDo6QWN0aXZlSW5mbyBpbmZvOworICAgICAgICBHcmFwaGljc0NvbnRleHRHTDo6
QWN0aXZlSW5mbyBpbmZvOwogICAgICAgICBjb250ZXh0M2QtPmdldEFjdGl2ZUF0dHJpYkltcGwo
b2JqZWN0KCksIGksIGluZm8pOwogICAgICAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uc1tpXSA9
IGNvbnRleHQzZC0+Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0KCksIGluZm8ubmFtZSk7CiAgICAg
fQpAQCAtMjIyLDExICsyMjIsMTEgQEAgdm9pZCBXZWJHTFByb2dyYW06OmNhY2hlSW5mb0lmTmVl
ZGVkKCkKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCA9IGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0ID0gZ2V0QUdyYXBoaWNzQ29udGV4dEdMKCk7CiAg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgR0MzRGludCBsaW5rU3RhdHVz
ID0gMDsKLSAgICBjb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOworICAgIGNvbnRleHQtPmdldFByb2dyYW1p
dihvYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTktfU1RBVFVTLCAmbGlua1N0YXR1cyk7
CiAgICAgbV9saW5rU3RhdHVzID0gbGlua1N0YXR1czsKICAgICBpZiAobV9saW5rU3RhdHVzKQog
ICAgICAgICBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhjb250ZXh0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKaW5kZXggM2UwODJmYzJkZGJjMTE5ZWIyMzVk
YjY1YmU1OTU5MGMzM2E0MzUwNC4uODliNDYwYzA2NzBmMmVlYjU4YTQ0ODM0NzVmYmExMDY5NDU2
OGM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKQEAgLTcz
LDEwICs3MywxMCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xQcm9ncmFtKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFw
aGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIHZvaWQgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlv
bnMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2b2lkIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRp
b25zKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKik7CiAgICAgdm9pZCBjYWNoZUluZm9JZk5lZWRl
ZCgpOwogCiAgICAgVmVjdG9yPEdDM0RpbnQ+IG1fYWN0aXZlQXR0cmliTG9jYXRpb25zOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmNwcAppbmRleCA4Y2E1MjUxMTU3MzUw
MTU0NWFjNTVmNWU5NDFlYWE1YTgwNDNiZWFmLi5jYjY0NDUyMjI3MzQ2NTA1NzJjYmI1NjAzMzM3
YjlmMmY0NWQ5NjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmNw
cApAQCAtNDYsMTQgKzQ2LDE0IEBAIFdlYkdMUXVlcnk6On5XZWJHTFF1ZXJ5KCkKIFdlYkdMUXVl
cnk6OldlYkdMUXVlcnkoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgIDogV2Vi
R0xTaGFyZWRPYmplY3QoY3R4KQogewotICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVF1ZXJ5IGZy
b20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8gRklYTUU6IENhbGwgY3JlYXRlUXVlcnkgZnJv
bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIH0KIAotdm9pZCBXZWJHTFF1ZXJ5OjpkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0KQordm9pZCBXZWJHTFF1ZXJ5OjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShjb250ZXh0M2QpOwogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIC8v
IEZJWE1FOiBDYWxsIGRlbGV0ZVF1ZXJ5IGZyb20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8g
RklYTUU6IENhbGwgZGVsZXRlUXVlcnkgZnJvbSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5oCmluZGV4IGZkNjQ0ZDI0
YzEyODFjOWMxOThlMmY1YWY5MTUyZWM4NDYxNWIzNjUuLjA4N2MwNDExZjk2MzliMzIxMmE4ODU2
NjUyYWJhMWFiMTJjNTEzY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5
LmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQg
V2ViR0xRdWVyeShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7Ci0gICAgdm9pZCBkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKaW5k
ZXggNjk5NmQ5YjFkYTkzMGYzYTJiYWJhMjMwZTQ5MmMwZDc4NGE3Y2QxOS4uMDZlZTA3YjU3M2Zm
NTc2Y2ZjYWM0NDczOGEzZjZjYzVjMjQzODg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcApAQCAtNDYsMTcgKzQ2LDE3IEBAIFdlYkdM
UmVuZGVyYnVmZmVyOjp+V2ViR0xSZW5kZXJidWZmZXIoKQogCiBXZWJHTFJlbmRlcmJ1ZmZlcjo6
V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgIDog
V2ViR0xTaGFyZWRPYmplY3QoY3R4KQotICAgICwgbV9pbnRlcm5hbEZvcm1hdChHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTQpCisgICAgLCBtX2ludGVybmFsRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBNCkKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCiAgICAgLCBtX3dpZHRoKDApCiAg
ICAgLCBtX2hlaWdodCgwKQogICAgICwgbV9pc1ZhbGlkKHRydWUpCiAgICAgLCBtX2hhc0V2ZXJC
ZWVuQm91bmQoZmFsc2UpCiB7Ci0gICAgc2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRleHQzRCgp
LT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CisgICAgc2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRl
eHRHTCgpLT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJidWZm
ZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZv
cm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMUmVuZGVyYnVmZmVyOjpkZWxldGVPYmplY3RJ
bXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0KQogewogICAgIGNvbnRleHQzZC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG9iamVjdCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAppbmRl
eCAzN2E5MzhlMzNhNjJkMTQ3MTUxY2RhOGJkNmMzNzRjNDcwZjFmZTEwLi5jMjgwMjdlNmZlMzc4
NzZjMGNmOWQ0MTdiZDY0YzJlZGNjOTkzOTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogcHJv
dGVjdGVkOgogICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Um
KTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwogCiBwcml2YXRl
OgogICAgIGJvb2wgaXNSZW5kZXJidWZmZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAppbmRleCAzYTUwZmZjMGUwZTQ4NzMzYmZkNGJlMGY0ZDI2N2ZhYjhlNmZhOWQ5
Li4yODQzZDQ2MTZhZjFlMjU0MWJiMWVmMTczNjc5MTM0MWYyN2YzNmQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAg
LTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCiAjaW5jbHVk
ZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCiAjaW5jbHVkZSAiRVhUc1JHQi5oIgot
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KTsKIAotc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBHcmFwaGljc0Nv
bnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNh
bnZhcywgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiB7CiAgICAgYXV0
byByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4
dD4obmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKIApAQCAt
ODEsNyArODEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJgogICAgIHJldHVybiByZW5kZXJp
bmdDb250ZXh0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFw
aGljc0NvbnRleHQzRD4mJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0
cmlidXRlcykKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogewogICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBX
VEZNb3ZlKGNvbnRleHQpLCBhdHRyaWJ1dGVzKSk7CiAKQEAgLTkwLDEyICs5MCwxMiBAQCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZShDYW52YXNCYXNlJgogICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogfQogCi1X
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiBj
YW52YXMsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzLCBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICA6IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UoY2FudmFzLCBhdHRyaWJ1dGVzKQogewogfQogCi1XZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxH
cmFwaGljc0NvbnRleHQzRD4mJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMg
YXR0cmlidXRlcykKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
KENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmIGNvbnRl
eHQsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZShjYW52YXMsIFdURk1vdmUoY29udGV4dCksIGF0dHJpYnV0ZXMp
CiB7CiAgICAgaW5pdGlhbGl6ZVZlcnRleEFycmF5T2JqZWN0cygpOwpAQCAtMjUxLDU4ICsyNTEs
NTggQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgCiAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
ciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGF1dG8gb2JqZWN0ID0gbWFrZVJlZlB0cihtX2Zy
YW1lYnVmZmVyQmluZGluZy0+Z2V0QXR0YWNobWVudE9iamVjdChhdHRhY2htZW50KSk7CiAgICAg
aWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAgICAgIGlm
IChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhp
Y3NDb250ZXh0R0w6Ok5PTkUpOwogICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJ
TlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCiAgICAgICAgIC8vIHNw
ZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkp
IHsKICAgICAgICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFKTsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKICAgICAgICAg
ICAgIHJldHVybiBtYWtlUmVmUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlJj4oKm9i
amVjdCkpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX1RFWFRVUkVfTEVWRUw6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQ6
IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9URVhUVVJFX0xFVkVMOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CiAg
ICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFt
ZSwgJnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQogICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSBmb3IgdGV4dHVyZSBhdHRhY2htZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChvYmplY3QtPmlzUmVuZGVy
YnVmZmVyKCkpOwogICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSKTsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfTkFNRToKICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXImPigqb2JqZWN0KSk7Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19F
WFQ6IHsKICAgICAgICAgICAgIGlmICghbV9leHRzUkdCKSB7Ci0gICAgICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciBy
ZW5kZXJidWZmZXIgYXR0YWNobWVudCIpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVy
IGF0dGFjaG1lbnQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gcmVuZGVyQnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdC5nZXQoKSk7CiAg
ICAgICAgICAgICBHQzNEZW51bSByZW5kZXJCdWZmZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0
ICE9IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQgJiYgcmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVu
c2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpOwotICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZv
cm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihFeHRlbnNpb25zM0Q6OlNSR0JfRVhUKTsKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVu
c2lvbnNHTDo6U1JHQl9FWFQgJiYgcmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnNHTDo6
U1JHQl9BTFBIQV9FWFQpOworICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBF
eHRlbnNpb25zR0w6OlNSR0I4X0FMUEhBOF9FWFQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihFeHRlbnNpb25zR0w6OlNSR0JfRVhUKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7
CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVy
IGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEwLDI0
ICszMTAsMjQgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2UKIAogYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKIHsKLSAg
ICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gRklYTUU6IFdoeSBkb2Vz
IHRoaXMgcmV0dXJuIHRydWUgdW5jb25kaXRpb25hbGx5IGZvciBDT0xPUl9BVFRBQ0hNRU5UMCwK
ICAgICAvLyBidXQgZmFsc2UgZm9yIG90aGVyIENPTE9SX0FUVEFDSE1FTlQgdmFsdWVzIGlmIG1f
d2ViZ2xEcmF3QnVmZmVycyBpcyBmYWxzZT8KICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09M
T1JfQVRUQUNITUVOVDA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNI
TUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBpZiAobV93ZWJnbERyYXdC
dWZmZXJzCi0gICAgICAgICAgICAmJiBhdHRhY2htZW50ID49IEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMAotICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0
PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhD
b2xvckF0dGFjaG1lbnRzKCkpKQorICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+PSBHcmFwaGlj
c0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAKKyAgICAgICAgICAgICYmIGF0dGFjaG1lbnQg
PCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1F
TlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCBhdHRhY2htZW50Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9
CkBAIC0zMzYsMjUgKzMzNiwyNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVy
YnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybgogewogICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAodGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZl
clN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52
YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fcmVuZGVy
YnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJT
dG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9O
RU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1
NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChpbnRlcm5hbGZv
cm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQgJiYgIW1fZXh0c1JHQikgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNURU5DSUxfSU5ERVg4OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpT
UkdCOF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9u
c0dMOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNSR0IpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFy
Z2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CkBAIC0zNjIsMTUgKzM2MiwxNSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybgogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmct
PnNldElzVmFsaWQodHJ1ZSk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9T
VEVOQ0lMOgogICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSkKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6
REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRlbnNpb25zR0w6OkRFUFRIMjRfU1RFTkNJ
TDgsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNp
emUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNW
YWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJu
YWxmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZv
cm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsK
QEAgLTM4MiwxNiArMzgyLDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wg
aXNWYWxpZCA9IGZhbHNlOwogICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CiAgICAgICAgIGlzVmFsaWQgPSB0cnVlOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklW
QVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzCiAgICAgICAgIGlmIChtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMp
CiAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGlmICghaXNWYWxpZCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiaGludCIs
ICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4
dC0+aGludCh0YXJnZXQsIG1vZGUpOwpAQCAtNDAxLDEzICs0MDEsMTMgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQogewogICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4o
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiY2xlYXIiLCAiaW52YWxpZCBtYXNrIik7CisgICAgaWYgKG1hc2sgJiB+KEdyYXBo
aWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKICAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vzcyht
X2NvbnRleHQuZ2V0KCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwg
cmVhc29uKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQobWFzaykpCkBAIC00MjEs
MjQzICs0MjEsMjQzIEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVEVYVFVSRToKICAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xG
bG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQV9CSVRT
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBX0JJVFM6CiAgICAgICAgIGlmICgh
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5hbHBoYSkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVJfQklORElORzoKICAgICAgICAgcmV0dXJuIG1f
Ym91bmRBcnJheUJ1ZmZlcjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NP
TE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0NPTE9SOgogICAgICAgICBy
ZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6QkxFTkRfRFNUX0FMUEhBOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRFNUX1JHQjoKICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORF9FUVVBVElPTl9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpC
TEVORF9FUVVBVElPTl9BTFBIQToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9S
R0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRVFVQVRJT05fUkdCOgogICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpCTEVORF9TUkNfQUxQSEE6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX1JHQjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9TUkNfUkdCOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTFVFX0JJVFM6
CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkNPTE9SX0NMRUFSX1ZBTFVFOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklU
RU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfV1JJVEVNQVNLOgogICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKICAgICAgICAgcmV0
dXJuIFVpbnQzMkFycmF5Ojp0cnlDcmVhdGUobV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuZGF0
YSgpLCBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5zaXplKCkpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDVUxM
X0ZBQ0U6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0VfTU9ERToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpDVUxMX0ZBQ0VfTU9ERToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BS
T0dSQU06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VSUkVOVF9QUk9HUkFNOgogICAg
ICAgICByZXR1cm4gbV9jdXJyZW50UHJvZ3JhbTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0JJVFM6CiAg
ICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DTEVBUl9WQUxVRToKICAgICAgICAgcmV0
dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9GVU5DOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0ZVTkM6CiAg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfUkFOR0U6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfVEVTVDoKICAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1dSSVRFTUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9XUklURU1BU0s6
CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RElU
SEVSOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgogICAg
ICAgICByZXR1cm4gbWFrZVJlZlB0cihtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0JJTkRJ
Tkc6CiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZS
T05UX0ZBQ0U6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CiAgICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6R1JFRU5fQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpHUkVFTl9C
SVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoK
ICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElORV9XSURUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FX1dJRFRIOgog
ICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOgogICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVO
VF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKICAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RFWFRVUkVfU0laRToKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhf
VkFSWUlOR19WRUNUT1JTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlM6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgogICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VO
SUZPUk1fVkVDVE9SUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX1VO
SUZPUk1fVkVDVE9SUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6TUFYX1ZJRVdQT1JUX0RJTVM6CiAgICAgICAgIHJldHVybiBnZXRX
ZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBBQ0tfQUxJR05NRU5UOgogICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQ
T0xZR09OX09GRlNFVF9GQUNUT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9MWUdP
Tl9PRkZTRVRfRkFDVE9SOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZJTEw6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKICAgICAgICAgcmV0
dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlBPTFlHT05fT0ZGU0VUX1VOSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBP
TFlHT05fT0ZGU0VUX1VOSVRTOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9CSVRTOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJFRF9CSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQklORElO
RzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfQklORElORzoKICAg
ICAgICAgcmV0dXJuIG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJFUjoK
ICAgICAgICAgcmV0dXJuICJXZWJLaXQgV2ViR0wiX3N0cjsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVfQlVGRkVSUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1Q
TEVfQlVGRkVSUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX0lOVkVSVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgogICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNB
TVBMRV9DT1ZFUkFHRV9WQUxVRToKICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVTOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNBTVBMRVM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfQk9YOgogICAgICAgICByZXR1cm4gZ2V0V2Vi
R0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVDoK
ICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgcmV0dXJu
ICJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29u
dGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GQUlMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKKyAgICAgICAgcmV0dXJuICJXZWJHTCBHTFNM
IEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dEdMOjpTSEFE
SU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUxfQkFDS19GQUlMOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GVU5D
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19GVU5DOgogICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKICAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CiAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CQUNLX1JFRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lM
X0JBQ0tfUkVGOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKICAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUxfQkFDS19XUklURU1BU0s6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9C
SVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQklUUzoKICAgICAgICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgogICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0ZBSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9GQUlMOgog
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTVEVOQ0lMX0ZVTkM6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9QQVNTX0RFUFRI
X0ZBSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9QQVNTX0RFUFRIX0ZB
SUw6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6CiAgICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9SRUY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJ
TF9SRUY6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTVEVOQ0lMX1RFU1Q6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZBTFVFX01BU0s6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9WQUxVRV9NQVNLOgogICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUxfV1JJVEVNQVNLOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1VCUElYRUxfQklUUzoKICAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9CSU5ESU5HXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQklO
RElOR18yRDoKICAgICAgICAgcmV0dXJuIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVu
aXRdLnRleHR1cmUyREJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9CSU5ESU5HX0NVQkVfTUFQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
QklORElOR19DVUJFX01BUDoKICAgICAgICAgcmV0dXJuIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZl
VGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZzsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
UEFDS19BTElHTk1FTlQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKICAgICAgICAgcmV0dXJu
IG1fdW5wYWNrRmxpcFk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19Q
UkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKICAgICAgICAgcmV0dXJuIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9D
T05WRVJTSU9OX1dFQkdMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19DT0xP
UlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6CiAgICAgICAgIHJldHVybiBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRU5ET1I6CiAgICAgICAgIHJldHVybiAiV2ViS2l0Il9z
dHI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpWRVJTSU9OOgogICAgICAgICByZXR1cm4gIldlYkdMIDEuMCJfc3RyOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlZJRVdQT1JUOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcwogICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVz
KQotICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMz
RDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOwotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBub3Qg
ZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4
dGVuc2lvbnNHTDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIFdl
YkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMOgogICAgICAgICBp
ZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAgICAgICAgIHJldHVybiAiQXBwbGUgR1BVIl9zdHI7CiAjZWxzZQotICAgICAgICAgICAg
cmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUik7
CisgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0
R0w6OlJFTkRFUkVSKTsKICNlbmRpZgogICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxl
ZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2Rl
YnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1JfV0VCR0w6
CiAgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUik7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVy
ZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dEdMOjpWRU5ET1IpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJs
ZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZF
UlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6VkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4
X2FycmF5X29iamVjdAogICAgICAgICBpZiAobV9vZXNWZXJ0ZXhBcnJheU9iamVjdCkgewogICAg
ICAgICAgICAgaWYgKG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+aXNEZWZhdWx0T2JqZWN0KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICByZXR1cm4gbWFr
ZVJlZlB0cihzdGF0aWNfY2FzdDxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTJj4oKm1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdCkpOwogICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSwgT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qgbm90IGVuYWJsZWQiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2Fy
cmF5X29iamVjdCBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRf
dGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6TUFYX1RF
WFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMKICAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKQotICAgICAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRV
UkVfTUFYX0FOSVNPVFJPUFlfRVhUKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsK
KyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zR0w6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJFR0lOCisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQ6IC8vIEVYVF9k
cmF3X2J1ZmZlcnMgQkVHSU4KICAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycykKICAgICAg
ICAgICAgIHJldHVybiBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCk7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVk
Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJh
d19idWZmZXJzIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6CiAgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZl
cnMpCiAgICAgICAgICAgICByZXR1cm4gZ2V0TWF4RHJhd0J1ZmZlcnMoKTsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVu
YWJsZWQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJH
TF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwotICAgICAgICAgICAg
JiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUCi0gICAgICAgICAgICAm
JiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVS
MF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgewotICAgICAgICAgICAgR0MzRGludCB2YWx1
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgICAgICAgICAgJiYgcG5hbWUgPj0gRXh0
ZW5zaW9uc0dMOjpEUkFXX0JVRkZFUjBfRVhUCisgICAgICAgICAgICAmJiBwbmFtZSA8IHN0YXRp
Y19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zR0w6OkRSQVdfQlVGRkVSMF9FWFQgKyBnZXRNYXhE
cmF3QnVmZmVycygpKSkgeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpOT05FOwogICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAg
ICAgICAgICAgICAgIHZhbHVlID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIo
cG5hbWUpOwogICAgICAgICAgICAgZWxzZSAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCiAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBtX2JhY2tEcmF3QnVmZmVyOwogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwogICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQpAQCAtNjY3LDkgKzY2Nyw5IEBAIEdDM0RpbnQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycygpCiAgICAgaWYgKCFzdXBw
b3J0c0RyYXdCdWZmZXJzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghbV9tYXhEcmF3
QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1B
WF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3QnVmZmVycyk7CisgICAgICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4
RHJhd0J1ZmZlcnMpOwogICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRzKQotICAgICAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRT
X0VYVCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xv
ckF0dGFjaG1lbnRzKTsKICAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVxdWlyZXMgTUFYX0NP
TE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCiAgICAgcmV0dXJuIHN0ZDo6bWlu
KG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7CiB9CkBAIC02NzksNyAr
Njc5LDcgQEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNo
bWVudHMoKQogICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQogICAgICAgICByZXR1cm4g
MDsKICAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21h
eENvbG9yQXR0YWNobWVudHMpOworICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVu
c2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2htZW50
cyk7CiAgICAgcmV0dXJuIG1fbWF4Q29sb3JBdHRhY2htZW50czsKIH0KICAgICAKQEAgLTcwNywy
MCArNzA3LDIwIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduCiAgICAgaWYgKCFtYXhJbmRleCkg
ewogICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVm
ZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KICAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURTogewogICAgICAgICAgICAg
Y29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVieXRlKj4oYnVmZmVy
LT5kYXRhKCkpOwogICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1F
bGVtZW50czsgaSsrKQogICAgICAgICAgICAgICAgIG1heEluZGV4ID0gbWF4SW5kZXggPyBzdGQ6
Om1heChtYXhJbmRleC52YWx1ZSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocFtpXSkpIDogc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHBbaV0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6IHsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6IHsKICAgICAgICAgICAg
IG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdXNob3J0KTsKICAgICAgICAgICAgIGNvbnN0IEdD
M0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRh
KCkpOwogICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50
czsgaSsrKQogICAgICAgICAgICAgICAgIG1heEluZGV4ID0gbWF4SW5kZXggPyBzdGQ6Om1heCht
YXhJbmRleC52YWx1ZSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocFtpXSkpIDogc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHBbaV0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOiB7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDogewogICAgICAgICAgICAgaWYgKCFtX29l
c0VsZW1lbnRJbmRleFVpbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKQEAgLTc1MSwxOSArNzUxLDE5
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2
YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
bW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGVU5DX0FERDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6TUlOX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0VY
VDoKLSAgICAgICAgaWYgKChtb2RlID09IEV4dGVuc2lvbnMzRDo6TUlOX0VYVCB8fCBtb2RlID09
IEV4dGVuc2lvbnMzRDo6TUFYX0VYVCkgJiYgIW1fZXh0QmxlbmRNaW5NYXgpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkZVTkNfQUREOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZVTkNfU1VCVFJBQ1Q6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpNSU5fRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpNQVhfRVhU
OgorICAgICAgICBpZiAoKG1vZGUgPT0gRXh0ZW5zaW9uc0dMOjpNSU5fRVhUIHx8IG1vZGUgPT0g
RXh0ZW5zaW9uc0dMOjpNQVhfRVhUKSAmJiAhbV9leHRCbGVuZE1pbk1heCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIG1vZGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KQEAgLTc3MSwx
OCArNzcxLDE4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1
YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNECiBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gY2FwKQogewogICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RElUSEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZG
U0VUX0ZJTEw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0FMUEhBX1RPX0NP
VkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJM
RU5EOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVTExfRkFDRToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9GSUxM
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUxfVEVTVDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgY2FwYWJpbGl0eSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApp
bmRleCBiMjE0ZDQzNjE4YTMzZjRiYTdmNDg5ZjAyZjdmNjliYjc1MTIyZTRlLi5lOGUzNjg4ODI4
YjZmNTBiY2RiYjA1NmQ5MzAwYTE0MzJmODAxODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzUsOCArMzUsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBw
dWJsaWMgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIEdyYXBo
aWNzQ29udGV4dDNEQXR0cmlidXRlcyk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4
dDNEPiYmLCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMpOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMPiYmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwogCiAgICAgYm9vbCBp
c1dlYkdMMSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNTgsOCArNTgsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBjYXApIGZpbmFsOwogCiBwcml2YXRlOgotICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dChDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzKTsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHQz
RD4mJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzKTsKKyAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w+JiYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDc5YTU1ZTJjYjc3Nzc3MDdiZmMzODliMWQ4
M2MzMGJhZTJiZDczMWUuLjBjMmZjODRiZmMwNmJkZjRkOGRjMzZjNzVkOWI5OWI2ZGJmZDIzZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiRVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljLmgiCiAjaW5jbHVkZSAiRVhUc1JHQi5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNp
b25zR0wuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTM5MywzNyArMzkzLDM3IEBAIHByaXZh
dGU6CiAgICAgICAgIGlmICghbV9wcm9ncmFtIHx8IExJS0VMWSghSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjppc1dlYkdMUHJvZ3JhbUhpZ2hsaWdodGVkKG1fY29udGV4dCwgKm1fcHJvZ3JhbSkp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChoYXNCdWZmZXJCaW5kaW5nKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HKSkgewotICAgICAgICAgICAgaWYg
KCFoYXNCdWZmZXJCaW5kaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQklORElO
RykpCisgICAgICAgIGlmIChoYXNCdWZmZXJCaW5kaW5nKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUl9CSU5ESU5HKSkgeworICAgICAgICAgICAgaWYgKCFoYXNCdWZmZXJCaW5kaW5nKEdy
YXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfQklORElORykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVyQXR0YWNobWVu
dChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCkpCisgICAgICAgICAgICBpZiAo
aGFzRnJhbWVidWZmZXJQYXJhbWV0ZXJBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9BVFRBQ0hNRU5UKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAo
aGFzRnJhbWVidWZmZXJQYXJhbWV0ZXJBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQpKQorICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVy
QXR0YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAgICAgICAgIGlmICho
YXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1NURU5DSUxfQVRUQUNITUVOVCkpCisgICAgICAgICAgICBpZiAoaGFzRnJhbWVidWZmZXJQYXJh
bWV0ZXJBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICB9CiAKLSAgICAg
ICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SLCBtX3NhdmVk
QmxlbmQuY29sb3IpOwotICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkRfRVFVQVRJT05fUkdCLCBtX3NhdmVkQmxlbmQuZXF1YXRpb25SR0IpOwotICAgICAgICBz
YXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEEsIG1f
c2F2ZWRCbGVuZC5lcXVhdGlvbkFscGhhKTsKLSAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19SR0IsIG1fc2F2ZWRCbGVuZC5zcmNSR0IpOwotICAgICAg
ICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBLCBtX3Nh
dmVkQmxlbmQuc3JjQWxwaGEpOwotICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkRfRFNUX1JHQiwgbV9zYXZlZEJsZW5kLmRzdFJHQik7Ci0gICAgICAgIHNhdmVC
bGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEEsIG1fc2F2ZWRCbGVu
ZC5kc3RBbHBoYSk7Ci0gICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORCwgbV9zYXZlZEJsZW5kLmVuYWJsZWQpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFw
aGljc0NvbnRleHRHTDo6QkxFTkRfQ09MT1IsIG1fc2F2ZWRCbGVuZC5jb2xvcik7CisgICAgICAg
IHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9FUVVBVElPTl9SR0IsIG1f
c2F2ZWRCbGVuZC5lcXVhdGlvblJHQik7CisgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNz
Q29udGV4dEdMOjpCTEVORF9FUVVBVElPTl9BTFBIQSwgbV9zYXZlZEJsZW5kLmVxdWF0aW9uQWxw
aGEpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfU1JD
X1JHQiwgbV9zYXZlZEJsZW5kLnNyY1JHQik7CisgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBo
aWNzQ29udGV4dEdMOjpCTEVORF9TUkNfQUxQSEEsIG1fc2F2ZWRCbGVuZC5zcmNBbHBoYSk7Cisg
ICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9EU1RfUkdCLCBt
X3NhdmVkQmxlbmQuZHN0UkdCKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250
ZXh0R0w6OkJMRU5EX0RTVF9BTFBIQSwgbV9zYXZlZEJsZW5kLmRzdEFscGhhKTsKKyAgICAgICAg
c2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5ELCBtX3NhdmVkQmxlbmQuZW5h
YmxlZCk7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCByZWQgPSAxMTEuMCAvIDI1
NS4wOwogICAgICAgICBzdGF0aWMgY29uc3QgR0MzRGZsb2F0IGdyZWVuID0gMTY4LjAgLyAyNTUu
MDsKICAgICAgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCBibHVlID0gMjIwLjAgLyAyNTUuMDsK
ICAgICAgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCBhbHBoYSA9IDIuMCAvIDMuMDsKIAotICAg
ICAgICBtX2NvbnRleHQuZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAg
IG1fY29udGV4dC5lbmFibGUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EKTsKICAgICAgICAgbV9j
b250ZXh0LmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICBtX2Nv
bnRleHQuYmxlbmRFcXVhdGlvbihHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQpOwotICAgICAg
ICBtX2NvbnRleHQuYmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOworICAgICAgICBtX2NvbnRl
eHQuYmxlbmRFcXVhdGlvbihHcmFwaGljc0NvbnRleHRHTDo6RlVOQ19BREQpOworICAgICAgICBt
X2NvbnRleHQuYmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dEdMOjpDT05TVEFOVF9DT0xPUiwgR3Jh
cGhpY3NDb250ZXh0R0w6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwogCiAgICAgICAgIG1fZGlkQXBw
bHkgPSB0cnVlOwogICAgIH0KQEAgLTQzNCw3ICs0MzQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghbV9zYXZlZEJsZW5kLmVuYWJsZWQpCi0gICAgICAg
ICAgICBtX2NvbnRleHQuZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAg
ICAgICAgbV9jb250ZXh0LmRpc2FibGUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EKTsKIAogICAg
ICAgICBjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgY29sb3IgPSBtX3NhdmVkQmxlbmQuY29s
b3I7CiAgICAgICAgIG1fY29udGV4dC5ibGVuZENvbG9yKGNvbG9yLT5pdGVtKDApLCBjb2xvci0+
aXRlbSgxKSwgY29sb3ItPml0ZW0oMiksIGNvbG9yLT5pdGVtKDMpKTsKQEAgLTQ1NywxOSArNDU3
LDE5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYXNCdWZmZXJCaW5kaW5nKEdDM0RlbnVtIHBuYW1l
KQogICAgIHsKICAgICAgICAgV2ViR0xBbnkgYmluZGluZyA9IG1fY29udGV4dC5nZXRQYXJhbWV0
ZXIocG5hbWUpOwotICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0JJTkRJTkcpCisgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVJfQklORElORykKICAgICAgICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPj4oYmluZGluZykgJiYgV1RGOjpnZXQ8UmVm
UHRyPFdlYkdMRnJhbWVidWZmZXI+PihiaW5kaW5nKTsKLSAgICAgICAgaWYgKHBuYW1lID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQklORElORykKKyAgICAgICAgaWYgKHBuYW1l
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfQklORElORykKICAgICAgICAgICAg
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4+
KGJpbmRpbmcpICYmIFdURjo6Z2V0PFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4+KGJpbmRpbmcp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBoYXNGcmFtZWJ1ZmZl
clBhcmFtZXRlckF0dGFjaG1lbnQoR0MzRGVudW0gYXR0YWNobWVudCkKICAgICB7Ci0gICAgICAg
IFdlYkdMQW55IGF0dGFjaG1lbnRQYXJhbWV0ZXIgPSBtX2NvbnRleHQuZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgYXR0YWNo
bWVudCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZ
UEUpOworICAgICAgICBXZWJHTEFueSBhdHRhY2htZW50UGFyYW1ldGVyID0gbV9jb250ZXh0Lmdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX09CSkVDVF9UWVBFKTsKICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHVu
c2lnbmVkPihhdHRhY2htZW50UGFyYW1ldGVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKFdURjo6Z2V0PHVuc2lnbmVkPihhdHRhY2htZW50UGFyYW1ldGVyKSAhPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikpCisg
ICAgICAgIGlmIChXVEY6OmdldDx1bnNpZ25lZD4oYXR0YWNobWVudFBhcmFtZXRlcikgIT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC00
OTAsNyArNDkwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkQXBwbHkgeyBmYWxzZSB9Owog
fTsKIAotc3RhdGljIGJvb2wgaXNIaWdoUGVyZm9ybWFuY2VDb250ZXh0KGNvbnN0IFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4mIGNvbnRleHQpCitzdGF0aWMgYm9vbCBpc0hpZ2hQZXJmb3JtYW5j
ZUNvbnRleHQoY29uc3QgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiYgY29udGV4dCkK
IHsKICAgICByZXR1cm4gY29udGV4dC0+cG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uKCkg
PT0gV2ViR0xQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZTsKIH0KQEAgLTU0Miw5ICs1
NDIsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKENhbgogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGZyYW1lLT5zZXR0aW5ncygpLmZvcmNlV2ViR0xVc2VzTG93UG93ZXIoKSkgewotICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMucG93ZXJQcmVmZXJlbmNlID09IEdyYXBoaWNzQ29udGV4dDNEUG93
ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UpCisgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6Okhp
Z2hQZXJmb3JtYW5jZSkKICAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJPdmVycmlkaW5nIHBv
d2VyUHJlZmVyZW5jZSBmcm9tIGhpZ2gtcGVyZm9ybWFuY2UgdG8gbG93LXBvd2VyLiIpOwotICAg
ICAgICAgICAgYXR0cmlidXRlcy5wb3dlclByZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRleHQzRFBv
d2VyUHJlZmVyZW5jZTo6TG93UG93ZXI7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnBvd2VyUHJl
ZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpMb3dQb3dlcjsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChwYWdlKQpAQCAtNTc3LDcgKzU3Nyw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjcmVhdGUoQ2FuCiAgICAgICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogICAgIH0K
IAotICAgIGF1dG8gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRl
cywgaG9zdFdpbmRvdyk7CisgICAgYXV0byBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KTsKICAgICBpZiAoIWNvbnRleHQgfHwg
IWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CiAgICAgICAgIGlmIChjYW52YXNFbGVt
ZW50KSB7CiAgICAgICAgICAgICBjYW52YXNFbGVtZW50LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29u
dGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JF
dmVudCwKQEAgLTYyNyw3ICs2MjcsNyBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmIGNhbnZhcywgV2ViR0xDbwogICAgIG1f
Y2hlY2tGb3JDb250ZXh0TG9zc0hhbmRsaW5nVGltZXIuc3RhcnRPbmVTaG90KGNoZWNrQ29udGV4
dExvc3NIYW5kbGluZ0RlbGF5KTsKIH0KIAotV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFwaGljc0Nv
bnRleHQzRD4mJiBjb250ZXh0LCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKENhbnZh
c0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmIGNvbnRleHQsIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICA6IEdQVUJhc2VkQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dChjYW52YXMpCiAgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkK
ICAgICAsIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIoY2FudmFzLnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRj
aENvbnRleHRMb3N0RXZlbnQpCkBAIC02NDcsNyArNjQ3LDcgQEAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiBjYW52YXMsIFJl
ZjxHcmEKICAgICAKICAgICBtX2NvbnRleHQtPmFkZENsaWVudCgqdGhpcyk7CiAKLSAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUywg
bV9tYXhWaWV3cG9ydERpbXMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0R0w6Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7CiAKICAgICBz
ZXR1cEZsYWdzKCk7CiAgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKQEAgLTcyMyw3ICs3MjMs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRpYWxpemVOZXdDb250ZXh0
KCkKICAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7CiAgICAgbV91bnBhY2tGbGlwWSA9IGZhbHNl
OwogICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dF
QkdMOworICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHRH
TDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMOwogICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxw
dHI7CiAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IG51bGxwdHI7CiAgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgPSBudWxscHRyOwpAQCAtNzQ3LDMwICs3NDcsMzAgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCiAgICAgbV9jb2xvck1hc2tbMF0g
PSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVl
OwogCiAgICAgR0MzRGludCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUUywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTLCAmbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CiAgICAgbV90
ZXh0dXJlVW5pdHMuY2xlYXIoKTsKICAgICBtX3RleHR1cmVVbml0cy5yZXNpemUobnVtQ29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyk7CiAgICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgbnVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0czsgKytpKQogICAgICAgICBtX3VucmVuZGVyYWJsZVRleHR1
cmVVbml0cy5hZGQoaSk7CiAKICAgICBHQzNEaW50IG51bVZlcnRleEF0dHJpYnMgPSAwOwotICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRU
UklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOwog
ICAgIG1fbWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CiAgICAgCiAgICAgbV9t
YXhUZXh0dXJlU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX1NJWkUsICZt
X21heFRleHR1cmVTaXplKTsKICAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6
Y29tcHV0ZUxldmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7CiAg
ICAgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1
YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHRHTDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVT
aXplKTsKICAgICBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1
dGVMZXZlbENvdW50KG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZSk7CiAgICAgbV9tYXhSZW5kZXJidWZmZXJTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21h
eFJlbmRlcmJ1ZmZlclNpemUpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0R0w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSwgJm1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7
CiAKICAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZyb20gRVhUX2RyYXdfYnVmZmVycyBhcmUgbGF6
aWx5IHF1ZXJpZWQuCiAgICAgbV9tYXhEcmF3QnVmZmVycyA9IDA7CiAgICAgbV9tYXhDb2xvckF0
dGFjaG1lbnRzID0gMDsKIAotICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0NvbnRleHQz
RDo6QkFDSzsKKyAgICBtX2JhY2tEcmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0s7
CiAgICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IGZhbHNlOwogICAg
IG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBmYWxzZTsKICAgICAKQEAgLTg2Nyw3ICs4NjcsNyBA
QCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgp
CiAKICAgICBpZiAoIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewogICAgICAgICBkZXRh
Y2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0gICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQz
RCgpOworICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0R0woKTsKICAgICAgICAgbV9jb250
ZXh0R3JvdXAtPnJlbW92ZUNvbnRleHQoKnRoaXMpOwogICAgIH0KIApAQCAtODgzLDcgKzg4Myw3
IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6On5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KCkKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVzdHJveUdy
YXBoaWNzQ29udGV4dDNEKCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVzdHJv
eUdyYXBoaWNzQ29udGV4dEdMKCkKIHsKICAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKQogICAgICAgICByZXR1cm47CkBAIC05NTMsMzcgKzk1MywzNyBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQog
ICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRo
ZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KICAgICBib29sIGNvbWJpbmVkQ2xlYXIg
PSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVkOwogCi0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChjb21iaW5lZENsZWFyICYm
IChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQorICAgIG1fY29u
dGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUKTsKKyAgICBpZiAo
Y29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJf
QklUKSkgewogICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBt
X2NsZWFyQ29sb3JbMF0gOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbMV0gPyBtX2NsZWFyQ29sb3JbMV0gOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jb2xvck1hc2tbMl0gPyBtX2NsZWFyQ29sb3JbMl0gOiAwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsK
LSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKICAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVl
KTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0JVRkZFUl9CSVQ7CisgICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4
dEdMOjpDT0xPUl9CVUZGRVJfQklUOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+ZGVwdGgp
IHsKLSAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisgICAgICAgIGlmICghY29t
YmluZWRDbGVhciB8fCAhbV9kZXB0aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0JVRkZFUl9CSVQpKQogICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEu
MGYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZF
Ul9CSVQ7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVG
RkVSX0JJVDsKICAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CiAgICAgfQogICAg
IGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCkgewotICAgICAgICBpZiAoY29tYmluZWRD
bGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQor
ICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0JVRkZFUl9CSVQpKQogICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwo
bV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBtX2NvbnRleHQtPnN0
ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAweEZGRkZGRkZGKTsK
KyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9C
SVQ7CisgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRl
eHRHTDo6RlJPTlQsIDB4RkZGRkZGRkYpOwogICAgIH0KICAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgMCk7CiAgICAgbV9jb250ZXh0LT5jbGVh
cihjbGVhck1hc2spOwogCiAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwogICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpKTsKICAgICBtX2xheWVyQ2xlYXJlZCA9IHRydWU7CiAKICAgICByZXR1cm4g
Y29tYmluZWRDbGVhcjsKQEAgLTk5MywxNCArOTkzLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCiB7CiAgICAgLy8gUmVzdG9yZSB0
aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCiAgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQp
Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NP
Ul9URVNUKTsKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9yWzBdLCBtX2Ns
ZWFyQ29sb3JbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJDb2xvclsyXSwg
bV9jbGVhckNvbG9yWzNdKTsKICAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2NvbG9yTWFza1sw
XSwgbV9jb2xvck1hc2tbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tb
Ml0sIG1fY29sb3JNYXNrWzNdKTsKICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9jbGVhckRl
cHRoKTsKICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7Ci0gICAg
bV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwg
bV9zdGVuY2lsTWFzayk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBo
aWNzQ29udGV4dEdMOjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7CiAgICAgbV9jb250ZXh0LT5kZXB0
aE1hc2sobV9kZXB0aE1hc2spOwogfQogCkBAIC0xMDc4LDEyICsxMDc4LDEyIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAg
ICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwogCiAgICAgYXV0byYgdGV4dHVy
ZVVuaXQgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XTsKLSAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclpl
cm8odGV4dHVyZVVuaXQudGV4dHVyZTJEQmluZGluZy5nZXQoKSkpOworICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0
ZXh0dXJlVW5pdC50ZXh0dXJlMkRCaW5kaW5nLmdldCgpKSk7CiAgICAgaWYgKHRleHR1cmVVbml0
LnRleHR1cmUyREJpbmRpbmcgJiYgdGV4dHVyZVVuaXQudGV4dHVyZTJEQmluZGluZy0+bmVlZFRv
VXNlQmxhY2tUZXh0dXJlKHRleHR1cmVFeHRlbnNpb25GbGFncygpKSkKICAgICAgICAgbV91bnJl
bmRlcmFibGVUZXh0dXJlVW5pdHMuYWRkKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwotICAgIG1fY29u
dGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBv
YmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgbV9jb250ZXh0
LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIG9iamVj
dE9yWmVybyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKICAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcpCi0gICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSkpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQo
KSkpOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd2luZ0J1ZmZlcldp
ZHRoKCkgY29uc3QKQEAgLTExMTEsMTkgKzExMTEsMTkgQEAgaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAogdW5zaWduZWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKICAgICAgICAgcmV0dXJuIHNpemVvZihH
QzNEdWJ5dGUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RzaG9y
dCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CiAgICAgICAgIHJldHVybiBzaXpl
b2YoR0MzRHVzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEaW50
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdD
M0R1aW50KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVDoKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEZmxvYXQp
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTExMzQsMTEgKzExMzQsMTEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmUpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49
IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVu
aXQgb3V0IG9mIHJhbmdlIik7CisgICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwg
InRleHR1cmUgdW5pdCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMDsKKyAgICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFMDsKICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9
CiAKQEAgLTExNDcsNyArMTE0Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqCiAgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNo
U2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIs
IHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXByb2dyYW0tPmF0dGFjaFNoYWRl
cihzaGFkZXIpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImF0dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBh
bHJlYWR5IGhhcyBzaGFkZXIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hhZGVyIiwgInNoYWRlciBhdHRh
Y2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3Ja
ZXJvKHNoYWRlcikpOwpAQCAtMTE2MywxMSArMTE2MywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdD
M0R1aQogICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUp
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgInJlc2VydmVkIHByZWZpeCIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJi
aW5kQXR0cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJpbmRB
dHRyaWJMb2NhdGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJiaW5kQXR0cmliTG9j
YXRpb24iLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBp
bmRleCwgbmFtZSk7CkBAIC0xMTgwLDcgKzExODAsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
VwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICBpZiAo
IW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksICp0aGlzKSkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+
b2JqZWN0KCk7CkBAIC0xMTk2LDEyICsxMTk2LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIp
CiAgICAgaWYgKGRlbGV0ZWQpCiAgICAgICAgIGJ1ZmZlciA9IG51bGxwdHI7CiAgICAgaWYgKGJ1
ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFy
Z2V0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0
aCBtdWx0aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4g
bm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQor
ICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUikKICAgICAg
ICAgbV9ib3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCisgICAgZWxzZSBpZiAodGFy
Z2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICAgICAg
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsK
ICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CkBAIC0xMjA5LDIyICsx
MjA5LDIyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIpCiAgICAgICAgIGlmIChpc1dlYkdMMigp
KSB7CiAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KSB7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JFQURfQlVG
RkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9SRUFEX0JVRkZF
UjoKICAgICAgICAgICAgICAgICBtX2JvdW5kQ29weVJlYWRCdWZmZXIgPSBidWZmZXI7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
T1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNP
UFlfV1JJVEVfQlVGRkVSOgogICAgICAgICAgICAgICAgIG1fYm91bmRDb3B5V3JpdGVCdWZmZXIg
PSBidWZmZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlBJWEVMX1BBQ0tfQlVGRkVSOgogICAgICAgICAgICAgICAgIG1fYm91bmRQ
aXhlbFBhY2tCdWZmZXIgPSBidWZmZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKICAgICAg
ICAgICAgICAgICBtX2JvdW5kUGl4ZWxVbnBhY2tCdWZmZXIgPSBidWZmZXI7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKICAgICAgICAgICAgICAgICBtX2JvdW5kVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIgPSBidWZmZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSOgogICAgICAgICAgICAg
ICAgIG1fYm91bmRVbmlmb3JtQnVmZmVyID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEyMzQsNyArMTIzNCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVm
ZmVyKiBidWZmZXIpCiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJiaW5kQnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZl
ciIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTI1NCwyMyArMTI1NCwyMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZQogCiAg
ICAgYm9vbCBpc1dlYkdMMkRyYXdGcmFtZWJ1ZmZlclRhcmdldCA9IGZhbHNlOwogI2lmIEVOQUJM
RShXRUJHTDIpCi0gICAgaXNXZWJHTDJEcmF3RnJhbWVidWZmZXJUYXJnZXQgPSBpc1dlYkdMMigp
ICYmIHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19GUkFNRUJVRkZFUjsKKyAgICBp
c1dlYkdMMkRyYXdGcmFtZWJ1ZmZlclRhcmdldCA9IGlzV2ViR0wyKCkgJiYgdGFyZ2V0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpEUkFXX0ZSQU1FQlVGRkVSOwogI2VuZGlmCiAgICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7CiAKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiB8fCBpc1dlYkdMMkRyYXdGcmFtZWJ1ZmZlclRhcmdldCkgeworICAgIGlmICh0YXJn
ZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSIHx8IGlzV2ViR0wyRHJhd0ZyYW1l
YnVmZmVyVGFyZ2V0KSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwog
ICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICBp
ZiAoaXNXZWJHTDIoKSAmJiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVIpKSB7Cisg
ICAgaWYgKGlzV2ViR0wyKCkgJiYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSKSkg
ewogICAgICAgICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7CiAgICAgICAgIHN1
Y2Nlc3MgPSB0cnVlOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJi
aW5kRnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1ZmZlciIs
ICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjg3LDgg
KzEyODcsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZgogICAgICAgICByZXR1cm47CiAgICAg
aWYgKGRlbGV0ZWQpCiAgICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7Ci0gICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kUmVuZGVyYnVmZmVy
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRH
TDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX0VOVU0sICJiaW5kUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0g
cmVuZGVyQnVmZmVyOwpAQCAtMTMwNSwxOSArMTMwNSwxOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0
ZXh0dQogICAgIGlmIChkZWxldGVkKQogICAgICAgICB0ZXh0dXJlID0gbnVsbHB0cjsKICAgICBp
ZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQo
KSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBi
ZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kVGV4dHVyZSIsICJ0
ZXh0dXJlcyBjYW4gbm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgR0MzRGludCBtYXhMZXZlbCA9IDA7CiAgICAgYXV0byYgdGV4
dHVyZVVuaXQgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XTsKLSAgICBpZiAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CisgICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCkgewogICAgICAgICB0ZXh0dXJlVW5p
dC50ZXh0dXJlMkRCaW5kaW5nID0gdGV4dHVyZTsKICAgICAgICAgbWF4TGV2ZWwgPSBtX21heFRl
eHR1cmVMZXZlbDsKICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+bmVlZFRvVXNlQmxh
Y2tUZXh0dXJlKHRleHR1cmVFeHRlbnNpb25GbGFncygpKSkKICAgICAgICAgICAgIG1fdW5yZW5k
ZXJhYmxlVGV4dHVyZVVuaXRzLmFkZChtX2FjdGl2ZVRleHR1cmVVbml0KTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMucmVtb3ZlKG1fYWN0aXZl
VGV4dHVyZVVuaXQpOwotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVApIHsKICAgICAgICAgdGV4dHVyZVVuaXQudGV4dHVy
ZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKICAgICAgICAgbWF4TGV2ZWwgPSBtX21heEN1YmVN
YXBUZXh0dXJlTGV2ZWw7CiAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPm5lZWRUb1Vz
ZUJsYWNrVGV4dHVyZSh0ZXh0dXJlRXh0ZW5zaW9uRmxhZ3MoKSkpCkBAIC0xMzI1LDcgKzEzMjUs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRUZXh0dXJlKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBt
X3VucmVuZGVyYWJsZVRleHR1cmVVbml0cy5yZW1vdmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJiaW5k
VGV4dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwpA
QCAtMTM4NywxNSArMTM4NywxNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRAogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
RGF0YSIsICJzaXplIDwgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNp
emUgPT0gMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA9PSAwIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc3RhdGljX2Nh
c3Q8R0MzRHNpemVpcHRyPihzaXplKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVm
ZmVyIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xNDEyLDcgKzE0MTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBPcHRpb25hbDxCdWZmZXJEYXRh
UwogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIWRhdGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm51bGwgZGF0YSIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAibnVsbCBkYXRhIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZm
ZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CkBAIC0xNDIxLDcgKzE0MjEsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBPcHRpb25h
bDxCdWZmZXJEYXRhUwogCiAgICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewogICAgICAg
ICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhLmdldCgpKSkgewotICAgICAg
ICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICB0aGlz
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC0xNDM4LDExICsxNDM4LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFJlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVy
cygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFX
KTsKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEFU
SUNfRFJBVyk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAob2Zm
c2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
clN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICghZGF0YSkKQEAgLTE0NTAsNyArMTQ1MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsCiAK
ICAgICBXVEY6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVyLT5h
c3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRh
dGEuZ2V0KCkpKSB7Ci0gICAgICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBv
ZiByYW5nZSIpOworICAgICAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2Yg
cmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNDY2LDI1ICsx
NDY2LDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YShH
QzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsCiBHQzNEZW51bSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKIHsK
ICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIpIHsKICNpZiBFTkFCTEUoV0VCR0wyKQotICAg
ICAgICBpZiAoaXNXZWJHTDEoKSB8fCAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpEUkFX
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJV
RkZFUikpIHsKKyAgICAgICAgaWYgKGlzV2ViR0wxKCkgfHwgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6RFJBV19GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OlJFQURfRlJBTUVCVUZGRVIpKSB7CiAjZW5kaWYKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIs
ICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAjaWYgRU5BQkxFKFdF
QkdMMikKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQogCi0gICAgYXV0byB0YXJnZXRGcmFtZWJ1
ZmZlciA9ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVIpID8g
bV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nIDogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CisgICAgYXV0
byB0YXJnZXRGcmFtZWJ1ZmZlciA9ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURf
RlJBTUVCVUZGRVIpID8gbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nIDogbV9mcmFtZWJ1ZmZlckJp
bmRpbmc7CiAKICAgICBpZiAoIXRhcmdldEZyYW1lYnVmZmVyIHx8ICF0YXJnZXRGcmFtZWJ1ZmZl
ci0+b2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVJfQ09NUExFVEU7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVJfQ09NUExFVEU7CiAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29t
cGxldGUiOwogICAgIEdDM0RlbnVtIHJlc3VsdCA9IHRhcmdldEZyYW1lYnVmZmVyLT5jaGVja1N0
YXR1cygmcmVhc29uKTsKLSAgICBpZiAocmVzdWx0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkgeworICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIFN0cmluZyBzdHIgPSAiV2ViR0w6IGNo
ZWNrRnJhbWVidWZmZXJTdGF0dXM6IiArIFN0cmluZyhyZWFzb24pOwogICAgICAgICBwcmludFRv
Q29uc29sZShNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIHN0cik7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0xNTQ1LDcgKzE1NDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKICAgICAgICAgcmV0dXJuOwogICAg
IG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8oc2hhZGVyKSk7CiAgICAgR0Mz
RGludCB2YWx1ZTsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFk
ZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7CisgICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgR3JhcGhpY3NDb250ZXh0
R0w6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOwogICAgIHNoYWRlci0+c2V0VmFsaWQodmFsdWUp
OwogCiAgICAgYXV0byogY2FudmFzID0gaHRtbENhbnZhcygpOwpAQCAtMTU2NiwxMSArMTU2Niwx
MSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvbXBy
ZXNzZWRUZXhJbWFnZTJEIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImNvbXByZXNz
ZWRUZXhJbWFnZTJEIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAi
Ym9yZGVyIG5vdCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiYm9yZGVyIG5vdCAw
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSkKQEAgLTE1OTIsNyArMTU5Miw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURSk7CiAgICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7CiB9CiAKQEAg
LTE2MDMsNyArMTYwMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVs
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0
KGZvcm1hdCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImludmFsaWQgZm9ybWF0
Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRh
KSkKQEAgLTE2MTQsMjkgKzE2MTQsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKGZvcm1hdCAhPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1h
dCBkb2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0Y2ggdGV4dHVyZSBmb3JtYXQiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleC5nZXQoKSkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGdyYXBoaWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YS5ieXRlTGVuZ3RoKCksIGRhdGEuYmFzZUFkZHJlc3MoKSk7CisgICAgZ3JhcGhpY3ND
b250ZXh0R0woKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhLmJ5dGVMZW5ndGgoKSwgZGF0
YS5iYXNlQWRkcmVzcygpKTsKICAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKIH0KIAogYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNldHRhYmxlVGV4SW50ZXJuYWxGb3Jt
YXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKIHsK
ICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQ09NUE9ORU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NU
RU5DSUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEgzMkZfU1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9J
TkRFWDg6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5
IHJlbmRlcmVkIHRvIik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9O
RU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
MjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RFTkNJ
TDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9JTkRFWDg6CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRvIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTE2NTYsMjMgKzE2NTYsMjMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwKICAgICAg
ICAgcmV0dXJuOwogICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2Us
IGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIs
ICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNp
b25zIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+
IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+
Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVj
dGFuZ2xlIG91dCBvZiByYW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3Rhbmds
ZSBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAg
ICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4SW50ZXJuYWxGb3JtYXQoImNvcHlUZXhTdWJJbWFn
ZTJEIiwgaW50ZXJuYWxGb3JtYXQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc1RleElu
dGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsRm9ybWF0LCBn
ZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1Yklt
YWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJj
b3B5VGV4U3ViSW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1l
YnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICZyZWFzb24p
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgcmVhc29uKTsKKyAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHRHTCgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKQEAgLTE2ODIsMjEgKzE2ODIsMjEgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwKICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJv
dW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlw
cGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0OwogICAgICAgICBHQzNEZW51bSB0eXBlOwotICAgICAgICBpZiAo
IUdyYXBoaWNzQ29udGV4dDNEOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1h
dCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBmb3JtYXQsIHR5cGUpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiY29weVRleFN1YkltYWdlMkQiLCAiVGV4dHVyZSBoYXMgdW5rbm93biBpbnRlcm5h
bCBmb3JtYXQiKTsKKyAgICAgICAgaWYgKCFHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9zc2li
bGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKSwgZm9ybWF0LCB0eXBlKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImNvcHlUZXhTdWJJbWFnZTJE
IiwgIlRleHR1cmUgaGFzIHVua25vd24gaW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVy
bzsKICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewogICAgICAgICAgICAgdW5zaWduZWQg
c2l6ZTsKICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1h
Z2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25t
ZW50LCAmc2l6ZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3ND
b250ZXh0R0w6Ok5PX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
ZXJyb3IsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHplcm8gPSBtYWtlVW5p
cXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7CiAgICAgICAgICAgICBpZiAoIXplcm8pIHsK
LSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9W
QUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQo
KSwgMCwgc2l6ZSk7CkBAIC0xNzYwLDggKzE3NjAsOCBAQCBSZWZQdHI8V2ViR0xTaGFkZXI+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQogewog
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hh
ZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFH
TUVOVF9TSEFERVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMTc4Miw3ICsxNzgyLDcgQEAg
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVPYmplY3QoV2ViR0xPYmplY3Qq
IG9iamVjdCkKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFvYmplY3QpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksICp0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9u
ZyB0byB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBi
ZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgaWYgKG9iamVjdC0+aXNEZWxldGVkKCkpCkBAIC0xNzkwLDcgKzE3OTAsNyBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0
KQogICAgIGlmIChvYmplY3QtPm9iamVjdCgpKQogICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3Mg
aW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAogICAgICAgICAvLyB0aGluZ3MgaW4gdGhp
cyBjb250ZXh0IHVuYm91bmQuCi0gICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNz
Q29udGV4dDNEKCkpOworICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRl
eHRHTCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTgxMSwxNyArMTgxMSwxNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJh
bWVidWZmZXIqIGZyYW1lYnVmZmVyKQogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgaWYgKGlzV2Vi
R0wyKCkgJiYgZnJhbWVidWZmZXIgPT0gbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAg
ICAgIG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSLCAw
KTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6
OlJFQURfRlJBTUVCVUZGRVIsIDApOwogICAgIH0KICNlbmRpZgogICAgIGlmIChmcmFtZWJ1ZmZl
ciA9PSBtX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGlu
ZyA9IG51bGxwdHI7CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgaWYgKGlzV2ViR0wyKCkp
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RFJBV19GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RFJBV19GUkFNRUJVRkZFUiwgMCk7CiAgICAgICAg
IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgMCk7CiAgICAg
fQogfQogCkBAIC0xODkxLDcgKzE4OTEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKICAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHpOZWFy
ID4gekZhcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJkZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJkZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7CkBAIC0xOTAyLDIzICsxOTAy
LDIzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImRldGFjaFNoYWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFj
aFNoYWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmpl
Y3RPclplcm8oc2hhZGVyKSk7Ci0gICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4
dDNEKCkpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHRHTCgpKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkK
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxp
dHkoImRpc2FibGUiLCBjYXApKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6U1RFTkNJTF9URVNUKSB7CiAgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxz
ZTsKICAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAo
Y2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpCiAgICAgICAgIG1fc2Npc3Nv
ckVuYWJsZWQgPSBmYWxzZTsKICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKIH0KQEAgLTE5
MjgsNyArMTkyOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhB
dHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiBy
YW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFu
Z2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk0Miw3ICsxOTQyLDcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0Mz
RHVpbnQgaW5kZXgpCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlTlBP
VFRleHR1cmVMZXZlbChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
bGV2ZWwsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKICAgICBpZiAoIWlzR0xFUzJOUE9U
U3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTE5NTksNyArMTk1OSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVuCiAgICAgaWYgKG9mZnNldCA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
ICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UKSB7CiAgICAgICAgIC8vIEZvciBh
biB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSA0IGZvciBh
bGlnbm1lbnQgcmVhc29ucy4KICAgICAgICAgaWYgKG9mZnNldCAlIDQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTcwLDcgKzE5NzAsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bgogICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpIC8gNDsKICAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUKSB7CiAgICAgICAgIC8vIEZvciBhbiB1bnNp
Z25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdu
bWVudCByZWFzb25zLgogICAgICAgICBpZiAob2Zmc2V0ICUgMikKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE5ODEsNyArMTk4MSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVuCiAg
ICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LyAyOwogICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSB7CiAgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxl
bWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8
IGNvdW50ID4gbiAtIG9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIwMDks
MTMgKzIwMDksMTMgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGUKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoK
ICAgICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxHQzNEdWludD4oYnVmZmVyLCBvZmZzZXQs
IGNvdW50KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6
CiAgICAgICAgIG1heEluZGV4ID0gZ2V0TWF4SW5kZXg8R0MzRHVzaG9ydD4oYnVmZmVyLCBvZmZz
ZXQsIGNvdW50KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRF
OgogICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1Ynl0ZT4oYnVmZmVyLCBvZmZz
ZXQsIGNvdW50KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjA5NCw3ICsyMDk0LDcgQEAg
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMo
dW5zaWduZWQgZWxlbWVudENvdW50LAogICAgICAgICAgICAgaWYgKHVzaW5nU2ltdWxhdGVkQXJy
YXlCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CiAgICAgICAgICAgICAgICAgaWYg
KHN0YXRlLmVuYWJsZWQgJiYgc3RhdGUuaXNCb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nLT5nZXRUYXJnZXQoKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSIHx8IHN0YXRlLmJ1ZmZlckJpbmRpbmctPmdldFRhcmdldCgpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmctPmdldFRhcmdldCgpID09IEdyYXBoaWNzQ29udGV4
dEdMOjpBUlJBWV9CVUZGRVIgfHwgc3RhdGUuYnVmZmVyQmluZGluZy0+Z2V0VGFyZ2V0KCkgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICEhc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIxMDksMTEgKzIxMDksMTEgQEAgYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5z
aWduZWQgZWxlbWVudENvdW50LAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9i
amVjdCkKIHsKICAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAibm8gb2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksICp0aGlz
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9u
ZyB0byB0aGlzIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIxMjgsNyArMjEyOCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChmaXJzdCA8IDAgfHwgY291bnQgPCAw
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJmaXJzdCBvciBjb3VudCA8IDAiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCkBAIC0yMTM4LDcgKzIxMzgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDMwogICAgIH0K
IAogICAgIGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1j
b3VudCA8IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjE0NiwxNyArMjE0NiwxNyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDMwogICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRTdW0gPSBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PihmaXJzdCkgKyBDaGVja2Vk
PEdDM0RpbnQsIFJlY29yZE92ZXJmbG93Pihjb3VudCk7CiAgICAgQ2hlY2tlZDxHQzNEaW50LCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFByaW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKICAg
ICBpZiAoY2hlY2tlZFN1bS5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFByaW1pdGl2ZUNvdW50
Lmhhc092ZXJmbG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0u
dW5zYWZlR2V0KCksIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMg
YXJyYXlzIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0
ZVNpbXVsYXRlZFZlcnRleEF0dHJpYjAoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSAtIDEpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0c2lkZSB0aGUgYm91bmRz
IG9mIHRoZSBzaW11bGF0ZWQgdmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgc2ltdWxh
dGVkIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAogICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHRHTCgpLCAmcmVh
c29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjE3MiwyMSArMjE3MiwyMSBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgRwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX1NIT1JUOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
SU5UOgogICAgICAgICBpZiAobV9vZXNFbGVtZW50SW5kZXhVaW50IHx8IGlzV2ViR0wyKCkpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdHlwZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAog
ICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiY291
bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwg
MCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMjE5NiwxOCArMjE5
NiwxOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1l
bnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgRwogICAgIH0KICAgICAKICAgICBpZiAocHJp
bWl0aXZlQ291bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJB
WV9CVUZGRVIgYm91bmQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyBFTEVNRU5UX0FSUkFZ
X0JVRkZFUiBib3VuZCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8g
RW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUuCiAgICAgaWYgKCF2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9m
ZnNldCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBvdXQgb2YgYm91bmRzIGZv
ciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
cmVxdWVzdCBvdXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFjb3VudCkKQEAgLTIyMTYs
MjUgKzIyMTYsMjUgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURy
YXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEcKICAgICBDaGVja2VkPEdDM0Rp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwogICAgIENoZWNrZWQ8R0Mz
RGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3Vu
dCk7CiAgICAgaWYgKGNoZWNrZWRDb3VudC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFByaW1p
dGl2ZUNvdW50Lmhhc092ZXJmbG93ZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNl
cnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhu
dW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewogICAgICAg
ICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY2hlY2tlZENvdW50LnVuc2FmZUdldCgp
LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cykgfHwg
IXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNv
dW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRv
IGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCF2YWxpZGF0ZVNpbXVs
YXRlZFZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
YXR0ZW1wdCB0byBhY2Nlc3Mgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzaW11bGF0ZWQgdmVy
dGV4QXR0cmliMCBhcnJheSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNj
ZXNzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgc2ltdWxhdGVkIHZlcnRleEF0dHJpYjAgYXJy
YXkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBjb25zdCBjaGFy
KiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250
ZXh0M0QoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJl
YXNvbik7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0R0woKSwgJnJlYXNvbikpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC0yMjU2LDcgKzIyNTYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
egogICAgICAgICBhdXRvIHNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cyA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CiAgICAgICAgIGlmICghc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwU3RhdHVzKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBzaW11
bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlci4KLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdBcnJheXMiLCAidW5h
YmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdB
cnJheXMiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVk
ID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzLnZhbHVlKCk7CkBAIC0yMjgyLDExICsyMjgy
LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5cyhHQzNEZW51
bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6CiBzdGF0aWMgR0MzRHVpbnQgZ2V0UmVzdGFy
dEluZGV4KEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9CWVRFOgogICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxH
QzNEdWJ5dGU+OjptYXgoKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0MzRHVzaG9ydD46Om1heCgpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9JTlQ6CiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PEdDM0R1aW50Pjo6bWF4KCk7CiAgICAgfQogCkBAIC0yMzEyLDcgKzIzMTIsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDMwogICAgICAgICBhdXRvIHNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1
cyA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CiAgICAgICAgIGlmICghc2lt
dWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJs
ZSB0byBzaW11bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlci4KLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdFbGVt
ZW50cyIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCAiZHJhd0VsZW1lbnRzIiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFy
cmF5Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdmVydGV4QXR0
cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cy52YWx1ZSgpOwpAQCAt
MjM0NCwxMiArMjM0NCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJs
ZShHQzNEZW51bSBjYXApCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBjYXApKQogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9URVNUKSB7CiAgICAgICAgIG1fc3RlbmNp
bEVuYWJsZWQgPSB0cnVlOwogICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCkKICAg
ICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IHRydWU7CiAgICAgbV9jb250ZXh0LT5lbmFibGUoY2Fw
KTsKIH0KQEAgLTIzNTksNyArMjM1OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBt
X21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsICJlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjM4NywzMyArMjM4
NywzMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudQogewogICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIp
OworICAgIGlmIChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRF
UkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9FTlVNLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYnVmZmVyICYmICFidWZmZXItPnZh
bGlkYXRlKGNvbnRleHRHcm91cCgpLCAqdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIiLCAibm8gYnVmZmVyIG9yIGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVyIG9yIGJ1ZmZlciBu
b3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
YnVmZmVyICYmICFidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciIsICJidWZmZXIgaGFzIG5ldmVyIGJlZW4gYm91bmQiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAiYnVmZmVyIGhhcyBuZXZlciBiZWVuIGJvdW5k
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHRhcmdldEZyYW1lYnVmZmVy
ID0gKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUikgPyBtX3Jl
YWRGcmFtZWJ1ZmZlckJpbmRpbmcgOiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICBhdXRvIHRh
cmdldEZyYW1lYnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFN
RUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgOiBtX2ZyYW1lYnVmZmVyQmluZGlu
ZzsKIAogICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHRvIGJlIG11
dGF0ZWQ7IGFsbCBjdXJyZW50CiAgICAgLy8gaW1wbGVtZW50YXRpb25zIHVzZSBhbiBGQk8gaW50
ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAogICAgIC8vIEZCTy4KICAgICBpZiAoIXRh
cmdldEZyYW1lYnVmZmVyIHx8ICF0YXJnZXRGcmFtZWJ1ZmZlci0+b2JqZWN0KCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlck9iamVj
dCA9IG9iamVjdE9yWmVybyhidWZmZXIpOwogI2lmICFVU0UoQU5HTEUpCi0gICAgaWYgKGF0dGFj
aG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgewot
ICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
T2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICBpZiAoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7CisgICAgICAgIG1fY29udGV4dC0+ZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRU
QUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgICAgICBtX2Nv
bnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwog
ICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVj
dCk7CkBAIC0yNDI2LDI5ICsyNDI2LDI5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhCiAgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQ
YXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsIHRhcmdldCwgYXR0YWNobWVudCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAobGV2ZWwgJiYgaXNXZWJHTDEoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1l
YnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJl
MkQiLCAibGV2ZWwgbm90IDAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodGV4
dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksICp0aGlzKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZy
b20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRl
eHR1cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVyQmluZGlu
ZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZy
YW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOwogCiAgICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQK
ICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9m
IHRoZSBkZWZhdWx0CiAgICAgLy8gRkJPLgogICAgIGlmICghdGFyZ2V0RnJhbWVidWZmZXIgfHwg
IXRhcmdldEZyYW1lYnVmZmVyLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1
cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1
cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJl
KTsKIAogI2lmICFVU0VfQU5HTEUKLSAgICBpZiAoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNI
TUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICBpZiAo
YXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
KSB7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0
LCBsZXZlbCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0
LCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1
cmVPYmplY3QsIGxldmVsKTsKICAgICB9IGVsc2UKICNlbmRpZgogICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlT2JqZWN0LCBsZXZlbCk7CkBAIC0yNDcyLDEyICsyNDcyLDEyIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQogICAgIGlm
ICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF0ZXgtPmNhbkdlbmVyYXRlTWlwbWFw
cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgImxldmVsIDAgbm90IHBvd2VyIG9mIDIg
b3Igbm90IGFsbCB0aGUgc2FtZSBzaXplIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgImxl
dmVsIDAgbm90IHBvd2VyIG9mIDIgb3Igbm90IGFsbCB0aGUgc2FtZSBzaXplIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjM5MTYuIENvbXByZXNzZWQgdGV4dHVyZXMgc2hvdWxkIGJlIGFsbG93
ZWQgaW4gV2ViR0wgMjoKICAgICBpZiAodGV4LT5pc0NvbXByZXNzZWQoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJn
ZW5lcmF0ZU1pcG1hcCIsICJ0cnlpbmcgdG8gZ2VuZXJhdGUgbWlwbWFwcyBmcm9tIGNvbXByZXNz
ZWQgdGV4dHVyZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJ0cnlpbmcgdG8gZ2VuZXJh
dGUgbWlwbWFwcyBmcm9tIGNvbXByZXNzZWQgdGV4dHVyZSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0KCJnZW5lcmF0
ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCkBAIC0yNDg3LDE1
ICsyNDg3LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2VuZXJhdGVNaXBt
YXAoR0MzRGVudW0gdGFyZ2V0KQogICAgIC8vIG9uIE1hYy4gIFJlbW92ZSB0aGUgaGFjayBvbmNl
IHRoaXMgZHJpdmVyIGJ1ZyBpcyBmaXhlZC4KICNpZiBPUyhEQVJXSU4pCiAgICAgYm9vbCBuZWVk
VG9SZXNldE1pbkZpbHRlciA9IGZhbHNlOwotICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKLSAgICAgICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7Cisg
ICAgaWYgKHRleC0+Z2V0TWluRmlsdGVyKCkgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1Rf
TUlQTUFQX0xJTkVBUikgeworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0
LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRH
TDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKTsKICAgICAgICAgbmVlZFRvUmVzZXRNaW5GaWx0ZXIg
PSB0cnVlOwogICAgIH0KICNlbmRpZgogICAgIG1fY29udGV4dC0+Z2VuZXJhdGVNaXBtYXAodGFy
Z2V0KTsKICNpZiBPUyhEQVJXSU4pCiAgICAgaWYgKG5lZWRUb1Jlc2V0TWluRmlsdGVyKQotICAg
ICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NSU5fRklMVEVSLCB0ZXgtPmdldE1pbkZpbHRlcigpKTsKKyAgICAgICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7CiAjZW5kaWYKICAgICB0ZXgtPmdlbmVyYXRl
TWlwbWFwTGV2ZWxJbmZvKCk7CiB9CkBAIC0yNTA0LDcgKzI1MDQsNyBAQCBSZWZQdHI8V2ViR0xB
Y3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBY3RpdmVBdHRyaWIoV2Vi
R0xQcm9ncmFtKgogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0pKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyBpbmZvOworICAg
IEdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFtX2NvbnRleHQt
PmdldEFjdGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTI1MTcsNyArMjUxNyw3IEBAIFJlZlB0cjxXZWJH
TEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0o
V2ViR0xQcm9ncmFtCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZlVW5pZm9ybSIsIHByb2dyYW0pKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyBpbmZvOwor
ICAgIEdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFtX2NvbnRl
eHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQpA
QCAtMjUzNSw4ICsyNTM1LDggQEAgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWQKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGNvbnN0IEdDM0RlbnVtIHNoYWRlclR5cGVzW10gPSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSLAotICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdM
OjpWRVJURVhfU0hBREVSLAorICAgICAgICBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hB
REVSCiAgICAgfTsKICAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyT2JqZWN0
czsKICAgICBmb3IgKGF1dG8gc2hhZGVyVHlwZSA6IHNoYWRlclR5cGVzKSB7CkBAIC0yNTU4LDcg
KzI1NTgsNyBAQCBHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29ucwogICAgIGlmIChpc1ByZWZpeFJlc2Vy
dmVkKG5hbWUpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5r
U3RhdHVzKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QXR0cmliTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlu
a2VkIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIp
OwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0
dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CkBAIC0yNTcwLDM0ICsy
NTcwLDM0IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBh
cmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgYm9vbCB2YWxpZCA9IGZhbHNlOwotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSKQorICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OkFSUkFZX0JVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJS
QVlfQlVGRkVSKQogICAgICAgICB2YWxpZCA9IHRydWU7CiAjaWYgRU5BQkxFKFdFQkdMMikKICAg
ICBpZiAoaXNXZWJHTDIoKSkgewogICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JFQURfQlVGRkVSOgotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
T1BZX1JFQURfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1dS
SVRFX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfUEFDS19C
VUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1VOUEFDS19CVUZG
RVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSOgog
ICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAg
aWYgKCF2YWxpZCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VO
VU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpCVUZGRVJfU0laRSAmJiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdF
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwor
ICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6QlVGRkVSX1NJWkUgJiYgcG5hbWUg
IT0gR3JhcGhpY3NDb250ZXh0R0w6OkJVRkZFUl9VU0FHRSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRCdWZm
ZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlmIChwbmFtZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCisgICAgaWYgKHBuYW1lID09IEdyYXBoaWNz
Q29udGV4dEdMOjpCVUZGRVJfU0laRSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpOwogfQpAQCAtMjYwOSw3ICsyNjA5LDcgQEAg
T3B0aW9uYWw8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMKIAogICAgIC8vIEFsc28sIHdlIG5lZWQgdG8gZW5mb3Jj
ZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJmYWxzZSIgZm9yIGRlcHRoCiAgICAgLy8gYW5kIHN0ZW5j
aWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVuZGVybHlpbmcKLSAgICAv
LyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAvLyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIAog
ICAgIGF1dG8gYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Y29udGV4dEF0dHJpYnV0ZXMoKTsKICAg
ICBpZiAoIW1fYXR0cmlidXRlcy5kZXB0aCkKQEAgLTI2MjIsNyArMjYyMiw3IEBAIE9wdGlvbmFs
PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldENv
bnRleHRBdHRyaWJ1dGVzCiBHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRF
cnJvcigpCiB7CiAgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpOT19FUlJPUjsKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigp
OwogfQogCkBAIC0yNjMzLDE4ICsyNjMzLDE4IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHCiAK
ICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERUxFVEVfU1RBVFVTOgogICAgICAgICByZXR1cm4gcHJvZ3JhbS0+aXNEZWxldGVkKCk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlZBTElEQVRFX1NUQVRVUzoKICAgICAgICAgbV9jb250ZXh0LT5n
ZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5LX1NU
QVRVUzoKICAgICAgICAgcmV0dXJuIHByb2dyYW0tPmdldExpbmtTdGF0dXMoKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkFUVEFDSEVEX1NIQURFUlM6CiAgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3Jh
bWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVM6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TOgogI2lmIFVTRShBTkdMRSkKICAgICAgICAgbV9jb250
ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsK
ICNlbHNlCkBAIC0yNjUyLDcgKzI2NTIsNyBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRwogI2Vu
ZGlmIC8vIFVTRShBTkdMRSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdl
dFByb2dyYW1QYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CkBAIC0yNjY4LDQyICsyNjY4LDQyIEBAIFdlYkdMQW55
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJC
VUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYgKCFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1NURU5DSUwKKyAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1h
dCgpID09IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMCiAgICAgICAgICYmICFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgewogICAgICAgICBBU1NFUlQoIWlzRGVwdGhT
dGVuY2lsU3VwcG9ydGVkKCkpOwogICAgICAgICBpbnQgdmFsdWUgPSAwOwogICAgICAgICBzd2l0
Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9XSURUSDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX1dJ
RFRIOgogICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldFdpZHRo
KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVO
REVSQlVGRkVSX0hFSUdIVDoKICAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5k
aW5nLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CiAgICAgICAgICAgICB2YWx1
ZSA9IDA7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgogICAgICAgICAgICAgdmFsdWUgPSAyNDsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFOgogICAgICAgICAgICAgdmFsdWUgPSA4OwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9J
TlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJV
RkZFUl9JTlRFUk5BTF9GT1JNQVQ6CiAgICAgICAgICAgICByZXR1cm4gbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB2
YWx1ZTsKQEAgLTI3MTEsMjAgKzI3MTEsMjAgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MKIAog
ICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSX0JMVUVfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfQUxQSEFfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
REVQVEhfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RF
TkNJTF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9XSURU
SDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfSEVJR0hUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9SRURfU0laRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6CiAgICAgICAgIG1fY29udGV4dC0+Z2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9J
TlRFUk5BTF9GT1JNQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVS
X0lOVEVSTkFMX0ZPUk1BVDoKICAgICAgICAgcmV0dXJuIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+
Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIH0KQEAgLTI3MzUsMTYgKzI3MzUsMTYgQEAgV2ViR0xBbnkgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEdDM0QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAg
ICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFTEVURV9T
VEFUVVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVMRVRFX1NUQVRVUzoKICAgICAg
ICAgcmV0dXJuIHNoYWRlci0+aXNEZWxldGVkKCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q09NUElMRV9TVEFUVVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUElMRV9T
VEFUVVM6CiAgICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRl
ciksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNIQURFUl9UWVBFOgogICAgICAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNo
YWRlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiB9CkBAIC0yNzYxLDIzICsyNzYxLDIzIEBAIFJlZlB0cjxXZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUHJl
Y2lzaW9uCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX1NIQURFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFH
TUVOVF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURFUjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVI6CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxp
ZCBzaGFkZXIgdHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQg
c2hhZGVyIHR5cGUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHN3aXRj
aCAocHJlY2lzaW9uVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9B
VDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fRkxPQVQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMT1dfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TE9XX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1FRElVTV9GTE9B
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0ZMT0FUOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkxPV19JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUVE
SVVNX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0lOVDoKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZh
bGlkIHByZWNpc2lvbiB0eXBlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52
YWxpZCBwcmVjaXNpb24gdHlwZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
QEAgLTI4MDQsMjEgKzI4MDQsMjEgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG4KICAgICBHQzNE
aW50IHZhbHVlID0gMDsKICAgICBHQzNEZmxvYXQgZlZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBu
YW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhU
VVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5f
RklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9UOgogICAgICAgICBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljCisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhU
OiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKICAgICAgICAgaWYgKG1fZXh0VGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldFRleFBh
cmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZmVmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihmVmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQpAQCAt
MjgyOCw3ICsyODI4LDcgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkcKICAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtIiwg
cHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghdW5pZm9ybUxvY2F0
aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHBy
b2dyYW0iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9jYXRpb24gb3Igbm90
IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRpb24tPmxvY2F0aW9uKCk7CkBA
IC0yODM2LDc4ICsyODM2LDc4IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHCiAgICAgR0MzRGVu
dW0gYmFzZVR5cGU7CiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIHN3aXRjaCAodW5pZm9ybUxv
Y2F0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgotICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkJPT0w6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6
OkJPT0w7CiAgICAgICAgIGxlbmd0aCA9IDE7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Qk9PTDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCT09MX1ZFQzI6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkJPT0w7CiAgICAgICAgIGxlbmd0
aCA9IDI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xf
VkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCT09MX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkJPT0w7CiAgICAgICAgIGxlbmd0aCA9IDM7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpCT09MX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkJPT0w7
CiAgICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklOVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKKyAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHRHTDo6SU5UOwogICAgICAgICBsZW5ndGggPSAxOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMjoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OklOVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ7CiAg
ICAgICAgIGxlbmd0aCA9IDI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OklOVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UX1ZFQzM6CisgICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OklOVDsKICAgICAgICAgbGVuZ3RoID0gMzsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZFQzQ6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6
SU5UOwogICAgICAgICBsZW5ndGggPSA0OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6CisgICAgICAgIGJh
c2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAgICAgICBsZW5ndGggPSAxOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgot
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVuZ3RoID0gMjsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7
CiAgICAgICAgIGxlbmd0aCA9IDM7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUX1ZFQzQ6CisgICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAgICAgICBsZW5ndGgg
PSA0OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9N
QVQyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF9NQVQyOgorICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVuZ3RoID0gNDsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMzoKLSAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RkxPQVRfTUFUMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQ7CiAgICAgICAgIGxlbmd0aCA9IDk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUX01BVDQ6
CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAgICAgICBs
ZW5ndGggPSAxNjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUl8yRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkU6Ci0g
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTQU1QTEVSXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNB
TVBMRVJfQ1VCRToKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOwog
ICAgICAgICBsZW5ndGggPSAxOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQg
dHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5oYW5kbGVkIHR5cGUiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDogeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZM
T0FUOiB7CiAgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsxNl0gPSB7MH07CiAgICAgICAgIGlmICht
X2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlv
biwgMTYgKiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOwpAQCAtMjkxNyw3ICsyOTE3LDcgQEAg
V2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIGNvbnN0IFdlYkcKICAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXTsKICAg
ICAgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6dHJ5Q3JlYXRlKHZhbHVlLCBsZW5ndGgpOwogICAg
IH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpJTlQ6IHsKICAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKICAgICAg
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQogICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCkuZ2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSks
IGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CkBAIC0yOTI3LDcgKzI5Mjcs
NyBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBd
OwogICAgICAgICByZXR1cm4gSW50MzJBcnJheTo6dHJ5Q3JlYXRlKHZhbHVlLCBsZW5ndGgpOwog
ICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Qk9PTDogewogICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9Owog
ICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCiAgICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKQEAgLTI5NDYsNyAr
Mjk0Niw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHCiAgICAgfQogCiAgICAgLy8gSWYgd2Ug
Z2V0IGhlcmUsIHNvbWV0aGluZyB3ZW50IHdyb25nIGluIG91ciB1bmZvcnR1bmF0ZWx5IGNvbXBs
ZXggbG9naWMgYWJvdmUKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5rbm93biBlcnJvciIpOworICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9y
bSIsICJ1bmtub3duIGVycm9yIik7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTI5NjEs
NyArMjk2MSw3IEBAIFJlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMCiAgICAgaWYgKGlzUHJlZml4UmVz
ZXJ2ZWQobmFtZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghcHJvZ3JhbS0+
Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFt
IG5vdCBsaW5rZWQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90
IGxpbmtlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgR0MzRGludCB1
bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIG5hbWUpOwpAQCAtMjk3MCwxMiArMjk3MCwxMiBAQCBSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm1Mb2Nh
dGlvbihXZWJHTAogCiAgICAgR0MzRGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CiAjaWYgVVNFKEFO
R0xFKQotICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKKyAg
ICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNz
Q29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CiAjZWxzZQotICAg
IG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZv
cm1zKTsKKyAgICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZh
Y3RpdmVVbmlmb3Jtcyk7CiAjZW5kaWYKICAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhY3Rp
dmVVbmlmb3JtczsgaSsrKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZv
IGluZm87CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvIGluZm87CiAgICAg
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaSwgaW5mbykpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgLy8gU3Ry
aXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5LgpAQCAtMjk5OCwzNiArMjk5
OCwzNiBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRy
aWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRWZXJ0ZXhB
dHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4QXR0cmliIiwgImlu
ZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAg
ICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6VmVydGV4QXR0cmliU3RhdGUmIHN0
YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRl
eCk7CiAKLSAgICBpZiAoKGlzV2ViR0wyKCkgfHwgbV9hbmdsZUluc3RhbmNlZEFycmF5cykgJiYg
cG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9B
TkdMRSkKKyAgICBpZiAoKGlzV2ViR0wyKCkgfHwgbV9hbmdsZUluc3RhbmNlZEFycmF5cykgJiYg
cG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9B
TkdMRSkKICAgICAgICAgcmV0dXJuIHN0YXRlLmRpdmlzb3I7CiAKICAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZG
RVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfQVRUUklCX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgogICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYg
IWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUo
MCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCiAgICAgICAgICAgICB8
fCAhc3RhdGUuYnVmZmVyQmluZGluZwogICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRp
bmctPm9iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVy
biBzdGF0ZS5idWZmZXJCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRF
WF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6CiAgICAgICAgIHJldHVybiBzdGF0ZS5lbmFibGVkOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpF
RDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1B
TElaRUQ6CiAgICAgICAgIHJldHVybiBzdGF0ZS5ub3JtYWxpemVkOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6CiAgICAgICAgIHJldHVybiBzdGF0
ZS5zaXplOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlf
U1RSSURFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9BVFRSSUJfQVJSQVlf
U1RSSURFOgogICAgICAgICByZXR1cm4gc3RhdGUub3JpZ2luYWxTdHJpZGU7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKICAgICAgICAgcmV0dXJu
IHN0YXRlLnR5cGU7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhf
QVRUUklCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVUlJFTlRfVkVSVEVYX0FUVFJJ
QjoKICAgICAgICAgcmV0dXJuIEZsb2F0MzJBcnJheTo6dHJ5Q3JlYXRlKG1fdmVydGV4QXR0cmli
VmFsdWVbaW5kZXhdLnZhbHVlLCA0KTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmli
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIH0K
QEAgLTMxMTQsNyArMzExNCw3IEBAIEdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RF
U1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9URVNUKQogICAg
ICAgICByZXR1cm4gbV9zdGVuY2lsRW5hYmxlZDsKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc0Vu
YWJsZWQoY2FwKTsKIH0KQEAgLTMxODgsOCArMzE4OCw4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6bGlua1Byb2dyYW1XaXRob3V0SW52YWxpZGF0aW5nQXR0cmliTG9jYXRpb25z
KFdlCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgUmVmUHRyPFdlYkdMU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hl
ZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAgUmVmUHRyPFdl
YkdMU2hhZGVyPiBmcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIFJlZlB0cjxXZWJHTFNoYWRl
cj4gdmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250
ZXh0R0w6OlZFUlRFWF9TSEFERVIpOworICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gZnJhZ21lbnRT
aGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJB
R01FTlRfU0hBREVSKTsKICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5p
c1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgp
KSB7CiAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0zMjEyLDM1ICszMjEyLDM1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCiAgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dF
QkdMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19GTElQX1lfV0VCR0w6CiAg
ICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJhbTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKICAg
ICAgICAgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhID0gcGFyYW07CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05f
V0VCR0w6Ci0gICAgICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9E
RUZBVUxUX1dFQkdMIHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6
CisgICAgICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHRHTDo6QlJPV1NFUl9ERUZBVUxU
X1dFQkdMIHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKQogICAgICAgICAgICAg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJh
bSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFt
ZXRlciBmb3IgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIpOworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJw
aXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgVU5QQUNLX0NPTE9SU1BBQ0VfQ09O
VkVSU0lPTl9XRUJHTCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UEFDS19BTElHTk1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VU5QQUNLX0FMSUdOTUVOVDoKICAgICAgICAgaWYgKHBhcmFtID09IDEgfHwgcGFyYW0gPT0g
MiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgpIHsKLSAgICAgICAgICAgIGlmIChwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQpCisgICAgICAgICAgICBpZiAocG5h
bWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlBBQ0tfQUxJR05NRU5UKQogICAgICAgICAgICAgICAg
IG1fcGFja0FsaWdubWVudCA9IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3ND
b250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQ6CiAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGln
bm1lbnQgPSBwYXJhbTsKICAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUs
IHBhcmFtKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgZm9yIGFsaWdubWVudCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZh
bGlkIHBhcmFtZXRlciBmb3IgYWxpZ25tZW50Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KQEAgLTMyNjUsNjYgKzMyNjUs
NjYgQEAgZW51bSBjbGFzcyBJbnRlcm5hbEZvcm1hdFRoZW1lIHsKIHN0YXRpYyBJbnRlcm5hbEZv
cm1hdFRoZW1lIGludGVybmFsRm9ybWF0VGhlbWUoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7
CiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1JHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNSR0JfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxV
TUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTUkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U1JHQl9BTFBIQToKICAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0VGhlbWU6Ok5v
cm1hbGl6ZWRGaXhlZFBvaW50OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjExRl9HMTFGX0IxMEY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
MTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I5X0U1OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIx
MUZfRzExRl9CMTBGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUk6CiAg
ICAgICAgIHJldHVybiBJbnRlcm5hbEZvcm1hdFRoZW1lOjpQYWNrZWQ7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UjhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4
X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhfU05PUk06Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4X1NOT1JNOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhfU05PUk06CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQThfU05PUk06CiAgICAgICAgIHJldHVybiBJbnRlcm5hbEZvcm1hdFRo
ZW1lOjpTaWduZWROb3JtYWxpemVkRml4ZWRQb2ludDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukcz
MkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZGOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJGOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQTE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGOgogICAgICAgICBy
ZXR1cm4gSW50ZXJuYWxGb3JtYXRUaGVtZTo6RmxvYXRpbmdQb2ludDsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2SToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkczMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
OEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlIzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4SToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMy
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CiAg
ICAgICAgIHJldHVybiBJbnRlcm5hbEZvcm1hdFRoZW1lOjpTaWduZWRJbnRlZ2VyOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZVSToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMlVJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNlVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQThVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJVSToKICAgICAgICAgcmV0dXJuIEludGVybmFsRm9y
bWF0VGhlbWU6OlVuc2lnbmVkSW50ZWdlcjsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
SW50ZXJuYWxGb3JtYXRUaGVtZTo6Tm9uZTsKQEAgLTMzMzQsMTcgKzMzMzQsMTcgQEAgc3RhdGlj
IEludGVybmFsRm9ybWF0VGhlbWUgaW50ZXJuYWxGb3JtYXRUaGVtZShHQzNEZW51bSBpbnRlcm5h
bEZvcm1hdCkKIHN0YXRpYyBpbnQgbnVtYmVyT2ZDb21wb25lbnRzRm9yRm9ybWF0KEdDM0RlbnVt
IGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkVEX0lOVEVHRVI6CiAgICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdfSU5URUdFUjoKICAgICAgICAgcmV0dXJuIDI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JfSU5URUdFUjoKICAgICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBX0lOVEVHRVI6CiAgICAgICAgIHJldHVybiA0OwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiAwOwpAQCAtMzM1NCw2OSArMzM1NCw2OSBAQCBzdGF0aWMgaW50IG51bWJlck9mQ29t
cG9uZW50c0ZvckZvcm1hdChHQzNEZW51bSBmb3JtYXQpCiBzdGF0aWMgaW50IG51bWJlck9mQ29t
cG9uZW50c0ZvckludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogewogICAg
IHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
VU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhfU05P
Uk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlIxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQyNDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4
X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIz
Mkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgogICAgICAgICByZXR1cm4gMTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOF9TTk9S
TToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2RjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRzMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkczMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5B
TkNFX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKICAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjg6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFGX0IxMEY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJGOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMySToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
ODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCODoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOF9TTk9S
TToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I5X0U1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkY6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMy
VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJJOgogICAgICAgICByZXR1cm4g
MzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0JfQUxQSEE6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJGOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQThJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThfU05PUk06
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEz
Mkk6CiAgICAgICAgIHJldHVybiA0OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwpA
QCAtMzQzNCw1MiArMzQzNCw1MiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJl
YWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aAogICAgIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0ID0gMDsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
ICAgICAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwot
ICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRl
eHQzRCgpLCAmcmVhc29uKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIs
IHJlYXNvbik7CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdy
YXBoaWNzQ29udGV4dEdMKCksICZyZWFzb24pKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJy
ZWFkUGl4ZWxzIiwgcmVhc29uKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAvLyBGSVhNRTogcmVhZEJ1ZmZlcigpIHNob3VsZCBhZmZlY3QgdGhpcwogICAgICAgICBp
bnRlcm5hbEZvcm1hdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1h
dCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuYWxwaGEpCi0gICAg
ICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODsKKyAgICAg
ICAgICAgIGludGVybmFsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I4OworICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
ODsKICAgICB9CiAKICAgICBpZiAoIWludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhl
bHMiLCAiTWlzc2luZyBhdHRhY2htZW50Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiTWlzc2lu
ZyBhdHRhY2htZW50Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoaXNXZWJH
TDEoKSkgewogICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpBTFBIQToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGZvcm1h
dCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3JtYXQiKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xOgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpGTE9BVDoKICAgICAgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQgJiYgIW1fb2VzVGV4
dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIp
OworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVh
ZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8ICh0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmb3JtYXQgbm90
IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURXxGTE9BVCIpOworICAgICAgICBpZiAoZm9y
bWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBIHx8ICh0eXBlICE9IEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUKSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3Qg
VU5TSUdORURfQllURXxGTE9BVCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzQ4Nyw1MyArMzQ4Nyw1MyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aAogICAg
IEludGVybmFsRm9ybWF0VGhlbWUgaW50ZXJuYWxGb3JtYXRUaGVtZSA9IFdlYkNvcmU6OmludGVy
bmFsRm9ybWF0VGhlbWUoaW50ZXJuYWxGb3JtYXQpOwogICAgIGludCBpbnRlcm5hbEZvcm1hdENv
bXBvbmVudENvdW50ID0gbnVtYmVyT2ZDb21wb25lbnRzRm9ySW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxGb3JtYXQpOwogICAgIGlmIChpbnRlcm5hbEZvcm1hdFRoZW1lID09IEludGVybmFsRm9ybWF0
VGhlbWU6Ok5vbmUgfHwgIWludGVybmFsRm9ybWF0Q29tcG9uZW50Q291bnQpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQ
aXhlbHMiLCAiSW5jb3JyZWN0IGludGVybmFsIGZvcm1hdCIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJJ
bmNvcnJlY3QgaW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNk
ZWZpbmUgQ0hFQ0tfQ09NUE9ORU5UX0NPVU5UIFwKICAgICBpZiAobnVtYmVyT2ZDb21wb25lbnRz
Rm9yRm9ybWF0KGZvcm1hdCkgPCBpbnRlcm5hbEZvcm1hdENvbXBvbmVudENvdW50KSB7IFwKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
InJlYWRQaXhlbHMiLCAiTm90IGVub3VnaCBjb21wb25lbnRzIGluIGZvcm1hdCIpOyBcCisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJy
ZWFkUGl4ZWxzIiwgIk5vdCBlbm91Z2ggY29tcG9uZW50cyBpbiBmb3JtYXQiKTsgXAogICAgICAg
ICByZXR1cm47IFwKICAgICB9CiAKICNkZWZpbmUgSU5URVJOQUxfRk9STUFUX0NIRUNLKHR5cGVN
YWNybywgcGl4ZWxUeXBlTWFjcm8pIFwKLSAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6dHlwZU1hY3JvIHx8IHBpeGVscy5nZXRUeXBlKCkgIT0gSlNDOjpwaXhlbFR5cGVNYWNybykg
eyBcCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJyZWFkUGl4ZWxzIiwgInR5cGUgZG9lcyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0
Iik7IFwKKyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZU1hY3Jv
IHx8IHBpeGVscy5nZXRUeXBlKCkgIT0gSlNDOjpwaXhlbFR5cGVNYWNybykgeyBcCisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFk
UGl4ZWxzIiwgInR5cGUgZG9lcyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKICAgICAg
ICAgcmV0dXJuOyBcCiAgICAgfSBcCi0gICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVEICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkcgJiYgZm9ybWF0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KSB7IFwKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInJlYWRQaXhlbHMiLCAiVW5rbm93biBmb3JtYXQiKTsgXAorICAgIGlmIChmb3Jt
YXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFRCAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0
R0w6OlJHICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkdCICYmIGZvcm1hdCAhPSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQSkgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIlVua25vd24gZm9y
bWF0Iik7IFwKICAgICAgICAgcmV0dXJuOyBcCiAgICAgfSBcCiAgICAgQ0hFQ0tfQ09NUE9ORU5U
X0NPVU5UCiAKICNkZWZpbmUgSU5URVJOQUxfRk9STUFUX0lOVEVHRVJfQ0hFQ0sodHlwZU1hY3Jv
LCBwaXhlbFR5cGVNYWNybykgXAotICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjp0
eXBlTWFjcm8gfHwgcGl4ZWxzLmdldFR5cGUoKSAhPSBKU0M6OnBpeGVsVHlwZU1hY3JvKSB7IFwK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgInJlYWRQaXhlbHMiLCAidHlwZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsg
XAorICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0eXBlTWFjcm8gfHwg
cGl4ZWxzLmdldFR5cGUoKSAhPSBKU0M6OnBpeGVsVHlwZU1hY3JvKSB7IFwKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhl
bHMiLCAidHlwZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAogICAgICAgICBy
ZXR1cm47IFwKICAgICB9IFwKLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpS
RURfSU5URUdFUiAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVIgJiYg
Zm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUiAmJiBmb3JtYXQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUikgeyBcCi0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIlVua25v
d24gZm9ybWF0Iik7IFwKKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRURf
SU5URUdFUiAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgJiYgZm9y
bWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAmJiBmb3JtYXQgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUikgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIlVua25vd24g
Zm9ybWF0Iik7IFwKICAgICAgICAgcmV0dXJuOyBcCiAgICAgfSBcCiAgICAgQ0hFQ0tfQ09NUE9O
RU5UX0NPVU5UCiAKLSNkZWZpbmUgQ0FTRV9QQUNLRURfSU5URVJOQUxfRk9STUFUX0NIRUNLKGlu
dGVybmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3JvLCB0eXBlME1hY3JvLCBwaXhlbFR5cGUwTWFj
cm8sIHR5cGUxTWFjcm8sIHBpeGVsVHlwZTFNYWNybykgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
aW50ZXJuYWxGb3JtYXRNYWNybzogXAotICAgIGlmICghKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OnR5cGUwTWFjcm8gJiYgcGl4ZWxzLmdldFR5cGUoKSA9PSBKU0M6OnBpeGVsVHlwZTBNYWNy
bykgXAotICAgICAgICAmJiAhKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OnR5cGUxTWFjcm8g
JiYgcGl4ZWxzLmdldFR5cGUoKSA9PSBKU0M6OnBpeGVsVHlwZTFNYWNybykpIHsgXAotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVh
ZFBpeGVscyIsICJ0eXBlIGRvZXMgbm90IG1hdGNoIGludGVybmFsIGZvcm1hdCIpOyBcCisjZGVm
aW5lIENBU0VfUEFDS0VEX0lOVEVSTkFMX0ZPUk1BVF9DSEVDSyhpbnRlcm5hbEZvcm1hdE1hY3Jv
LCBmb3JtYXRNYWNybywgdHlwZTBNYWNybywgcGl4ZWxUeXBlME1hY3JvLCB0eXBlMU1hY3JvLCBw
aXhlbFR5cGUxTWFjcm8pIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludGVybmFsRm9y
bWF0TWFjcm86IFwKKyAgICBpZiAoISh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
eXBlME1hY3JvICYmIHBpeGVscy5nZXRUeXBlKCkgPT0gSlNDOjpwaXhlbFR5cGUwTWFjcm8pIFwK
KyAgICAgICAgJiYgISh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0eXBlMU1hY3Jv
ICYmIHBpeGVscy5nZXRUeXBlKCkgPT0gSlNDOjpwaXhlbFR5cGUxTWFjcm8pKSB7IFwKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJl
YWRQaXhlbHMiLCAidHlwZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAogICAg
ICAgICByZXR1cm47IFwKICAgICB9IFwKLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpmb3JtYXRNYWNybykgeyBcCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIkludmFsaWQgZm9ybWF0Iik7
IFwKKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JtYXRNYWNy
bykgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIkludmFsaWQgZm9ybWF0Iik7IFwKICAgICAgICAgcmV0
dXJuOyBcCiAgICAgfSBcCiAgICAgYnJlYWs7CiAKICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0
VGhlbWUpIHsKICAgICBjYXNlIEludGVybmFsRm9ybWF0VGhlbWU6Ok5vcm1hbGl6ZWRGaXhlZFBv
aW50OgotICAgICAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpIHsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUKSB7CiAgICAgICAgICAg
ICBJTlRFUk5BTF9GT1JNQVRfQ0hFQ0soRkxPQVQsIFR5cGVGbG9hdDMyKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIElOVEVSTkFMX0ZPUk1BVF9DSEVDSyhVTlNJR05FRF9CWVRFLCBU
eXBlVWludDgpOwpAQCAtMzU3NSwxMiArMzU3NSwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aAogICAgIHVuc2lnbmVkIHBhZGRpbmcgPSAwOwogICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRT
dXBwb3J0ZWQpIHsKICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJ
bWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25t
ZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7Ci0gICAgICAgIGlmIChlcnJvciAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgaWYgKGVycm9yICE9IEdy
YXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoZXJyb3IsICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZGltZW5zaW9ucyIpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChwaXhlbHMuYnl0ZUxlbmd0aCgpIDwg
dG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVm
ZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNpb25zIik7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJy
ZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNp
b25zIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjUyLDIy
ICszNjUyLDIyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jCiAgICAgaWYgKCF2YWxpZGF0ZVN0
ZW5jaWxGdW5jKCJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgZnVuYykpCiAgICAgICAgIHJldHVybjsK
ICAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9B
TkRfQkFDSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUk9OVF9BTkRfQkFDSzoKICAg
ICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKICAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJh
Y2sgPSByZWY7CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKICAgICAgICAgbV9z
dGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJPTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJPTlQ6
CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNN
YXNrID0gbWFzazsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QkFDSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLOgogICAgICAgICBtX3N0ZW5j
aWxGdW5jUmVmQmFjayA9IHJlZjsKICAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFz
azsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUi
LCAiaW52YWxpZCBmYWNlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgImludmFsaWQgZmFj
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNT
ZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwpAQCAtMzY4NywxOCArMzY4NywxOCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRHVpbnQgbWFzawogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
Uk9OVF9BTkRfQkFDSzoKICAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CiAgICAgICAgIG1f
c3RlbmNpbE1hc2tCYWNrID0gbWFzazsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJPTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJPTlQ6CiAg
ICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0s6
CiAgICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInN0ZW5jaWxNYXNrU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJz
dGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKQEAg
LTM3NDIsMzMgKzM3NDIsMzMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEcKICAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
dHlwZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpET01Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRp
cGx5QWxwaGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRJbXBs
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0Nv
bnRleHRHTDo6RE9NU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVt
dWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0
b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91
bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSk7CiAg
ICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0
YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1h
dCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJh
Y3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBz
b3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAg
ICBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VBbHBoYU9wKCk7CiAgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJh
Y3Rvci5pbWFnZVBpeGVsRGF0YSgpOwogCiAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7
Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291
cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTggJiYg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZyAmJiAhZmxpcFkpCisgICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6
OkRvTm90aGluZyAmJiAhZmxpcFkpCiAgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBp
bWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZv
cm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhl
aWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRh
KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0
ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAg
IG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQsIDEpOworICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdM
OjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKICAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9y
bWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEp
OwogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0Fs
aWdubWVudCk7CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
R0w6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KIAogYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1
bmNWYWxpZGF0aW9uU291cmNlVHlwZSBzb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0KQpAQCAtMzc4Miw3ICszNzgyLDcg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW4KIAogICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4
U3ViSW1hZ2UpIHsKICAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBUZXhJbWFnZSAmJiB0ZXh0
dXJlLT5pbW11dGFibGUoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0ZXhTdG9yYWdl
KCkgY2FsbGVkIG9uIHRoaXMgdGV4dHVyZSBwcmV2aW91c2x5Iik7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgInRleFN0b3JhZ2UoKSBjYWxsZWQgb24gdGhpcyB0ZXh0dXJlIHByZXZpb3VzbHki
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXZh
bGlkYXRlTlBPVFRleHR1cmVMZXZlbCh3aWR0aCwgaGVpZ2h0LCBsZXZlbCwgZnVuY3Rpb25OYW1l
KSkKQEAgLTM4MDAsMTUgKzM4MDAsMTUgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW4KICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlz
IGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KICAgICAgICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImJhZCBkaW1lbnNpb25zIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwg
bGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBs
ZXZlbCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRleHR1cmUtPmdl
dEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGludGVybmFsRm9ybWF0IHx8IChpc1dl
YkdMMSgpICYmIHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0
dXJlIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgYW5kIGZvcm1hdCBkbyBub3Qg
bWF0Y2ggdGV4dHVyZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzgzNSw0MSArMzgzNSw0MSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogICAg
ICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KICAgICBpZiAoY2hhbmdl
VW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CiAgICAgdGV4
SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKICAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25t
ZW50KQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgIG1fY29udGV4dC0+
cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNr
QWxpZ25tZW50KTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJ
bWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2UgZG9tU291cmNl
LCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0
cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9t
U291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09
IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKTsKICAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJh
Y3RTdWNjZWVkZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAi
dGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9y
LmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxw
aGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwogICAgIGNvbnN0IHZvaWQqIGlt
YWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKICAgICAKICAg
ICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5n
ICYmICFmbGlwWSkKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgJiYgYWxwaGFPcCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nICYmICFmbGlwWSkKICAgICAg
ICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCFtX2Nv
bnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUs
IGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdp
ZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdl
U291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAi
YmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CiAK
ICAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBp
bWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgbmVl
ZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhKTsKIAogICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cisg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19B
TElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiYmIHBpeGVscykKQEAgLTM4ODMsNyArMzg4Myw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDCiAKICAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzkwMywxOCArMzkwMywxOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQwogICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOwog
ICAgIH0KICAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRleHQt
PnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FM
SUdOTUVOVCwgMSk7CiAKICAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBkYXRhKTsKIAogICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1f
dW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGlj
c0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwogfQogCiBF
eGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgT3B0aW9uYWw8VGV4SW1h
Z2VTb3VyY2U+JiYgc291cmNlKQogewogICAgIGlmICghc291cmNlKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1h
Z2UyRCIsICJzb3VyY2UgaXMgbnVsbCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAic291cmNlIGlz
IG51bGwiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTM5MjgsNyArMzkyOCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAKICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAg
ICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFs
aWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJp
bnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICB9CiAKQEAgLTM5NDEsNyArMzk0MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNECiAKICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKElt
YWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKICAgICAgICAgaWYgKGltYWdlKQotICAg
ICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJj
ZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAg
ICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNl
OjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPEltYWdlRGF0YT4mIHBpeGVs
cykgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAgICBhdXRvIHRleHR1cmUgPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKQEAgLTM5NTAs
NyArMzk1MCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAKICAgICAgICAgR0MzRGVudW0g
aW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KTsKICAgICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJE
IiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1h
Z2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgICAgICBy
ZXR1cm4geyB9OwogICAgICAgICB9CiAKQEAgLTM5NjEsMjEgKzM5NjEsMjEgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0QKICAgICAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CiAgICAg
ICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTgu
CiAgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZvcm1h
dCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVtdWx0
aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAg
ICAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFn
ZURhdGEocGl4ZWxzLmdldCgpLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAi
YmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdl
IGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgMSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4
dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKIAogICAgICAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+
aGVpZ2h0KCksIGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0
YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSk7CiAKICAgICAgICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJ
R05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CiAKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9
ICwgWyZdKGNvbnN0IFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiYgaW1hZ2UpIC0+IEV4Y2VwdGlv
bk9yPHZvaWQ+IHsKQEAgLTQwMDAsMTQgKzQwMDAsMTQgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0QKIAogICAgICAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVy
bmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICBpZiAoIWludGVybmFsRm9ybWF0KSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZl
bCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3Ig
bGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBU
ZXhTdWJJbWFnZSwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0
KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEpOworICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFw
aGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9LCBbJl0oY29uc3Qg
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgY2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7
CiAgICAgICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCkBAIC00MDI0LDcgKzQwMjQs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogCiAgICAgICAgIEdDM0RlbnVtIGludGVybmFs
Rm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAg
ICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZh
bGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAi
aW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAgICAgfQogCkBAIC00MDM1LDcgKzQwMzUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRAogICAgICAgICBpZiAoaW1hZ2VEYXRhKQogICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIFRleEltYWdlU291
cmNlKGltYWdlRGF0YS5nZXQoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXhTdWJJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUs
IGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6Q2Fu
dmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAgICAg
ICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9y
bWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01T
b3VyY2U6OkNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsK
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNDA1NCw3
ICs0MDU0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKIAogICAgICAgICBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
OwogICAgICAgICBpZiAoIWludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQi
LCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFn
ZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgIH0KIApAQCAtNDA2NCw3ICs0MDY0LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0QKICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0lt
YWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CiAgICAg
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB0ZXhTdWJJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUs
IGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgdGV4U3ViSW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogI2VuZGlmCkBAIC00MDc2LDM2ICs0MDc2LDM2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
CiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQXJyYXlCdWZmZXJUeXBl
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdHlwZSwgT3B0aW9uYWw8SlNDOjpU
eXBlZEFycmF5VHlwZT4gYXJyYXlUeXBlKQogewogI2RlZmluZSBUWVBFX1ZBTElEQVRJT05fQ0FT
RShhcnJheVR5cGVNYWNybykgaWYgKGFycmF5VHlwZSAmJiBhcnJheVR5cGUudmFsdWUoKSAhPSBK
U0M6OmFycmF5VHlwZU1hY3JvKSB7IFwKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlC
dWZmZXJWaWV3IG5vdCAiICNhcnJheVR5cGVNYWNybyk7IFwKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCAiICNhcnJheVR5cGVNYWNybyk7IFwKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgXAogICAgICAgICB9IFwKICAgICAgICAgYnJlYWs7CiAKICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6CiAgICAgICAgIFRZ
UEVfVkFMSURBVElPTl9DQVNFKFR5cGVVaW50OCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgogICAgICAgICBUWVBF
X1ZBTElEQVRJT05fQ0FTRShUeXBlSW50OCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80
XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKICAgICAgICAgVFlQRV9WQUxJREFUSU9O
X0NBU0UoVHlwZVVpbnQxNik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6CiAgICAgICAgIFRZUEVfVkFMSURBVElP
Tl9DQVNFKFR5cGVJbnQxNik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8xMEZfMTFGXzExRl9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzVfOV85XzlfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgogICAgICAgICBUWVBFX1ZBTElEQVRJT05f
Q0FTRShUeXBlVWludDMyKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOgogICAgICAgICBUWVBFX1ZBTElEQVRJT05fQ0FT
RShUeXBlSW50MzIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNf
dGV4dHVyZV9mbG9hdAorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNf
dGV4dHVyZV9mbG9hdAogICAgICAgICBUWVBFX1ZBTElEQVRJT05fQ0FTRShUeXBlRmxvYXQzMik7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0
dXJlX2hhbGZfZmxvYXQKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JF
VjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3Rl
eHR1cmVfaGFsZl9mbG9hdAorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0Xzhf
UkVWOgogICAgICAgICBUWVBFX1ZBTElEQVRJT05fQ0FTRShUeXBlVWludDE2KTsKICAgICBkZWZh
dWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQxMjAsNyArNDEyMCw3IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0YShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDCiAgICAgaWYgKCFwaXhlbHMpIHsKICAgICAgICAgaWYg
KGRpc3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVs
cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MTMzLDEyICs0MTMzLDEy
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0YShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDCiAgICAgCiAgICAgdW5zaWduZWQgdG90YWxCeXRl
c1JlcXVpcmVkOwogICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VT
aXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50
LCAmdG90YWxCeXRlc1JlcXVpcmVkLCBudWxscHRyKTsKLSAgICBpZiAoZXJyb3IgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4
dEdMOjpOT19FUlJPUikgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVx
dWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBl
bm91Z2ggZm9yIHJlcXVlc3QiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZp
ZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3QiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxNTgsNDIgKzQxNTgsNDIgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmEKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmICh3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0
IDwgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVG
b3JMZXZlbCA9IHBvdygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKICAgICBz
d2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRDoKICAgICAgICAgaWYgKHdp
ZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZv
ckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiBy
YW5nZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFu
Z2UiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKICAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZSAm
JiB3aWR0aCAhPSBoZWlnaHQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWln
aHQgZm9yIGN1YmUgbWFwIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0
IGZvciBjdWJlIG1hcCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0
aCA9PSBoZWlnaHQuCiAgICAgICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hl
Y2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCiAgICAgICAg
IGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFw
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICAKICAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0g
MCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYm9yZGVyICE9IDAiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAKQEAgLTQyMDMsMjcgKzQyMDMsMjcgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmEKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5j
Rm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFs
Rm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCiB7
CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBI
QToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlO
QU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkE6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1NURU5DSUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgogICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0
aFRleHR1cmUgJiYgaXNXZWJHTDEoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4
dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0
ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJsZWQiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICBpZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgZGVwdGggZm9ybWF0cyIpOworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIGRlcHRoIGZvcm1hdHMiKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQ
SEFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVDoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQ6CiAgICAgICAgIGlmICghbV9leHRzUkdCKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJzUkdCIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAic1JHQiB0ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJsZWQiKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQy
MzEsNDkgKzQyMzEsNDkgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW8KICNpZiBFTkFCTEUoV0VC
R0wyKQogICAgICAgICBpZiAoIWlzV2ViR0wxKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZm9y
bWF0KSB7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQ6Ci0gICAgICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUjoKLSAgICAgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdfSU5URUdFUjoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
Ql9JTlRFR0VSOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRF
R0VSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEOgorICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6CisgICAgICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHX0lOVEVHRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Jf
SU5URUdFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdF
UjoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hP
UlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80
XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8x
OgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDoKICAgICAgICAgaWYgKCFtX29lc1RleHR1
cmVGbG9hdCAmJiBpc1dlYkdMMSgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdHlwZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUi
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkhBTEZfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6
CiAgICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0ICYmIGlzV2ViR0wxKCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MjRfODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfU0hPUlQ6CiAgICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSAmJiBpc1dl
YkdMMSgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQyODEsMTIzICs0
MjgxLDEyMyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3RpbwogI2lmIEVOQUJMRShXRUJHTDIpCiAg
ICAgICAgIGlmICghaXNXZWJHTDEoKSkgewogICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVY6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgotICAgICAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgotICAgICAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgorICAgICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKKyAgICAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNIT1JUOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6SU5UOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5U
XzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAjZW5kaWYKICAgICAgICAgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIGlu
dGVybmFsZm9ybWF0LCBmb3JtYXQsIGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KLSNkZWZpbmUgSU5U
RVJOQUxfRk9STUFUX0NBU0UoaW50ZXJuYWxGb3JtYXRNYWNybywgZm9ybWF0TWFjcm8sIHR5cGUw
LCB0eXBlMSwgdHlwZTIsIHR5cGUzLCB0eXBlNCkgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6aW50
ZXJuYWxGb3JtYXRNYWNybzogXAotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OmZvcm1hdE1hY3JvKSB7IFwKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCBm
b3IgaW50ZXJuYWxmb3JtYXQiKTsgXAorI2RlZmluZSBJTlRFUk5BTF9GT1JNQVRfQ0FTRShpbnRl
cm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZTAsIHR5cGUxLCB0eXBlMiwgdHlwZTMs
IHR5cGU0KSBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnRlcm5hbEZvcm1hdE1hY3Jv
OiBcCisgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9ybWF0TWFj
cm8pIHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0IGZvciBpbnRlcm5h
bGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVybiBmYWxzZTsgXAogICAgIH0gXAogICAgIGlmICh0
eXBlICE9IHR5cGUwICYmIHR5cGUgIT0gdHlwZTEgJiYgdHlwZSAhPSB0eXBlMiAmJiB0eXBlICE9
IHR5cGUzICYmIHR5cGUgIT0gdHlwZTQpIHsgXAotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMgfHwgKHR5cGUwICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpIQUxGX0ZMT0FUICYmIHR5cGUxICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICYm
IHR5cGUyICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICYmIHR5cGUzICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUKSkgeyBcCi0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSBmb3IgaW50ZXJuYWxmb3JtYXQiKTsgXAorICAgICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVMgfHwgKHR5cGUwICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpIQUxGX0ZMT0FUICYmIHR5cGUxICE9IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxG
X0ZMT0FUICYmIHR5cGUyICE9IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICYmIHR5cGUz
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUKSkgeyBcCisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgaW50ZXJuYWxmb3JtYXQiKTsgXAogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyBcCiAgICAgICAgIH0gXAogICAgIH0gXAogICAgIGJyZWFrOwogICAg
IHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0Ig
ICAgICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzVfNl81ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBICAgICAgICAgICAgICAsIFJHQkEg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKTsKLSAgICBJTlRFUk5BTF9G
T1JNQVRfQ0FTRShMVU1JTkFOQ0VfQUxQSEEgICAsIExVTUlOQU5DRV9BTFBIQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OkhBTEZfRkxPQVQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShMVU1JTkFOQ0Ug
ICAgICAgICAsIExVTUlOQU5DRSAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShBTFBIQSAgICAgICAgICAgICAsIEFMUEhBICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShSOCAgICAgICAgICAgICAgICAsIFJFRCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSOF9TTk9STSAgICAgICAg
ICAsIFJFRCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJ
TlRFUk5BTF9GT1JNQVRfQ0FTRShSMTZGICAgICAgICAgICAgICAsIFJFRCAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShS
MzJGICAgICAgICAgICAgICAsIFJFRCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSOFVJICAgICAgICAgICAgICAsIFJF
RF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5B
TF9GT1JNQVRfQ0FTRShSOEkgICAgICAgICAgICAgICAsIFJFRF9JTlRFR0VSICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSMTZVSSAg
ICAgICAgICAgICAsIFJFRF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSMTZJICAgICAgICAgICAgICAsIFJFRF9JTlRF
R0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JN
QVRfQ0FTRShSMzJVSSAgICAgICAgICAgICAsIFJFRF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSMzJJICAgICAgICAg
ICAgICAsIFJFRF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OklOVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzggICAgICAgICAgICAgICAsIFJHICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FT
RShSRzhfU05PUk0gICAgICAgICAsIFJHICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzE2RiAgICAgICAgICAgICAs
IFJHICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAgICAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRF
Uk5BTF9GT1JNQVRfQ0FTRShSRzMyRiAgICAgICAgICAgICAsIFJHICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzhV
SSAgICAgICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzhJICAgICAgICAgICAgICAsIFJHX0lO
VEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9G
T1JNQVRfQ0FTRShSRzE2VUkgICAgICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzE2SSAgICAg
ICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzMyVUkgICAgICAgICAgICAsIFJHX0lOVEVHRVIg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShSRzMySSAgICAgICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I4ICAgICAgICAgICAg
ICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJ
TlRFUk5BTF9GT1JNQVRfQ0FTRShTUkdCOCAgICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShS
R0I1NjUgICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzVfNl81ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I4X1NOT1JNICAgICAgICAsIFJH
QiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5B
TF9GT1JNQVRfQ0FTRShSMTFGX0cxMUZfQjEwRiAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I5X0U1
ICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF81XzlfOV85X1JFViAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxNkYgICAgICAgICAgICAsIFJHQiAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JN
QVRfQ0FTRShSR0IzMkYgICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I4VUkgICAgICAg
ICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I4SSAgICAgICAgICAgICAsIFJHQl9JTlRFR0VSICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FT
RShSR0IxNlVJICAgICAgICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxNkkgICAgICAgICAgICAs
IFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRF
Uk5BTF9GT1JNQVRfQ0FTRShSR0IzMlVJICAgICAgICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0Iz
MkkgICAgICAgICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OklOVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBOCAgICAgICAgICAgICAsIFJHQkEg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9G
T1JNQVRfQ0FTRShTUkdCOF9BTFBIQTggICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBOF9TTk9S
TSAgICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I1X0ExICAgICAgICAgICAsIFJHQkEgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShSR0JBNCAgICAgICAgICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxMF9BMiAgICAgICAg
ICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFViAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJ
TlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBMTZGICAgICAgICAgICAsIFJHQkEgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShS
R0JBMzJGICAgICAgICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBOFVJICAgICAgICAgICAsIFJH
QkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5B
TF9GT1JNQVRfQ0FTRShSR0JBOEkgICAgICAgICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxMF9B
MlVJICAgICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFViAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBMTZVSSAgICAgICAgICAsIFJHQkFfSU5U
RUdFUiAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JN
QVRfQ0FTRShSR0JBMTZJICAgICAgICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBMzJJICAgICAg
ICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OklOVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBMzJVSSAgICAgICAgICAsIFJHQkFfSU5URUdFUiAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FT
RShERVBUSF9DT01QT05FTlQgICAsIERFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVCAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBUSF9DT01QT05FTlQxNiAs
IERFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUICAgICAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRF
Uk5BTF9GT1JNQVRfQ0FTRShERVBUSF9DT01QT05FTlQyNCAsIERFUFRIX0NPTVBPTkVOVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBU
SF9DT01QT05FTlQzMkYsIERFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBUSF9TVEVOQ0lMICAgICAsIERFUFRI
X1NURU5DSUwgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9G
T1JNQVRfQ0FTRShERVBUSDI0X1NURU5DSUw4ICAsIERFUFRIX1NURU5DSUwgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBUSDMyRl9T
VEVOQ0lMOCAsIERFUFRIX1NURU5DSUwgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUXzMyX1VO
U0lHTkVEX0lOVF8yNF84X1JFViwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6CisgICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUkdCICAgICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9TSE9SVF81XzZfNSAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQSAgICAgICAgICAgICAg
LCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80LCBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OkhBTEZfRkxPQVQsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCk7CisgICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoTFVNSU5BTkNFX0FMUEhBICAgLCBMVU1JTkFOQ0VfQUxQSEEsIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoTFVN
SU5BTkNFICAgICAgICAgLCBMVU1JTkFOQ0UgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FU
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoQUxQSEEgICAgICAgICAgICAgLCBBTFBI
QSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUjggICAgICAgICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjhfU05PUk0g
ICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjE2RiAgICAgICAgICAgICAgLCBSRUQgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUjMyRiAgICAgICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjhVSSAgICAgICAgICAg
ICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUjhJICAgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
UjE2VUkgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjE2SSAgICAgICAgICAgICAgLCBS
RURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVCAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoUjMyVUkgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjMySSAg
ICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpJTlQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkc4ICAgICAgICAgICAgICAgLCBSRyAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoUkc4X1NOT1JNICAgICAgICAgLCBSRyAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkcxNkYgICAgICAg
ICAgICAgLCBSRyAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICAg
ICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkczMkYgICAgICAgICAgICAgLCBSRyAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUkc4VUkgICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkc4SSAgICAgICAgICAgICAg
LCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoUkcxNlVJICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkcx
NkkgICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9S
VCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkczMlVJICAgICAgICAgICAgLCBSR19J
TlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUkczMkkgICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOCAgICAg
ICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoU1JHQjggICAgICAgICAgICAgLCBSR0IgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUkdCNTY1ICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9TSE9SVF81XzZfNSAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOF9TTk9STSAgICAg
ICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUjExRl9HMTFGX0IxMEYgICAgLCBSR0IgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
UkdCOV9FNSAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZM
T0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTZGICAgICAgICAgICAgLCBS
R0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoUkdCMzJGICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOFVJ
ICAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOEkgICAgICAgICAgICAgLCBSR0JfSU5U
RUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoUkdCMTZVSSAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTZJICAgICAg
ICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVCAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMzJVSSAgICAgICAgICAgLCBSR0JfSU5URUdFUiAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUkdCMzJJICAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTggICAgICAgICAgICAg
LCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoU1JHQjhfQUxQSEE4ICAgICAgLCBSR0JBICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdC
QThfU05PUk0gICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRF
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCNV9BMSAgICAgICAgICAgLCBSR0JB
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xLCBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUkdCQTQgICAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTBfQTIg
ICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTE2RiAgICAgICAgICAgLCBSR0JBICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUkdCQTMyRiAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQThVSSAgICAgICAg
ICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQThJICAgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
UkdCMTBfQTJVSSAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTE2VUkgICAgICAgICAgLCBS
R0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoUkdCQTE2SSAgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTMy
SSAgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpJTlQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTMyVUkgICAgICAgICAgLCBSR0JBX0lO
VEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoREVQVEhfQ09NUE9ORU5UICAgLCBERVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9JTlQgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhfQ09NUE9O
RU5UMTYgLCBERVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9S
VCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhfQ09NUE9ORU5UMjQgLCBERVBUSF9DT01QT05F
TlQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoREVQVEhfQ09NUE9ORU5UMzJGLCBERVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dEdM
OjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhfU1RFTkNJTCAgICAg
LCBERVBUSF9TVEVOQ0lMICAsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMjRfOCAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoREVQVEgyNF9TVEVOQ0lMOCAgLCBERVBUSF9TVEVOQ0lMICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQ
VEgzMkZfU1RFTkNJTDggLCBERVBUSF9TVEVOQ0lMICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9B
VF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUOgogICAgICAgICBpZiAoZm9y
bWF0ICE9IGludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1h
dCBhbmQgaW50ZXJuYWxmb3JtYXQgbXVzdCBtYXRjaCIpOworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJmb3JtYXQgYW5kIGludGVybmFsZm9ybWF0IG11c3QgbWF0Y2giKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzZfNSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAmJiB0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUyAmJiB0eXBlICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdHlwZSBmb3IgaW50ZXJuYWwgZm9ybWF0Iik7CisgICAgICAgIGlmICh0eXBlICE9IEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZM
T0FUICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTICYmIHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIGZvciBpbnRlcm5hbCBmb3JtYXQiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFf
RVhUOgogICAgICAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBhbmQgaW50ZXJuYWxmb3JtYXQgbXVzdCBtYXRjaCIpOwor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgYW5kIGludGVybmFsZm9ybWF0IG11c3Qg
bWF0Y2giKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBp
ZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiB0eXBlICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80ICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCkgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGludGVybmFsIGZvcm1hdCIpOworICAg
ICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80ICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9G
TE9BVF9PRVMgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCkgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGludGVybmFsIGZvcm1hdCIp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiVW5rbm93biBpbnRlcm5hbCBmb3Jt
YXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJVbmtub3duIGludGVybmFsIGZvcm1hdCIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI3VuZGVmIElOVEVSTkFMX0ZPUk1BVF9DQVNF
CkBAIC00NDI4LDcgKzQ0MjgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNv
cHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgRwogewogICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZh
bGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlUZXhJbWFnZTJEIiwgQ29weVRleEltYWdlLCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRl
cm5hbEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQorICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBDb3B5VGV4SW1hZ2Us
IHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGlu
dGVybmFsRm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhJbnRlcm5hbEZvcm1hdCgiY29w
eVRleEltYWdlMkQiLCBpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0MzYs
MTYgKzQ0MzYsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEcKICAgICBpZiAoIXRleCkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChpbnRlcm5hbEZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9y
bWF0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29t
cGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIg
aXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3
aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93
ZXIgb2YgMiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2Yg
MiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJm
cmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAmcmVh
c29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsIHJlYXNvbik7Cisg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25B
Y2Nlc3MoZ3JhcGhpY3NDb250ZXh0R0woKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
LCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CkBAIC00NDU0LDcgKzQ0NTQsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgRwogICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CiAg
ICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lk
dGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwg
JmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CiAgICAgICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNr
QWxpZ25tZW50KTsKICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdo
dCA+IDApIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgY2xpcHBlZFggLSB4LCBjbGlwcGVkWSAtIHksCiAgICAgICAgICAgICAgICAgY2xp
cHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOwpAQCAtNDQ2Mywy
MSArNDQ2MywyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgRwogICAgICAgICBtX2NvbnRleHQt
PmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIpOwogCiAgICAgLy8gRklYTUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBp
cyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBleGVjdXRlZC4KLSAg
ICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0
TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSk7CiB9CiAKIHN0YXRpYyBib29sIGlzUkdC
Rm9ybWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogewotICAgIHJldHVybiBpbnRlcm5hbEZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCCi0gICAgICAgIHx8IGludGVybmFsRm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBCi0gICAgICAgIHx8IGludGVybmFsRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4Ci0gICAgICAgIHx8IGludGVybmFsRm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBODsKKyAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQgorICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQQorICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCOAorICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTg7CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBPcHRpb25h
bDxUZXhJbWFnZVNvdXJjZT4gc291cmNlKQogewogICAgIGlmICghc291cmNlKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
SW1hZ2UyRCIsICJzb3VyY2UgaXMgbnVsbCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAic291cmNlIGlz
IG51bGwiKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKQEAgLTQ0OTYsOCArNDQ5Niw4
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIC8vIEZJWE1FOiByZXN0cmljdGlv
biBvZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCiAg
ICAgICAgIC8vIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRp
b25zIGFyZSBmdWxseSBmdW5jdGlvbmFsLgogICAgICAgICBpZiAodGV4dHVyZQotICAgICAgICAg
ICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAgICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEpCisg
ICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSB7
CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0
KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZl
bCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUo
Km1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3Jt
YXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKQEAgLTQ1MTAs
NyArNDUxMCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIC8vIE5vcm1hbCBw
dXJlIFNXIHBhdGguCiAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJ
bWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CiAgICAgICAgIGlmIChpbWFn
ZSkKLSAgICAgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291
cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAg
ICAgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBm
b3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJ
bWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPEltYWdlRGF0YT4mIHBpeGVscykg
LT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSW1h
Z2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBw
aXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQpAQCAtNDUxOSwxOSArNDUx
OSwxOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKICAgICAgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlz
IG9mIGZvcm1hdCBSR0JBOC4KICAgICAgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYg
ZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBu
byBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICAgICAgaWYg
KCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUpCisgICAgICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAmJiB0eXBl
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKQogICAgICAgICAgICAgbmVlZENv
bnZlcnNpb24gPSBmYWxzZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoIW1fY29u
dGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMuZ2V0KCksIGZvcm1hdCwgdHlwZSwgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewotICAgICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIs
ICJiYWQgaW1hZ2UgZGF0YSIpOwogICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0g
ICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBB
Q0tfQUxJR05NRU5ULCAxKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3Jh
cGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogICAgICAgICB0ZXhJbWFnZTJE
QmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhl
bHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRh
KCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpKTsKICAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05N
RU5ULCBtX3VucGFja0FsaWdubWVudCk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSwgWyZd
KGNvbnN0IFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiYgaW1hZ2UpIC0+IEV4Y2VwdGlvbk9yPHZv
aWQ+IHsKICAgICAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKQEAgLTQ1NTIsNyAr
NDU1Miw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIGlmICghaW1hZ2VGb3JS
ZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCBTb3VyY2VI
VE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JS
ZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCAwLCAwKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JS
ZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAgICB0ZXhJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJl
bmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4mIGNhbnZhcykgLT4gRXhj
ZXB0aW9uT3I8dm9pZD4gewogICAgICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQpA
QCAtNDU3Miw4ICs0NTcyLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgLy8g
RklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5TSUdORURfQllURSBzaG91bGQg
YmUgbGlmdGVkIHdoZW4KICAgICAgICAgLy8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4
dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1bGx5IGZ1bmN0aW9uYWwuCiAgICAgICAgIGlmICh0
ZXh0dXJlCi0gICAgICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ig
fHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQotICAgICAgICAgICAgJiYgdHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgeworICAgICAgICAgICAgJiYg
KGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQSkKKyAgICAgICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0
ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAg
ICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNW
YWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAtNDU4OCw3ICs0NTg4LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQKICAgICAgICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgICAgIHRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgVGV4SW1hZ2VT
b3VyY2UoaW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleElt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNh
bnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6Q2FudmFz
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAgICAgICAg
dGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpD
YW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogI2lmIEVOQUJMRShWSURFTykKQEAgLTQ2MDgsOSArNDYwOCw5
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgY3VycmVu
dCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwK
ICAgICAgICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2ZWwgc2hvdWxk
IGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KICAgICAgICAgYXV0byB0ZXh0
dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7
Ci0gICAgICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYg
dGV4dHVyZQotICAgICAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
IHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAgICAgICAgICYmIHR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgaWYgKEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlCisgICAgICAgICAg
ICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBKQorICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURQogICAgICAgICAgICAgJiYgIWxldmVsKSB7CiAgICAgICAgICAg
ICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRl
cm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKQEAgLTQ2
MjUsNyArNDYyNSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VCdWZmZXI6
OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpE
T01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEp
OworICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQogI2VuZGlmCkBAIC00NjQwLDcgKzQ2NDAsNyBAQCBSZWZQdHI8
SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1h
Z2UmIGltYWdlLCBpbnQgdwogICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAg
IEltYWdlQnVmZmVyKiBidWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6
ZSk7CiAgICAgaWYgKCFidWYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6Ok9VVF9PRl9NRU1P
UlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCkBAIC00NjU3LDcgKzQ2NTcsNyBAQCBSZWZQdHI8SW1hZ2U+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZAogICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWln
aHQoKSk7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFn
ZUJ1ZmZlcihzaXplKTsKICAgICBpZiAoIWJ1ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9m
IG1lbW9yeSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CkBAIC00Njc2LDI1ICs0Njc2LDI1IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDCiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKICAgICBzd2l0
Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklM
VEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBh
cmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVCkKLSAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAgIGlmICgoaXNGbG9hdCAmJiBwYXJh
bWYgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdyYXBo
aWNzQ29udGV4dEdMOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4
dEdMOjpSRVBFQVQpCisgICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdyYXBo
aWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHRH
TDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVQRUFU
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlRFWFRVUkVfTUFYX0FOSVNPVFJP
UFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKICAgICAgICAgaWYgKCFt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFi
bGVkIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyLCBFWFRfdGV4
dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlz
RmxvYXQpIHsKQEAgLTQ3MjIsNyArNDcyMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50
UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50
IHByb2dyYW0iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVu
dCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ3MzUsNyArNDczNSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3Jt
MmYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTQ3NDgsNyArNDc0OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJy
ZW50IHByb2dyYW0iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3Vy
cmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ3NjEsNyArNDc2
MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidW5p
Zm9ybTRmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTQ3NzQsMTIgKzQ3NzQsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9y
IGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZv
ciBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgo
bG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2Nh
dGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUpICYmIHggPj0g
KGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0
ZXh0dXJlIHVuaXQiKTsKKyAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTQ3OTIsNyArNDc5Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50
UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50
IHByb2dyYW0iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVu
dCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ4MDUsNyArNDgwNSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3Jt
M2kiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTQ4MTgsNyArNDgxOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBjdXJy
ZW50IHByb2dyYW0iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3Vy
cmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ4NjUsMTEgKzQ4
NjUsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAgICBhdXRvIGRhdGEgPSB2LmRhdGEo
KTsKICAgICBhdXRvIGxlbmd0aCA9IHYubGVuZ3RoKCk7CiAKLSAgICBpZiAobG9jYXRpb24tPnR5
cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUpIHsKKyAgICBpZiAobG9jYXRpb24t
PnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVSX0NVQkUpIHsKICAgICAgICAgZm9yIChh
dXRvIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChkYXRhW2ldID49
IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkgewogICAgICAgICAgICAg
ICAgIExPRyhXZWJHTCwgIlRleHR1cmUgdW5pdCBzaXplPSV6dSwgdlslZF09JWQuIExvY2F0aW9u
IHR5cGUgPSAlMDRYLiIsIG1fdGV4dHVyZVVuaXRzLnNpemUoKSwgaSwgZGF0YVtpXSwgbG9jYXRp
b24tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1
bml0Iik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00
OTMxLDEyICs0OTMxLDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dXNlUHJv
Z3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiAgICAgaWYgKGRlbGV0ZWQpCiAgICAgICAgIHBy
b2dyYW0gPSAwOwogICAgIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAidXNlUHJvZ3JhbSIsICJwcm9ncmFtIG5vdCB2YWxpZCIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgewogICAgICAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSkKLSAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQo
Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRl
dGFjaGVkKGdyYXBoaWNzQ29udGV4dEdMKCkpOwogICAgICAgICBtX2N1cnJlbnRQcm9ncmFtID0g
cHJvZ3JhbTsKICAgICAgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9n
cmFtKSk7CiAgICAgICAgIGlmIChwcm9ncmFtKQpAQCAtNDk5Niw0NCArNDk5Niw0NCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQg
aW5kZXgsIEdDM0RpbnQgc2l6ZQogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNI
T1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOgogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInZlcnRleEF0
dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0eXBlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBv
aW50ZXIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
c2l6ZSA8IDEgfHwgc2l6ZSA+IDQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBz
aXplIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHN0cmlkZSIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBv
aW50ZXIiLCAiYmFkIHN0cmlkZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChv
ZmZzZXQgPCAwIHx8IG9mZnNldCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgb2Zmc2V0Iik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4
QXR0cmliUG9pbnRlciIsICJiYWQgb2Zmc2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIgJiYgb2Zmc2V0KSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0
dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0
dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5k
IGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRl
CiAgICAgYXV0byB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVzKHR5cGUpOwogICAgIGlmICghdHlwZVNp
emUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJ2ZXJ0
ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmICgoc3RyaWRlICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpICUgdHlwZVNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAi
c3RyaWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidmVydGV4QXR0
cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5vdCB2YWxpZCBmb3IgdHlwZSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIEdDM0RzaXplaSBieXRlc1BlckVsZW1lbnQgPSBzaXpl
ICogdHlwZVNpemU7CkBAIC01MDU0LDcgKzUwNTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlIG1vZGUpCiB7CiAgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJjb250ZXh0
IGFscmVhZHkgbG9zdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGFscmVhZHkg
bG9zdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MDg2LDExICs1MDg2LDExIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RDCiAgICAgLy8gdGhlIGRyaXZlciBvciBjb250ZXh0IGlt
cGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxvb3AgYSByZWFzb25hYmx5CiAgICAgLy8gbGFy
Z2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBleGlzdGluZyBlcnJvcnMuCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRF
cnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKyAgICAgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkg
PSAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpID8gRGlzcGxheUluQ29uc29sZTogRG9udERpc3Bs
YXlJbkNvbnNvbGU7Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TlRFWFRfTE9TVF9XRUJHTCwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRpc3BsYXkp
OworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpDT05URVhUX0xPU1Rf
V0VCR0wsICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKIAogICAgIC8v
IERvbid0IGFsbG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhh
cyBib3RoIGJlZW4KICAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBw
cmV2ZW50ZWQuCkBAIC01MTA0LDEzICs1MTA0LDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RD
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQog
ewogICAgIGlmICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVD
b250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAi
Y29udGV4dCBub3QgbG9zdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFt
X3Jlc3RvcmVBbGxvd2VkKSB7CiAgICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50
aGV0aWNMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQg
cmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0Iiwg
ImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNTE3Nyw3ICs1MTc3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpzdG9wKCkKIHsKICAgICBpZiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uKSB7CiAgICAgICAgIGZvcmNlTG9zdENvbnRleHQoU3ludGhldGljTG9zdENv
bnRleHQpOwotICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgZGVz
dHJveUdyYXBoaWNzQ29udGV4dEdMKCk7CiAgICAgfQogfQogCkBAIC01MjA1LDcgKzUyMDUsNyBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvb2xlYW5QYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCiAKIFZlY3Rvcjxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCiB7Ci0gICAgaWYgKHBuYW1l
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0spIHsKKyAgICBpZiAocG5hbWUg
IT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX1dSSVRFTUFTSykgewogICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTUyNTEsMTMgKzUyNTEs
MTMgQEAgUmVmUHRyPEZsb2F0MzJBcnJheT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0QKICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihw
bmFtZSwgdmFsdWUpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgc3dpdGNoIChwbmFt
ZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9SQU5HRToKICAgICAgICAgbGVuZ3RoID0gMjsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfQ09MT1I6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6QkxFTkRfQ09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1Jf
Q0xFQVJfVkFMVUU6CiAgICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CkBAIC01MjcyLDExICs1MjcyLDExIEBAIFJlZlB0cjxJbnQzMkFycmF5PiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtCiAg
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9W
SUVXUE9SVF9ESU1TOgogICAgICAgICBsZW5ndGggPSAyOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWSUVXUE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX0JP
WDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWSUVXUE9SVDoKICAgICAgICAgbGVuZ3Ro
ID0gNDsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTUzMDYsMTAgKzUzMDYsMTAg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja1RleHR1cmVDb21wbGV0ZW5l
c3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW0KICAgICAgICAgdXNlc0F0TGVhc3RPbmVCbGFja1Rl
eHR1cmUgPSB0cnVlOwogCiAgICAgICAgIGlmIChiYWRUZXh0dXJlICE9IG1fYWN0aXZlVGV4dHVy
ZVVuaXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShiYWRUZXh0dXJl
ICsgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
YWN0aXZlVGV4dHVyZShiYWRUZXh0dXJlICsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwKTsK
ICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAo
cmVzZXRBY3RpdmVVbml0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUo
YmFkVGV4dHVyZSArIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoYmFkVGV4dHVyZSArIEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFMCk7CiAgICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXgyRDsKQEAgLTUzMjUsMTIgKzUzMjUs
MTIgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja1RleHR1cmVDb21wbGV0
ZW5lc3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW0KICAgICAgICAgICAgIHRleEN1YmVNYXAgPSB0
ZXh0dXJlVW5pdC50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKG5lZWRzVG9Vc2VCbGFjazJEVGV4dHVyZSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0
ZXgyRC5nZXQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleDJELmdldCgpKSk7CiAgICAg
ICAgIGlmIChuZWVkc1RvVXNlQmxhY2szRFRleHR1cmUpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RP
clplcm8odGV4Q3ViZU1hcC5nZXQoKSkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3JaZXJvKHRl
eEN1YmVNYXAuZ2V0KCkpKTsKICAgICB9CiAgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKLSAgICAg
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQgKyBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUo
bV9hY3RpdmVUZXh0dXJlVW5pdCArIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIHJlbmRlcmFibGUgOiBub0xvbmdlclVucmVuZGVyYWJsZSkKICAgICAg
ICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMucmVtb3ZlKHJlbmRlcmFibGUpOwpAQCAtNTM0
MiwzMSArNTM0MiwzMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZh
bGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpCiB7CiAgICAgdW5zaWduZWQgY2hhciBibGFja1tdID0g
ezAsIDAsIDAsIDI1NX07CiAgICAgbV9ibGFja1RleHR1cmUyRCA9IGNyZWF0ZVRleHR1cmUoKTsK
LSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtX2JsYWNrVGV4dHVyZTJELT5vYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Cisg
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwg
bV9ibGFja1RleHR1cmUyRC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEs
IDEsIDEsCisgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDApOwogICAgIG1fYmxhY2tUZXh0dXJlQ3Vi
ZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVNYXAtPm9i
amVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEs
IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsK
LSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCAw
KTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVNYXAtPm9iamVjdCgpKTsKKyAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwg
MCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgYmxhY2spOwor
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQLCAwKTsKIH0KIAogYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJD
b21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LCBHQzNEZW51bSBjb2xv
ckJ1ZmZlckZvcm1hdCkKIHsKLSAgICBhdXRvIG5lZWQgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7Ci0gICAgYXV0byBoYXZlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3Jt
YXQpOworICAgIGF1dG8gbmVlZCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRDaGFubmVs
Qml0c0J5Rm9ybWF0KHRleEludGVybmFsRm9ybWF0KTsKKyAgICBhdXRvIGhhdmUgPSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1h
dCk7CiAgICAgcmV0dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKIH0KIApAQCAtNTM3NSw4ICs1
Mzc1LDggQEAgR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFt
ZWJ1ZmZlckNvbG9yRm9ybWF0KCkKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7CiAgICAgaWYgKG1fYXR0cmlidXRlcy5h
bHBoYSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkE7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I7CiB9CiAKIGludCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQpAQCAt
NTM5NywzMCArNTM5NywzMCBAQCBSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYQogewogICAgIFJlZlB0
cjxXZWJHTFRleHR1cmU+IHRleHR1cmU7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQ6CiAgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKICAgICAgICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVV
bml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV9DVUJFX01BUDoKICAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1h
cCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZzsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRh
cmdldCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtNTQyOCw3ICs1NDI4LDcgQEAgUmVmUHRy
PFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXh0dXJl
QmluZGluZyhjb25zdCBjaGEKICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMuYWRk
KG1fYWN0aXZlVGV4dHVyZVVuaXQpOwogCiAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyB0ZXh0dXJl
Iik7CiAgICAgcmV0dXJuIHRleHR1cmU7CiB9CiAKQEAgLTU0MzYsNyArNTQzNiw3IEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsCiB7CiAgICAgY29uc3QgdW5zaWduZWQgbWF4V2ViR0xMb2NhdGlv
bkxlbmd0aCA9IDI1NjsKICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpID4gbWF4V2ViR0xMb2NhdGlv
bkxlbmd0aCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gbGVuZ3RoID4gMjU2Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU0NDUsNyArNTQ0NSw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5
KQogewogICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8
IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NDU1LDcgKzU0NTUsNyBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgUwogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5nLmxl
bmd0aCgpOyArK2kpIHsKICAgICAgICAgaWYgKCF2YWxpZGF0ZUNoYXJhY3RlcihzdHJpbmdbaV0p
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5nIG5vdCBBU0NJSSIpOworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTU0NjUsMjQgKzU0NjUsMjQgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFMKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhG
dW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwpCiB7CiAgICAgaWYgKGxldmVsIDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2
ZWwgPCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV8yRDoKICAgICAgICAgaWYgKGxldmVsID49IG1fbWF4VGV4dHVyZUxldmVsKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgIGlmIChsZXZlbCA+PSBt
X21heEN1YmVNYXBUZXh0dXJlTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2Ui
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
QEAgLTU1MTEsNyArNTUxMSw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2FsY3VsYXRlQnl0
ZXNGb3JBU1RDKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3JiBwaXhlbHMpCiB7CiAgICAgaWYgKHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQg
PCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTU1MzUsMTYgKzU1MzUsMTYgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25z
dCBjaGFyKiBmdW5jdGkKICAgICAgICAgQmxvY2tQYXJhbWV0ZXJzIHsgMTIsIDEwLCBrQVNUQ0Js
b2NrU2l6ZSB9LAogICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyAxMiwgMTIsIGtBU1RDQmxvY2tT
aXplIH0KICAgICB9OwotICAgIGNvbnN0IEdDM0RlbnVtIEFTVENFbnVtU3RhcnRSR0JBID0gRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSOwotICAgIGNvbnN0IEdDM0Rl
bnVtIEFTVENFbnVtU3RhcnRTUkdCOCA9IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ180eDRfS0hSOworICAgIGNvbnN0IEdDM0RlbnVtIEFTVENFbnVtU3RhcnRSR0JB
ID0gRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSOworICAgIGNvbnN0
IEdDM0RlbnVtIEFTVENFbnVtU3RhcnRTUkdCOCA9IEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOwogCiAgICAgY29uc3QgaW50IGtFQUNBbmRFVEMyQmxv
Y2tTaXplID0gNDsKIAogICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX0FUQ19SR0JfQU1EOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpFVEMxX1JHQjhf
T0VTOiB7CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpFVEMxX1JHQjhfT0VTOiB7CiAgICAgICAgIGNvbnN0IGludCBrQmxv
Y2tTaXplID0gODsKICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CkBAIC01NTUzLDEwICs1NTUzLDEwIEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEo
Y29uc3QgY2hhciogZnVuY3RpCiAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jv
c3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1E
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRF
RF9BTFBIQV9BTUQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBM
SUNJVF9BTFBIQV9BTUQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfQVRDX1JH
QkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKICAgICAgICAgewogICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1NpemUgPSAxNjsKICAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9
IDQ7CkBAIC01NTY2LDggKzU1NjYsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aQogICAgICAg
ICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJsb2Nrc0Rvd24gKiBr
QmxvY2tTaXplOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CiAgICAgICAgIHsKICAgICAg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKICAgICAgICAgICAgIGNvbnN0IGludCBr
QmxvY2tXaWR0aCA9IDg7CkBAIC01NTc1LDggKzU1NzUsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1
bmN0aQogICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2Nr
V2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogNCArIDcpIC8ga0Jsb2Nr
U2l6ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgogICAgICAgICB7CiAgICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CiAgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2Nr
V2lkdGggPSAxNjsKQEAgLTU1ODQsNzUgKzU1ODQsNzUgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5j
dGkKICAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dp
ZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9ja1Np
emU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzV4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9BU1RDXzZ4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
QV9BU1RDXzZ4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9B
U1RDXzh4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RD
Xzh4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4
OF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVf
S0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tI
UjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI6CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI6CisgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfMTB4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzEweDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfMTJ4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ18xMngxMl9LSFI6CiAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBjYWxjdWxhdGVC
eXRlc0ZvckFTVEMod2lkdGgsIGhlaWdodCwgQVNUQ1BhcmFtZXRlcnNbZm9ybWF0IC0gQVNUQ0Vu
dW1TdGFydFJHQkFdKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9L
SFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
OHg2X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ184eDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FM
UEhBOF9BU1RDXzEweDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NS
R0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6
CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0
X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q181eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzZ4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfNng2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9L
SFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzEyeDEyX0tIUjoKICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IGNhbGN1bGF0ZUJ5dGVz
Rm9yQVNUQyh3aWR0aCwgaGVpZ2h0LCBBU1RDUGFyYW1ldGVyc1tmb3JtYXQgLSBBU1RDRW51bVN0
YXJ0U1JHQjhdKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUjExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TSUdORURf
UjExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfRVRDMjoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEEx
X0VUQzI6IHsKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SMTFfRUFDOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjogewogICAgICAgICBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZEJ5dGVzUmVxdWlyZWQgPSAo
d2lkdGggKyBrRUFDQW5kRVRDMkJsb2NrU2l6ZSAtIDEpIC8ga0VBQ0FuZEVUQzJCbG9ja1NpemU7
CiAgICAgICAgIGNoZWNrZWRCeXRlc1JlcXVpcmVkICo9IChoZWlnaHQgKyBrRUFDQW5kRVRDMkJs
b2NrU2l6ZSAtIDEpIC8ga0VBQ0FuZEVUQzJCbG9ja1NpemU7CiAgICAgICAgIGNoZWNrZWRCeXRl
c1JlcXVpcmVkICo9IDg7CiAgICAgICAgIGlmIChjaGVja2VkQnl0ZXNSZXF1aXJlZC5oYXNPdmVy
Zmxvd2VkKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0b28gbGFyZ2UgZGltZW5zaW9ucyIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRvbyBsYXJnZSBkaW1lbnNpb25zIik7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IGNo
ZWNrZWRCeXRlc1JlcXVpcmVkLnVuc2FmZUdldCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkcxMV9FQUM6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzogeworICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1JHMTFfRUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NJR05FRF9SRzExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JB
OF9FVEMyX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfRVRDMl9FQUM6IHsKICAgICAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IGNoZWNrZWRCeXRlc1JlcXVpcmVkID0gKHdpZHRoICsga0VBQ0FuZEVUQzJCbG9ja1NpemUgLSAx
KSAvIGtFQUNBbmRFVEMyQmxvY2tTaXplOwogICAgICAgICBjaGVja2VkQnl0ZXNSZXF1aXJlZCAq
PSAoaGVpZ2h0ICsga0VBQ0FuZEVUQzJCbG9ja1NpemUgLSAxKSAvIGtFQUNBbmRFVEMyQmxvY2tT
aXplOwogICAgICAgICBjaGVja2VkQnl0ZXNSZXF1aXJlZCAqPSAxNjsKICAgICAgICAgaWYgKGNo
ZWNrZWRCeXRlc1JlcXVpcmVkLmhhc092ZXJmbG93ZWQoKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgInRvbyBsYXJnZSBkaW1lbnNpb25zIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidG9vIGxh
cmdlIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBieXRlc1JlcXVpcmVkID0gY2hlY2tlZEJ5dGVzUmVxdWlyZWQudW5zYWZlR2V0KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIGZvcm1hdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKHBpeGVscy5ieXRlTGVuZ3RoKCkg
IT0gYnl0ZXNSZXF1aXJlZCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGVuZ3RoIG9mIEFycmF5QnVm
ZmVyVmlldyBpcyBub3QgY29ycmVjdCBmb3IgZGltZW5zaW9ucyIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibGVuZ3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29ycmVjdCBmb3IgZGltZW5zaW9u
cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC01NjYyLDEwICs1NjYyLDEw
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4
RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3RpCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0KQogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewogICAgICAgICBjb25z
dCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OwogICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Js
b2NrSGVpZ2h0ID0gNDsKICAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9IHRh
cmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKQEAgLTU2
NzMsNjAgKzU2NzMsNjAgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmMKICAgICAgICAgYm9vbCB3
aWR0aFZhbGlkID0gKGxldmVsICYmIHdpZHRoID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAy
KSB8fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGlt
ZW5zaW9uKTsKICAgICAgICAgYm9vbCBoZWlnaHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0g
MSkgfHwgKGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQp
ICYmIGhlaWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKICAgICAgICAgaWYgKCF3aWR0
aFZhbGlkIHx8ICFoZWlnaHRWYWxpZCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0
aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKICAg
ICAgICAgLy8gSGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBvZiAyLgogICAgICAgICBp
ZiAoKHdpZHRoICYgKHdpZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZl
bCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBm
b3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FT
VENfNHg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
NXg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg1
X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tI
UjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hS
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4
Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FT
VENfOHg1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ184eDZfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4
X0FMUEhBOF9BU1RDXzh4OF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
U1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9L
SFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkVUQzFfUkdCOF9PRVM6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUjExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TSUdORURfUjExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SRzExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TSUdORURfUkcx
MV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9F
VEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ18xMngxMF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzEyeDEyX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hS
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4
OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FT
VENfMTB4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfMTB4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFI6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkVUQzFfUkdCOF9PRVM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfUjExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TSUdORURf
UjExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUM6CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzoKICAgICAgICAgLy8gTm8g
aGVpZ2h0IGFuZCB3aWR0aCByZXN0cmljdGlvbnMgb24gQVNUQywgRVRDMSBvciBFVEMyLgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgpAQCAtNTczOCw1OCArNTczOCw1OCBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRp
bWVuc2lvbnMoY29uc3QgY2hhciogZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4KQogewogICAgIGlmICh4
b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCkgewotICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3Ig
eW9mZnNldCA8IDAiKTsKLSAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhv
ZmZzZXQgb3IgeW9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAog
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9FWFQ6IHsKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0VYVDogewogICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwogICAgICAgICBjb25z
dCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKICAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2NrV2lk
dGgpIHx8ICh5b2Zmc2V0ICUga0Jsb2NrSGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBvZiA0Iik7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHdpZHRoIC0g
eG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKICAgICAgICAgICAgIHx8IGhl
aWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNz
ZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0KTsKICAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
X1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
X1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
QV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsKICAgICAgICAgaWYgKHhvZmZzZXQgfHwgeW9mZnNl
dCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IGFuZCB5b2Zmc2V0IG11c3Qg
YmUgemVybyIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IGFuZCB5b2Zmc2V0
IG11c3QgYmUgemVybyIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh3aWR0aCAhPSB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpCiAgICAgICAg
ICAgICB8fCBoZWlnaHQgIT0gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIGxldmVs
Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBtYXRjaCBleGlz
dGluZyBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwg
dGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKICAgICB9Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkVUQzFfUkdCOF9PRVM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkVUQzFf
UkdCOF9PRVM6CiAgICAgICAgIC8vIE5vdCBzdXBwb3J0ZWQgZm9yIEVUQzFfUkdCOF9PRVMgdGV4
dHVyZXMuCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJR05F
RF9SMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHMTFfRUFDOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOiB7Ci0gICAgICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfM0QpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAibm90IHN1cHBvcnRlZCBvbiBURVhUVVJFXzNEIHRleHR1cmVzIik7Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUjExX0VBQzoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9TSUdORURfUjExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9TSUdORURfUkcxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdC
OF9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEEx
X0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJP
VUdIX0FMUEhBMV9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkE4
X0VUQzJfRUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9FVEMyX0VBQzogeworICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFXzNEKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vdCBzdXBwb3J0ZWQgb24g
VEVYVFVSRV8zRCB0ZXh0dXJlcyIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gNDsKQEAgLTU3OTgsNyArNTc5OCw3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4
U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmCiAgICAgICAgIGlmICgoeG9mZnNldCAlIGtCbG9j
a1NpemUpIHx8ICh5b2Zmc2V0ICUga0Jsb2NrU2l6ZSkKICAgICAgICAgICAgIHx8ICgod2lkdGgg
JSBrQmxvY2tTaXplKSAmJiB4b2Zmc2V0ICsgd2lkdGggIT0gdGV4V2lkdGgpCiAgICAgICAgICAg
ICB8fCAoKGhlaWdodCAlIGtCbG9ja1NpemUpICYmIHlvZmZzZXQgKyBoZWlnaHQgIT0gdGV4SGVp
Z2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2gg
ZXhpc3RpbmcgdGV4dHVyZSBsZXZlbCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImRpbWVuc2lvbnMgbXVzdCBtYXRjaCBleGlzdGluZyB0ZXh0dXJlIGxldmVsIGRpbWVu
c2lvbnMiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTU4MTEsMTYgKzU4MTEsMTYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIq
IGYKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3TW9kZShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2Rl
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9JTlRTOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElO
RV9MT09QOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVTOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRSSUFOR0xFX0ZBTjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9JTlRTOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkxJTkVfU1RSSVA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElORV9M
T09QOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVTOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlRSSUFOR0xFX1NUUklQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRSSUFOR0xFX0ZBTjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUklBTkdMRVM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgZHJhdyBtb2RlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CkBAIC01ODI4LDcgKzU4MjgsNyBAQCBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVN0ZW5jaWxTZXR0aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgaWYg
KG1fc3RlbmNpbE1hc2sgIT0gbV9zdGVuY2lsTWFza0JhY2sgfHwgbV9zdGVuY2lsRnVuY1JlZiAh
PSBtX3N0ZW5jaWxGdW5jUmVmQmFjayB8fCBtX3N0ZW5jaWxGdW5jTWFzayAhPSBtX3N0ZW5jaWxG
dW5jTWFza0JhY2spIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmcm9udCBhbmQgYmFjayBzdGVu
Y2lscyBzZXR0aW5ncyBkbyBub3QgbWF0Y2giKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmcm9u
dCBhbmQgYmFjayBzdGVuY2lscyBzZXR0aW5ncyBkbyBub3QgbWF0Y2giKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU4MzcsMTcgKzU4MzcsMTcg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5n
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZ1bmMpCiB7CiAgICAgc3dpdGNoIChmdW5jKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TkVWRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JF
QVRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFV
QUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6Ok5FVkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxFU1M6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TEVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkdSRUFURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6R0VRVUFMOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6Ok5PVEVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMV0FZUzoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBm
dW5jdGlvbiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiB9CkBAIC01ODc3LDExICs1ODc3LDExIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cHJpbnRUb0NvbnNvbGUoTWVzc2FnZUxldmVsIGxldmVs
LCBjb25zdCBTdHJpbmcmCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3Jj
LCBHQzNEZW51bSBkc3QpCiB7Ci0gICAgaWYgKCgoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpD
T05TVEFOVF9DT0xPUiB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05T
VEFOVF9DT0xPUikKLSAgICAgICAgICYmIChkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNU
QU5UX0FMUEhBIHx8IGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBKSkKLSAgICAgICAgfHwgKChkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5U
X0NPTE9SIHx8IGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SKQotICAgICAgICAgICAgJiYgKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRf
QUxQSEEgfHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQ
SEEpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImluY29tcGF0aWJsZSBzcmMgYW5kIGRzdCIp
OworICAgIGlmICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHRHTDo6Q09OU1RBTlRfQ09MT1IgfHwg
c3JjID09IEdyYXBoaWNzQ29udGV4dEdMOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAg
ICAgICYmIChkc3QgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTlNUQU5UX0FMUEhBIHx8IGRzdCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkKKyAgICAgICAg
fHwgKChkc3QgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTlNUQU5UX0NPTE9SIHx8IGRzdCA9PSBH
cmFwaGljc0NvbnRleHRHTDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAgICAg
JiYgKHNyYyA9PSBHcmFwaGljc0NvbnRleHRHTDo6Q09OU1RBTlRfQUxQSEEgfHwgc3JjID09IEdy
YXBoaWNzQ29udGV4dEdMOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImluY29tcGF0aWJsZSBzcmMgYW5kIGRzdCIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtNTkxMiwxOSArNTkxMiwxOSBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoY29uc3QgY2hhciogZnVuYwogICAgIGlmICghbG9jYXRpb24pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVudCBw
cm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3Vy
cmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCF2
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
YXJyYXkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAodHJhbnNwb3Nl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNpemUgJSByZXF1aXJlZE1p
blNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgc2l6ZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IHJldHVybiB0cnVlOwpAQCAtNTkzNCwzMiArNTkzNCwzMiBAQCBXZWJHTEJ1ZmZlciogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBj
aGFyKgogewogICAgIE9wdGlvbmFsPFdlYkdMQnVmZmVyKj4gYnVmZmVyOwogICAgIHN3aXRjaCAo
dGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZG
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVI6CiAg
ICAgICAgIGJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVI6CiAg
ICAgICAgIGJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBpZiAoaXNXZWJHTDIo
KSkgewogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPUFlfUkVBRF9CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpDT1BZX1JFQURfQlVGRkVSOgogICAgICAgICAgICAgICAgIGJ1ZmZlciA9
IG1fYm91bmRDb3B5UmVhZEJ1ZmZlci5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfV1JJVEVfQlVGRkVSOgorICAg
ICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9XUklURV9CVUZGRVI6CiAgICAg
ICAgICAgICAgICAgYnVmZmVyID0gbV9ib3VuZENvcHlXcml0ZUJ1ZmZlci5nZXQoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJ
WEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElY
RUxfUEFDS19CVUZGRVI6CiAgICAgICAgICAgICAgICAgYnVmZmVyID0gbV9ib3VuZFBpeGVsUGFj
a0J1ZmZlci5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgogICAgICAgICAgICAgICAg
IGJ1ZmZlciA9IG1fYm91bmRQaXhlbFVucGFja0J1ZmZlci5nZXQoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVI6CiAgICAgICAgICAg
ICAgICAgYnVmZmVyID0gbV9ib3VuZFVuaWZvcm1CdWZmZXIuZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01OTY3LDMyICs1OTY3LDMyIEBAIFdlYkdMQnVm
ZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNlbmRp
ZgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgaWYg
KCFidWZmZXIgfHwgIWJ1ZmZlci52YWx1ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8g
YnVmZmVyIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gYnVmZmVyIik7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICBzd2l0Y2ggKHVzYWdlKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RBVElDX0RSQVc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRZ
TkFNSUNfRFJBVzoKICAgICAgICAgcmV0dXJuIGJ1ZmZlci52YWx1ZSgpOwogICAgIH0KLSAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHVzYWdlIik7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1c2FnZSIpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCiBFeGNlcHRpb25Pcjxib29sPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSkKIHsKICAgICBpZiAoIWltYWdlIHx8ICFp
bWFnZS0+Y2FjaGVkSW1hZ2UoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gaW1hZ2UiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgY29uc3QgVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2UoKS51
cmwoKTsKICAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpCkBAIC02MDAzLDcgKzYwMDMsNyBAQCBFeGNl
cHRpb25Pcjxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgY2hhcgogRXhjZXB0aW9uT3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMpCiB7CiAgICAgaWYgKCFjYW52YXMgfHwgIWNh
bnZhcy0+YnVmZmVyKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAibm8gY2FudmFzIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2FudmFzKSkKQEAgLTYwMTYsNyArNjAxNiw3IEBAIEV4
Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoY29uc3QgY2hhCiBFeGNlcHRpb25Pcjxib29sPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbykKIHsKICAgICBpZiAoIXZpZGVvIHx8ICF2aWRl
by0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHZpZGVvIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4odmlkZW8pKQpA
QCAtNjAzMSw3ICs2MDMxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0
ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0QKICAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49
IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJh
bmdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJp
YjAgdmFsdWVzLgpAQCAtNjA2NSwxNyArNjA2NSwxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
MwogICAgIAogICAgIGF1dG8gZGF0YSA9IGxpc3QuZGF0YSgpOwogICAgIGlmICghZGF0YSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaW50IHNpemUgPSBsaXN0Lmxl
bmd0aCgpOwogICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIHNpemUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ly8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KQEAgLTYxMDYs
MTEgKzYxMDYsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVydGV4
QXR0cmliMCgpCiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OlZlcnRleEF0dHJpYlN0
YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3Rh
dGUoMCk7CiAgICAgCiAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVyKCk7
Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+YnVm
ZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIo
MCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgbV9jb250
ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4
QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFw
aGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6RFlOQU1J
Q19EUkFXKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhp
Y3NDb250ZXh0R0w6OkZMT0FULCBmYWxzZSwgMCwgMCk7CiAgICAgc3RhdGUuYnVmZmVyQmluZGlu
ZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIDApOwogICAgIG1fY29udGV4dC0+
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CiAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6
ZSA9IDA7CiAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAwLjBmOwpAQCAtNjE1
Nyw3ICs2MTU3LDcgQEAgT3B0aW9uYWw8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0R1aW50IG51bVZlcnQKICAgICBpZiAoIXVzaW5nVmVy
dGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVlOwotICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmpl
Y3QoKSk7CiAKICAgICAvLyBXZSBrbm93IGJ1ZmZlclNpemUgYW5kIGJ1ZmZlckRhdGFTaXplIHdv
bid0IG92ZXJmbG93IG9yIGdvIG5lZ2F0aXZlLCB0aGFua3MgdG8gdmFsaWRhdGVTaW11bGF0ZWRW
ZXJ0ZXhBdHRyaWIwCiAgICAgR0MzRHVpbnQgYnVmZmVyU2l6ZSA9IChudW1WZXJ0ZXggKyAxKSAq
IDQ7CkBAIC02MTY1LDggKzYxNjUsOCBAQCBPcHRpb25hbDxib29sPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHVpbnQgbnVtVmVydAogCiAgICAg
aWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSkgewogICAgICAg
ICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgICAgICBt
X2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgYnVm
ZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgICAg
ICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJP
UikgeworICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0R0w6OkFS
UkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpEWU5BTUlD
X0RSQVcpOworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpICE9IEdyYXBoaWNzQ29u
dGV4dEdMOjpOT19FUlJPUikgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gY3Jl
YXRlIGEgYnVmZmVyLgogICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IGZh
bHNlOwogICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7CkBAIC02MTk4
LDkgKzYxOTgsOSBAQCBPcHRpb25hbDxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpz
aW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHVpbnQgbnVtVmVydAogICAgICAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwogICAgICAgICBtX3Zl
cnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwogICAgICAg
ICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQt
PmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVy
RGF0YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1
YkRhdGEoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNpemUs
IGJ1ZmZlckRhdGEuZ2V0KCkpOwogICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FU
LCAwLCAwLCAwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjIwOCwxMCArNjIwOCwxMCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVTdGF0ZXNBZnRlclZlcnRl
eEF0dHJpYjBTaW11bGF0aW9uKCkKIHsKICAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZTo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKICAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGluZyAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhzdGF0ZS5idWZm
ZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOwogICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3Rh
dGUuc2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJp
ZGUsIHN0YXRlLm9mZnNldCk7CiAgICAgfQotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVm
ZmVyLmdldCgpKSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dEdM
OjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRMb3N0
RXZlbnQoKQpAQCAtNjI0NywyMSArNjI0NywyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6Om1heWJlUmVzdG9yZUNvbnRleHQoKQogICAgIGludCBjb250ZXh0TG9zdFJlYXNvbiA9
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsK
IAogICAgIHN3aXRjaCAoY29udGV4dExvc3RSZWFzb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUjoKLSAgICAgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNEIGltcGxl
bWVudGF0aW9uIG1pZ2h0IG5vdCBmdWxseQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok5P
X0VSUk9SOgorICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgaW1wbGVtZW50
YXRpb24gbWlnaHQgbm90IGZ1bGx5CiAgICAgICAgIC8vIHN1cHBvcnQgR0xfQVJCX3JvYnVzdG5l
c3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCiAgICAgICAgIC8vIFdFQkdMX2xv
c2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9yY2UKICAgICAg
ICAgLy8gYSBsb3N0IGNvbnRleHQuCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkdV
SUxUWV9DT05URVhUX1JFU0VUX0FSQjoKICAgICAgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0
IGlzIG5vdCByZXN0b3JlZCBpZiB0aGlzIGNvbnRleHQgd2FzCiAgICAgICAgIC8vIGd1aWx0eSBv
ZiBjYXVzaW5nIHRoZSBncmFwaGljcyByZXNldC4KICAgICAgICAgcHJpbnRUb0NvbnNvbGUoTWVz
c2FnZUxldmVsOjpXYXJuaW5nLCAiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBj
YXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNvbnRl
eHQiKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VOVF9D
T05URVhUX1JFU0VUX0FSQjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6SU5OT0NFTlRfQ09OVEVY
VF9SRVNFVF9BUkI6CiAgICAgICAgIC8vIEFsd2F5cyBhbGxvdyB0aGUgY29udGV4dCB0byBiZSBy
ZXN0b3JlZC4KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlVOS05PV05f
Q09OVEVYVF9SRVNFVF9BUkI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlVOS05PV05fQ09OVEVY
VF9SRVNFVF9BUkI6CiAgICAgICAgIC8vIFdhcm4uIElkZWFsbHksIHByb21wdCB0aGUgdXNlciB0
ZWxsaW5nIHRoZW0gdGhhdCBXZWJHTAogICAgICAgICAvLyBjb250ZW50IG9uIHRoZSBwYWdlIG1p
Z2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvCiAgICAgICAgIC8vIHJlc2V0IGFu
ZCBhc2sgdGhlbSB3aGV0aGVyIHRoZXkgd2FudCB0byBjb250aW51ZSBydW5uaW5nCkBAIC02Mjky
LDEzICs2MjkyLDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0
b3JlQ29udGV4dCgpCiAgICAgaWYgKCFob3N0V2luZG93KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShtX2F0
dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgaWYg
KG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkKICAgICAgICAgICAgIG1fcmVz
dG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBwZW4g
YnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiIiwgImVy
cm9yIHJlc3RvcmluZyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYz
NjcsMTcgKzYzNjcsMTcgQEAgbmFtZXNwYWNlIHsKICAgICBTdHJpbmcgR2V0RXJyb3JTdHJpbmco
R0MzRGVudW0gZXJyb3IpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGVycm9yKSB7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNOgogICAgICAgICAgICAgcmV0dXJuICJJTlZBTElE
X0VOVU0iX3M7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU6CiAgICAgICAg
ICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiX3M7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTjoKICAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJ
T04iX3M7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlk6Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok9VVF9PRl9NRU1PUlk6CiAgICAgICAgICAg
ICByZXR1cm4gIk9VVF9PRl9NRU1PUlkiX3M7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKICAgICAgICAgICAgIHJl
dHVybiAiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iX3M7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Q09OVEVYVF9MT1NUX1dFQkdMOgogICAgICAgICAgICAgcmV0dXJuICJDT05U
RVhUX0xPU1RfV0VCR0wiX3M7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygiV2ViR0wgRVJST1IoIiwgaGV4KGVycm9yLCA0LCBMb3dlcmNhc2UpLCAnKScp
OwpAQCAtNjQwNiw3ICs2NDA2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
cHBseVN0ZW5jaWxUZXN0KCkKICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMpOwogICAgICAgICBo
YXZlU3RlbmNpbEJ1ZmZlciA9IGF0dHJpYnV0ZXMtPnN0ZW5jaWw7CiAgICAgfQotICAgIGVuYWJs
ZU9yRGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNULCBtX3N0ZW5jaWxFbmFi
bGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKKyAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfVEVTVCwgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1
ZmZlcik7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlT3JEaXNh
YmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJvb2wgZW5hYmxlKQpAQCAtNjQyOCw5ICs2NDI4LDkg
QEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhEcmF3QnVmZmVycygp
CiAgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihF
eHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3QnVmZmVycyk7Cisg
ICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfRFJBV19CVUZG
RVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZlcnMpOwogICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1l
bnRzKQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0NP
TE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNf
RVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKICAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMg
cmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCiAgICAg
cmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7
CiB9CkBAIC02NDQwLDcgKzY0NDAsNyBAQCBHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQogICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVy
cygpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykK
LSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9B
VFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgICAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwg
Jm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CiAgICAgcmV0dXJuIG1fbWF4Q29sb3JBdHRhY2htZW50
czsKIH0KIApAQCAtNjQ1MSwxMyArNjQ1MSwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtIGJ1ZikKIAogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKIHsKLSAgICBiaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSk7CisgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwogfQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCkKIHsKICAgICBh
dXRvIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJl
MkRCaW5kaW5nLmdldCgpOwotICAgIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB0ZXh0dXJlKTsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8yRCwgdGV4dHVyZSk7CiAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+bmVlZFRvVXNl
QmxhY2tUZXh0dXJlKHRleHR1cmVFeHRlbnNpb25GbGFncygpKSkKICAgICAgICAgbV91bnJlbmRl
cmFibGVUZXh0dXJlVW5pdHMuYWRkKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwogfQpAQCAtNjQ4OCw3
ICs2NDg4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzSW5z
dGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QKICAgICAgICAgYXV0byBzaW11bGF0
ZVZlcnRleEF0dHJpYjBTdGF0dXMgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3Vu
dCAtIDEpOwogICAgICAgICBpZiAoIXNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cykgewogICAg
ICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gc2ltdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZm
ZXIuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgInVuYWJsZSB0byBzaW11bGF0
ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzSW5zdGFuY2Vk
IiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNp
bXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cy52YWx1ZSgpOwpAQCAtNjUyNSw3ICs2NTI1LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGMKICAgICAgICAgYXV0byBzaW11bGF0ZVZlcnRleEF0dHJp
YjBTdGF0dXMgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwogICAgICAgICBp
ZiAoIXNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cykgewogICAgICAgICAgICAgLy8gV2Ugd2Vy
ZSB1bmFibGUgdG8gc2ltdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCi0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJk
cmF3QXJyYXlzSW5zdGFuY2VkIiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFy
cmF5Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgInVuYWJsZSB0byBzaW11
bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmli
MFN0YXR1cy52YWx1ZSgpOwpAQCAtNjU1Myw3ICs2NTUzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWlu
dCBkaXYKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0
cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFLCAidmVydGV4QXR0cmliRGl2aXNvciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjYwNyw3ICs2NjA3LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpyZWN5Y2xlQ29udGV4dCgpCiAgICAgLy8gVXNpbmcgU3ludGhldGlj
TG9zdENvbnRleHQgbWVhbnMgdGhlIGRldmVsb3BlciB3b24ndCBiZSBhYmxlIHRvIGZvcmNlIHRo
ZSByZXN0b3JhdGlvbgogICAgIC8vIG9mIHRoZSBjb250ZXh0IGJ5IGNhbGxpbmcgcHJldmVudERl
ZmF1bHQoKSBpbiBhICJ3ZWJnbGNvbnRleHRsb3N0IiBldmVudCBoYW5kbGVyLgogICAgIGZvcmNl
TG9zdENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQpOwotICAgIGRlc3Ryb3lHcmFwaGljc0Nv
bnRleHQzRCgpOworICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRHTCgpOwogfQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRp
b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCmluZGV4IGNiODcyZTFmMDQ4NGU2MGNlYzYwYjE4NThmMjcyYWY5YWMy
ZTMzM2EuLjBjNDQ1MmJiNjBjNDJiNzBkN2RlNTc5OTk2OTQxNWFmNDI3MTQzNDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJBY3Rpdml0eVN0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIkdQVUJhc2VkQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlN1c3BlbmRhYmxlVGltZXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgpA
QCAtMTAzLDcgKzEwMyw3IEBAIHVzaW5nIFdlYkdMQ2FudmFzID0gV1RGOjpWYXJpYW50PFJlZlB0
cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxPZmZzY3JlZW5DYW52CiB1c2luZyBXZWJHTENh
bnZhcyA9IFdURjo6VmFyaWFudDxSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+PjsKICNlbmRpZgog
Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dDNEOjpDbGllbnQsIHB1YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHByaXZh
dGUgQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyIHsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkNsaWVudCwgcHVibGlj
IEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHJpdmF0ZSBBY3Rpdml0eVN0YXRlQ2hh
bmdlT2JzZXJ2ZXIgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSk7CiBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlPiBjcmVhdGUoQ2FudmFzQmFzZSYsIFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXMmLCBjb25zdCBTdHJpbmcmKTsKQEAgLTM0NCw3ICszNDQsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBsb3NlQ29udGV4dEltcGwoTG9zdENvbnRleHRNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNpbXVsYXRlQ29udGV4dENoYW5nZWQoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQor
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBncmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIFdlYkdMQ29udGV4dEdyb3VwKiBjb250ZXh0
R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQoKTsgfQogICAgIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMzY3LDcgKzM2
Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBVc2VkIGZvciB0ZXN0aW5nIG9ubHksIGZyb20gSW50ZXJu
YWxzLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmFpbE5leHRHUFVTdGF0dXNDaGVjaygp
OwogCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OkNsaWVudAorICAgIC8vIEdyYXBoaWNzQ29u
dGV4dEdMOjpDbGllbnQKICAgICB2b2lkIGRpZENvbXBvc2l0ZSgpIG92ZXJyaWRlOwogICAgIHZv
aWQgZm9yY2VDb250ZXh0TG9zdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVjeWNsZUNvbnRleHQo
KSBvdmVycmlkZTsKQEAgLTM3OCw3ICszNzgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmLCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzKTsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmLCBSZWY8
R3JhcGhpY3NDb250ZXh0M0Q+JiYsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpOworICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTD4mJiwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyk7CiAKICAgICBmcmllbmQgY2xhc3MgV2Vi
R0xEcmF3QnVmZmVyczsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKQEAgLTQx
MCw3ICs0MTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCYpOwogICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwog
Ci0gICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIGRlc3Ryb3lH
cmFwaGljc0NvbnRleHRHTCgpOwogICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CiAgICAg
dm9pZCBtYXJrQ29udGV4dENoYW5nZWRBbmROb3RpZnlDYW52YXNPYnNlcnZlcigpOwogCkBAIC00
NTcsNyArNDU3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCBlbmFibGVTdXBwb3J0ZWRFeHRl
bnNpb24oQVNDSUlMaXRlcmFsIGV4dGVuc2lvbk5hbWVMaXRlcmFsKTsKIAotICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHRH
TE9wZW5HTD4gbV9jb250ZXh0OwogICAgIFJlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gbV9jb250
ZXh0R3JvdXA7CiAKICAgICAvLyBEaXNwYXRjaGVzIGEgY29udGV4dCBsb3N0IGV2ZW50IG9uY2Ug
aXQgaXMgZGV0ZXJtaW5lZCB0aGF0IG9uZSBpcyBuZWVkZWQuCkBAIC02NDQsOSArNjQ0LDkgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwogCiAgICAgdm9p
ZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscyk7Ci0gICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZSwgYm9vbCBmbGlwWSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpOwogICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNE
OjpET01Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgdm9p
ZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhKTsKIAogICAgIGJvb2wgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KGNvbnN0IGNoYXIqLCBib29sKTsKIApAQCAtODIzLDcgKzgyMyw3IEBAIHByb3RlY3RlZDoKICAg
ICBib29sIHZhbGlkYXRlU2ltdWxhdGVkVmVydGV4QXR0cmliMChHQzNEdWludCBudW1WZXJ0ZXgp
OwogICAgIHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsK
IAotICAgIC8vIFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJv
ciB0aGF0IHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgSmF2YVNjcmlwdCBjb25zb2xlLgorICAgIC8v
IFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvciB0
aGF0IHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgSmF2YVNjcmlwdCBjb25zb2xlLgogICAgIGVudW0g
Q29uc29sZURpc3BsYXlQcmVmZXJlbmNlIHsgRGlzcGxheUluQ29uc29sZSwgRG9udERpc3BsYXlJ
bkNvbnNvbGUgfTsKICAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxh
eVByZWZlcmVuY2UgPSBEaXNwbGF5SW5Db25zb2xlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2FtcGxlci5jcHAKaW5kZXggYjdlM2Y2YTkzNGFjYjhmNTNjNGM2ZWEwZGNh
YTA4MWFjMWMxNWZlZC4uZjI0ZmM0ZDczZTYyZTdiMmQzYzQzMDQwMmQxNzFkYmYyZGRhYThiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuY3BwCkBAIC00Niwx
NCArNDYsMTQgQEAgV2ViR0xTYW1wbGVyOjp+V2ViR0xTYW1wbGVyKCkKIFdlYkdMU2FtcGxlcjo6
V2ViR0xTYW1wbGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdM
U2hhcmVkT2JqZWN0KGN0eCkKIHsKLSAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVTYW1wbGVyIGZy
b20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8gRklYTUU6IENhbGwgY3JlYXRlU2FtcGxlciBm
cm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQogCi12b2lkIFdlYkdMU2FtcGxlcjo6ZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2Jq
ZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xTYW1wbGVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewog
ICAgIFVOVVNFRF9QQVJBTShjb250ZXh0M2QpOwogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwot
ICAgIC8vIEZJWE1FOiBDYWxsIGRlbGV0ZVNhbXBsZXIgZnJvbSBHcmFwaGljc0NvbnRleHQzRC4K
KyAgICAvLyBGSVhNRTogQ2FsbCBkZWxldGVTYW1wbGVyIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU2FtcGxlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmgK
aW5kZXggOTU0ODczY2Y0M2Y1NGJjYzI1ODMzZTFiOWI4MTBhYjhkYjY0OWQzOS4uOTEyYmI4YzAy
M2IxYjBiZGUyMjE2YzNlZGY1MzI0MTg2ZmZiYjIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTYW1wbGVyLmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0
ZWQ6CiAgICAgZXhwbGljaXQgV2ViR0xTYW1wbGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Um
KTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBmaW5hbDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcApp
bmRleCA3ZmFlZDI0MDgwMzRmOGJmODBkYzc4MWUwMmU2ZTllNGMxNzQ2Yzk0Li5mNzk1NzdjZjFj
ZGUyMjhhODA3NDAxMzg2MTU4MmFlY2MyZjU2MzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaGFkZXIuY3BwCkBAIC00NSw3ICs0NSw3IEBAIFdlYkdMU2hhZGVyOjpXZWJH
TFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgsIEdDM0RlbnVtIHR5cGUpCiAg
ICAgLCBtX3NvdXJjZShlbXB0eVN0cmluZygpKQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQogewot
ICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlU2hhZGVyKHR5cGUp
KTsKKyAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dEdMKCktPmNyZWF0ZVNoYWRlcih0
eXBlKSk7CiB9CiAKIFdlYkdMU2hhZGVyOjp+V2ViR0xTaGFkZXIoKQpAQCAtNTMsNyArNTMsNyBA
QCBXZWJHTFNoYWRlcjo6fldlYkdMU2hhZGVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAK
LXZvaWQgV2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMU2hhZGVyOjpkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3Jt
M0RPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQzZC0+ZGVsZXRlU2hhZGVyKG9iamVjdCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAppbmRleCA5ZjU3MWM5
YzBkNWZkZDBhMGM3NTRjMmQyMmQyMDFhZjk4ZGJiOTYyLi44ZWRmMGUyY2JiMTg2YzNlMjUxNWM3
NGFkYzc3MDg1MjkxZmJlOTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNoYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJHTFNoYWRl
cihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgR0MzRGVudW0pOwogCi0gICAgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgZmluYWw7
CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxh
dGZvcm0zRE9iamVjdCkgZmluYWw7CiAKICAgICBHQzNEZW51bSBtX3R5cGU7CiAgICAgU3RyaW5n
IG1fc291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhZGVyUHJlY2lzaW9uRm9ybWF0LmgKaW5kZXggMWZlNDRiNzlmMjhmMTJmMWZhMGZkOTY2Y2Jj
YjFjYjc0MWI0MWM4YS4uOGM0ZTYyMTdlNjA1ZGU4MDEwNTRjNmQyMmE2ZDA0MDAzMWY2Y2JlMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVjaXNp
b25Gb3JtYXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclBy
ZWNpc2lvbkZvcm1hdC5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFy
ZWRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmpl
Y3QuY3BwCmluZGV4IDFiMjIzNmZiZDcxMmE4YjcxYzA4MjBkMWMwYWE2MjNiYzMzODIwMDQuLmQw
MmJmYTRlMjg2ZmIxY2JkY2Q5OTM4YTRjMjQ1YmQyNzFhOTZhMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAKQEAgLTU0LDkgKzU0LDkg
QEAgdm9pZCBXZWJHTFNoYXJlZE9iamVjdDo6ZGV0YWNoQ29udGV4dEdyb3VwKCkKICAgICB9CiB9
CiAKLUdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTFNoYXJlZE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBXZWJHTFNoYXJlZE9iamVj
dDo6Z2V0QUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0
R3JvdXAgPyAmbV9jb250ZXh0R3JvdXAtPmdldEFHcmFwaGljc0NvbnRleHQzRCgpIDogbnVsbHB0
cjsKKyAgICByZXR1cm4gbV9jb250ZXh0R3JvdXAgPyAmbV9jb250ZXh0R3JvdXAtPmdldEFHcmFw
aGljc0NvbnRleHRHTCgpIDogbnVsbHB0cjsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgKaW5kZXggMmVhNDhkMDVjNzkyNWEwYjdjOGY2
MzFhMTkxZDMwOTNjY2ZiNTM2ZS4uN2YyMzlkNTFjNDNjMzkyNGZiMTc1Mzg1YjRiOWJkOTY5N2Zk
YmM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRP
YmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVj
dC5oCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKIGNsYXNzIFdl
YkdMQ29udGV4dEdyb3VwOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKIApAQCAt
NjAsNyArNjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBtX2NvbnRleHRHcm91cDsK
ICAgICB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGdldEFHcmFwaGlj
c0NvbnRleHRHTCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFdlYkdMQ29udGV4
dEdyb3VwKiBtX2NvbnRleHRHcm91cDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU3luYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFN5
bmMuY3BwCmluZGV4IDdkMThhMjJiNTRiNWMyODZlMWJjMWNjNTNkOTRiMzg2OTE3Zjg1YmEuLmI2
NWUyOGJmNWJhMDYzNTEwZmY2YmE3ODdiMmVkMDcwNTkxYTMzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTeW5jLmNwcApAQCAtNDYsMTQgKzQ2LDE0IEBAIFdlYkdMU3luYzo6
fldlYkdMU3luYygpCiBXZWJHTFN5bmM6OldlYkdMU3luYyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlJiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiB7Ci0gICAgLy8gRklYTUU6
IENhbGwgZmVuY2VTeW5jIGZyb20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8gRklYTUU6IENh
bGwgZmVuY2VTeW5jIGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKLXZvaWQgV2Vi
R0xTeW5jOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBs
YXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFN5bmM6OmRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQzZCk7CiAgICAgVU5VU0VEX1BBUkFNKG9i
amVjdCk7Ci0gICAgLy8gRklYTUU6IENhbGwgZGVsZXRlU3luYyBmcm9tIEdyYXBoaWNzQ29udGV4
dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGRlbGV0ZVN5bmMgZnJvbSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC4KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xTeW5jLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFN5bmMuaAppbmRl
eCBhNDIyMmMzOTgwNWJlZWIxNzQ5YmZmY2VlMmU1YTc5NTNlOTA3NWE5Li4wZDEyYTgwMGI4N2Zh
ZmVjY2YxNGMyODNiOGM4NzBmZDRiZGFlODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFN5bmMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFN5bmMuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2Vi
R0xTeW5jKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKaW5kZXggOWViYTk3MmY1
NDM4ODI5M2VjNzQ3OWRlZjdmYjM2Y2U4MTA3Y2U2Ny4uN2VhMjFkOTljNzY0YTNjZDRkMGQxNzkw
ODVkZjQ3MmFkMzkwYjdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRl
eHR1cmUuY3BwCkBAIC00MywxMCArNDMsMTAgQEAgUmVmPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0
dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogV2ViR0xUZXh0dXJl
OjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgIDogV2Vi
R0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKLSAgICAsIG1fbWluRmlsdGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpCi0gICAgLCBtX21hZ0Zp
bHRlcihHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKQotICAgICwgbV93cmFwUyhHcmFwaGljc0Nv
bnRleHQzRDo6UkVQRUFUKQotICAgICwgbV93cmFwVChHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFU
KQorICAgICwgbV9taW5GaWx0ZXIoR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1RfTUlQTUFQX0xJ
TkVBUikKKyAgICAsIG1fbWFnRmlsdGVyKEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpCisgICAg
LCBtX3dyYXBTKEdyYXBoaWNzQ29udGV4dEdMOjpSRVBFQVQpCisgICAgLCBtX3dyYXBUKEdyYXBo
aWNzQ29udGV4dEdMOjpSRVBFQVQpCiAgICAgLCBtX2lzTlBPVChmYWxzZSkKICAgICAsIG1faXND
b21wbGV0ZShmYWxzZSkKICAgICAsIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlKGZhbHNlKQpAQCAt
NTUsNyArNTUsNyBAQCBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjdHgpCiAgICAgLCBtX2lzSGFsZkZsb2F0VHlwZShmYWxzZSkKICAgICAsIG1f
aXNGb3JXZWJHTDEoY3R4LmlzV2ViR0wxKCkpCiB7Ci0gICAgc2V0T2JqZWN0KGN0eC5ncmFwaGlj
c0NvbnRleHQzRCgpLT5jcmVhdGVUZXh0dXJlKCkpOworICAgIHNldE9iamVjdChjdHguZ3JhcGhp
Y3NDb250ZXh0R0woKS0+Y3JlYXRlVGV4dHVyZSgpKTsKIH0KIAogV2ViR0xUZXh0dXJlOjp+V2Vi
R0xUZXh0dXJlKCkKQEAgLTcxLDEyICs3MSwxMiBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6c2V0VGFy
Z2V0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBtYXhMZXZlbCkKICAgICBpZiAobV90YXJnZXQp
CiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8yRDoKICAgICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7CiAgICAgICAgIG1faW5mby5yZXNp
emUoMSk7CiAgICAgICAgIG1faW5mb1swXS5yZXNpemUobWF4TGV2ZWwpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgIG1fdGFyZ2V0
ID0gdGFyZ2V0OwogICAgICAgICBtX2luZm8ucmVzaXplKDYpOwogICAgICAgICBmb3IgKGludCBp
aSA9IDA7IGlpIDwgNjsgKytpaSkKQEAgLTkwLDQwICs5MCw0MCBAQCB2b2lkIFdlYkdMVGV4dHVy
ZTo6c2V0UGFyYW1ldGVyaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKICAgICBpZiAo
IW9iamVjdCgpIHx8ICFtX3RhcmdldCkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAocG5h
bWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSOgogICAgICAgICBz
d2l0Y2ggKHBhcmFtKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1Q6
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUjoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUl9NSVBNQVBfTElORUFSOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpORUFSRVNUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpM
SU5FQVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1RfTUlQTUFQX05F
QVJFU1Q6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUl9NSVBNQVBfTkVB
UkVTVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVF9NSVBNQVBfTElO
RUFSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVJfTUlQTUFQX0xJTkVB
UjoKICAgICAgICAgICAgIG1fbWluRmlsdGVyID0gcGFyYW07CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9N
QUdfRklMVEVSOgogICAgICAgICBzd2l0Y2ggKHBhcmFtKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5FQVJFU1Q6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVDoKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSOgogICAgICAgICAgICAgbV9tYWdGaWx0ZXIg
PSBwYXJhbTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TOgogICAgICAgICBzd2l0Y2ggKHBhcmFtKSB7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0U6Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVDoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVQRUFUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpDTEFNUF9UT19FREdFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNSVJST1JF
RF9SRVBFQVQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFUEVBVDoKICAgICAg
ICAgICAgIG1fd3JhcFMgPSBwYXJhbTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9UOgogICAgICAgICBz
d2l0Y2ggKHBhcmFtKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0U6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVDoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpNSVJST1JFRF9SRVBFQVQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJFUEVBVDoKICAgICAgICAgICAgIG1fd3JhcFQgPSBwYXJhbTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0yNTIsNyArMjUyLDcgQEAgYm9vbCBXZWJHTFRleHR1cmU6Om5lZWRU
b1VzZUJsYWNrVGV4dHVyZShUZXh0dXJlRXh0ZW5zaW9uRmxhZyBleHRlbnNpb25zKSBjb25zdAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9tYWdGaWx0ZXIgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5FQVJFU1QgJiYgKG1fbWluRmlsdGVyID09IEdyYXBoaWNzQ29udGV4dDNEOjpORUFS
RVNUIHx8IG1fbWluRmlsdGVyID09IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9O
RUFSRVNUKSkKKyAgICBpZiAobV9tYWdGaWx0ZXIgPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJF
U1QgJiYgKG1fbWluRmlsdGVyID09IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUIHx8IG1fbWlu
RmlsdGVyID09IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2lzRm9yV2ViR0wxICYmIG1faXNIYWxmRmxv
YXRUeXBlICYmICEoZXh0ZW5zaW9ucyAmIFRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJF
bmFibGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzQsMjkgKzI3NCwyOSBAQCB2b2lk
IFdlYkdMVGV4dHVyZTo6c2V0Q29tcHJlc3NlZCgpCiAgICAgbV9pc0NvbXByZXNzZWQgPSB0cnVl
OwogfQogCi12b2lkIFdlYkdMVGV4dHVyZTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xUZXh0
dXJlOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2Qs
IFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQzZC0+ZGVsZXRlVGV4dHVy
ZShvYmplY3QpOwogfQogCiBpbnQgV2ViR0xUZXh0dXJlOjptYXBUYXJnZXRUb0luZGV4KEdDM0Rl
bnVtIHRhcmdldCkgY29uc3QKIHsKLSAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCkKKyAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQpIHsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8yRCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSBpZiAobV90YXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVApIHsKKyAgICB9IGVsc2UgaWYg
KG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQKSB7CiAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgogICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgogICAgICAgICAgICAgcmV0
dXJuIDI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAg
ICAgICAgcmV0dXJuIDQ7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAgcmV0dXJuIDU7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zNDEsMTIgKzM0MSwxMiBAQCBHQzNEaW50IFdlYkdMVGV4dHVyZTo6Y29t
cHV0ZUxldmVsQ291bnQoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogc3RhdGlj
IGJvb2wgaW50ZXJuYWxGb3JtYXRJc0Zsb2F0VHlwZShHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkK
IHsKICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RF
TkNJTDg6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTM1NiwxMiArMzU2LDEyIEBAIHN0YXRpYyBib29sIGludGVybmFsRm9ybWF0
SXNGbG9hdFR5cGUoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiBzdGF0aWMgYm9vbCBpbnRlcm5h
bEZvcm1hdElzSGFsZkZsb2F0VHlwZShHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKIHsKICAgICBz
d2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2RjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSMTFGX0cxMUZfQjEwRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I5X0U1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2RjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIx
NkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UjExRl9HMTFGX0IxMEY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCOV9FNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkY6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDEyLDEyICs0MTIsMTIgQEAgdm9pZCBX
ZWJHTFRleHR1cmU6OnVwZGF0ZSgpCiAgICAgaWYgKG1faXNGb3JXZWJHTDEpIHsKICAgICAgICAg
aWYgKG1faXNDb21wbGV0ZSkgewogICAgICAgICAgICAgaWYgKG1faXNGb3JXZWJHTDEpCi0gICAg
ICAgICAgICAgICAgbV9pc0Zsb2F0VHlwZSA9IG1faW5mb1swXVswXS50eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgICAgICAgICBtX2lzRmxvYXRUeXBlID0gbV9pbmZv
WzBdWzBdLnR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIG1faXNGbG9hdFR5cGUgPSBpbnRlcm5hbEZvcm1hdElzRmxvYXRU
eXBlKG1faW5mb1swXVswXS5pbnRlcm5hbEZvcm1hdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgbV9pbmZvLnNpemUoKTsgKytpaSkgewot
ICAgICAgICAgICAgICAgIGlmICgobV9pc0ZvcldlYkdMMSAmJiBtX2luZm9baWldWzBdLnR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKQorICAgICAgICAgICAgICAgIGlmICgobV9pc0Zv
cldlYkdMMSAmJiBtX2luZm9baWldWzBdLnR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FU
KQogICAgICAgICAgICAgICAgICAgICB8fCAoIW1faXNGb3JXZWJHTDEgJiYgaW50ZXJuYWxGb3Jt
YXRJc0Zsb2F0VHlwZShtX2luZm9baWldWzBdLmludGVybmFsRm9ybWF0KSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9pc0Zsb2F0VHlwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDMyLDEwICs0MzIsMTAgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnVwZGF0ZSgpCiAg
ICAgICAgICAgICBpZiAobV9pc0ZvcldlYkdMMSkKICAgICAgICAgICAgICAgICBtX2lzSGFsZkZs
b2F0VHlwZSA9IGludGVybmFsRm9ybWF0SXNIYWxmRmxvYXRUeXBlKG1faW5mb1swXVswXS5pbnRl
cm5hbEZvcm1hdCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9pc0hhbGZG
bG9hdFR5cGUgPSBtX2luZm9bMF1bMF0udHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVF9PRVM7CisgICAgICAgICAgICAgICAgbV9pc0hhbGZGbG9hdFR5cGUgPSBtX2luZm9bMF1b
MF0udHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgbV9pbmZvLnNpemUo
KTsgKytpaSkgewotICAgICAgICAgICAgICAgIGlmICgobV9pc0ZvcldlYkdMMSAmJiBtX2luZm9b
aWldWzBdLnR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKQorICAgICAg
ICAgICAgICAgIGlmICgobV9pc0ZvcldlYkdMMSAmJiBtX2luZm9baWldWzBdLnR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTKQogICAgICAgICAgICAgICAgICAgICB8fCAo
IW1faXNGb3JXZWJHTDEgJiYgaW50ZXJuYWxGb3JtYXRJc0hhbGZGbG9hdFR5cGUobV9pbmZvW2lp
XVswXS5pbnRlcm5hbEZvcm1hdCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faXNIYWxmRmxv
YXRUeXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00NDYsMTEgKzQ0
NiwxMSBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6dXBkYXRlKCkKIAogICAgIG1fbmVlZFRvVXNlQmxh
Y2tUZXh0dXJlID0gZmFsc2U7CiAgICAgLy8gTlBPVAotICAgIGlmIChtX2lzTlBPVCAmJiAoKG1f
bWluRmlsdGVyICE9IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUICYmIG1fbWluRmlsdGVyICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpCi0gICAgICAgICAgICAgICAgICAgICB8fCBtX3dy
YXBTICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFIHx8IG1fd3JhcFQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKQorICAgIGlmIChtX2lzTlBPVCAmJiAoKG1f
bWluRmlsdGVyICE9IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUICYmIG1fbWluRmlsdGVyICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpCisgICAgICAgIHx8IG1fd3JhcFMgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UgfHwgbV93cmFwVCAhPSBHcmFwaGljc0NvbnRleHRH
TDo6Q0xBTVBfVE9fRURHRSkpCiAgICAgICAgIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlID0gdHJ1
ZTsKICAgICAvLyBDb21wbGV0ZW5lc3MKLSAgICBpZiAoIW1faXNDb21wbGV0ZSAmJiBtX21pbkZp
bHRlciAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCAmJiBtX21pbkZpbHRlciAhPSBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKQorICAgIGlmICghbV9pc0NvbXBsZXRlICYmIG1fbWluRmls
dGVyICE9IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUICYmIG1fbWluRmlsdGVyICE9IEdyYXBo
aWNzQ29udGV4dEdMOjpMSU5FQVIpCiAgICAgICAgIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlID0g
dHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAppbmRl
eCAwOTYzYmY4OWVmYWYyYmU1YzJlODgzY2U4OTIzYzg4ZDczMzg4YmU4Li5jZmQ4MjMzNjVlNDU1
NzcyZWIyY2JlZDMwNDMxMWVjN2Q1ZTg2NjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFRleHR1cmUuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFdlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIAogICAgIGNsYXNzIExldmVsSW5mbyB7CiAg
ICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
cmFuc2Zvcm1GZWVkYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRy
YW5zZm9ybUZlZWRiYWNrLmNwcAppbmRleCBlNTI3NmI4ZTIwOTk0MjdlMTZlNmI0YjBhZjM4Mjhk
ZGEwYTQ5OTExLi4xNzQ1OTQ1YjY5NjQ2ZGZlZWExMjE3NmQ0MDViZmY1OTZlMGI0NGRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRi
YWNrLmNwcApAQCAtNDYsMTQgKzQ2LDE0IEBAIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6On5XZWJH
TFRyYW5zZm9ybUZlZWRiYWNrKCkKIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6OldlYkdMVHJhbnNm
b3JtRmVlZGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgIDogV2ViR0xT
aGFyZWRPYmplY3QoY3R4KQogewotICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVRyYW5zZm9ybUZl
ZWRiYWNrIGZyb20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8gRklYTUU6IENhbGwgY3JlYXRl
VHJhbnNmb3JtRmVlZGJhY2sgZnJvbSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIH0KIAotdm9p
ZCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFRyYW5z
Zm9ybUZlZWRiYWNrOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBj
b250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShj
b250ZXh0M2QpOwogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIC8vIEZJWE1FOiBDYWxs
IGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrIGZyb20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8g
RklYTUU6IENhbGwgZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2sgZnJvbSBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC4KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5oCmluZGV4IDExNDdiNWY2YWRlNjM2Y2UzMWU2NzdjZDFkYzI2
MjE2MWVhOTBlOTkuLjExNDNkZjRmYzgwYWNmM2EzNDE4MWM3YzVjNjAyYTNlNWZlMzEzZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJh
Y2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRi
YWNrLmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMVHJh
bnNmb3JtRmVlZGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBk
ZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3QuY3BwCmluZGV4IDFiNDZiN2I0ZTg2ZTE2YmI2YWY4MDNhZGM1YTAxZDM2NWM4Njlm
OTQuLjVkYmIxYTA1NTNiNmVjZDNlNGQ3M2VlMjNjNTJiZDQ2NzNhODU1OGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3Bw
CkBAIC01MiwxMCArNTIsMTAgQEAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdDo6V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXgKICNlbHNlCiAgICAg
QVNTRVJUKHR5cGUgIT0gVHlwZTo6RGVmYXVsdCB8fCAhKHRoaXMtPmNvbnRleHQoKS0+bV9kZWZh
dWx0VmVydGV4QXJyYXlPYmplY3QpKTsKICNlbmRpZgotICAgIHNldE9iamVjdCh0aGlzLT5jb250
ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVZlcnRleEFycmF5KCkpOworICAgIHNl
dE9iamVjdCh0aGlzLT5jb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdMKCktPmNyZWF0ZVZlcnRl
eEFycmF5KCkpOwogfQogCi12b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3Q6OmRlbGV0ZU9iamVj
dEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmpl
Y3QpCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3Q6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFR5cGU6OkRlZmF1bHQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmgKaW5k
ZXggMmY3ZWQzNTA4MTcyM2YwYWJhZjI1M2IyYWJjZmQwMTM5NzAzNjQwYi4uN2EzMGI0OTM4MzY0
MjlkMzM4NjYwZTZkMTA0Y2FmYzFkODg5NDg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaApAQCAtMzksNyArMzksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdCgpOwogcHJpdmF0ZToK
ICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBU
eXBlKTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0
Zm9ybTNET2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBmaW5hbDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcAppbmRleCAxMjQ0Yzc3Yjk5MjE0MjJlYWRj
NDRiZWJlMDQ2NzQ3ZDA2YmI4NTNjLi4wN2UxODQ0NWM3OGVmN2JjOWNkZWYxOTUwZWY1MTg5MDZh
YTkzZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldEVsZW1lbnRBcnJheUJ1ZmZlcihXZWJHTEJ1ZmZlciog
YnVmZmVyKQogICAgIGlmIChidWZmZXIpCiAgICAgICAgIGJ1ZmZlci0+b25BdHRhY2hlZCgpOwog
ICAgIGlmIChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICBtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7
CisgICAgICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPm9uRGV0YWNoZWQoY29udGV4dCgp
LT5ncmFwaGljc0NvbnRleHRHTCgpKTsKICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyID0g
YnVmZmVyOwogICAgIAogfQpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RCYXNlOjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZShHQzNEdWludCBpbmRleCwgR0MzRHNpemVp
CiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgYnVmZmVyLT5vbkF0dGFjaGVkKCk7CiAgICAgaWYg
KHN0YXRlLmJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmctPm9uRGV0
YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgc3RhdGUuYnVm
ZmVyQmluZGluZy0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdMKCkpOwog
ICAgIAogICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7CiAgICAgc3RhdGUuYnl0ZXNQ
ZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50OwpAQCAtNzMsMjEgKzczLDIxIEBAIHZvaWQgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNldFZlcnRleEF0dHJpYlN0YXRlKEdDM0R1aW50IGlu
ZGV4LCBHQzNEc2l6ZWkKIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnVuYmluZEJ1
ZmZlcihXZWJHTEJ1ZmZlciYgYnVmZmVyKQogewogICAgIGlmIChtX2JvdW5kRWxlbWVudEFycmF5
QnVmZmVyID09ICZidWZmZXIpIHsKLSAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+
b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgICAgICBtX2Jv
dW5kRWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0R0woKSk7CiAgICAgICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIgPSBudWxscHRyOwog
ICAgIH0KICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVydGV4QXR0cmliU3Rh
dGUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0
YXRlW2ldOwogICAgICAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGluZyA9PSAmYnVmZmVyKSB7Ci0g
ICAgICAgICAgICBidWZmZXIub25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCkpOworICAgICAgICAgICAgYnVmZmVyLm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0Nv
bnRleHRHTCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpICYmICFjb250ZXh0
KCktPmlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICAgICAgICAgIHN0YXRlLmJ1ZmZlckJp
bmRpbmcgPSBjb250ZXh0KCktPm1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKICAgICAgICAgICAgICAg
ICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkKCk7CiAgICAgICAgICAgICAgICAgc3Rh
dGUuYnl0ZXNQZXJFbGVtZW50ID0gMDsKICAgICAgICAgICAgICAgICBzdGF0ZS5zaXplID0gNDsK
LSAgICAgICAgICAgICAgICBzdGF0ZS50eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwor
ICAgICAgICAgICAgICAgIHN0YXRlLnR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAg
ICAgICAgICAgICAgICAgc3RhdGUubm9ybWFsaXplZCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IHN0YXRlLnN0cmlkZSA9IDE2OwogICAgICAgICAgICAgICAgIHN0YXRlLm9yaWdpbmFsU3RyaWRl
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0QmFzZS5oCmluZGV4IDIwNzFmMzQ0OGUyMDgwY2YzYTE1MTZjODY2ZTA4OTdi
MGFjZTk1NzQuLmU3YWM0ODFkZThiMGZmYTNiNjc0NzU4NjE3NjBjNDllZWFkZmY4MDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdEJhc2UuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oIgogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0
T2JqZWN0LmgiCiAKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8V2Vi
R0xCdWZmZXI+IGJ1ZmZlckJpbmRpbmc7CiAgICAgICAgIEdDM0RzaXplaSBieXRlc1BlckVsZW1l
bnQgeyAwIH07CiAgICAgICAgIEdDM0RpbnQgc2l6ZSB7IDQgfTsKLSAgICAgICAgR0MzRGVudW0g
dHlwZSB7IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCB9OworICAgICAgICBHQzNEZW51bSB0eXBl
IHsgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUIH07CiAgICAgICAgIGJvb2wgbm9ybWFsaXplZCB7
IGZhbHNlIH07CiAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUgeyAxNiB9OwogICAgICAgICBHQzNE
c2l6ZWkgb3JpZ2luYWxTdHJpZGUgeyAwIH07CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UmLCBUeXBlKTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9IDA7CisgICAgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGUgPSAwOwogCiAgICAgVHlwZSBtX3R5cGU7CiAgICAgYm9vbCBtX2hhc0V2ZXJCZWVu
Qm91bmQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAppbmRleCBhZjU1NjVjZDk0NDQyNGI1M2I4
MzU3ZGIyYzAxOTBiZTFjZTViNDY5Li5hMGNlNWI4MDA4YjZiMzA1NzYyMmEzYmVmMzViZTkxNjEw
MmY2NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcApAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAi
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgi
CisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw3ICs0Niw3IEBAIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSYKICAgICBjYXNlIFR5cGU6OkRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVHlwZTo6VXNlcjoKLSAgICAgICAgc2V0T2JqZWN0KHRoaXMtPmNvbnRleHQo
KS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5
T0VTKCkpOworICAgICAgICBzZXRPYmplY3QodGhpcy0+Y29udGV4dCgpLT5ncmFwaGljc0NvbnRl
eHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KQEAgLTU2LDcgKzU2LDcgQEAgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUzo6fldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKQogICAgIGRlbGV0ZU9iamVjdChudWxs
cHRyKTsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJ
bXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQog
ewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUeXBlOjpEZWZhdWx0OgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uy5oCmluZGV4IGQ1NWQ2MGJiMDlkZmIyOWNkY2FiYWVmN2M2ZTBiMGI2ZDBlODI2ZGQuLjA4MzM5
NjJkNjY1ZWYxMmY0Y2NkZjVkOGYxMmI1Y2FmMDBhYzZkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKQEAgLTM3
LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMoKTsKIHByaXZhdGU6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgZmlu
YWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKaW5kZXggZTk0MjM4YmNlMjI5
YWJiMTcxZjUzYWJjODMxNzM4Zjg1ZDMzMzQ1ZC4uMjkxYmQyNGIwNmYzN2QzYjQ0OGU3YjdlYzM3
ODY0ODQxNzlhZWU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclNoYWRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKQEAgLTExMCwxMCArMTEwLDEwIEBAIHN0YXRp
YyBXZWJHTFNoYWRlciogc2hhZGVyRm9yVHlwZShXZWJHTFByb2dyYW0mIHByb2dyYW0sIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhCiB7CiAgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CiAgICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGU6OkZyYWdtZW50OgotICAg
ICAgICByZXR1cm4gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBR01FTlRfU0hBREVSKTsKKyAgICAgICAgcmV0dXJuIHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFk
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUik7CiAKICAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZTo6VmVydGV4OgotICAgICAgICByZXR1
cm4gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUik7CisgICAgICAgIHJldHVybiBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNz
Q29udGV4dEdMOjpWRVJURVhfU0hBREVSKTsKIAogICAgIC8vIENvbXB1dGUgc2hhZGVycyBhcmUg
YSBXZWJHUFUgY29uY2VwdC4KICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
U2hhZGVyVHlwZTo6Q29tcHV0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50LmgKaW5kZXggODM4YjE4ZjNhOGJmMzY2NTQ5ZWIzY2Y5NDYzYzMwMWM2YTcwZGNmNS4uZDQ5
ZjQyODdjZGQ1ZDliZTcwYjNlYTNlMjg1NzQyMDkxMTczOGFlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTMzOCw3ICszMzgsNyBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKFdFQkdMKQogICAgIHZpcnR1YWwgYm9vbCBhbGxvd1dlYkdMKGJvb2wgZW5hYmxl
ZFBlclNldHRpbmdzKSB7IHJldHVybiBlbmFibGVkUGVyU2V0dGluZ3M7IH0KICAgICAvLyBJbmZv
cm1zIHRoZSBlbWJlZGRlciB0aGF0IGEgV2ViR0wgY2FudmFzIGluc2lkZSB0aGlzIGZyYW1lIHJl
Y2VpdmVkIGEgbG9zdCBjb250ZXh0Ci0gICAgLy8gbm90aWZpY2F0aW9uIHdpdGggdGhlIGdpdmVu
IEdMX0FSQl9yb2J1c3RuZXNzIGd1aWx0L2lubm9jZW5jZSBjb2RlIChzZWUgRXh0ZW5zaW9uczNE
LmgpLgorICAgIC8vIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBHTF9BUkJfcm9idXN0bmVz
cyBndWlsdC9pbm5vY2VuY2UgY29kZSAoc2VlIEV4dGVuc2lvbnNHTC5oKS4KICAgICB2aXJ0dWFs
IHZvaWQgZGlkTG9zZVdlYkdMQ29udGV4dChpbnQpIHsgfQogICAgIHZpcnR1YWwgV2ViR0xMb2Fk
UG9saWN5IHdlYkdMUG9saWN5Rm9yVVJMKGNvbnN0IFVSTCYpIGNvbnN0IHsgcmV0dXJuIFdlYkdM
QWxsb3dDcmVhdGlvbjsgfQogICAgIHZpcnR1YWwgV2ViR0xMb2FkUG9saWN5IHJlc29sdmVXZWJH
TFBvbGljeUZvclVSTChjb25zdCBVUkwmKSBjb25zdCB7IHJldHVybiBXZWJHTEFsbG93Q3JlYXRp
b247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCA4YmMzNWE1N2Q2YmZmNjkyMjk2NzAwZjM1
M2Y4YzQ0MzA1ZWIxNTk2Li5mNTg2Y2NiMTc4Yzc2ZTU3OGMyMTMwODQ2YTFmYmZhN2VmZmQ3YWY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC02MSw4ICs2MSw4IEBACiAjaW5jbHVkZSAiRGF0
YUxpc3RTdWdnZXN0aW9uUGlja2VyLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RN
YW5hZ2VyLmgiCisjaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9H
TCkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MTYsOCArNTE2LDggQEAgdm9pZCBDaHJvbWU6Ondp
bmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCiAjZW5kaWYK
ICAgICBtX3BhZ2Uuc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiAKLSNpZiBQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotICAgIEdyYXBoaWNzQ29u
dGV4dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnNjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQs
IHRoaXMpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuc2Ny
ZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCwgdGhpcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggMTU5NjlmOTM1ZWQ4MjI0ZGZkMzA1MjBm
OWI2Nzk5NDZkMjU4NDJmOS4uNDIxZGZiZDk1NzU0YzQ2Mjc1N2I3OGRiZmE0MTAyNTQzMmFmMGI3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0yNyw3ICsy
Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRm9udENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWly
by5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggMzUzYzE0MWRkYTc5NDk2MDE3YjZhYjRmZmY5ZTQz
ZDQ0MDdkYmI1Yi4uZmUyNjY5YzQyMzQzMzlmMWU0MDgxYmE4ZTAzMzNmY2M5YTg3NDE4OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC03LDcgKzcs
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0JpdG1hcFRleHR1cmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRl
eHQzRFRleHR1cmVNYXBwZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckZQU0NvdW50ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XZWJH
TFN0YXRlVHJhY2tlci5jcHAKaW5kZXggMzNmMWQ1OGQ5YTJmNzA1YmU1MWY3MjAyZmQxN2QzYmEy
ZjkxNzkzMy4uNmQ3NDI2ZDhmMWMzNzJkNmYwMTVkMGRlNjNkMzI2YWRhNDZiY2U1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3RhdGVUcmFja2VyLmNwcApAQCAtMzYsMTAg
KzM2LDEwIEBAIFdlYkdMU3RhdGVUcmFja2VyOjpXZWJHTFN0YXRlVHJhY2tlcihTdGF0ZUNoYW5n
ZUhhbmRsZXImJiBoYW5kbGVyKQogewogfQogCi1hdXRvIFdlYkdMU3RhdGVUcmFja2VyOjp0b2tl
bihHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2UpIC0+IFRv
a2VuCithdXRvIFdlYkdMU3RhdGVUcmFja2VyOjp0b2tlbihHcmFwaGljc0NvbnRleHRHTFBvd2Vy
UHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2UpIC0+IFRva2VuCiB7CiAgICAgLy8gV2Ugb25seSB0
cmFjayBoaWdoIHBlcmZvcm1hbmNlIFdlYkdMIGNvbnRleHRzIGF0IHRoZSBtb21lbnQuCi0gICAg
aWYgKHBvd2VyUHJlZmVyZW5jZSAhPSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6
SGlnaFBlcmZvcm1hbmNlKQorICAgIGlmIChwb3dlclByZWZlcmVuY2UgIT0gR3JhcGhpY3NDb250
ZXh0R0xQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICByZXR1cm4gbV93ZWJHTENvbnRleHRDb3VudGVyLmNvdW50KCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuaAppbmRleCBiNGM4Y2MyZDdiZTRl
OGZjMjlhYTBhYjNlMzY0OWJiNjNlM2M4NGYwLi44NDQ2ODFlNjhlNmEwODIwMmQyMTMxZTZlYTMy
MmEzNWMzZDYyNzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XZWJHTFN0
YXRlVHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3RhdGVUcmFj
a2VyLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcy5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVyLmg+CiAKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHVzaW5nIFdl
YkdMQ29udGV4dENvdW50ZXIgPSBSZWZDb3VudGVyPFdlYkdMQ29udGV4dENvdW50ZXJUeXBlPjsK
ICAgICB1c2luZyBUb2tlbiA9IFdlYkdMQ29udGV4dENvdW50ZXI6OlRva2VuOwogCi0gICAgVG9r
ZW4gdG9rZW4oR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2UpOworICAgIFRva2VuIHRv
a2VuKEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlKTsKIAogcHJpdmF0ZToKICAgICB2
b2lkIHVwZGF0ZVdlYkdMU3RhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAppbmRleCBhMTNmZDZiMWJiYTQ3Nzgy
YmNlOTI3MTg0NDhiYzlmMTAzNjg3ZjVhLi44OTI3YWFjZjZjODZiNmIyNDA0OGI3ZjJhNjY3Njdk
OGRjNTJhMjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9B
TkdMRVdlYktpdEJyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQorI2lmIEVOQUJMRShH
UkFQSElDU19DT05URVhUX0dMKQogCiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCkBAIC0yMzEsNCArMjMxLDQgQEAgYm9vbCBBTkdMRVdlYktpdEJy
aWRnZTo6YW5nbGVBdmFpbGFibGUoKQogCiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZjJhMDM4NjE5OTQyMjZjOTM0Y2E2NTFhMGRiMWI5MGFk
MzEyNzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgKKysrIC9kZXYvbnVs
bApAQCAtMSwzMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXh0ZW5zaW9uczNEX2gKLSNkZWZp
bmUgRXh0ZW5zaW9uczNEX2gKLQotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgotCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
VGhpcyBpcyBhIGJhc2UgY2xhc3MgY29udGFpbmluZyBvbmx5IHB1cmUgdmlydHVhbCBmdW5jdGlv
bnMuCi0vLyBJbXBsZW1lbnRhdGlvbnMgbXVzdCBwcm92aWRlIGEgc3ViY2xhc3MuCi0vLwotLy8g
VGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGFyZSBkZWZpbmVkIGJlbG93IGFuZCBpbiBzdWJjbGFz
c2VzLAotLy8gcG9zc2libHkgcGxhdGZvcm0tc3BlY2lmaWMgb25lcy4KLS8vCi0vLyBDYWxsaW5n
IGFueSBleHRlbnNpb24gZnVuY3Rpb24gbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBjb250
ZXh0Ci0vLyBtdXN0IGJlIGEgbm8tb3A7IGluIHBhcnRpY3VsYXIsIGl0IG1heSBub3QgaGF2ZSBz
aWRlIGVmZmVjdHMuIEluCi0vLyB0aGlzIHNpdHVhdGlvbiwgaWYgdGhlIGZ1bmN0aW9uIGhhcyBh
IHJldHVybiB2YWx1ZSwgMCBpcyByZXR1cm5lZC4KLWNsYXNzIEV4dGVuc2lvbnMzRCB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+RXh0ZW5zaW9uczNEKCkgPSBkZWZhdWx0OwotCi0gICAgLy8gU3Vw
cG9ydGVkIGV4dGVuc2lvbnM6Ci0gICAgLy8gICBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgKLSAgICAvLyAgIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhCi0gICAgLy8gICBHTF9BUkJfcm9i
dXN0bmVzcwotICAgIC8vICAgR0xfQVJCX3RleHR1cmVfbm9uX3Bvd2VyX29mX3R3byAvIEdMX09F
U190ZXh0dXJlX25wb3QKLSAgICAvLyAgIEdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCAvIEdM
X09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAotICAgIC8vICAgR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCAvIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCi0gICAgLy8gICBHTF9JTUdf
bXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCi0gICAgLy8gICBHTF9PRVNfdGV4dHVyZV9m
bG9hdAotICAgIC8vICAgR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyCi0gICAgLy8gICBHTF9P
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgLy8gICBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
X2xpbmVhcgotICAgIC8vICAgR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0gICAgLy8gICBH
TF9PRVNfcmdiOF9yZ2JhOAotICAgIC8vICAgR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAg
ICAvLyAgIEdMX09FU19lbGVtZW50X2luZGV4X3VpbnQKLSAgICAvLyAgIEdMX0FOR0xFX3RyYW5z
bGF0ZWRfc2hhZGVyX3NvdXJjZQotICAgIC8vICAgR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIChv
bmx5IHRoZSBzdWJzZXQgcmVxdWlyZWQgdG8KLSAgICAvLyAgICAgaW1wbGVtZW50IElPU3VyZmFj
ZSBiaW5kaW5nOyBpdCdzIHJlY29tbWVuZGVkIHRvIHN1cHBvcnQKLSAgICAvLyAgICAgdGhpcyBv
bmx5IG9uIE1hYyBPUyBYIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgY29kZSBkZXBlbmRlbnQKLSAg
ICAvLyAgICAgb24gdGhpcyBleHRlbnNpb24pCi0gICAgLy8gICBHTF9FWFRfdGV4dHVyZV9jb21w
cmVzc2lvbl9keHQxCi0gICAgLy8gICBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3RjCi0g
ICAgLy8gICBHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZQotICAgIC8vICAgR0xf
SU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMKLSAgICAvLyAgIEdMX0tIUl90ZXh0dXJlX2Nv
bXByZXNzaW9uX2FzdGNfaGRyCi0gICAgLy8gICBHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9h
c3RjX2xkcgotICAgIC8vICAgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgLy8g
ICBHTF9FWFRfZGVidWdfbWFya2VyCi0gICAgLy8gICBHTF9BUkJfZHJhd19idWZmZXJzIC8gR0xf
RVhUX2RyYXdfYnVmZmVycwotICAgIC8vICAgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cwotCi0g
ICAgLy8gVGFrZXMgZnVsbCBuYW1lIG9mIGV4dGVuc2lvbjsgZm9yIGV4YW1wbGUsCi0gICAgLy8g
IkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIuCi0gICAgdmlydHVhbCBib29sIHN1cHBv
cnRzKGNvbnN0IFN0cmluZyYpID0gMDsKLQotICAgIC8vIENlcnRhaW4gT3BlbkdMIGFuZCBXZWJH
TCBpbXBsZW1lbnRhdGlvbnMgbWF5IHN1cHBvcnQgZW5hYmxpbmcKLSAgICAvLyBleHRlbnNpb25z
IGxhemlseS4gVGhpcyBtZXRob2QgbWF5IG9ubHkgYmUgY2FsbGVkIHdpdGgKLSAgICAvLyBleHRl
bnNpb24gbmFtZXMgZm9yIHdoaWNoIHN1cHBvcnRzIHJldHVybnMgdHJ1ZS4KLSAgICB2aXJ0dWFs
IHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKSA9IDA7Ci0KLSAgICAvLyBUYWtlcyBm
dWxsIG5hbWUgb2YgZXh0ZW5zaW9uOiBmb3IgZXhhbXBsZSwgIkdMX0VYVF90ZXh0dXJlX2Zvcm1h
dF9CR1JBODg4OCIuCi0gICAgLy8gQ2hlY2tzIHRvIHNlZSB3aGV0aGVyIHRoZSBnaXZlbiBleHRl
bnNpb24gaXMgYWN0dWFsbHkgZW5hYmxlZCAoc2VlIGVuc3VyZUVuYWJsZWQpLgotICAgIC8vIEhh
cyBubyBvdGhlciBzaWRlLWVmZmVjdHMuCi0gICAgdmlydHVhbCBib29sIGlzRW5hYmxlZChjb25z
dCBTdHJpbmcmKSA9IDA7Ci0KLSAgICBlbnVtIEV4dGVuc2lvbnNFbnVtVHlwZSB7Ci0gICAgICAg
IC8vIEVYVF9zUkdCIGZvcm1hdHMKLSAgICAgICAgU1JHQl9FWFQgPSAweDhDNDAsCi0gICAgICAg
IFNSR0JfQUxQSEFfRVhUID0gMHg4QzQyLAotICAgICAgICBTUkdCOF9BTFBIQThfRVhUID0gMHg4
QzQzLAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVCA9
IDB4ODIxMCwKLQotICAgICAgICAvLyBFWFRfYmxlbmRfbWlubWF4IGVudW1zCi0gICAgICAgIE1J
Tl9FWFQgPSAweDgwMDcsCi0gICAgICAgIE1BWF9FWFQgPSAweDgwMDgsCi0KLSAgICAgICAgLy8g
R0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IGVudW1zCi0gICAgICAgIEJHUkFfRVhUID0g
MHg4MEUxLAotCi0gICAgICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzIGVudW1zCi0gICAgICAgIEdV
SUxUWV9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1MywKLSAgICAgICAgSU5OT0NFTlRfQ09OVEVY
VF9SRVNFVF9BUkIgPSAweDgyNTQsCi0gICAgICAgIFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkIg
PSAweDgyNTUsCi0gICAgICAgIENPTlRFWFRfUk9CVVNUX0FDQ0VTUyA9IDB4OTBGMywKLQotICAg
ICAgICAvLyBHTF9FWFQvT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIGVudW1zCi0gICAgICAgIERF
UFRIMjRfU1RFTkNJTDggPSAweDg4RjAsCi0gICAgICAgIAotICAgICAgICAvLyBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9ibGl0IG5hbWVzCi0gICAgICAgIFJFQURfRlJBTUVCVUZGRVIgPSAweDhDQTgs
Ci0gICAgICAgIERSQVdfRlJBTUVCVUZGRVIgPSAweDhDQTksCi0gICAgICAgIERSQVdfRlJBTUVC
VUZGRVJfQklORElORyA9IDB4OENBNiwgCi0gICAgICAgIFJFQURfRlJBTUVCVUZGRVJfQklORElO
RyA9IDB4OENBQSwKLSAgICAgICAgCi0gICAgICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlIG5hbWVzCi0gICAgICAgIFJFTkRFUkJVRkZFUl9TQU1QTEVTID0gMHg4Q0FCLAot
ICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFID0gMHg4RDU2LAotICAg
ICAgICBNQVhfU0FNUExFUyA9IDB4OEQ1NywKLQotICAgICAgICAvLyBHTF9JTUdfbXVsdGlzYW1w
bGVkX3JlbmRlcl90b190ZXh0dXJlCi0gICAgICAgIFJFTkRFUkJVRkZFUl9TQU1QTEVTX0lNRyA9
IDB4OTEzMywKLSAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9JTUcg
PSAweDkxMzQsCi0gICAgICAgIE1BWF9TQU1QTEVTX0lNRyA9IDB4OTEzNSwKLSAgICAgICAgVEVY
VFVSRV9TQU1QTEVTX0lNRyA9IDB4OTEzNiwKLQotICAgICAgICAvLyBHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMgbmFtZXMKLSAgICAgICAgRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElO
VF9PRVMgPSAweDhCOEIsCi0KLSAgICAgICAgLy8gR0xfT0VTX3JnYjhfcmdiYTggbmFtZXMKLSAg
ICAgICAgUkdCOF9PRVMgPSAweDgwNTEsCi0gICAgICAgIFJHQkE4X09FUyA9IDB4ODA1OCwKLSAg
ICAgICAgCi0gICAgICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5hbWVzCi0gICAg
ICAgIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyA9IDB4ODVCNSwKLQotICAgICAgICAvLyBHTF9B
TkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKLSAgICAgICAgVFJBTlNMQVRFRF9TSEFERVJf
U09VUkNFX0xFTkdUSF9BTkdMRSA9IDB4OTNBMCwKLQotICAgICAgICAvLyBHTF9BUkJfdGV4dHVy
ZV9yZWN0YW5nbGUKLSAgICAgICAgVEVYVFVSRV9SRUNUQU5HTEVfQVJCID0gIDB4ODRGNSwKLSAg
ICAgICAgVEVYVFVSRV9CSU5ESU5HX1JFQ1RBTkdMRV9BUkIgPSAweDg0RjYsCi0KLSAgICAgICAg
Ly8gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQotICAgICAgICAvLyBHTF9FWFRfdGV4
dHVyZV9jb21wcmVzc2lvbl9zM3RjCi0gICAgICAgIENPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQgPSAweDgzRjAsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4
M0YxLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCA9IDB4ODNGMiwKLSAg
ICAgICAgQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQgPSAweDgzRjMsCi0KLSAgICAgICAg
Ly8gR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUKLSAgICAgICAgRVRDMV9SR0I4
X09FUyA9IDB4OEQ2NCwKLQotICAgICAgICAvLyBXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRj
Ci0gICAgICAgIENPTVBSRVNTRURfUjExX0VBQyA9IDB4OTI3MCwKLSAgICAgICAgQ09NUFJFU1NF
RF9TSUdORURfUjExX0VBQyA9IDB4OTI3MSwKLSAgICAgICAgQ09NUFJFU1NFRF9SRzExX0VBQyA9
IDB4OTI3MiwKLSAgICAgICAgQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMgPSAweDkyNzMsCi0g
ICAgICAgIENPTVBSRVNTRURfUkdCOF9FVEMyID0gMHg5Mjc0LAotICAgICAgICBDT01QUkVTU0VE
X1NSR0I4X0VUQzIgPSAweDkyNzUsCi0gICAgICAgIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzIgPSAweDkyNzYsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hU
SFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc3LAotICAgICAgICBDT01QUkVTU0VEX1JHQkE4X0VU
QzJfRUFDID0gMHg5Mjc4LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VB
QyA9IDB4OTI3OSwKLQotICAgICAgICAvLyBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0
YwotICAgICAgICBDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAwLAotICAg
ICAgICBDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HID0gMHg4QzAxLAotICAgICAgICBD
T01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyA9IDB4OEMwMiwKLSAgICAgICAgQ09NUFJF
U1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDMsCi0KLSAgICAgICAgLy8gR0xfQU1E
X2NvbXByZXNzZWRfQVRDX3RleHR1cmUKLSAgICAgICAgQ09NUFJFU1NFRF9BVENfUkdCX0FNRCA9
IDB4OEM5MiwKLSAgICAgICAgQ09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQg
PSAweDhDOTMsCi0gICAgICAgIENPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhB
X0FNRCA9IDB4ODdFRSwKLSAgICAgICAgCi0gICAgICAgIC8vIEdMX0tIUl90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2FzdGNfaGRyCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFIgPSAw
eDkzQjAsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFIgPSAweDkzQjEsCi0g
ICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIgPSAweDkzQjIsCi0gICAgICAgIENP
TVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIgPSAweDkzQjMsCi0gICAgICAgIENPTVBSRVNTRURf
UkdCQV9BU1RDXzZ4Nl9LSFIgPSAweDkzQjQsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RD
Xzh4NV9LSFIgPSAweDkzQjUsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIg
PSAweDkzQjYsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIgPSAweDkzQjcs
Ci0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSID0gMHg5M0I4LAotICAgICAg
ICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUiA9IDB4OTNCOSwKLSAgICAgICAgQ09NUFJF
U1NFRF9SR0JBX0FTVENfMTB4OF9LSFIgPSAweDkzQkEsCi0gICAgICAgIENPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDEwX0tIUiA9IDB4OTNCQiwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENf
MTJ4MTBfS0hSID0gMHg5M0JDLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9L
SFIgPSAweDkzQkQsCi0gICAgICAgIAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzR4NF9LSFIgPSAweDkzRDAsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FT
VENfNXg0X0tIUiA9IDB4OTNEMSwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q181eDVfS0hSID0gMHg5M0QyLAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzZ4NV9LSFIgPSAweDkzRDMsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
Nng2X0tIUiA9IDB4OTNENCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184
eDVfS0hSID0gMHg5M0Q1LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4
Nl9LSFIgPSAweDkzRDYsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4
X0tIUiA9IDB4OTNENywKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1
X0tIUiA9IDB4OTNEOCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2
X0tIUiA9IDB4OTNEOSwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4
X0tIUiA9IDB4OTNEQSwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgx
MF9LSFIgPSAweDkzREIsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4
MTBfS0hSID0gMHg5M0RDLAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEy
eDEyX0tIUiA9IDB4OTNERCwKLQotICAgICAgICAvLyBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMKLSAgICAgICAgVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgPSAweDg0RkUsCi0g
ICAgICAgIE1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRiwKLQotICAgICAg
ICAvLyBHTF9BUkJfZHJhd19idWZmZXJzIC8gR0xfRVhUX2RyYXdfYnVmZmVycwotICAgICAgICBN
QVhfRFJBV19CVUZGRVJTX0VYVCA9IDB4ODgyNCwKLSAgICAgICAgRFJBV19CVUZGRVIwX0VYVCA9
IDB4ODgyNSwKLSAgICAgICAgRFJBV19CVUZGRVIxX0VYVCA9IDB4ODgyNiwKLSAgICAgICAgRFJB
V19CVUZGRVIyX0VYVCA9IDB4ODgyNywKLSAgICAgICAgRFJBV19CVUZGRVIzX0VYVCA9IDB4ODgy
OCwKLSAgICAgICAgRFJBV19CVUZGRVI0X0VYVCA9IDB4ODgyOSwKLSAgICAgICAgRFJBV19CVUZG
RVI1X0VYVCA9IDB4ODgyQSwKLSAgICAgICAgRFJBV19CVUZGRVI2X0VYVCA9IDB4ODgyQiwKLSAg
ICAgICAgRFJBV19CVUZGRVI3X0VYVCA9IDB4ODgyQywKLSAgICAgICAgRFJBV19CVUZGRVI4X0VY
VCA9IDB4ODgyRCwKLSAgICAgICAgRFJBV19CVUZGRVI5X0VYVCA9IDB4ODgyRSwKLSAgICAgICAg
RFJBV19CVUZGRVIxMF9FWFQgPSAweDg4MkYsCi0gICAgICAgIERSQVdfQlVGRkVSMTFfRVhUID0g
MHg4ODMwLAotICAgICAgICBEUkFXX0JVRkZFUjEyX0VYVCA9IDB4ODgzMSwKLSAgICAgICAgRFJB
V19CVUZGRVIxM19FWFQgPSAweDg4MzIsCi0gICAgICAgIERSQVdfQlVGRkVSMTRfRVhUID0gMHg4
ODMzLAotICAgICAgICBEUkFXX0JVRkZFUjE1X0VYVCA9IDB4ODgzNCwKLSAgICAgICAgTUFYX0NP
TE9SX0FUVEFDSE1FTlRTX0VYVCA9IDB4OENERiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDBf
RVhUID0gMHg4Q0UwLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMV9FWFQgPSAweDhDRTEsCi0g
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQyX0VYVCA9IDB4OENFMiwKLSAgICAgICAgQ09MT1JfQVRU
QUNITUVOVDNfRVhUID0gMHg4Q0UzLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNF9FWFQgPSAw
eDhDRTQsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ1X0VYVCA9IDB4OENFNSwKLSAgICAgICAg
Q09MT1JfQVRUQUNITUVOVDZfRVhUID0gMHg4Q0U2LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5U
N19FWFQgPSAweDhDRTcsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ4X0VYVCA9IDB4OENFOCwK
LSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDlfRVhUID0gMHg4Q0U5LAotICAgICAgICBDT0xPUl9B
VFRBQ0hNRU5UMTBfRVhUID0gMHg4Q0VBLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTFfRVhU
ID0gMHg4Q0VCLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTJfRVhUID0gMHg4Q0VDLAotICAg
ICAgICBDT0xPUl9BVFRBQ0hNRU5UMTNfRVhUID0gMHg4Q0VELAotICAgICAgICBDT0xPUl9BVFRB
Q0hNRU5UMTRfRVhUID0gMHg4Q0VFLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTVfRVhUID0g
MHg4Q0VGCi0gICAgfTsKLQotICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzCi0gICAgLy8gTm90ZTog
VGhpcyBtZXRob2QncyBiZWhhdmlvciBkaWZmZXJzIGZyb20gdGhlIEdMX0FSQl9yb2J1c3RuZXNz
Ci0gICAgLy8gc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9sbG93aW5nIHdheToKLSAgICAvLyBUaGUg
aW1wbGVtZW50YXRpb24gbXVzdCBub3QgcmVzZXQgdGhlIGVycm9yIHN0YXRlIGR1cmluZyB0aGlz
IGNhbGwuCi0gICAgLy8gSWYgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiByZXR1cm5zIGFuIGVy
cm9yLCBpdCBzaG91bGQgY29udGludWUKLSAgICAvLyByZXR1cm5pbmcgdGhlIHNhbWUgZXJyb3Iu
IFJlc3RvcmluZyB0aGUgR3JhcGhpY3NDb250ZXh0M0QgaXMgaGFuZGxlZAotICAgIC8vIGV4dGVy
bmFsbHkuCi0gICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID0gMDsK
LSAgICAKLSAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Ci0gICAgdmlydHVhbCB2b2lk
IGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25n
IHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1
bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSA9IDA7Ci0gICAgCi0gICAg
Ly8gR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKLSAgICB2aXJ0dWFsIHZvaWQgcmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KSA9IDA7Ci0gICAgCi0gICAgLy8gR0xfT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRl
VmVydGV4QXJyYXlPRVMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiaW5k
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0gICAgLy8gR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLQotICAgIC8vIEVYVCBS
b2J1c3RuZXNzIC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCCi0gICAgdmlydHVhbCB2
b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZT
aXplLCB2b2lkICpkYXRhKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldG5Vbmlmb3JtZnZFWFQo
R0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQg
KnBhcmFtcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50
IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSA9
IDA7Ci0KLSAgICAvLyBHTF9FWFRfZGVidWdfbWFya2VyCi0gICAgdmlydHVhbCB2b2lkIGluc2Vy
dEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHVz
aEdyb3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9w
R3JvdXBNYXJrZXJFWFQodm9pZCkgPSAwOwotCi0gICAgLy8gR0xfQVJCX2RyYXdfYnVmZmVycyAv
IEdMX0VYVF9kcmF3X2J1ZmZlcnMKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0Mz
RHNpemVpIG4sIGNvbnN0IEdDM0RlbnVtKiBidWZzKSA9IDA7Ci0KLSAgICAvLyBHTF9BTkdMRV9p
bnN0YW5jZWRfYXJyYXlzCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJp
bWNvdW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNE
ZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZz
ZXQsIEdDM0RzaXplaSBwcmltY291bnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikgPSAwOwotCi0gICAg
dmlydHVhbCBib29sIGlzTlZJRElBKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0FNRCgpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlbCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJ
bWFnaW5hdGlvbigpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyB2ZW5kb3IoKSA9IDA7Ci0KLSAg
ICAvLyBTb21lIGNvbmZpZ3VyYXRpb25zIGhhdmUgYnVncyByZWdhcmRpbmcgYnVpbHQtaW4gZnVu
Y3Rpb25zIGluIHRoZWlyIE9wZW5HTCBkcml2ZXJzCi0gICAgLy8gdGhhdCBtdXN0IGJlIGF2b2lk
ZWQuIFBvcnRzIHNob3VsZCBpbXBsZW1lbnQgdGhlc2UgZmxhZ3Mgb24gc3VjaCBjb25maWd1cmF0
aW9ucy4KLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24o
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJl
U2l6ZSgpID0gMDsKLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RXh0ZW5zaW9uczNEX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuc2lvbnNHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0
ZW5zaW9uc0dMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I0ZmVmMjUyMmFiNGZmNTdmMTc2NDBkZTgxODNhODBm
Y2QwYmU2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuc2lvbnNHTC5oCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNs
YXNzIGNvbnRhaW5pbmcgb25seSBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zLgorLy8gSW1wbGVtZW50
YXRpb25zIG11c3QgcHJvdmlkZSBhIHN1YmNsYXNzLgorLy8KKy8vIFRoZSBzdXBwb3J0ZWQgZXh0
ZW5zaW9ucyBhcmUgZGVmaW5lZCBiZWxvdyBhbmQgaW4gc3ViY2xhc3NlcywKKy8vIHBvc3NpYmx5
IHBsYXRmb3JtLXNwZWNpZmljIG9uZXMuCisvLworLy8gQ2FsbGluZyBhbnkgZXh0ZW5zaW9uIGZ1
bmN0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgY29udGV4dAorLy8gbXVzdCBiZSBh
IG5vLW9wOyBpbiBwYXJ0aWN1bGFyLCBpdCBtYXkgbm90IGhhdmUgc2lkZSBlZmZlY3RzLiBJbgor
Ly8gdGhpcyBzaXR1YXRpb24sIGlmIHRoZSBmdW5jdGlvbiBoYXMgYSByZXR1cm4gdmFsdWUsIDAg
aXMgcmV0dXJuZWQuCitjbGFzcyBFeHRlbnNpb25zR0wgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkV4dGVuc2lvbnNHTCgpID0gZGVmYXVsdDsKKworICAgIC8vIFN1cHBvcnRlZCBleHRlbnNpb25z
OgorICAgIC8vICAgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgLy8gICBHTF9F
WFRfcmVhZF9mb3JtYXRfYmdyYQorICAgIC8vICAgR0xfQVJCX3JvYnVzdG5lc3MKKyAgICAvLyAg
IEdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28gLyBHTF9PRVNfdGV4dHVyZV9ucG90Cisg
ICAgLy8gICBHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwgLyBHTF9PRVNfcGFja2VkX2RlcHRo
X3N0ZW5jaWwKKyAgICAvLyAgIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgLyBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIC8vICAgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQorICAgIC8vICAgR0xfT0VTX3RleHR1cmVfZmxvYXQKKyAgICAvLyAgIEdM
X09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcgorICAgIC8vICAgR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdAorICAgIC8vICAgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIKKyAgICAvLyAg
IEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgIC8vICAgR0xfT0VTX3JnYjhfcmdiYTgK
KyAgICAvLyAgIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgLy8gICBHTF9PRVNfZWxl
bWVudF9pbmRleF91aW50CisgICAgLy8gICBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3Vy
Y2UKKyAgICAvLyAgIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSAob25seSB0aGUgc3Vic2V0IHJl
cXVpcmVkIHRvCisgICAgLy8gICAgIGltcGxlbWVudCBJT1N1cmZhY2UgYmluZGluZzsgaXQncyBy
ZWNvbW1lbmRlZCB0byBzdXBwb3J0CisgICAgLy8gICAgIHRoaXMgb25seSBvbiBNYWMgT1MgWCB0
byBsaW1pdCB0aGUgYW1vdW50IG9mIGNvZGUgZGVwZW5kZW50CisgICAgLy8gICAgIG9uIHRoaXMg
ZXh0ZW5zaW9uKQorICAgIC8vICAgR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAg
IC8vICAgR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fczN0YworICAgIC8vICAgR0xfT0VTX2Nv
bXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUKKyAgICAvLyAgIEdMX0lNR190ZXh0dXJlX2NvbXBy
ZXNzaW9uX3B2cnRjCisgICAgLy8gICBHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hk
cgorICAgIC8vICAgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyAgICAvLyAg
IEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworICAgIC8vICAgR0xfRVhUX2RlYnVnX21h
cmtlcgorICAgIC8vICAgR0xfQVJCX2RyYXdfYnVmZmVycyAvIEdMX0VYVF9kcmF3X2J1ZmZlcnMK
KyAgICAvLyAgIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKKworICAgIC8vIFRha2VzIGZ1bGwg
bmFtZSBvZiBleHRlbnNpb247IGZvciBleGFtcGxlLAorICAgIC8vICJHTF9FWFRfdGV4dHVyZV9m
b3JtYXRfQkdSQTg4ODgiLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcm
KSA9IDA7CisKKyAgICAvLyBDZXJ0YWluIE9wZW5HTCBhbmQgV2ViR0wgaW1wbGVtZW50YXRpb25z
IG1heSBzdXBwb3J0IGVuYWJsaW5nCisgICAgLy8gZXh0ZW5zaW9ucyBsYXppbHkuIFRoaXMgbWV0
aG9kIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoCisgICAgLy8gZXh0ZW5zaW9uIG5hbWVzIGZvciB3
aGljaCBzdXBwb3J0cyByZXR1cm5zIHRydWUuCisgICAgdmlydHVhbCB2b2lkIGVuc3VyZUVuYWJs
ZWQoY29uc3QgU3RyaW5nJikgPSAwOworCisgICAgLy8gVGFrZXMgZnVsbCBuYW1lIG9mIGV4dGVu
c2lvbjogZm9yIGV4YW1wbGUsICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiLgorICAg
IC8vIENoZWNrcyB0byBzZWUgd2hldGhlciB0aGUgZ2l2ZW4gZXh0ZW5zaW9uIGlzIGFjdHVhbGx5
IGVuYWJsZWQgKHNlZSBlbnN1cmVFbmFibGVkKS4KKyAgICAvLyBIYXMgbm8gb3RoZXIgc2lkZS1l
ZmZlY3RzLgorICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJikgPSAwOwor
CisgICAgZW51bSBFeHRlbnNpb25zRW51bVR5cGUgeworICAgICAgICAvLyBFWFRfc1JHQiBmb3Jt
YXRzCisgICAgICAgIFNSR0JfRVhUID0gMHg4QzQwLAorICAgICAgICBTUkdCX0FMUEhBX0VYVCA9
IDB4OEM0MiwKKyAgICAgICAgU1JHQjhfQUxQSEE4X0VYVCA9IDB4OEM0MywKKyAgICAgICAgRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQgPSAweDgyMTAsCisKKyAgICAg
ICAgLy8gRVhUX2JsZW5kX21pbm1heCBlbnVtcworICAgICAgICBNSU5fRVhUID0gMHg4MDA3LAor
ICAgICAgICBNQVhfRVhUID0gMHg4MDA4LAorCisgICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCBlbnVtcworICAgICAgICBCR1JBX0VYVCA9IDB4ODBFMSwKKworICAgICAg
ICAvLyBHTF9BUkJfcm9idXN0bmVzcyBlbnVtcworICAgICAgICBHVUlMVFlfQ09OVEVYVF9SRVNF
VF9BUkIgPSAweDgyNTMsCisgICAgICAgIElOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCID0gMHg4
MjU0LAorICAgICAgICBVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCID0gMHg4MjU1LAorICAgICAg
ICBDT05URVhUX1JPQlVTVF9BQ0NFU1MgPSAweDkwRjMsCisKKyAgICAgICAgLy8gR0xfRVhUL09F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCBlbnVtcworICAgICAgICBERVBUSDI0X1NURU5DSUw4ID0g
MHg4OEYwLAorCisgICAgICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgbmFtZXMKKyAg
ICAgICAgUkVBRF9GUkFNRUJVRkZFUiA9IDB4OENBOCwKKyAgICAgICAgRFJBV19GUkFNRUJVRkZF
UiA9IDB4OENBOSwKKyAgICAgICAgRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0E2LAor
ICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQUEsCisKKyAgICAgICAgLy8g
R0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgbmFtZXMKKyAgICAgICAgUkVOREVSQlVG
RkVSX1NBTVBMRVMgPSAweDhDQUIsCisgICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVM
VElTQU1QTEUgPSAweDhENTYsCisgICAgICAgIE1BWF9TQU1QTEVTID0gMHg4RDU3LAorCisgICAg
ICAgIC8vIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKKyAgICAgICAgUkVO
REVSQlVGRkVSX1NBTVBMRVNfSU1HID0gMHg5MTMzLAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX01VTFRJU0FNUExFX0lNRyA9IDB4OTEzNCwKKyAgICAgICAgTUFYX1NBTVBMRVNfSU1H
ID0gMHg5MTM1LAorICAgICAgICBURVhUVVJFX1NBTVBMRVNfSU1HID0gMHg5MTM2LAorCisgICAg
ICAgIC8vIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBuYW1lcworICAgICAgICBGUkFHTUVO
VF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUyA9IDB4OEI4QiwKKworICAgICAgICAvLyBHTF9P
RVNfcmdiOF9yZ2JhOCBuYW1lcworICAgICAgICBSR0I4X09FUyA9IDB4ODA1MSwKKyAgICAgICAg
UkdCQThfT0VTID0gMHg4MDU4LAorCisgICAgICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IG5hbWVzCisgICAgICAgIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyA9IDB4ODVCNSwKKwor
ICAgICAgICAvLyBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKKyAgICAgICAgVFJB
TlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRSA9IDB4OTNBMCwKKworICAgICAgICAv
LyBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUKKyAgICAgICAgVEVYVFVSRV9SRUNUQU5HTEVfQVJC
ID0gIDB4ODRGNSwKKyAgICAgICAgVEVYVFVSRV9CSU5ESU5HX1JFQ1RBTkdMRV9BUkIgPSAweDg0
RjYsCisKKyAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgICAg
ICAvLyBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3RjCisgICAgICAgIENPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQgPSAweDgzRjAsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDFfRVhUID0gMHg4M0YxLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VY
VCA9IDB4ODNGMiwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQgPSAweDgz
RjMsCisKKyAgICAgICAgLy8gR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUKKyAg
ICAgICAgRVRDMV9SR0I4X09FUyA9IDB4OEQ2NCwKKworICAgICAgICAvLyBXRUJHTF9jb21wcmVz
c2VkX3RleHR1cmVfZXRjCisgICAgICAgIENPTVBSRVNTRURfUjExX0VBQyA9IDB4OTI3MCwKKyAg
ICAgICAgQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQyA9IDB4OTI3MSwKKyAgICAgICAgQ09NUFJF
U1NFRF9SRzExX0VBQyA9IDB4OTI3MiwKKyAgICAgICAgQ09NUFJFU1NFRF9TSUdORURfUkcxMV9F
QUMgPSAweDkyNzMsCisgICAgICAgIENPTVBSRVNTRURfUkdCOF9FVEMyID0gMHg5Mjc0LAorICAg
ICAgICBDT01QUkVTU0VEX1NSR0I4X0VUQzIgPSAweDkyNzUsCisgICAgICAgIENPTVBSRVNTRURf
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgPSAweDkyNzYsCisgICAgICAgIENPTVBSRVNT
RURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc3LAorICAgICAgICBDT01Q
UkVTU0VEX1JHQkE4X0VUQzJfRUFDID0gMHg5Mjc4LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4
X0FMUEhBOF9FVEMyX0VBQyA9IDB4OTI3OSwKKworICAgICAgICAvLyBHTF9JTUdfdGV4dHVyZV9j
b21wcmVzc2lvbl9wdnJ0YworICAgICAgICBDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1H
ID0gMHg4QzAwLAorICAgICAgICBDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HID0gMHg4
QzAxLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyA9IDB4OEMwMiwK
KyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDMsCisKKyAg
ICAgICAgLy8gR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUKKyAgICAgICAgQ09NUFJFU1NF
RF9BVENfUkdCX0FNRCA9IDB4OEM5MiwKKyAgICAgICAgQ09NUFJFU1NFRF9BVENfUkdCQV9FWFBM
SUNJVF9BTFBIQV9BTUQgPSAweDhDOTMsCisgICAgICAgIENPTVBSRVNTRURfQVRDX1JHQkFfSU5U
RVJQT0xBVEVEX0FMUEhBX0FNRCA9IDB4ODdFRSwKKworICAgICAgICAvLyBHTF9LSFJfdGV4dHVy
ZV9jb21wcmVzc2lvbl9hc3RjX2hkcgorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRf
S0hSID0gMHg5M0IwLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSID0gMHg5
M0IxLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSID0gMHg5M0IyLAorICAg
ICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSID0gMHg5M0IzLAorICAgICAgICBDT01Q
UkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSID0gMHg5M0I0LAorICAgICAgICBDT01QUkVTU0VEX1JH
QkFfQVNUQ184eDVfS0hSID0gMHg5M0I1LAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ184
eDZfS0hSID0gMHg5M0I2LAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSID0g
MHg5M0I3LAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUiA9IDB4OTNCOCwK
KyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFIgPSAweDkzQjksCisgICAgICAg
IENPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSID0gMHg5M0JBLAorICAgICAgICBDT01QUkVT
U0VEX1JHQkFfQVNUQ18xMHgxMF9LSFIgPSAweDkzQkIsCisgICAgICAgIENPTVBSRVNTRURfUkdC
QV9BU1RDXzEyeDEwX0tIUiA9IDB4OTNCQywKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENf
MTJ4MTJfS0hSID0gMHg5M0JELAorCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FT
VENfNHg0X0tIUiA9IDB4OTNEMCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q181eDRfS0hSID0gMHg5M0QxLAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzV4NV9LSFIgPSAweDkzRDIsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
Nng1X0tIUiA9IDB4OTNEMywKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182
eDZfS0hSID0gMHg5M0Q0LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4
NV9LSFIgPSAweDkzRDUsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2
X0tIUiA9IDB4OTNENiwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhf
S0hSID0gMHg5M0Q3LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVf
S0hSID0gMHg5M0Q4LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZf
S0hSID0gMHg5M0Q5LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhf
S0hSID0gMHg5M0RBLAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEw
X0tIUiA9IDB4OTNEQiwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngx
MF9LSFIgPSAweDkzREMsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4
MTJfS0hSID0gMHg5M0RELAorCisgICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlz
b3Ryb3BpYworICAgICAgICBURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRSwKKyAg
ICAgICAgTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZGLAorCisgICAgICAg
IC8vIEdMX0FSQl9kcmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZmZXJzCisgICAgICAgIE1B
WF9EUkFXX0JVRkZFUlNfRVhUID0gMHg4ODI0LAorICAgICAgICBEUkFXX0JVRkZFUjBfRVhUID0g
MHg4ODI1LAorICAgICAgICBEUkFXX0JVRkZFUjFfRVhUID0gMHg4ODI2LAorICAgICAgICBEUkFX
X0JVRkZFUjJfRVhUID0gMHg4ODI3LAorICAgICAgICBEUkFXX0JVRkZFUjNfRVhUID0gMHg4ODI4
LAorICAgICAgICBEUkFXX0JVRkZFUjRfRVhUID0gMHg4ODI5LAorICAgICAgICBEUkFXX0JVRkZF
UjVfRVhUID0gMHg4ODJBLAorICAgICAgICBEUkFXX0JVRkZFUjZfRVhUID0gMHg4ODJCLAorICAg
ICAgICBEUkFXX0JVRkZFUjdfRVhUID0gMHg4ODJDLAorICAgICAgICBEUkFXX0JVRkZFUjhfRVhU
ID0gMHg4ODJELAorICAgICAgICBEUkFXX0JVRkZFUjlfRVhUID0gMHg4ODJFLAorICAgICAgICBE
UkFXX0JVRkZFUjEwX0VYVCA9IDB4ODgyRiwKKyAgICAgICAgRFJBV19CVUZGRVIxMV9FWFQgPSAw
eDg4MzAsCisgICAgICAgIERSQVdfQlVGRkVSMTJfRVhUID0gMHg4ODMxLAorICAgICAgICBEUkFX
X0JVRkZFUjEzX0VYVCA9IDB4ODgzMiwKKyAgICAgICAgRFJBV19CVUZGRVIxNF9FWFQgPSAweDg4
MzMsCisgICAgICAgIERSQVdfQlVGRkVSMTVfRVhUID0gMHg4ODM0LAorICAgICAgICBNQVhfQ09M
T1JfQVRUQUNITUVOVFNfRVhUID0gMHg4Q0RGLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMF9F
WFQgPSAweDhDRTAsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxX0VYVCA9IDB4OENFMSwKKyAg
ICAgICAgQ09MT1JfQVRUQUNITUVOVDJfRVhUID0gMHg4Q0UyLAorICAgICAgICBDT0xPUl9BVFRB
Q0hNRU5UM19FWFQgPSAweDhDRTMsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQ0X0VYVCA9IDB4
OENFNCwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDVfRVhUID0gMHg4Q0U1LAorICAgICAgICBD
T0xPUl9BVFRBQ0hNRU5UNl9FWFQgPSAweDhDRTYsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQ3
X0VYVCA9IDB4OENFNywKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDhfRVhUID0gMHg4Q0U4LAor
ICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UOV9FWFQgPSAweDhDRTksCisgICAgICAgIENPTE9SX0FU
VEFDSE1FTlQxMF9FWFQgPSAweDhDRUEsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMV9FWFQg
PSAweDhDRUIsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMl9FWFQgPSAweDhDRUMsCisgICAg
ICAgIENPTE9SX0FUVEFDSE1FTlQxM19FWFQgPSAweDhDRUQsCisgICAgICAgIENPTE9SX0FUVEFD
SE1FTlQxNF9FWFQgPSAweDhDRUUsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxNV9FWFQgPSAw
eDhDRUYKKyAgICB9OworCisgICAgLy8gR0xfQVJCX3JvYnVzdG5lc3MKKyAgICAvLyBOb3RlOiBU
aGlzIG1ldGhvZCdzIGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MK
KyAgICAvLyBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorICAgIC8vIFRoZSBp
bXBsZW1lbnRhdGlvbiBtdXN0IG5vdCByZXNldCB0aGUgZXJyb3Igc3RhdGUgZHVyaW5nIHRoaXMg
Y2FsbC4KKyAgICAvLyBJZiBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCIHJldHVybnMgYW4gZXJy
b3IsIGl0IHNob3VsZCBjb250aW51ZQorICAgIC8vIHJldHVybmluZyB0aGUgc2FtZSBlcnJvci4g
UmVzdG9yaW5nIHRoZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpcyBoYW5kbGVkCisgICAgLy8g
ZXh0ZXJuYWxseS4KKyAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkg
PSAwOworCisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAorICAgIHZpcnR1YWwgdm9p
ZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9u
ZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwg
dW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikgPSAwOworCisgICAgLy8g
R0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KSA9IDA7CisKKyAgICAvLyBHTF9PRVNfdmVydGV4
X2FycmF5X29iamVjdAorICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhB
cnJheU9FUygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICAvLyBHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisgICAgLy8gRVhUIFJvYnVzdG5l
c3MgLSB1c2VzIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIKKyAgICB2aXJ0dWFsIHZvaWQgcmVh
ZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZv
aWQgKmRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0blVuaWZvcm1mdkVYVChHQzNEdWlu
dCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1z
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJvZ3Jh
bSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpID0gMDsKKwor
ICAgIC8vIEdMX0VYVF9kZWJ1Z19tYXJrZXIKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RXZlbnRN
YXJrZXJFWFQoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXNoR3JvdXBN
YXJrZXJFWFQoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwb3BHcm91cE1h
cmtlckVYVCh2b2lkKSA9IDA7CisKKyAgICAvLyBHTF9BUkJfZHJhd19idWZmZXJzIC8gR0xfRVhU
X2RyYXdfYnVmZmVycworICAgIHZpcnR1YWwgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkg
biwgY29uc3QgR0MzRGVudW0qIGJ1ZnMpID0gMDsKKworICAgIC8vIEdMX0FOR0xFX2luc3RhbmNl
ZF9hcnJheXMKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1v
ZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0Mz
RHNpemVpIHByaW1jb3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSA9IDA7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNOVklESUEoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQU1EKCkgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBpc0ludGVsKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdpbmF0
aW9uKCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHZlbmRvcigpID0gMDsKKworICAgIC8vIFNv
bWUgY29uZmlndXJhdGlvbnMgaGF2ZSBidWdzIHJlZ2FyZGluZyBidWlsdC1pbiBmdW5jdGlvbnMg
aW4gdGhlaXIgT3BlbkdMIGRyaXZlcnMKKyAgICAvLyB0aGF0IG11c3QgYmUgYXZvaWRlZC4gUG9y
dHMgc2hvdWxkIGltcGxlbWVudCB0aGVzZSBmbGFncyBvbiBzdWNoIGNvbmZpZ3VyYXRpb25zLgor
ICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbigpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkg
PSAwOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9ybWF0Q29udmVydGVyLmNwcAppbmRleCAwOWVlYzc4
YmFkZDA3ZTg3OTQxNzc0MDUzMGVhNWM1M2E5ZGQ2MDZkLi5iNmM2MThlOTYxOGZkZGYwZDhjMGEz
ZjdmNjk5MTM3ZmM0YWU4ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5jcHAKQEAgLTI3LDEyICsyNywxMiBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkZvcm1hdENvbnZlcnRlci5o
IgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNETkVPTi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMTkVPTi5oIgogI2VuZGlm
CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKQEAgLTE3MywxMyArMTczLDEzIEBAIGlubGluZSB1bnNp
Z25lZCBzaG9ydCBjb252ZXJ0RmxvYXRUb0hhbGZGbG9hdChmbG9hdCBmKQogCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIC8vIFBpeGVsIHVucGFja2luZyByb3V0aW5lcy4KLXRlbXBsYXRlPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0IGZvcm1hdCwgdHlwZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUg
RHN0VHlwZT4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGZvcm1hdCwg
dHlwZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRHN0VHlwZT4KIEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2soY29uc3QgU291cmNlVHlwZSosIERzdFR5cGUqLCB1bnNpZ25lZCkKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
dW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCB1aW50OF90LCB1aW50
OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtMTkxLDcgKzE5
MSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCOCwgdWludDhfCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJH
UjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSOCwgdWludDhf
dCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2Vb
Ml07CkBAIC0yMDMsNyArMjAzLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5w
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1I4LCB1aW50OF8KICAgICB9CiB9
CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6QVJHQjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6QVJHQjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gc291cmNlWzFdOwpAQCAtMjE1LDcgKzIxNSw3IEBAIHRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJH
QjgsIHVpbnQ4CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFCR1I4LCB1aW50OF90LCB1aW50OF90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVszXTsKQEAgLTIyNyw3ICsyMjcs
NyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OkFCR1I4LCB1aW50OAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1JB
OCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JBOCwgdWludDhf
dCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNvbnN0IHVpbnQzMl90KiBzb3VyY2UzMiA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQzMl90Kj4oc291cmNlKTsKICAgICB1aW50
MzJfdCogZGVzdGluYXRpb24zMiA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVpbnQzMl90Kj4oZGVz
dGluYXRpb24pOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVpbnQ4CiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3Qg
dWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50
MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjp1bnBhY2tPbmVS
b3dPZlJHQkE1NTUxVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpA
QCAtMjY0LDcgKzI2NCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIHVpCiAgICAgfQogfQogCi10
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQkE0NDQ0LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTQ0NDQsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJHQkE0NDQ0
VG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtMjg0LDcgKzI4
NCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQsIHVpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QjU2NSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NSwg
dWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQogICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCNTY1VG9SR0JBOChzb3VyY2UsIGRl
c3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtMzAzLDcgKzMwMyw3IEBAIHRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCNTY1LCB1aW50CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4LCB1aW50OF90LCB1aW50OF90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTMxNSw3ICszMTUsNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlI4LCB1aW50OF90LAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIHVp
bnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4LCB1aW50OF90LCB1aW50
OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAg
LTMyNyw3ICszMjcsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgdWludDhfdAogICAgIH0KIH0KIAotdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpBUjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVI4
LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9
IHNvdXJjZVsxXTsKQEAgLTMzOSw3ICszMzksNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSOCwgdWludDhfdAog
ICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpBOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpBOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVz
dGluYXRpb25bMF0gPSAweDA7CkBAIC0zNTEsNyArMzUxLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBOCwgdWlu
dDhfdCwKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgsIHVpbnQ4X3QsIGZsb2F0Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Y29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gMjU1LjBmOwogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKQEAgLTM2NCw3ICszNjQsNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQkE4LCB1aW50OAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1JBOCwg
dWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4LCB1aW50OF90LCBmbG9h
dD4oY29uc3QgdWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAyNTUu
MGY7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewpAQCAtMzc3LDcgKzM3Nyw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVpbnQ4CiAgICAgfQogfQog
Ci10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OkFCR1I4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QUJHUjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNvbnN0IGZsb2F0IHNjYWxl
RmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKQEAgLTM5MCw3ICszOTAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFCR1I4LCB1
aW50OAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OkFSR0I4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBj
b25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAyNTUuMGY7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC00MDMsNyArNDAzLDcgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpBUkdCOCwgdWludDgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCOCwgdWludDhf
dCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKQEAgLTQxNiw3
ICs0MTYsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIHVpbnQ4XwogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpCR1I4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSOCwgdWludDhf
dCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBm
IC8gMjU1LjBmOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewpAQCAtNDI5LDcgKzQyOSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSOCwgdWludDhfCiAgICAgfQog
fQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBz
b3VyY2VbMF07CkBAIC00NDEsNyArNDQxLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYsIGZsb2EKICAg
ICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UjMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0g
c291cmNlWzBdOwpAQCAtNDUzLDcgKzQ1Myw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRiwgZmxvYXQsCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSQTMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gc291cmNlWzBdOwpAQCAtNDY1LDcgKzQ2NSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkEzMkYsIGZsb2F0
CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQq
IHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkEzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblsw
XSA9IDA7CkBAIC00ODEsMTMgKzQ4MSwxMyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEzMkYsIGZsb2F0LAogLy8g
UGl4ZWwgcGFja2luZyByb3V0aW5lcy4KIC8vCiAKLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IGZvcm1hdCwgaW50IGFscGhhT3AsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5
cGVuYW1lIERzdFR5cGU+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBm
b3JtYXQsIGludCBhbHBoYU9wLCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBl
PgogQUxXQVlTX0lOTElORSB2b2lkIHBhY2soY29uc3QgU291cmNlVHlwZSosIERzdFR5cGUqLCB1
bnNpZ25lZCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgs
IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9O
b3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlv
blswXSA9IHNvdXJjZVszXTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBOCwgR3JhcGhp
Y3NDbwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9w
OjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4LCBH
cmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTUwNSw3
ICs1MDUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDbwogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1
aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhh
T3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtNTE3LDcgKzUxNyw3
IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlI4LCBHcmFwaGljc0NvCiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUg
aXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4LCBHcmFwaGljc0NvbnRl
eHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBzb3VyY2VbM10gPyAyNTUuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtNTI4LDcgKzUyOCw3
IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlI4LCBHcmFwaGljc0NvCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90
aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25b
MF0gPSBzb3VyY2VbMF07CkBAIC01MzgsNyArNTM4LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4LCBHcmFwaGlj
c0MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6
OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJB
OCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNd
IC8gMjU1LjBmOwpAQCAtNTUxLDcgKzU1MSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDCiB9
CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4K
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4LCBHcmFwaGljc0NvbnRl
eHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJj
ZVszXSA6IDEuMGY7CkBAIC01NjMsNyArNTYzLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4LCBHcmFwaGljc0MK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpE
b05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjgsIEdy
YXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNTc0LDcg
KzU3NCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwg
dWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAg
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtNTkwLDcgKzU5
MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNzCiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRp
bmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVs
dGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gc291cmNlWzNdID8gMjU1LjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTYwNiwx
MiArNjA2LDEyIEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNzCiB9CiAKIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
QTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4
X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFP
cDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgbWVtY3B5
KGRlc3RpbmF0aW9uLCBzb3VyY2UsIHBpeGVsc1BlclJvdyAqIDQpOwogfQogCi10ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0JBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljc0NvbnRleHRHTDo6
QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAg
ICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC02MjgsNyAr
NjI4LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgsIEdyYXBoaWMKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91
dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgsIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9V
bm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC02
NDQsNyArNjQ0LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgsIEdyYXBoaWMKICAgICB9CiB9CiAKLXRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQkE0NDQ0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50
OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwaGljc0Nv
bnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6cGFja09uZVJv
d09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1Bl
clJvdyk7CkBAIC02NTksNyArNjU5LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQsIEdyYXAKICAgICB9
CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Q
cmVtdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
NDQ0NCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3Qs
IHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3Vy
Y2VbM10gLyAyNTUuMGY7CkBAIC02NzYsNyArNjc2LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQsIEdy
YXAKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1v
dmVkLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1Vu
bXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0
NDQsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVp
bnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2Vb
M10gPyAyNTUuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtNjkyLDcgKzY5Miw3IEBAIHRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQkE0NDQ0LCBHcmFwCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRv
Tm90aGluZywgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNo
b3J0NTU1MShzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtNzA3LDcgKzcw
Nyw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JB
NTU1MSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3Qs
IHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytp
KSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAt
NzI0LDcgKzcyNCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwCiB9CiAKIC8vIEZJWE1FOiB0
aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1
NTUxLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1
aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHRH
TDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7
CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMjU1LjBmIC8gc291cmNl
WzNdIDogMS4wZjsKQEAgLTc0MCw3ICs3NDAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcAog
ICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6
RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2
NSwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDE2
X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogICAgIFNJ
TUQ6OnBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsc1BlclJvdyk7CkBAIC03NTQsNyArNzU0LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1LCBH
cmFwaGkKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBz
b3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCNTY1LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwg
dWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3Rv
ciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTc3MCw3ICs3NzAsNyBAQCB0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1
NjUsIEdyYXBoaQogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0
IGJlIHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9w
OjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCNTY1LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90
LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291
cmNlWzNdID8gMjU1LjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTc4NSw3ICs3ODUsNyBAQCB0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0I1NjUsIEdyYXBoaQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGLCBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZs
b2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBm
bG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07
CkBAIC03OTYsNyArNzk2LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGLCBHcmFwaGkKICAgICB9CiB9CiAK
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlw
bHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkYsIEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC04MDgsNyArODA4LDcgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCMzJGLCBHcmFwaGkKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBm
bG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBs
eSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291
cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC04MjEsMTIgKzgyMSwxMiBAQCB0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0IzMkYsIEdyYXBoaQogfQogCiAvLyBVc2VkIG9ubHkgZHVyaW5nIFJHQkE4IG9y
IEJHUkE4IC0+IGZsb2F0aW5nLXBvaW50IHVwbG9hZHMuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGLCBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZs
b2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywg
ZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwg
cGl4ZWxzUGVyUm93ICogNCAqIHNpemVvZihmbG9hdCkpOwogfQogCi10ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJG
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0
Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpE
b1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBzb3VyY2VbM107CkBAIC04MzksNyArODM5LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwg
R3JhcGgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxv
YXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBm
IC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTg1Miw3ICs4NTIsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJG
LCBHcmFwaAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkYsIEdy
YXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3Qg
ZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVszXTsKQEAgLTg2MSw3ICs4NjEsNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpBMzJGLCBHcmFwaGljcwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBm
bG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZs
b2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsK
QEAgLTg3MCw3ICs4NzAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFwaGljcwogICAgIH0KIH0KIAot
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHks
IGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6
QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtODgwLDcgKzg4MCw3IEBAIHRlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlIzMkYsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFwaGljc0NvbnRl
eHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UjMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQs
IGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8g
MS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC04OTAsNyArODkwLDcgQEAgdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMy
RiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEz
MkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTkwMCw3ICs5
MDAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpYwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkEz
MkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxv
YXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpE
b1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBzb3VyY2VbM107CkBAIC05MTEsNyArOTExLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkEzMkYsIEdy
YXBoaWMKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZs
b2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkYs
IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBz
b3VyY2VbM10gOiAxLjBmOwpAQCAtOTIyLDcgKzkyMiw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFw
aGljCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVp
bnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQx
Nl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0RmxvYXRUb0hhbGZG
bG9hdChzb3VyY2VbMF0pOwpAQCAtOTM0LDcgKzkzNCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdy
YXBoCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNl
LCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkExNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9h
dCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVsz
XTsKQEAgLTk0Nyw3ICs5NDcsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaAogICAgIH0KIH0K
IAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0
aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBo
aWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29u
c3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytp
KSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJj
ZVszXSA6IDEuMGY7CkBAIC05NjAsNyArOTYwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGgK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6
OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2Riwg
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihj
b25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0RmxvYXRUb0hhbGZGbG9hdChz
b3VyY2VbMF0pOwpAQCAtOTcxLDcgKzk3MSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RiwgR3JhcGhpCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpE
b1ByZW11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZG
LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIHVpbnQx
Nl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC05
ODMsNyArOTgzLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGkKICAgICB9CiB9CiAKLXRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQjE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxv
YXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RiwgR3JhcGhpY3NDb250ZXh0
R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCog
c291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4w
ZjsKQEAgLTk5NSw3ICs5OTUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaQogICAgIH0KIH0K
IAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkExNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcs
IGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpY3NDb250
ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCog
c291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0RmxvYXRUb0hhbGZGbG9hdChzb3VyY2VbMF0pOwpA
QCAtMTAwNSw3ICsxMDA1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkYsIEdyYXBoaWMKICAgICB9CiB9CiAK
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBs
eSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljc0Nv
bnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBm
bG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC0xMDE2LDcgKzEwMTYs
NyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpYwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkYs
IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZf
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6
OkRvVW5tdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTEwMjcs
NyArMTAyNyw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljCiAgICAgfQogfQogCi10ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgdWlu
dDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhh
T3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBjb252ZXJ0RmxvYXRUb0hhbGZGbG9hdChzb3VyY2VbMF0pOwpAQCAtMTAzNiw3ICsx
MDM2LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UjE2RiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIx
NkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgdWlu
dDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhh
T3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
dWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtMTA0Niw3ICsxMDQ2LDcgQEAgdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjE2RiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkYsIEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQq
IHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBm
bG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJj
ZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UjE2RiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkYsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpBMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBm
bG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRG
bG9hdFRvSGFsZkZsb2F0KHNvdXJjZVszXSk7CkBAIC0xMDY1LDExOSArMTA2NSwxMTkgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6QTE2RiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0IEZvcm1hdD4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0IEZvcm1hdD4KIHN0cnVjdCBJc0Zsb2F0Rm9ybWF0IHsKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBWYWx1ZSA9Ci0gICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCQTMyRgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQjMyRgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJBMzJGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UjMyRgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OkEzMkY7CisgICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTMyRgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY7CiB9OwogCi10ZW1wbGF0ZTxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdCBGb3JtYXQ+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBGb3JtYXQ+CiBzdHJ1Y3QgSXNIYWxmRmxvYXRGb3JtYXQgewogICAgIHN0YXRp
YyBjb25zdCBib29sIFZhbHVlID0KLSAgICAgICAgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0JBMTZGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2RjsKKyAgICAgICAgRm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGCisgICAgICAgIHx8IEZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkYKKyAgICAgICAgfHwgRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGCisgICAgICAgIHx8IEZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjsKIH07CiAKLXRlbXBsYXRlPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IEZvcm1hdD4KK3RlbXBsYXRlPEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0IEZvcm1hdD4KIHN0cnVjdCBJczE2YnBwRm9ybWF0IHsKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBWYWx1ZSA9Ci0gICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NAotICAgICAgICB8fCBGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NTsKKyAgICAgICAgRm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MQorICAgICAgICB8fCBGb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0CisgICAgICAgIHx8IEZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTY1OwogfTsKIAotdGVt
cGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRm9ybWF0LCBib29sIElzRmxvYXQg
PSBJc0Zsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlLCBib29sIElzSGFsZkZsb2F0ID0gSXNIYWxm
RmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUsIGJvb2wgSXMxNmJwcCA9IElzMTZicHBGb3JtYXQ8
Rm9ybWF0Pjo6VmFsdWU+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBG
b3JtYXQsIGJvb2wgSXNGbG9hdCA9IElzRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUsIGJvb2wg
SXNIYWxmRmxvYXQgPSBJc0hhbGZGbG9hdEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZSwgYm9vbCBJczE2
YnBwID0gSXMxNmJwcEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZT4KIHN0cnVjdCBEYXRhVHlwZUZvckZv
cm1hdCB7CiAgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CiB9OwogCi10ZW1wbGF0ZTxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdCBGb3JtYXQ+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdCBGb3JtYXQ+CiBzdHJ1Y3QgRGF0YVR5cGVGb3JGb3JtYXQ8Rm9ybWF0LCB0
cnVlLCBmYWxzZSwgZmFsc2U+IHsKICAgICB0eXBlZGVmIGZsb2F0IFR5cGU7CiB9OwogCi10ZW1w
bGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBGb3JtYXQ+Cit0ZW1wbGF0ZTxHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBGb3JtYXQ+CiBzdHJ1Y3QgRGF0YVR5cGVGb3JGb3Jt
YXQ8Rm9ybWF0LCBmYWxzZSwgdHJ1ZSwgZmFsc2U+IHsKICAgICB0eXBlZGVmIHVpbnQxNl90IFR5
cGU7CiB9OwogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBGb3JtYXQ+
Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBGb3JtYXQ+CiBzdHJ1Y3Qg
RGF0YVR5cGVGb3JGb3JtYXQ8Rm9ybWF0LCBmYWxzZSwgZmFsc2UsIHRydWU+IHsKICAgICB0eXBl
ZGVmIHVpbnQxNl90IFR5cGU7CiB9OwogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdCBGb3JtYXQ+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBG
b3JtYXQ+CiBzdHJ1Y3QgSW50ZXJtZWRpYXRlRm9ybWF0IHsKLSAgICBzdGF0aWMgY29uc3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgVmFsdWUgPSAoSXNGbG9hdEZvcm1hdDxGb3JtYXQ+
OjpWYWx1ZSB8fCBJc0hhbGZGbG9hdEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZSkgPyBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiA6IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0JBODsKKyAgICBzdGF0aWMgY29uc3QgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQgVmFsdWUgPSAoSXNGbG9hdEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZSB8fCBJc0hhbGZGbG9hdEZv
cm1hdDxGb3JtYXQ+OjpWYWx1ZSkgPyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTMyRiA6IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODsKIH07CiAKIAogLyog
RU5EIENPREUgU0hBUkVEIFdJVEggTU9aSUxMQSBGSVJFRk9YICovCiAKLXZvaWQgRm9ybWF0Q29u
dmVydGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNyY0Zvcm1hdCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcCBhbHBoYU9wKQordm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQoR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wIGFscGhhT3ApCiB7
CiAjZGVmaW5lIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChTcmNGb3JtYXQpIFwKICAg
ICBjYXNlIFNyY0Zvcm1hdDogXAogICAgICAgICByZXR1cm4gY29udmVydDxTcmNGb3JtYXQ+KGRz
dEZvcm1hdCwgYWxwaGFPcCk7CiAKICAgICAgICAgc3dpdGNoIChzcmNGb3JtYXQpIHsKLSAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UjgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JN
QVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4KQotICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
MzJGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMzJGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgpCi0gICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJBMzJGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JD
Rk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4KQotICAgICAgICAgICAg
Rk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpCR1I4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUpCi0gICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QjMyRikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4KQot
ICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpBQkdSOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVI4KQotICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpCR1JBOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1B
VChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEpCi0gICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQkE0NDQ0KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGKQorICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkYpCisgICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OkEzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBOCkKKyAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkEzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjgpCisgICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjgp
CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9D
QVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGKQorICAg
ICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0JBOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NS
Q0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjgpCisgICAgICAgICAg
ICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkFCR1I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjgpCisgICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJH
UkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZF
UlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0
NDQpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkYpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogI3VuZGVmIEZPUk1BVENPTlZF
UlRFUl9DQVNFX1NSQ0ZPUk1BVAogfQogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdCBTcmNGb3JtYXQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVydGVyOjpj
b252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCkKK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0IFNyY0Zvcm1hdD4KK0FMV0FZU19JTkxJTkUgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6
OmNvbnZlcnQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wKQogewogI2RlZmluZSBGT1JNQVRDT05WRVJURVJf
Q0FTRV9EU1RGT1JNQVQoRHN0Rm9ybWF0KSBcCiAgICAgY2FzZSBEc3RGb3JtYXQ6IFwKICAgICAg
ICAgcmV0dXJuIGNvbnZlcnQ8U3JjRm9ybWF0LCBEc3RGb3JtYXQ+KGFscGhhT3ApOwogCiAgICAg
ICAgIHN3aXRjaCAoZHN0Rm9ybWF0KSB7Ci0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4KQotICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSMTZGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGKQotICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpB
OCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2RikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9D
QVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTMyRikKLSAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkE4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9S
TUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2RikKLSAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkEzMkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgpCi0gICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2
NSkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYpCi0g
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0Vf
RFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSkKLSAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCQTQ0NDQpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9E
U1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkYpCi0gICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQkEzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RG
T1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4KQorICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSMTZGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBOCkKKyAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6QTE2RikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RT
VEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRikKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RikKKyAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEz
MkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NSkKKyAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCMTZGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0Vf
RFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkYpCisgICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9S
TUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSkKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTQ0NDQpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JN
QVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkYpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkEzMkYpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgfQpAQCAtMTE4NSwxNyArMTE4NSwxNyBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0IGRzdEZvcgogI3VuZGVmIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVAogfQogCi10
ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0IERzdEZvcm1hdD4KLUFMV0FZU19JTkxJTkUgdm9pZCBGb3Jt
YXRDb252ZXJ0ZXI6OmNvbnZlcnQoR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCkK
K3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRHN0Rm9ybWF0PgorQUxXQVlTX0lOTElORSB2b2lkIEZv
cm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9w
KQogewogI2RlZmluZSBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKGFscGhhT3ApIFwKICAg
ICBjYXNlIGFscGhhT3A6IFwKICAgICAgICAgcmV0dXJuIGNvbnZlcnQ8U3JjRm9ybWF0LCBEc3RG
b3JtYXQsIGFscGhhT3A+KCk7CiAKICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YU9wOjpEb05vdGhpbmcpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9Q
KEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5KQotICAgICAgICAgICAg
Rk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFPUChHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6
RG9Vbm11bHRpcGx5KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFPUChH
cmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nKQorICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfQUxQSEFPUChHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVt
dWx0aXBseSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhp
Y3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSkKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkBAIC0xMjAzLDEyICsx
MjAzLDEyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCkKIH0KIAogLy8gVmlzdWFsIFN0dWRpbyBj
cmFzaGVzIHdpdGggYSBDMTA2MyBGYXRhbCBFcnJvciBpZiBldmVyeXRoaW5nIGlzIGlubGluZWQu
Ci10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IERzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3AgYWxwaGFPcD4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IFNy
Y0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRHN0Rm9ybWF0LCBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wPgogQUxXQVlTX0lOTElORV9FWENFUFRfTVNWQyB2
b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydCgpCiB7CiAgICAgLy8gTWFueSBpbnN0YW50aWF0
aW9ucyBvZiB0aGlzIHRlbXBsYXRlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgZW50ZXJlZCwgc28g
d2UgdHJ5CiAgICAgLy8gdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGluIHRoZXNlIGNhc2VzIHRvIGF2
b2lkIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSB1c2VsZXNzIGNvZGUuCi0gICAgaWYgKFNyY0Zv
cm1hdCA9PSBEc3RGb3JtYXQgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFP
cDo6RG9Ob3RoaW5nKSB7CisgICAgaWYgKFNyY0Zvcm1hdCA9PSBEc3RGb3JtYXQgJiYgYWxwaGFP
cCA9PSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nKSB7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTIxOCwyOSAr
MTIxOCwyOSBAQCBBTFdBWVNfSU5MSU5FX0VYQ0VQVF9NU1ZDIHZvaWQgRm9ybWF0Q29udmVydGVy
Ojpjb252ZXJ0KCkKICAgICB9CiAKICAgICAvLyBPbmx5IHRleHR1cmVzIHVwbG9hZGVkIGZyb20g
RE9NIGVsZW1lbnRzIG9yIEltYWdlRGF0YSBjYW4gYWxsb3cgRHN0Rm9ybWF0ICE9IFNyY0Zvcm1h
dC4KLSAgICBjb25zdCBib29sIHNyY0Zvcm1hdENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0
YSA9IEdyYXBoaWNzQ29udGV4dDNEOjpzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFn
ZURhdGEoU3JjRm9ybWF0KTsKKyAgICBjb25zdCBib29sIHNyY0Zvcm1hdENvbWVzRnJvbURPTUVs
ZW1lbnRPckltYWdlRGF0YSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzcmNGb3JtYXRDb21l
c0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEoU3JjRm9ybWF0KTsKICAgICBpZiAoIXNyY0Zvcm1h
dENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YSAmJiBTcmNGb3JtYXQgIT0gRHN0Rm9ybWF0
KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIC8vIExpa2V3aXNlLCBvbmx5IHRleHR1cmVzIHVwbG9hZGVkIGZyb20gRE9NIGVsZW1l
bnRzIG9yIEltYWdlRGF0YSBjYW4gcG9zc2libHkgaGF2ZSB0byBiZSB1bnByZW11bHRpcGxpZWQu
Ci0gICAgaWYgKCFzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEgJiYgYWxw
aGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5KSB7CisgICAg
aWYgKCFzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEgJiYgYWxwaGFPcCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5KSB7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICgoIUdy
YXBoaWNzQ29udGV4dDNEOjpoYXNBbHBoYShTcmNGb3JtYXQpIHx8ICFHcmFwaGljc0NvbnRleHQz
RDo6aGFzQ29sb3IoU3JjRm9ybWF0KSB8fCAhR3JhcGhpY3NDb250ZXh0M0Q6Omhhc0NvbG9yKERz
dEZvcm1hdCkpICYmIGFscGhhT3AgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90
aGluZykgeworICAgIGlmICgoIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoYXNBbHBoYShTcmNG
b3JtYXQpIHx8ICFHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGFzQ29sb3IoU3JjRm9ybWF0KSB8
fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omhhc0NvbG9yKERzdEZvcm1hdCkpICYmIGFscGhh
T3AgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZykgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHR5cGVk
ZWYgdHlwZW5hbWUgRGF0YVR5cGVGb3JGb3JtYXQ8U3JjRm9ybWF0Pjo6VHlwZSBTcmNUeXBlOwog
ICAgIHR5cGVkZWYgdHlwZW5hbWUgRGF0YVR5cGVGb3JGb3JtYXQ8RHN0Rm9ybWF0Pjo6VHlwZSBE
c3RUeXBlOwotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IEludGVybWVk
aWF0ZVNyY0Zvcm1hdCA9IEludGVybWVkaWF0ZUZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZTsKKyAg
ICBjb25zdCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBJbnRlcm1lZGlhdGVTcmNGb3Jt
YXQgPSBJbnRlcm1lZGlhdGVGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWU7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBEYXRhVHlwZUZvckZvcm1hdDxJbnRlcm1lZGlhdGVTcmNGb3JtYXQ+OjpUeXBlIElu
dGVybWVkaWF0ZVNyY1R5cGU7CiAgICAgY29uc3QgcHRyZGlmZl90IHNyY1N0cmlkZUluRWxlbWVu
dHMgPSBtX3NyY1N0cmlkZSAvIHNpemVvZihTcmNUeXBlKTsKICAgICBjb25zdCBwdHJkaWZmX3Qg
ZHN0U3RyaWRlSW5FbGVtZW50cyA9IG1fZHN0U3RyaWRlIC8gc2l6ZW9mKERzdFR5cGUpOwotICAg
IGNvbnN0IGJvb2wgdHJpdmlhbFVucGFjayA9IChTcmNGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4ICYmICFJc0Zsb2F0Rm9ybWF0PERzdEZvcm1hdD46OlZhbHVl
ICYmICFJc0hhbGZGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZSkgfHwgU3JjRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGOwotICAgIGNvbnN0IGJvb2wg
dHJpdmlhbFBhY2sgPSAoRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBOCB8fCBEc3RGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QkEzMkYpICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGlu
ZyAmJiBtX2RzdFN0cmlkZSA+IDA7CisgICAgY29uc3QgYm9vbCB0cml2aWFsVW5wYWNrID0gKFNy
Y0Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTggJiYgIUlzRmxv
YXRGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWUgJiYgIUlzSGFsZkZsb2F0Rm9ybWF0PERzdEZvcm1h
dD46OlZhbHVlKSB8fCBTcmNGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkEzMkY7CisgICAgY29uc3QgYm9vbCB0cml2aWFsUGFjayA9IChEc3RGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4IHx8IERzdEZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRikgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nICYmIG1fZHN0U3RyaWRlID4gMDsKICAgICBBU1NF
UlQoIXRyaXZpYWxVbnBhY2sgfHwgIXRyaXZpYWxQYWNrKTsKIAogICAgIGNvbnN0IFNyY1R5cGUg
KnNyY1Jvd1N0YXJ0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3JjVHlwZSo+KG1fc3JjU3RhcnQpOwpA
QCAtMTI2Myw5ICsxMjYzLDkgQEAgQUxXQVlTX0lOTElORV9FWENFUFRfTVNWQyB2b2lkIEZvcm1h
dENvbnZlcnRlcjo6Y29udmVydCgpCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogI2lmIFVTRShB
Q0NFTEVSQVRFKQotICAgICAgICBpZiAoU3JjRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0JBOAotICAgICAgICAgICAgJiYgRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOAotICAgICAgICAgICAgJiYgYWxwaGFPcCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5KSB7CisgICAgICAgIGlmIChTcmNG
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4CisgICAgICAgICAg
ICAmJiBEc3RGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4Cisg
ICAgICAgICAgICAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1Vu
bXVsdGlwbHkpIHsKICAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwogICAgICAgICAgICAg
c3JjLndpZHRoID0gbV93aWR0aDsKICAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBtX2hlaWdodDsK
QEAgLTEyOTMsNCArMTI5Myw0IEBAIEFMV0FZU19JTkxJTkVfRVhDRVBUX01TVkMgdm9pZCBGb3Jt
YXRDb252ZXJ0ZXI6OmNvbnZlcnQoKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zvcm1hdENvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9ybWF0Q29udmVydGVyLmgKaW5kZXggNThmY2UwZjU0ZTMxYTIxMGU2ZTJhNDgwMWUyZTVmOGI5
YzAyMTcxMS4uMzA0MjE1YmFiZDI0ZjI4YTI2NGVhYjk2NDVlMGVmNGM5NjkxM2NlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9ybWF0Q29udmVydGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9ybWF0Q29udmVydGVyLmgK
QEAgLTI1LDkgKzI1LDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKIAotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1Vu
aXF1ZUFycmF5Lmg+CiAKQEAgLTUxLDE3ICs1MSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChtX3VucGFja2VkSW50ZXJtZWRpYXRlU3JjRGF0YS5nZXQoKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNyY0Zvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcCk7CisgICAgdm9pZCBjb252ZXJ0KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IHNy
Y0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcCk7CiAgICAgYm9vbCBzdWNjZXNzKCkgY29uc3QgeyByZXR1cm4g
bV9zdWNjZXNzOyB9CiAKIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQgU3JjRm9ybWF0PgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0KEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3ApOworICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IFNy
Y0Zvcm1hdD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydChHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wKTsKIAot
ICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRHN0Rm9ybWF0PgotICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wKTsKKyAgICB0ZW1wbGF0ZTxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0IERzdEZvcm1hdD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydChH
cmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCk7CiAKLSAgICB0ZW1wbGF0ZTxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
IERzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcD4KKyAgICB0ZW1w
bGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0IERzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3Ag
YWxwaGFPcD4KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydCgpOwogCiAgICAgY29uc3Qg
dW5zaWduZWQgbV93aWR0aCwgbV9oZWlnaHQ7CkBAIC03NCw0ICs3NCw0IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05U
RVhUXzNEKQorI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKaW5kZXggMjdmYjIwNjI3
M2NhMDU4ZDFmOTMxM2U3MTZiZTc0YjhiOGIxOTkxMS4uYjIxNzk4OGI5OTBlMWEwNmEzYzFmN2Q3
MjFjYTY1OTE1NTY4MDlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR0xDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HTENvbnRleHQuY3BwCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
IAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQorI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKQogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
cGVjaWZpYy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HTENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4
dC5oCmluZGV4IDlhNDRlZmNhMTEyMDQ3MzA0Nzc5ZGQ3YmE4YzViNzA5Yjg2N2U4YWQuLjg5MGZj
Mjk0YmM0N2RkMTI1YzhiZTdhZDlkMDE1N2RmNzhmODAwZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5oCkBAIC00Niw3ICs0Niw3IEBAIHR5cGVkZWYg
dWludDY0X3QgR0xOYXRpdmVXaW5kb3dUeXBlOwogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX2Rldmlj
ZSBjYWlyb19kZXZpY2VfdDsKICNlbmRpZgogCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0Q7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0w7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzgsOCArNzgsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBjYWlyb19kZXZpY2VfdCogY2Fpcm9EZXZpY2UoKSA9IDA7CiAjZW5kaWYKIAotI2lmIEVO
QUJMRShHUkFQSElDU19DT05URVhUXzNEKQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKSA9IDA7CisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfR0wpCisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29u
dGV4dCgpID0gMDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oWDExKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBhZjFkYjFl
NGMwOGQ0MTJlMzVkOGFmMmY0Zjc5MmE0MjMwMTAyZGQ2Li5mNTg2ZGQ0YjJhZjkxZjQ1NjU1MzVh
NzAyOTM5MjNhZjJiYWFkYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtOTIsNyArOTIsNyBAQCBjbGFzcyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFJl
Y3Q7CiBjbGFzcyBSb3VuZGVkUmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBQYXRoOwogY2xhc3MgVGV4dFJ1bjsKIGNs
YXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0NjFjNTcxZTljMzQyOTk2OTIzYWFhYWQ1MmI5YTU2NjNmZmJiMzY0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDUzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE1vemlsbGEgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJGb3JtYXRDb252ZXJ0ZXIuaCIKLSNp
bmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkltYWdl
T2JzZXJ2ZXIuaCIKLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1uYW1lc3BhY2UgewotCi1HcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBn
ZXREYXRhRm9ybWF0KEdDM0RlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHQzNEZW51bSBkZXN0aW5h
dGlvblR5cGUpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4OwotICAgIHN3aXRjaCAoZGVz
dGluYXRpb25UeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RToKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgICAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSODsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkE4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTUkdCX0FMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF80XzRfNF80OgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTQ0NDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBP
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQp
IHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkY7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQ
SEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UjE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkY7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjoKLSAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkY7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQl9BTFBIQToK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0JBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAg
ICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMzJGOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9B
TFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTUkdCX0FMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gZHN0Rm9ybWF0OwotfQotCi19IC8vIGFub255
bW91cyBuYW1lc3BhY2UKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRFJlc291
cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgdW5wYWNrQWxpZ25tZW50
KQotewotICAgIEFTU0VSVCh1bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQg
PT0gMiB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7Ci0g
ICAgVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4gemVybzsKLSAgICBpZiAod2lkdGggPiAwICYm
IGhlaWdodCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNpemU7Ci0gICAgICAgIEdDM0Rl
bnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwg
aGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsICZzaXplLCBudWxscHRyKTsKLSAgICAgICAgaWYgKGVy
cm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4oc2l6ZSk7Ci0g
ICAgICAgIGlmICghemVybykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKLX0KLQotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdW5zaWduZWQgaW50KiBjb21wb25lbnRzUGVyUGl4ZWws
IHVuc2lnbmVkIGludCogYnl0ZXNQZXJDb21wb25lbnQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVEX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMOgotICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdfSU5URUdFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAyOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0Jf
RVhUOgotICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBX0lOVEVHRVI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhUOiAvLyBH
TF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JH
Ql9BTFBIQV9FWFQ6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSA0OwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RToKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6Ci0gICAgICAgICpi
eXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEYnl0ZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICAqYnl0ZXNQ
ZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQg
PSBzaXplb2YoR0MzRHNob3J0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsK
LSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JF
VjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6
Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICAqYnl0ZXNQZXJDb21w
b25lbnQgPSBzaXplb2YoR0MzRHVpbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9
IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OklOVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RpbnQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8g
T0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdD
M0RmbG9hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhB
TEZfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8v
IE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKEdDM0RoYWxmZmxvYXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6Ci0gICAgICAgICpieXRlc1Bl
ckNvbXBvbmVudCA9IHNpemVvZihHQzNEZmxvYXQpICsgc2l6ZW9mKEdDM0R1aW50KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cG9zc2libGVGb3Jt
YXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0Rl
bnVtJiBmb3JtYXQsIEdDM0RlbnVtJiB0eXBlKQotewotI2RlZmluZSBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKGludGVybmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3JvLCB0eXBlTWFjcm8pIGNh
c2UgaW50ZXJuYWxGb3JtYXRNYWNybzogXAotICAgICAgICBmb3JtYXQgPSBmb3JtYXRNYWNybzsg
XAotICAgICAgICB0eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OnR5cGVNYWNybzsgXAotICAgICAg
ICBicmVhazsKLQotICAgIHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAgICAgICAg
LCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQSAgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQSwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0UgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0UgICAgICAsIFVOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHQzRDo6QUxQSEEgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6QUxQSEEgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlI4ICAgICAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCAgICAgICAgICAgICwgVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dDNEOjpSOF9TTk9STSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQg
ICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjE2RiAgICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVEICAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAg
ICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0M0Q6OlIzMkYgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCAgICAgICAg
ICAgICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJICAgICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6
UjhJICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVIgICAgLCBC
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJICAg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUiAgICAsIFNIT1JUICAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHQzRDo6UjMyVUkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkkgICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSICAgICwgSU5UICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dDNEOjpSRzggICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRyAgICAg
ICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JNICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6UkcgICAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
M0Q6OlJHMTZGICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHICAgICAgICAgICAg
ICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRiAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSRyAgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6Ukc4
VUkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUiAgICAgLCBVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEkgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHX0lOVEVHRVIgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUkgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICAgICAsIFVOU0lHTkVEX1NI
T1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHQzRDo6UkcxNkkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6Ukdf
SU5URUdFUiAgICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSSAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURfSU5UICAgICAg
ICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRzMySSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VS
ICAgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCOCAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6
OlNSR0I4ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAgICAgICAgICAgICwg
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjUgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCOF9T
Tk9STSAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCICAgICAgICAgICAgLCBCWVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBGICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0I5X0U1ICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF81
XzlfOV85X1JFViAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHQzRDo6UkdCMTZGICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCICAg
ICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyRiAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAgICAgICAgICAgICwgRkxPQVQgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I4VUkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUiAg
ICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCOEkgICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjE2VUkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSICAgICwgVU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JfSU5URUdFUiAgICAsIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJVSSAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9J
TlQgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjMySSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
Ql9JTlRFR0VSICAgICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOCAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHQzRDo6U1JHQjhfQUxQSEE4ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAg
ICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I1X0ExICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICAgICAgICAgICAs
IFVOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEw
X0EyICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgVU5TSUdO
RURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyRiAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAgICAgICAgLCBGTE9BVCAgICAgICAg
ICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE4VUkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFf
SU5URUdFUiAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEkgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVIgICAsIEJZVEUgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHQzRDo6UkdCMTBfQTJVSSAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VS
ICAgLCBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBMTZJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVIgICAsIFNI
T1JUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQV9JTlRFR0VSICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJ
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURf
SU5UICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiAsIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5U
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCAg
ICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVCwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkYsIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQsIEZMT0FUICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTCAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCAg
LCBVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDggICwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUwgICwgVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SDMyRl9TVEVOQ0lMOCAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMICAsIEZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVik7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICAgICAgICAgICAgICAgLCBFeHRlbnNpb25zM0Q6OlNS
R0JfRVhUICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVCAg
ICAgICAgICwgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVCAgICAgICwgVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotI3VuZGVmIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUltYWdlU2l6ZUlu
Qnl0ZXMoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYWxpZ25tZW50LCB1bnNpZ25lZCBpbnQqIGltYWdlU2l6
ZUluQnl0ZXMsIHVuc2lnbmVkIGludCogcGFkZGluZ0luQnl0ZXMpCi17Ci0gICAgQVNTRVJUKGlt
YWdlU2l6ZUluQnl0ZXMpOwotICAgIEFTU0VSVChhbGlnbm1lbnQgPT0gMSB8fCBhbGlnbm1lbnQg
PT0gMiB8fCBhbGlnbm1lbnQgPT0gNCB8fCBhbGlnbm1lbnQgPT0gOCk7Ci0gICAgaWYgKHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUU7Ci0gICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50LCBjb21wb25l
bnRzUGVyUGl4ZWw7Ci0gICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9y
bWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQotICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTTsKLSAgICBpZiAoIXdp
ZHRoIHx8ICFoZWlnaHQpIHsKLSAgICAgICAgKmltYWdlU2l6ZUluQnl0ZXMgPSAwOwotICAgICAg
ICBpZiAocGFkZGluZ0luQnl0ZXMpCi0gICAgICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSAwOwot
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIH0KLSAgICBD
aGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFZhbHVlID0gYnl0ZXNQZXJD
b21wb25lbnQgKiBjb21wb25lbnRzUGVyUGl4ZWw7Ci0gICAgY2hlY2tlZFZhbHVlICo9ICB3aWR0
aDsKLSAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOwotICAgIHVuc2lnbmVkIGludCB2YWxp
ZFJvd1NpemUgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgaW50IHBh
ZGRpbmcgPSAwOwotICAgIHVuc2lnbmVkIGludCByZXNpZHVhbCA9IHZhbGlkUm93U2l6ZSAlIGFs
aWdubWVudDsKLSAgICBpZiAocmVzaWR1YWwpIHsKLSAgICAgICAgcGFkZGluZyA9IGFsaWdubWVu
dCAtIHJlc2lkdWFsOwotICAgICAgICBjaGVja2VkVmFsdWUgKz0gcGFkZGluZzsKLSAgICB9Ci0g
ICAgLy8gTGFzdCByb3cgbmVlZHMgbm8gcGFkZGluZy4KLSAgICBjaGVja2VkVmFsdWUgKj0gKGhl
aWdodCAtIDEpOwotICAgIGNoZWNrZWRWYWx1ZSArPSB2YWxpZFJvd1NpemU7Ci0gICAgaWYgKGNo
ZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRTsKLSAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IGNoZWNrZWRWYWx1
ZS51bnNhZmVHZXQoKTsKLSAgICBpZiAocGFkZGluZ0luQnl0ZXMpCi0gICAgICAgICpwYWRkaW5n
SW5CeXRlcyA9IHBhZGRpbmc7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJP
UjsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpJbWFnZUV4dHJhY3Rv
cihJbWFnZSogaW1hZ2UsIERPTVNvdXJjZSBpbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKLXsKLSAgICBtX2lt
YWdlID0gaW1hZ2U7Ci0gICAgbV9pbWFnZUh0bWxEb21Tb3VyY2UgPSBpbWFnZUh0bWxEb21Tb3Vy
Y2U7Ci0gICAgbV9leHRyYWN0U3VjY2VlZGVkID0gZXh0cmFjdEltYWdlKHByZW11bHRpcGx5QWxw
aGEsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6cGFja0ltYWdlRGF0YShJbWFnZSogaW1hZ2UsIGNvbnN0IHZvaWQqIHBpeGVscywgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIGZsaXBZLCBBbHBoYU9wIGFscGhhT3As
IERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkK
LXsKLSAgICBpZiAoIWltYWdlIHx8ICFwaXhlbHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHVuc2lnbmVkIHBhY2tlZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBw
YWNrZWQgKGFsaWdubWVudCA9PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmcGFja2VkU2l6ZSwgbnVsbHB0cikgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICBpZiAoIXBhY2tQaXhlbHMocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291cmNlRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgZGF0YS5k
YXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChJbWFnZU9ic2Vy
dmVyKiBvYnNlcnZlciA9IGltYWdlLT5pbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIG9ic2VydmVy
LT5kaWREcmF3KCppbWFnZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiBpbWFnZURhdGEsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZURhdGEpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpbnQgd2lkdGggPSBpbWFnZURhdGEtPndpZHRoKCk7Ci0gICAg
aW50IGhlaWdodCA9IGltYWdlRGF0YS0+aGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgcGFj
a2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50
ID09IDEpLgotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdp
ZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkYXRhLnJlc2l6ZShwYWNr
ZWRTaXplKTsKLQotICAgIGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgp
LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgsIHdpZHRoLCBoZWlnaHQsIDAs
IGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhT3A6OkRvUHJlbXVsdGlwbHkg
OiBBbHBoYU9wOjpEb05vdGhpbmcsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpleHRyYWN0VGV4dHVyZURhdGEodW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkIGludCB1bnBhY2tB
bGlnbm1lbnQsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgY29uc3Qgdm9pZCog
cGl4ZWxzLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgLy8gQXNzdW1lcyBmb3JtYXQs
IHR5cGUsIGV0Yy4gaGF2ZSBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLgotICAgIERhdGFGb3JtYXQg
c291cmNlRGF0YUZvcm1hdCA9IGdldERhdGFGb3JtYXQoZm9ybWF0LCB0eXBlKTsKLQotICAgIC8v
IFJlc2l6ZSB0aGUgb3V0cHV0IGJ1ZmZlci4KLSAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1Bl
clBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKLSAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBl
UGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNv
bXBvbmVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQ
ZXJQaXhlbCA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50OwotICAgIGRh
dGEucmVzaXplKHdpZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJQaXhlbCk7Ci0KLSAgICBpZiAoIXBh
Y2tQaXhlbHMoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksIHNvdXJjZURhdGFG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIHVucGFja0FsaWdubWVudCwgZm9ybWF0LCB0eXBlLCAocHJl
bXVsdGlwbHlBbHBoYSA/IEFscGhhT3A6OkRvUHJlbXVsdGlwbHkgOiBBbHBoYU9wOjpEb05vdGhp
bmcpLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBUZXhlbEJ5dGVzRm9yRm9y
bWF0KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGZvcm1hdCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4OgotICAgICAgICByZXR1
cm4gMTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTg6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVI4OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpBMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkY6
Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSODoK
LSAgICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjg6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QUJHUjg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpBMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJBMTZGOgotICAgICAgICByZXR1cm4gNDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0IxNkY6Ci0gICAgICAgIHJldHVybiA2OwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkY6Ci0gICAgICAgIHJldHVybiA4OwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRjoKLSAgICAgICAgcmV0dXJuIDEyOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkY6Ci0gICAgICAg
IHJldHVybiAxNjsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNl
RGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIHVuc2lnbmVkIGRlc3Rp
bmF0aW9uRm9ybWF0LCB1bnNpZ25lZCBkZXN0aW5hdGlvblR5cGUsIEFscGhhT3AgYWxwaGFPcCwg
dm9pZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZKQotewotICAgIGludCB2YWxpZFNyYyA9
IHdpZHRoICogVGV4ZWxCeXRlc0ZvckZvcm1hdChzb3VyY2VEYXRhRm9ybWF0KTsKLSAgICBpbnQg
cmVtYWluZGVyID0gc291cmNlVW5wYWNrQWxpZ25tZW50ID8gKHZhbGlkU3JjICUgc291cmNlVW5w
YWNrQWxpZ25tZW50KSA6IDA7Ci0gICAgaW50IHNyY1N0cmlkZSA9IHJlbWFpbmRlciA/ICh2YWxp
ZFNyYyArIHNvdXJjZVVucGFja0FsaWdubWVudCAtIHJlbWFpbmRlcikgOiB2YWxpZFNyYzsKLQot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcGFja2luZyBwaXhlbHMgdG8gV2ViR0wgMiBmb3JtYXRz
Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR19JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0
Y2ggKGRlc3RpbmF0aW9uVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MTBGXzExRl8xMUZfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VF81XzlfOV85X1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MjRfODoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIERhdGFGb3JtYXQgZHN0
RGF0YUZvcm1hdCA9IGdldERhdGFGb3JtYXQoZGVzdGluYXRpb25Gb3JtYXQsIGRlc3RpbmF0aW9u
VHlwZSk7Ci0gICAgaW50IGRzdFN0cmlkZSA9IHdpZHRoICogVGV4ZWxCeXRlc0ZvckZvcm1hdChk
c3REYXRhRm9ybWF0KTsKLSAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgZGVzdGluYXRpb25EYXRh
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uRGF0YSkgKyBkc3RTdHJpZGUqKGhl
aWdodCAtIDEpOwotICAgICAgICBkc3RTdHJpZGUgPSAtZHN0U3RyaWRlOwotICAgIH0KLSAgICBp
ZiAoIWhhc0FscGhhKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFoYXNDb2xvcihzb3VyY2VEYXRhRm9y
bWF0KSB8fCAhaGFzQ29sb3IoZHN0RGF0YUZvcm1hdCkpCi0gICAgICAgIGFscGhhT3AgPSBBbHBo
YU9wOjpEb05vdGhpbmc7Ci0KLSAgICBpZiAoc291cmNlRGF0YUZvcm1hdCA9PSBkc3REYXRhRm9y
bWF0ICYmIGFscGhhT3AgPT0gQWxwaGFPcDo6RG9Ob3RoaW5nKSB7Ci0gICAgICAgIGNvbnN0IHVp
bnQ4X3QqIHB0ciA9IHNvdXJjZURhdGE7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ckVuZCA9
IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBoZWlnaHQ7Ci0gICAgICAgIHVuc2lnbmVkIHJvd1Np
emUgPSAoZHN0U3RyaWRlID4gMCkgPyBkc3RTdHJpZGU6IC1kc3RTdHJpZGU7Ci0gICAgICAgIHVp
bnQ4X3QqIGRzdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpOwotICAg
ICAgICB3aGlsZSAocHRyIDwgcHRyRW5kKSB7Ci0gICAgICAgICAgICBtZW1jcHkoZHN0LCBwdHIs
IHJvd1NpemUpOwotICAgICAgICAgICAgcHRyICs9IHNyY1N0cmlkZTsKLSAgICAgICAgICAgIGRz
dCArPSBkc3RTdHJpZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgRm9ybWF0Q29udmVydGVyIGNvbnZlcnRlcih3aWR0aCwgaGVpZ2h0LCBzb3VyY2VEYXRh
LCBkZXN0aW5hdGlvbkRhdGEsIHNyY1N0cmlkZSwgZHN0U3RyaWRlKTsKLSAgICBjb252ZXJ0ZXIu
Y29udmVydChzb3VyY2VEYXRhRm9ybWF0LCBkc3REYXRhRm9ybWF0LCBhbHBoYU9wKTsKLSAgICBp
ZiAoIWNvbnZlcnRlci5zdWNjZXNzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotI2lmICEoUExBVEZPUk0oQ09DT0EpICYmIChVU0UoT1BFTkdMKSB8fCBV
U0UoQU5HTEUpKSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRWaXNpYmlsaXR5
KGJvb2wpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFQTEFURk9STShDT0NPQSkKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNpbXVsYXRlQ29udGV4dENoYW5nZWQoKQotewotfQotI2VuZGlmCi0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhU
XzNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNmY0ZjY4OTJlNGE3
NDA0MzZmNzg0MzBmY2QxM2NhZWNlODQzYzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAorKysgL2Rldi9udWxsCkBAIC0xLDc0OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RCYXNlLmgiCi0jaW5jbHVkZSA8bWVtb3J5Pgot
I2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotCi0jaWYgVVNFKENBKQotI2luY2x1ZGUg
IlBsYXRmb3JtQ0FMYXllci5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdh
eSB0byBhdm9pZCB0aGUgbmFtZSBjb25mbGljdGlvbiBmb3IgTk9fRVJST1IuCi0jaWYgUExBVEZP
Uk0oV0lOKQotI3VuZGVmIE5PX0VSUk9SCi0jZWxpZiBQTEFURk9STShHVEspCi0vLyBUaGlzIGRl
ZmluZSBpcyBmcm9tIHRoZSBYMTEgaGVhZGVycywgYnV0IGl0J3MgdXNlZCBiZWxvdywgc28gd2Ug
bXVzdCB1bmRlZmluZSBpdC4KLSN1bmRlZiBWRVJTSU9OCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotI2lmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsLmg+
Ci0jaWZkZWYgX19PQkpDX18KLSNpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KLSNlbmRpZiAvLyBf
X09CSkNfXwotI2VuZGlmIC8vIFVTRShPUEVOR0xfRVMpCi1PQkpDX0NMQVNTIENBTGF5ZXI7Ci1P
QkpDX0NMQVNTIFdlYkdMTGF5ZXI7Ci10eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJm
YWNlUmVmOwotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCi0jaWYgVVNFKE5JQ09TSUEpCi1u
YW1lc3BhY2UgTmljb3NpYSB7Ci1jbGFzcyBHQzNETGF5ZXI7Ci19Ci0jZW5kaWYKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgRXh0ZW5zaW9uczNEOwotI2lmIFVTRShBTkdMRSkKLWNsYXNz
IEV4dGVuc2lvbnMzREFOR0xFOwotI2VsaWYgIVBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdM
X0VTKQotY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7Ci0jZWxpZiBVU0UoT1BFTkdMKSB8fCAo
UExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQotY2xhc3MgRXh0ZW5zaW9uczNET3Bl
bkdMOwotI2VuZGlmCi1jbGFzcyBIb3N0V2luZG93OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotY2xhc3MgVGV4dHVyZU1hcHBl
ckdDM0RQbGF0Zm9ybUxheWVyOwotI2VuZGlmCi0KLXR5cGVkZWYgV1RGOjpIYXNoTWFwPENTdHJp
bmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1lSGFzaDsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQzREJhc2UgewotcHVibGljOgotICAgIGNsYXNzIENsaWVudCB7Ci0gICAgcHVibGljOgotICAg
ICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBv
c2l0ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNlQ29udGV4dExvc3QoKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlQ29udGV4dCgpID0gMDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKSA9IDA7Ci0gICAg
fTsKLQotICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzREF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0
aW9uOjpPZmZzY3JlZW4pOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dDNEKCk7Ci0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBzdGF0aWMgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVh
dGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0M0QmIHNoYXJlZENvbnRleHQpOwotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbnRleHRPYmo7
IH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQotICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5
ZXIuZ2V0KCkpOyB9Ci0jaWYgVVNFKEFOR0xFKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0REaXNwbGF5IHBsYXRmb3JtRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheU9iajsg
fQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RDb25maWcgcGxhdGZvcm1Db25maWcoKSBj
b25zdCB7IHJldHVybiBtX2NvbmZpZ09iajsgfQotI2VuZGlmIC8vIFVTRShBTkdMRSkKLSNlbHNl
Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICB2b2lkIGFkZENsaWVudChDbGllbnQmIGNsaWVudCkgeyBtX2NsaWVudHMuYWRkKCZjbGll
bnQpOyB9Ci0gICAgdm9pZCByZW1vdmVDbGllbnQoQ2xpZW50JiBjbGllbnQpIHsgbV9jbGllbnRz
LnJlbW92ZSgmY2xpZW50KTsgfQotCi0gICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0
IGZyb20gbXVsdGlzYW1wbGVGQk8gdG8gcmVndWxhciBGQk8uCi0gICAgdm9pZCBwcmVwYXJlVGV4
dHVyZSgpOwotCi0gICAgLy8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBBbGxvd3Mg
cGl4ZWxzPT0wIHdpdGggbm8gYWxsb2NhdGlvbi4KLSAgICB2b2lkIHRleEltYWdlMkREaXJlY3Qo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotCi0gICAgLy8g
R2V0IGFuIGF0dHJpYnV0ZSBsb2NhdGlvbiB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1h
bmdsZWRuYW1lIG1hcHBpbmcuCi0gICAgaW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIC8vIENvbXBp
bGUgYSBzaGFkZXIgd2l0aG91dCBnb2luZyB0aHJvdWdoIEFOR0xFLgotICAgIHZvaWQgY29tcGls
ZVNoYWRlckRpcmVjdChQbGF0Zm9ybTNET2JqZWN0KTsKLQotICAgIC8vIEhlbHBlciB0byB0ZXhJ
bWFnZTJEIHdpdGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgot
ICAgIC8vIFJldHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgotICAgIC8v
IEJ5IGRlZmF1bHQsIGFsaWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGluZy4K
LSAgICBib29sIHRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBHQzNEaW50IGFsaWdubWVudCA9IDQpOwotCi0gICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkg
Y29uc3Q7Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBIZWxwZXJzIGZvciB0ZXh0dXJl
IHVwbG9hZGluZyBhbmQgcGl4ZWwgcmVhZGJhY2suCi0gICAgLy8KLQotICAgIC8vIENvbXB1dGVz
IHRoZSBjb21wb25lbnRzIHBlciBwaXhlbCBhbmQgYnl0ZXMgcGVyIGNvbXBvbmVudAotICAgIC8v
IGZvciB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLiBSZXR1cm5zIGZhbHNl
IGlmCi0gICAgLy8gZWl0aGVyIHdhcyBhbiBpbnZhbGlkIGVudW0uCi0gICAgc3RhdGljIGJvb2wg
Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
KiBjb21wb25lbnRzUGVyUGl4ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCogYnl0ZXNQZXJDb21wb25lbnQpOwotCi0gICAgLy8g
Q29tcHV0ZXMgdGhlIGltYWdlIHNpemUgaW4gYnl0ZXMuIElmIHBhZGRpbmdJbkJ5dGVzIGlzIG5v
dCBudWxsLCBwYWRkaW5nCi0gICAgLy8gaXMgYWxzbyBjYWxjdWxhdGVkIGluIHJldHVybi4gUmV0
dXJucyBOT19FUlJPUiBpZiBzdWNjZWVkLCBvdGhlcndpc2UKLSAgICAvLyByZXR1cm4gdGhlIHN1
Z2dlc3RlZCBHTCBlcnJvciBpbmRpY2F0aW5nIHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZToKLSAg
ICAvLyAgIElOVkFMSURfVkFMVUUgaWYgd2lkdGgvaGVpZ2h0IGlzIG5lZ2F0aXZlIG9yIG92ZXJm
bG93IGhhcHBlbnMuCi0gICAgLy8gICBJTlZBTElEX0VOVU0gaWYgZm9ybWF0L3R5cGUgaXMgaWxs
ZWdhbC4KLSAgICBzdGF0aWMgR0MzRGVudW0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVu
dW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdp
ZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGludCBhbGlnbm1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBp
bWFnZVNpemVJbkJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCogcGFkZGluZ0luQnl0ZXMpOwotCi0gICAgc3RhdGljIGJvb2wgcG9zc2libGVG
b3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
M0RlbnVtJiBmb3JtYXQsIEdDM0RlbnVtJiB0eXBlKTsKLQotICAgIC8vIEV4dHJhY3RzIHRoZSBj
b250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCi0g
ICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1h
dCBhbmQgdHlwZSwKLSAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5
QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQotICAgIC8vIHVwb24gc3VjY2Vzcy4KLSAgICBzdGF0
aWMgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKLSAgICAvLyBkYXRh
LCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4KLSAg
ICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgdGlnaHRseSBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBw
YXNzZWQKLSAgICAvLyB1bnBhY2tBbGlnbm1lbnQsIHRoZSBvdXRwdXQgZGF0YSB3aWxsIGJlIHRp
Z2h0bHkgcGFja2VkLgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBp
ZiBhbnkgZXJyb3Igb2NjdXJyZWQuCi0gICAgc3RhdGljIGJvb2wgZXh0cmFjdFRleHR1cmVEYXRh
KHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVucGFja0FsaWdubWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogcGl4ZWxzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7Ci0KLSAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgotICAgIC8vCi0KLSAgICB2
b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBh
dHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9i
amVjdCwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdD
M0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBibGVu
ZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUs
IEdDM0RjbGFtcGYgYWxwaGEpIG92ZXJyaWRlOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNE
ZW51bSBtb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNE
ZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpIG92ZXJyaWRlOwotICAgIHZvaWQgYmxl
bmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpIG92ZXJyaWRlOwotICAg
IHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0Is
IEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UpIG92ZXJyaWRlOwotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQs
IEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0
ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKSBvdmVycmlkZTsK
LQotICAgIHZvaWQqIG1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBv
ZmZzZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nlc3MpIG92ZXJyaWRl
OwotICAgIEdDM0Rib29sZWFuIHVubWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdldCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51
bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciByZWFkT2Zmc2V0LCBHQzNEaW50cHRyIHdyaXRlT2Zm
c2V0LCBHQzNEc2l6ZWlwdHIpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBnZXRJbnRlcm5hbGZvcm1h
dGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgdGV4U3RvcmFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0ZXhT
dG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkg
ZGVwdGgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRpY2VzLCBH
QzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+JiBwYXJhbXMpIG92ZXJyaWRlOwotCi0gICAg
R0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBi
bHVlLCBHQzNEY2xhbXBmIGFscGhhKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRGVwdGgoR0Mz
RGNsYW1wZiBkZXB0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCBz
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29s
ZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBk
YXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGNv
cHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvcHlUZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VsbEZhY2UoR0MzRGVudW0g
bW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpIG92ZXJy
aWRlOwotICAgIHZvaWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBH
QzNEc2l6ZWkgY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KSBvdmVycmlkZTsK
LSAgICB2b2lkIGZpbmlzaCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZmx1c2goKSBvdmVycmlkZTsK
LSAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2Jq
ZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEaW50IGxldmVsKSBvdmVycmlkZTsKLSAgICB2b2lkIGZyb250RmFjZShHQzNE
ZW51bSBtb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRh
cmdldCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKLSAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIG92ZXJyaWRl
OwotICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFk
ZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6
ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKSBvdmVycmlkZTsKLSAgICBHQzNE
aW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJv
b2xlYW4qIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsK
LSAgICBHQzNEZW51bSBnZXRFcnJvcigpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RmxvYXR2KEdD
M0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
YXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBnZXRJbnRlZ2VyNjR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50NjQqIHZh
bHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0jaWYgIVVT
RShBTkdMRSkKLSAgICB2b2lkIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0jZW5k
aWYgLy8gIVVTRShBTkdMRSkKLSAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZv
cm0zRE9iamVjdFsyXSwgR0MzRHNpemVpLCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFNoYWRlcml2KFBsYXRmb3JtM0RP
YmplY3QsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgU3Ry
aW5nIGdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0g
cHJlY2lzaW9uVHlwZSwgR0MzRGludCogcmFuZ2UsIEdDM0RpbnQqIHByZWNpc2lvbikgb3ZlcnJp
ZGU7Ci0gICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKLSAgICBTdHJpbmcgZ2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpIG92ZXJyaWRlOwotICAgIHZv
aWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFVuaWZvcm1p
dihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZh
bHVlKSBvdmVycmlkZTsKLSAgICBHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNE
T2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0VmVydGV4
QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIEdDM0RzaXplaXB0
ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUp
IG92ZXJyaWRlOwotICAgIEdDM0Rib29sZWFuIGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApIG92ZXJyaWRl
OwotICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7Ci0gICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOwotICAgIEdDM0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIEdDM0Rib29sZWFuIGlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgbGlua1By
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwaXhlbFN0b3JlaShH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwb2x5Z29u
T2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBk
YXRhKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0KLSAg
ICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsK
LSAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGlu
dmVydCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2hh
ZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNE
dWludCBtYXNrKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spIG92ZXJy
aWRlOwotICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spIG92
ZXJyaWRlOwotICAgIHZvaWQgc3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWls
LCBHQzNEZW51bSB6cGFzcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpIG92ZXJyaWRlOwotCi0gICAgYm9vbCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSBvdmVycmlkZTsKLSAgICB2b2lkIHRleFBhcmFtZXRl
cmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCBwYXJhbSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCB1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpIG92ZXJyaWRlOwotICAg
IHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0Rm
bG9hdCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB4KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZv
cm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpIG92ZXJyaWRl
OwotICAgIHZvaWQgdW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0
IEdDM0RmbG9hdCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtMmkoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTJp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRl
OwotICAgIHZvaWQgdW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHopIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTNmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RpbnQgeikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlm
b3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTRmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RpbnQgeiwgR0MzRGludCB3KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm00aXYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKLSAgICB2
b2lkIHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHZhbGlk
YXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSNpZiAhVVNFKEFOR0xFKQot
ICAgIGJvb2wgY2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFk
ZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0OwotICAgIGJvb2wgcHJl
Y2lzaW9uc01hdGNoKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNET2Jq
ZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKLSNlbmRpZgotCi0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVy
dGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0
IHgsIEdDM0RmbG9hdCB5KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQg
dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
R0MzRGZsb2F0IHopIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50
IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0
ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNE
ZmxvYXQgeiwgR0MzRGZsb2F0IHcpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2
KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdD
M0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdD
M0RpbnRwdHIgb2Zmc2V0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZvaWQg
ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2
aXNvcikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBWZXJ0ZXhBcnJheU9qZWN0IGNhbGxzCi0gICAgUGxh
dGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVs
ZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgR0MzRGJvb2xl
YW4gaXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJp
bmRWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgcGFp
bnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQm
KTsKLQotICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgdm9pZCBtYXJrTGF5ZXJD
b21wb3NpdGVkKCk7Ci0gICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKLSAgICB2b2lk
IGZvcmNlQ29udGV4dExvc3QoKTsKLSAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCk7Ci0KLSAgICB2
b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKLSAgICB2b2lkIHNpbXVs
YXRlQ29udGV4dENoYW5nZWQoKTsKLQotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoSW1hZ2VCdWZmZXIqKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotICAgIGJvb2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1Rv
Q2FudmFzKEltYWdlQnVmZmVyKik7Ci0KLSNpZiBVU0UoT1BFTkdMKSAmJiBFTkFCTEUoV0VCR0wy
KQotICAgIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDM0R1aW50KSBvdmVycmlkZTsKLSNl
bmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCB0ZXhJbWFnZUlPU3VyZmFjZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJT1N1
cmZhY2VSZWYsIEdDM0R1aW50IHBsYW5lKTsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgdm9p
ZCBwcmVzZW50UmVuZGVyYnVmZmVyKCk7Ci0jZW5kaWYKLQotI2lmIFVTRShPUEVOR0wpIHx8IFVT
RShBTkdMRSkKLSAgICB2b2lkIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUp
OwotICAgIHZvaWQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVy
KCk7Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICB2b2lk
IHVwZGF0ZUNHTENvbnRleHQoKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCi0KLSAgICB2b2lkIHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb247IH0K
LQotICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRpb24KLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1ZmZlcigpIG92ZXJyaWRlOwotICAgIFBsYXRmb3JtM0RP
YmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZVByb2dyYW0oKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVJl
bmRlcmJ1ZmZlcigpIG92ZXJyaWRlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlU2hhZGVy
KEdDM0RlbnVtKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1cmUo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLQotICAgIC8v
IFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGljaCB3aWxsIGJlIHJldHVybmVkIGZyb20g
YQotICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRoaXMgaXMgdXNlZCB0byBlbXVsYXRl
IE9wZW5HTCBFUwotICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0aGUgZGVza3RvcCBhbmQgdG8gZW5m
b3JjZSBhZGRpdGlvbmFsIGVycm9yCi0gICAgLy8gY2hlY2tpbmcgbWFuZGF0ZWQgYnkgV2ViR0wu
Ci0gICAgLy8KLSAgICAvLyBQZXIgdGhlIGJlaGF2aW9yIG9mIGdsR2V0RXJyb3IsIHRoaXMgc3Rv
cmVzIGF0IG1vc3Qgb25lCi0gICAgLy8gaW5zdGFuY2Ugb2YgYW55IGdpdmVuIGVycm9yLCBhbmQg
cmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KLSAgICAvLyBnZXRFcnJvciBpbiB0aGUgb3JkZXIg
dGhleSB3ZXJlIGFkZGVkLgotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJy
b3IpOwotCi0gICAgLy8gUmVhZCByZWFsIE9wZW5HTCBlcnJvcnMsIGFuZCBtb3ZlIHRoZW0gdG8g
dGhlIHN5bnRoZXRpYwotICAgIC8vIGVycm9yIGxpc3QuIFJldHVybiB0cnVlIGlmIGF0IGxlYXN0
IG9uZSBlcnJvciBpcyBtb3ZlZC4KLSAgICBib29sIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCgpOwotCi0gICAgLy8gU3VwcG9ydCBmb3IgZXh0ZW5zaW9ucy4gUmV0dXJucyBhIG5vbi1u
dWxsIG9iamVjdCwgdGhvdWdoIG5vdAotICAgIC8vIGFsbCBtZXRob2RzIGl0IGNvbnRhaW5zIG1h
eSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCi0gICAgLy8gY3VycmVudCBoYXJkd2Fy
ZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnMzRDo6c3VwcG9ydHMoKSB0bwotICAgIC8vIGRldGVybWlu
ZSB0aGlzLgotICAgIEV4dGVuc2lvbnMzRCYgZ2V0RXh0ZW5zaW9ucygpIG92ZXJyaWRlOwotCi0g
ICAgSW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0OwotCi0gICAgLy8g
UGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSB3aGljaCBpcyBwYXNzZWQgaW4g
fHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZlY3RvcgotICAgIC8vIGFjY29yZGluZyB0byB0aGUg
Z2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIEFscGhhT3Ag
ZmxhZ3MuCi0gICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KLSAgICBzdGF0aWMgYm9v
bCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFGb3JtYXQgc291cmNl
Rm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VV
bnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7Ci0KLSAgICBjbGFzcyBJbWFn
ZUV4dHJhY3RvciB7Ci0gICAgcHVibGljOgotICAgICAgICBJbWFnZUV4dHJhY3RvcihJbWFnZSos
IERPTVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlKTsKLQotICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBp
bXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVz
b3VyY2VzCi0gICAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVlZGVkLgot
ICAgICAgICB+SW1hZ2VFeHRyYWN0b3IoKTsKLQotICAgICAgICBib29sIGV4dHJhY3RTdWNjZWVk
ZWQoKSB7IHJldHVybiBtX2V4dHJhY3RTdWNjZWVkZWQ7IH0KLSAgICAgICAgY29uc3Qgdm9pZCog
aW1hZ2VQaXhlbERhdGEoKSB7IHJldHVybiBtX2ltYWdlUGl4ZWxEYXRhOyB9Ci0gICAgICAgIHVu
c2lnbmVkIGltYWdlV2lkdGgoKSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0KLSAgICAgICAgdW5z
aWduZWQgaW1hZ2VIZWlnaHQoKSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9Ci0gICAgICAgIERh
dGFGb3JtYXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlRm9ybWF0
OyB9Ci0gICAgICAgIEFscGhhT3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9
Ci0gICAgICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4g
bV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsgfQotICAgICAgICBET01Tb3VyY2UgaW1hZ2VI
dG1sRG9tU291cmNlKCkgeyByZXR1cm4gbV9pbWFnZUh0bWxEb21Tb3VyY2U7IH0KLSAgICBwcml2
YXRlOgotICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRh
dGlvbiBvZiB0aGlzIG1ldGhvZC4KLSAgICAgICAgLy8gRXh0cmFjdHMgdGhlIGltYWdlIGFuZCBr
ZWVwcyB0cmFjayBvZiBpdHMgc3RhdHVzLCBzdWNoIGFzIHdpZHRoLCBoZWlnaHQsIFNvdXJjZSBB
bGlnbm1lbnQsIGZvcm1hdCBhbmQgQWxwaGFPcCBldGMsCi0gICAgICAgIC8vIG5lZWRzIHRvIGxv
Y2sgdGhlIHJlc291cmNlcyBvciByZWxldmFudCBkYXRhIGlmIG5lZWRlZCBhbmQgcmV0dXJucyB0
cnVlIHVwb24gc3VjY2VzcwotICAgICAgICBib29sIGV4dHJhY3RJbWFnZShib29sIHByZW11bHRp
cGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwotCi0jaWYgVVNFKENB
SVJPKQotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdlU3VyZmFjZTsKLSNl
bGlmIFVTRShDRykKLSAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY2dJbWFnZTsKLSAg
ICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fZGVjb2RlZEltYWdlOwotICAgICAgICBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBtX3BpeGVsRGF0YTsKLSAgICAgICAgVW5pcXVlQXJyYXk8dWludDhf
dD4gbV9mb3JtYWxpemVkUkdCQThEYXRhOwotI2VuZGlmCi0gICAgICAgIEltYWdlKiBtX2ltYWdl
OwotICAgICAgICBET01Tb3VyY2UgbV9pbWFnZUh0bWxEb21Tb3VyY2U7Ci0gICAgICAgIGJvb2wg
bV9leHRyYWN0U3VjY2VlZGVkOwotICAgICAgICBjb25zdCB2b2lkKiBtX2ltYWdlUGl4ZWxEYXRh
OwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7Ci0gICAgICAgIHVuc2lnbmVkIG1faW1h
Z2VIZWlnaHQ7Ci0gICAgICAgIERhdGFGb3JtYXQgbV9pbWFnZVNvdXJjZUZvcm1hdDsKLSAgICAg
ICAgQWxwaGFPcCBtX2FscGhhT3A7Ci0gICAgICAgIHVuc2lnbmVkIG1faW1hZ2VTb3VyY2VVbnBh
Y2tBbGlnbm1lbnQ7Ci0gICAgfTsKLQotICAgIHZvaWQgc2V0RmFpbE5leHRHUFVTdGF0dXNDaGVj
aygpIHsgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsgfQotCi0gICAgR0MzRGVudW0gYWN0
aXZlVGV4dHVyZVVuaXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0
OyB9Ci0gICAgR0MzRGVudW0gY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpOyB9Ci0gICAgR0MzRGVudW0gY3VycmVudEJvdW5k
VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jdXJyZW50Qm91bmRUYXJnZXQoKTsgfQot
ICAgIHVuc2lnbmVkIHRleHR1cmVTZWVkKEdDM0R1aW50IHRleHR1cmUpIHsgcmV0dXJuIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5jb3VudCh0ZXh0dXJlKTsgfQotCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgIHVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7Ci0gICAgdm9pZCBzY3Jl
ZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLCBIb3N0V2luZG93
KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGljc0NvbnRleHQz
RCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOwotCi0gICAgLy8gSGVscGVyIGZvciBwYWNrSW1h
Z2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRleHR1cmVEYXRhIHdoaWNoIGltcGxlbWVu
dCBwYWNraW5nIG9mIHBpeGVsCi0gICAgLy8gZGF0YSBpbnRvIHRoZSBzcGVjaWZpZWQgT3BlbkdM
IGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KLSAgICAvLyBBIHNvdXJjZVVucGFja0FsaWdu
bWVudCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2UKLSAgICAvLyBkYXRhIGlzIHRp
Z2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5IHRha2UgYSBzbG93IHBhdGguCi0gICAg
Ly8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBiZXR3ZWVuIHJvd3MuCi0gICAg
c3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBEYXRhRm9y
bWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRh
LCBib29sIGZsaXBZKTsKLQotICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVx
dWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKLSAgICAvLyBpbiBwYXJ0aWN1bGFy
IHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBvcgotICAg
IC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhl
IE9wZW5HTAotICAgIC8vIGltcGxlbWVudGF0aW9uLgotICAgIHZvaWQgdmFsaWRhdGVEZXB0aFN0
ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKLSAgICB2b2lk
IHZhbGlkYXRlQXR0cmlidXRlcygpOwotICAgIAotICAgIC8vIERpZCB0aGUgbW9zdCByZWNlbnQg
ZHJhd2luZyBvcGVyYXRpb24gbGVhdmUgdGhlIEdQVSBpbiBhbiBhY2NlcHRhYmxlIHN0YXRlPwot
ICAgIHZvaWQgY2hlY2tHUFVTdGF0dXMoKTsKLQotICAgIC8vIFJlYWQgcmVuZGVyaW5nIHJlc3Vs
dHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIHRoZQotICAgIC8v
IGJhY2tidWZmZXIuCi0gICAgdm9pZCByZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFy
KiBwaXhlbHMsIGludCBwaXhlbHNTaXplKTsKLSAgICB2b2lkIHJlYWRQaXhlbHNBbmRDb252ZXJ0
VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVu
c2lnbmVkIGNoYXIqIHBpeGVscyk7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIHZvaWQgc2V0
UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpOwotI2VuZGlmCi0KLSAgICBib29sIHJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUm
KTsKLSAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVj
dCYgPSBJbnRSZWN0KCkpOwotICAgIHZvaWQgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZO
ZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgYm9vbCBhbGxvd09mZmxpbmVSZW5k
ZXJlcnMoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgaW50IG1fY3VycmVudFdpZHRoIHsgMCB9Owot
ICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAwIH07Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExheWVyOwotICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgbV9jb250ZXh0T2JqIHsgbnVsbHB0ciB9OwotI2lmIFVTRShBTkdMRSkKLSAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERGlzcGxheSBtX2Rpc3BsYXlPYmogeyBudWxscHRy
IH07Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRENvbmZpZyBtX2NvbmZpZ09iaiB7IG51
bGxwdHIgfTsKLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0Ep
Ci0KLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkKLSAgICBSZWZQdHI8UGxhdGZvcm1DQUxh
eWVyPiBtX3dlYkdMTGF5ZXI7Ci0jZW5kaWYKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IHNoOjpTaGFkZXJWYXJpYWJsZT4gU2hhZGVyU3ltYm9sTWFwOwotCi0gICAgc3RydWN0IFNoYWRl
clNvdXJjZUVudHJ5IHsKLSAgICAgICAgR0MzRGVudW0gdHlwZTsKLSAgICAgICAgU3RyaW5nIHNv
dXJjZTsKLSAgICAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTb3VyY2U7Ci0gICAgICAgIFN0cmluZyBs
b2c7Ci0gICAgICAgIGJvb2wgaXNWYWxpZDsKLSAgICAgICAgU2hhZGVyU3ltYm9sTWFwIGF0dHJp
YnV0ZU1hcDsKLSAgICAgICAgU2hhZGVyU3ltYm9sTWFwIHVuaWZvcm1NYXA7Ci0gICAgICAgIFNo
YWRlclN5bWJvbE1hcCB2YXJ5aW5nTWFwOwotICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSgpCi0g
ICAgICAgICAgICA6IHR5cGUoVkVSVEVYX1NIQURFUikKLSAgICAgICAgICAgICwgaXNWYWxpZChm
YWxzZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTaGFkZXJTeW1i
b2xNYXAmIHN5bWJvbE1hcChlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9M
X1RZUEVfQVRUUklCVVRFIHx8IHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZP
Uk0gfHwgc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7Ci0gICAgICAg
ICAgICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFKQotICAg
ICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVNYXA7Ci0gICAgICAgICAgICBpZiAoc3ltYm9s
VHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORykKLSAgICAgICAgICAgICAgICByZXR1
cm4gdmFyeWluZ01hcDsKLSAgICAgICAgICAgIHJldHVybiB1bmlmb3JtTWFwOwotICAgICAgICB9
Ci0gICAgfTsKLQotI2lmICFVU0UoQU5HTEUpCi0gICAgLy8gRklYTUU6IFNoYWRlcnMgYXJlIG5l
dmVyIHJlbW92ZWQgZnJvbSB0aGlzIG1hcCwgZXZlbiBpZiB0aGV5IGFuZCB0aGVpciBwcm9ncmFt
IGFyZSBkZWxldGVkLgotICAgIC8vIFRoaXMgaXMgYmFkLCBhbmQgaXQgYWxzbyByZWxpZXMgb24g
dGhlIGZhY3Qgd2UgbmV2ZXIgcmV1c2UgUGxhdGZvcm0zRE9iamVjdCBudW1iZXJzLgotICAgIHR5
cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVy
U291cmNlTWFwOwotICAgIFNoYWRlclNvdXJjZU1hcCBtX3NoYWRlclNvdXJjZU1hcDsKLQotICAg
IHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBzdGQ6OnBhaXI8UGxhdGZvcm0zRE9i
amVjdCwgUGxhdGZvcm0zRE9iamVjdD4+IExpbmtlZFNoYWRlck1hcDsKLSAgICBMaW5rZWRTaGFk
ZXJNYXAgbV9saW5rZWRTaGFkZXJNYXA7Ci0KLSAgICBzdHJ1Y3QgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzIHsKLSAgICAgICAgVmVjdG9yPEdDM0RpbnQ+IGZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1
dGVJbmRleE1hcDsKLSAgICAgICAgVmVjdG9yPEdDM0RpbnQ+IGZpbHRlcmVkVG9BY3R1YWxVbmlm
b3JtSW5kZXhNYXA7Ci0KLSAgICAgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgR0MzRGludCBjb3VudEZvclR5cGUoR0MzRGVudW0g
YWN0aXZlVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGFjdGl2ZVR5cGUgPT0g
QUNUSVZFX0FUVFJJQlVURVMgfHwgYWN0aXZlVHlwZSA9PSBBQ1RJVkVfVU5JRk9STVMpOwotICAg
ICAgICAgICAgaWYgKGFjdGl2ZVR5cGUgPT0gQUNUSVZFX0FUVFJJQlVURVMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5zaXplKCk7Ci0K
LSAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUo
KTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmpl
Y3QsIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cz4gU2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
OwotICAgIFNoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcCBtX3NoYWRlclByb2dyYW1TeW1ib2xD
b3VudE1hcDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gSGFzaGVkU3lt
Ym9sTWFwOwotICAgIEhhc2hlZFN5bWJvbE1hcCBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFw
OwotCi0gICAgU3RyaW5nIG1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgU3RyaW5n
IG1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBzaXplX3QgY291
bnQsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgU3RyaW5nIG9yaWdpbmFsU3ltYm9sTmFtZShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG1hcHBlZFN5bWJvbEluU2hhZGVyU291
cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvcmlnaW5hbFN5bWJvbElu
U2hhZGVyU291cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJv
bFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZGVy
TmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9yU2hhZGVyczsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQot
Ci0jaWYgVVNFKEFOR0xFKQotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RBTkdMRTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uczNEQU5HTEU+IG1fZXh0ZW5zaW9uczsKLSNlbGlm
ICFQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICBmcmllbmQgY2xhc3MgRXh0
ZW5zaW9uczNET3BlbkdMRVM7Ci0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uczNET3BlbkdMRVM+IG1fZXh0ZW5z
aW9uczsKLSNlbGlmIFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5H
TF9FUykpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKLSAgICBmcmllbmQg
Y2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRl
bnNpb25zM0RPcGVuR0w+IG1fZXh0ZW5zaW9uczsKLSNlbmRpZgotCi0gICAgR3JhcGhpY3NDb250
ZXh0M0RQb3dlclByZWZlcmVuY2UgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24geyBH
cmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdCB9OwotICAgIFZlY3RvcjxW
ZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OwotCi0jaWYgIVVTRShBTkdMRSkKLSAgICBBTkdM
RVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwotI2VuZGlmCi0KLSAgICBHQzNEdWludCBtX3RleHR1
cmUgeyAwIH07Ci0gICAgR0MzRHVpbnQgbV9mYm8geyAwIH07Ci0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIEdDM0R1aW50IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07Ci0gICAg
R0MzRHVpbnQgbV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsgMCB9OwotI2VuZGlmCi0KLSAgICBHQzNE
dWludCBtX2RlcHRoQnVmZmVyIHsgMCB9OwotICAgIEdDM0R1aW50IG1fc3RlbmNpbEJ1ZmZlciB7
IDAgfTsKLSAgICBHQzNEdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKLQotICAgIGJv
b2wgbV9sYXllckNvbXBvc2l0ZWQgeyBmYWxzZSB9OwotICAgIEdDM0R1aW50IG1faW50ZXJuYWxD
b2xvckZvcm1hdCB7IDAgfTsKLQotI2lmIFVTRShBTkdMRSkgJiYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRFN1cmZhY2UgbV9wYnVmZmVyOwotI2VuZGlmCi0K
LSAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0M0RTdGF0ZSB7Ci0gICAgICAgIEdDM0R1aW50IGJv
dW5kRkJPIHsgMCB9OwotICAgICAgICBHQzNEZW51bSBhY3RpdmVUZXh0dXJlVW5pdCB7IEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCB9OwotCi0gICAgICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1h
cCA9IEhhc2hNYXA8R0MzRGVudW0sCi0gICAgICAgICAgICBzdGQ6OnBhaXI8R0MzRHVpbnQsIEdD
M0RlbnVtPiwKLSAgICAgICAgICAgIFdURjo6SW50SGFzaDxHQzNEZW51bT4sIAotICAgICAgICAg
ICAgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWludD4sCi0gICAgICAg
ICAgICBXVEY6OlBhaXJIYXNoVHJhaXRzPFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8R0MzRHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50
Pj4KLSAgICAgICAgPjsKLSAgICAgICAgQm91bmRUZXh0dXJlTWFwIGJvdW5kVGV4dHVyZU1hcDsK
LSAgICAgICAgR0MzRHVpbnQgY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJv
dW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAgR0MzRHVpbnQgYm91bmRU
ZXh0dXJlKEdDM0RlbnVtIHRleHR1cmVVbml0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAg
ICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmZpcnN0OwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBHQzNEdWludCBjdXJyZW50Qm91bmRUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBib3VuZFRhcmdldChhY3RpdmVUZXh0dXJlVW5pdCk7IH0KLSAgICAgICAg
R0MzRGVudW0gYm91bmRUYXJnZXQoR0MzRGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0
dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVu
ZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuc2Vjb25kOwotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEJvdW5kVGV4
dHVyZShHQzNEZW51bSB0ZXh0dXJlVW5pdCwgR0MzRHVpbnQgdGV4dHVyZSwgR0MzRGVudW0gdGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBib3VuZFRleHR1cmVNYXAuc2V0KHRleHR1cmVV
bml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJnZXQpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHVzaW5nIFRleHR1cmVTZWVkQ291bnQgPSBIYXNoQ291bnRlZFNldDxHQzNEdWludCwgV1RG
OjpJbnRIYXNoPEdDM0R1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxH
QzNEdWludD4+OwotICAgICAgICBUZXh0dXJlU2VlZENvdW50IHRleHR1cmVTZWVkQ291bnQ7Ci0g
ICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEU3RhdGUgbV9zdGF0ZTsKLQotICAgIC8vIEZv
ciBtdWx0aXNhbXBsaW5nCi0gICAgR0MzRHVpbnQgbV9tdWx0aXNhbXBsZUZCTyB7IDAgfTsKLSAg
ICBHQzNEdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9OwotICAgIEdD
M0R1aW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciB7IDAgfTsKLQotICAgIC8vIEVycm9ycyBy
YWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KLSAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4g
bV9zeW50aGV0aWNFcnJvcnM7Ci0KLSNpZiBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotICAgIGZyaWVuZCBjbGFzcyBOaWNvc2lhOjpHQzNETGF5ZXI7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPE5pY29zaWE6OkdDM0RMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi0gICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1M
YXllcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVy
PiBtX3RleG1hcExheWVyOwotI2Vsc2UKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+
IG1fcHJpdmF0ZTsKLSNlbmRpZgotCi0gICAgSGFzaFNldDxDbGllbnQqPiBtX2NsaWVudHM7Ci0K
LSAgICBib29sIG1faXNGb3JXZWJHTDIgeyBmYWxzZSB9OwotICAgIGJvb2wgbV91c2luZ0NvcmVQ
cm9maWxlIHsgZmFsc2UgfTsKLQotICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3VudCB7IDAg
fTsKLSAgICBib29sIG1fZmFpbE5leHRTdGF0dXNDaGVjayB7IGZhbHNlIH07Ci0KLSNpZiBVU0Uo
Q0FJUk8pCi0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZhbyB7IDAgfTsKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oQ09DT0EpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQotICAgIGJvb2wg
bV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVIHsgZmFsc2UgfTsKLSNlbmRpZgotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1
dGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZmYxN2MxZmUyOTIxYTIyOTEz
ZjJmYmI2NDIwMjBhODgxZmUzY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0RBdHRyaWJ1dGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZSB7Ci0gICAgRGVmYXVsdCwKLSAgICBMb3dQ
b3dlciwKLSAgICBIaWdoUGVyZm9ybWFuY2UKLX07Ci0KLXN0cnVjdCBHcmFwaGljc0NvbnRleHQz
REF0dHJpYnV0ZXMgewotICAgIC8vIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMKLSAgICBib29sIGFs
cGhhIHsgdHJ1ZSB9OwotICAgIGJvb2wgZGVwdGggeyB0cnVlIH07Ci0gICAgYm9vbCBzdGVuY2ls
IHsgZmFsc2UgfTsKLSAgICBib29sIGFudGlhbGlhcyB7IHRydWUgfTsKLSAgICBib29sIHByZW11
bHRpcGxpZWRBbHBoYSB7IHRydWUgfTsKLSAgICBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlciB7
IGZhbHNlIH07Ci0gICAgYm9vbCBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IHsgZmFsc2Ug
fTsKLSAgICB1c2luZyBQb3dlclByZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJl
ZmVyZW5jZTsKLSAgICBQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlIHsgUG93ZXJQcmVm
ZXJlbmNlOjpEZWZhdWx0IH07Ci0KLSAgICAvLyBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCi0gICAg
Ym9vbCBzaGFyZVJlc291cmNlcyB7IHRydWUgfTsKLSAgICBib29sIGlzV2ViR0wyIHsgZmFsc2Ug
fTsKLSAgICBib29sIG5vRXh0ZW5zaW9ucyB7IGZhbHNlIH07Ci0gICAgZmxvYXQgZGV2aWNlUGl4
ZWxSYXRpbyB7IDEgfTsKLSAgICBQb3dlclByZWZlcmVuY2UgaW5pdGlhbFBvd2VyUHJlZmVyZW5j
ZSB7IFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdCB9OwotfTsKLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZWFhNjE1YWZjZDhhZDQwMzMyOTZk
OWE1NjQ1MDM2N2Y5NjZlN2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0RCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIE1vemlsbGEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RCYXNlLmgiCi0KLSNpZiBFTkFC
TEUoV0VCR0wpCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1HcmFwaGljc0NvbnRleHQzREJhc2U6OkdyYXBoaWNzQ29udGV4dDNEQmFzZShHcmFw
aGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMsIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBH
cmFwaGljc0NvbnRleHQzREJhc2UqKQotICAgIDogbV9hdHRycyhhdHRycykKLSAgICAsIG1fZGVz
dGluYXRpb24oZGVzdGluYXRpb24pCi17Ci19Ci0KLXVuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQzNEZW51bSBhdHRhY2htZW50KQot
ewotICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RC
YXNlOjpDT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRU
QUNITUVOVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMl9F
WFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQzX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDRfRVhUOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UNV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TE9SX0FUVEFDSE1FTlQ2X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNI
TUVOVDdfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UOF9FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ5X0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDEwX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09MT1JfQVRUQUNITUVOVDExX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09M
T1JfQVRUQUNITUVOVDEyX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNI
TUVOVDEzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDE0X0VY
VDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDE1X0VYVDoKLSAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Q09MT1JfQlVGRkVSX0JJVDsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQlVGRkVSX0JJVDsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29u
dGV4dDNEQmFzZTo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0KLQotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpnZXRD
bGVhckJpdHNCeUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlOjpSR0JBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpM
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkxVTUlOQU5D
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6QUxQSEE6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpS
OF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UjE2RjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UjhJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6UjE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UjMyVUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlIzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OlJHODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Ukc4X1NO
T1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzE2RjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6UkczMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlJHOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzhJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzREJhc2U6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzMyVUk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlOjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpT
UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCNTY1OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0RCYXNlOjpSMTFGX0cxMUZfQjEwRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6UkdCOV9FNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCMTZGOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0IzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OlJHQjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdC
OEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjE2VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6UkdCMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCMzJJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6U1JHQjhfQUxQSEE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RC
YXNlOjpSR0JBOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCNV9B
MToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RC
YXNlOjpSR0JBMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBMzJGOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlOjpSR0JBOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6
OlJHQjEwX0EyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkExNlVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBMTZJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlOjpSR0JBMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNl
OjpSR0JBMzJVSToKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0RCYXNlOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RC
YXNlOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6
REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRI
X0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQ09N
UE9ORU5UOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9CVUZG
RVJfQklUOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpTVEVOQ0lMX0lOREVYODoK
LSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6U1RFTkNJTF9CVUZGRVJfQklU
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9TVEVOQ0lMOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSDI0X1NURU5DSUw4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSDMyRl9TVEVOQ0lMODoKLSAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLX0KLQotdWludDhfdCBHcmFwaGljc0NvbnRleHQzREJhc2U6OmdldENoYW5uZWxC
aXRzQnlGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkFMUEhBOgotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OkFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6TFVNSU5BTkNFOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oQ2hhbm5lbEJpdHM6OlJHQik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6
OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENo
YW5uZWxCaXRzOjpSR0JBKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I1NjU6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OlNSR0JfRVhUOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hh
bm5lbEJpdHM6OlJHQik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkE6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0RCYXNlOjpSR0I1X0ExOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhB
X0VYVDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpS
R0JBKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQ09NUE9ORU5UMTY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpEZXB0aCk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNURU5DSUxfSU5ERVg4OgotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OlN0ZW5jaWwpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OkRlcHRoU3RlbmNpbCk7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyZTAzODA1YzIxOGM3OTg3MDQ5Y2RkODBhNmYwNzBjY2ExODEzOTc4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTA5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5
cGVzM0QuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBP
UyhXSU5ET1dTKQotLy8gRGVmaW5lZCBpbiB3aW5lcnJvci5oCi0jaWZkZWYgTk9fRVJST1IKLSN1
bmRlZiBOT19FUlJPUgotI2VuZGlmCi0jZW5kaWYKLQotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEOwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
RGlzcGxheTsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRFN1cmZhY2U7
Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RDb25maWc7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEV4dGVuc2lvbnMzRDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci1j
bGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLQotY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0RCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8R3JhcGhpY3NDb250ZXh0M0RCYXNlPiB7Ci1w
dWJsaWM6Ci0gICAgZW51bSB7Ci0gICAgICAgIC8vIFdlYkdMIDEgY29uc3RhbnRzLgotICAgICAg
ICBERVBUSF9CVUZGRVJfQklUID0gMHgwMDAwMDEwMCwKLSAgICAgICAgU1RFTkNJTF9CVUZGRVJf
QklUID0gMHgwMDAwMDQwMCwKLSAgICAgICAgQ09MT1JfQlVGRkVSX0JJVCA9IDB4MDAwMDQwMDAs
Ci0gICAgICAgIFBPSU5UUyA9IDB4MDAwMCwKLSAgICAgICAgTElORVMgPSAweDAwMDEsCi0gICAg
ICAgIExJTkVfTE9PUCA9IDB4MDAwMiwKLSAgICAgICAgTElORV9TVFJJUCA9IDB4MDAwMywKLSAg
ICAgICAgVFJJQU5HTEVTID0gMHgwMDA0LAotICAgICAgICBUUklBTkdMRV9TVFJJUCA9IDB4MDAw
NSwKLSAgICAgICAgVFJJQU5HTEVfRkFOID0gMHgwMDA2LAotICAgICAgICBaRVJPID0gMCwKLSAg
ICAgICAgT05FID0gMSwKLSAgICAgICAgU1JDX0NPTE9SID0gMHgwMzAwLAotICAgICAgICBPTkVf
TUlOVVNfU1JDX0NPTE9SID0gMHgwMzAxLAotICAgICAgICBTUkNfQUxQSEEgPSAweDAzMDIsCi0g
ICAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgPSAweDAzMDMsCi0gICAgICAgIERTVF9BTFBIQSA9
IDB4MDMwNCwKLSAgICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSA9IDB4MDMwNSwKLSAgICAgICAg
RFNUX0NPTE9SID0gMHgwMzA2LAotICAgICAgICBPTkVfTUlOVVNfRFNUX0NPTE9SID0gMHgwMzA3
LAotICAgICAgICBTUkNfQUxQSEFfU0FUVVJBVEUgPSAweDAzMDgsCi0gICAgICAgIEZVTkNfQURE
ID0gMHg4MDA2LAotICAgICAgICBCTEVORF9FUVVBVElPTiA9IDB4ODAwOSwKLSAgICAgICAgQkxF
TkRfRVFVQVRJT05fUkdCID0gMHg4MDA5LAotICAgICAgICBCTEVORF9FUVVBVElPTl9BTFBIQSA9
IDB4ODgzRCwKLSAgICAgICAgRlVOQ19TVUJUUkFDVCA9IDB4ODAwQSwKLSAgICAgICAgRlVOQ19S
RVZFUlNFX1NVQlRSQUNUID0gMHg4MDBCLAotICAgICAgICBCTEVORF9EU1RfUkdCID0gMHg4MEM4
LAotICAgICAgICBCTEVORF9TUkNfUkdCID0gMHg4MEM5LAotICAgICAgICBCTEVORF9EU1RfQUxQ
SEEgPSAweDgwQ0EsCi0gICAgICAgIEJMRU5EX1NSQ19BTFBIQSA9IDB4ODBDQiwKLSAgICAgICAg
Q09OU1RBTlRfQ09MT1IgPSAweDgwMDEsCi0gICAgICAgIE9ORV9NSU5VU19DT05TVEFOVF9DT0xP
UiA9IDB4ODAwMiwKLSAgICAgICAgQ09OU1RBTlRfQUxQSEEgPSAweDgwMDMsCi0gICAgICAgIE9O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSA9IDB4ODAwNCwKLSAgICAgICAgQkxFTkRfQ09MT1IgPSAw
eDgwMDUsCi0gICAgICAgIEFSUkFZX0JVRkZFUiA9IDB4ODg5MiwKLSAgICAgICAgRUxFTUVOVF9B
UlJBWV9CVUZGRVIgPSAweDg4OTMsCi0gICAgICAgIEFSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4
ODk0LAotICAgICAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODk1LAotICAg
ICAgICBTVFJFQU1fRFJBVyA9IDB4ODhFMCwKLSAgICAgICAgU1RBVElDX0RSQVcgPSAweDg4RTQs
Ci0gICAgICAgIERZTkFNSUNfRFJBVyA9IDB4ODhFOCwKLSAgICAgICAgQlVGRkVSX1NJWkUgPSAw
eDg3NjQsCi0gICAgICAgIEJVRkZFUl9VU0FHRSA9IDB4ODc2NSwKLSAgICAgICAgQ1VSUkVOVF9W
RVJURVhfQVRUUklCID0gMHg4NjI2LAotICAgICAgICBGUk9OVCA9IDB4MDQwNCwKLSAgICAgICAg
QkFDSyA9IDB4MDQwNSwKLSAgICAgICAgRlJPTlRfQU5EX0JBQ0sgPSAweDA0MDgsCi0gICAgICAg
IFRFWFRVUkVfMkQgPSAweDBERTEsCi0gICAgICAgIENVTExfRkFDRSA9IDB4MEI0NCwKLSAgICAg
ICAgQkxFTkQgPSAweDBCRTIsCi0gICAgICAgIERJVEhFUiA9IDB4MEJEMCwKLSAgICAgICAgU1RF
TkNJTF9URVNUID0gMHgwQjkwLAotICAgICAgICBERVBUSF9URVNUID0gMHgwQjcxLAotICAgICAg
ICBTQ0lTU09SX1RFU1QgPSAweDBDMTEsCi0gICAgICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgPSAw
eDgwMzcsCi0gICAgICAgIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSA9IDB4ODA5RSwKLSAgICAg
ICAgU0FNUExFX0NPVkVSQUdFID0gMHg4MEEwLAotICAgICAgICBOT19FUlJPUiA9IDAsCi0gICAg
ICAgIElOVkFMSURfRU5VTSA9IDB4MDUwMCwKLSAgICAgICAgSU5WQUxJRF9WQUxVRSA9IDB4MDUw
MSwKLSAgICAgICAgSU5WQUxJRF9PUEVSQVRJT04gPSAweDA1MDIsCi0gICAgICAgIE9VVF9PRl9N
RU1PUlkgPSAweDA1MDUsCi0gICAgICAgIENXID0gMHgwOTAwLAotICAgICAgICBDQ1cgPSAweDA5
MDEsCi0gICAgICAgIExJTkVfV0lEVEggPSAweDBCMjEsCi0gICAgICAgIEFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRSA9IDB4ODQ2RCwKLSAgICAgICAgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFID0g
MHg4NDZFLAotICAgICAgICBDVUxMX0ZBQ0VfTU9ERSA9IDB4MEI0NSwKLSAgICAgICAgRlJPTlRf
RkFDRSA9IDB4MEI0NiwKLSAgICAgICAgREVQVEhfUkFOR0UgPSAweDBCNzAsCi0gICAgICAgIERF
UFRIX1dSSVRFTUFTSyA9IDB4MEI3MiwKLSAgICAgICAgREVQVEhfQ0xFQVJfVkFMVUUgPSAweDBC
NzMsCi0gICAgICAgIERFUFRIX0ZVTkMgPSAweDBCNzQsCi0gICAgICAgIFNURU5DSUxfQ0xFQVJf
VkFMVUUgPSAweDBCOTEsCi0gICAgICAgIFNURU5DSUxfRlVOQyA9IDB4MEI5MiwKLSAgICAgICAg
U1RFTkNJTF9GQUlMID0gMHgwQjk0LAotICAgICAgICBTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCA9
IDB4MEI5NSwKLSAgICAgICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgPSAweDBCOTYsCi0gICAg
ICAgIFNURU5DSUxfUkVGID0gMHgwQjk3LAotICAgICAgICBTVEVOQ0lMX1ZBTFVFX01BU0sgPSAw
eDBCOTMsCi0gICAgICAgIFNURU5DSUxfV1JJVEVNQVNLID0gMHgwQjk4LAotICAgICAgICBTVEVO
Q0lMX0JBQ0tfRlVOQyA9IDB4ODgwMCwKLSAgICAgICAgU1RFTkNJTF9CQUNLX0ZBSUwgPSAweDg4
MDEsCi0gICAgICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgPSAweDg4MDIsCi0gICAg
ICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgPSAweDg4MDMsCi0gICAgICAgIFNURU5D
SUxfQkFDS19SRUYgPSAweDhDQTMsCi0gICAgICAgIFNURU5DSUxfQkFDS19WQUxVRV9NQVNLID0g
MHg4Q0E0LAotICAgICAgICBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLID0gMHg4Q0E1LAotICAgICAg
ICBWSUVXUE9SVCA9IDB4MEJBMiwKLSAgICAgICAgU0NJU1NPUl9CT1ggPSAweDBDMTAsCi0gICAg
ICAgIENPTE9SX0NMRUFSX1ZBTFVFID0gMHgwQzIyLAotICAgICAgICBDT0xPUl9XUklURU1BU0sg
PSAweDBDMjMsCi0gICAgICAgIFVOUEFDS19BTElHTk1FTlQgPSAweDBDRjUsCi0gICAgICAgIFBB
Q0tfQUxJR05NRU5UID0gMHgwRDA1LAotICAgICAgICBNQVhfVEVYVFVSRV9TSVpFID0gMHgwRDMz
LAotICAgICAgICBNQVhfVklFV1BPUlRfRElNUyA9IDB4MEQzQSwKLSAgICAgICAgU1VCUElYRUxf
QklUUyA9IDB4MEQ1MCwKLSAgICAgICAgUkVEX0JJVFMgPSAweDBENTIsCi0gICAgICAgIEdSRUVO
X0JJVFMgPSAweDBENTMsCi0gICAgICAgIEJMVUVfQklUUyA9IDB4MEQ1NCwKLSAgICAgICAgQUxQ
SEFfQklUUyA9IDB4MEQ1NSwKLSAgICAgICAgREVQVEhfQklUUyA9IDB4MEQ1NiwKLSAgICAgICAg
U1RFTkNJTF9CSVRTID0gMHgwRDU3LAotICAgICAgICBQT0xZR09OX09GRlNFVF9VTklUUyA9IDB4
MkEwMCwKLSAgICAgICAgUE9MWUdPTl9PRkZTRVRfRkFDVE9SID0gMHg4MDM4LAotICAgICAgICBU
RVhUVVJFX0JJTkRJTkdfMkQgPSAweDgwNjksCi0gICAgICAgIFNBTVBMRV9CVUZGRVJTID0gMHg4
MEE4LAotICAgICAgICBTQU1QTEVTID0gMHg4MEE5LAotICAgICAgICBTQU1QTEVfQ09WRVJBR0Vf
VkFMVUUgPSAweDgwQUEsCi0gICAgICAgIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgPSAweDgwQUIs
Ci0gICAgICAgIE5VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyA9IDB4ODZBMiwKLSAgICAg
ICAgQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTMsCi0gICAgICAgIERPTlRfQ0FS
RSA9IDB4MTEwMCwKLSAgICAgICAgRkFTVEVTVCA9IDB4MTEwMSwKLSAgICAgICAgTklDRVNUID0g
MHgxMTAyLAotICAgICAgICBHRU5FUkFURV9NSVBNQVBfSElOVCA9IDB4ODE5MiwKLSAgICAgICAg
QllURSA9IDB4MTQwMCwKLSAgICAgICAgVU5TSUdORURfQllURSA9IDB4MTQwMSwKLSAgICAgICAg
U0hPUlQgPSAweDE0MDIsCi0gICAgICAgIFVOU0lHTkVEX1NIT1JUID0gMHgxNDAzLAotICAgICAg
ICBJTlQgPSAweDE0MDQsCi0gICAgICAgIFVOU0lHTkVEX0lOVCA9IDB4MTQwNSwKLSAgICAgICAg
RkxPQVQgPSAweDE0MDYsCi0gICAgICAgIEhBTEZfRkxPQVRfT0VTID0gMHg4RDYxLAotICAgICAg
ICBGSVhFRCA9IDB4MTQwQywKLSAgICAgICAgREVQVEhfQ09NUE9ORU5UID0gMHgxOTAyLAotICAg
ICAgICBBTFBIQSA9IDB4MTkwNiwKLSAgICAgICAgUkdCID0gMHgxOTA3LAotICAgICAgICBSR0JB
ID0gMHgxOTA4LAotICAgICAgICBCR1JBID0gMHg4MEUxLAotICAgICAgICBMVU1JTkFOQ0UgPSAw
eDE5MDksCi0gICAgICAgIExVTUlOQU5DRV9BTFBIQSA9IDB4MTkwQSwKLSAgICAgICAgVU5TSUdO
RURfU0hPUlRfNF80XzRfNCA9IDB4ODAzMywKLSAgICAgICAgVU5TSUdORURfU0hPUlRfNV81XzVf
MSA9IDB4ODAzNCwKLSAgICAgICAgVU5TSUdORURfU0hPUlRfNV82XzUgPSAweDgzNjMsCi0gICAg
ICAgIEZSQUdNRU5UX1NIQURFUiA9IDB4OEIzMCwKLSAgICAgICAgVkVSVEVYX1NIQURFUiA9IDB4
OEIzMSwKLSAgICAgICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMHg4ODY5LAotICAgICAgICBNQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGQiwKLSAgICAgICAgTUFYX1ZBUllJTkdfVkVD
VE9SUyA9IDB4OERGQywKLSAgICAgICAgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMg
PSAweDhCNEQsCi0gICAgICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0
QywKLSAgICAgICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDg4NzIsCi0gICAgICAgIE1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkQsCi0gICAgICAgIFNIQURFUl9UWVBF
ID0gMHg4QjRGLAotICAgICAgICBERUxFVEVfU1RBVFVTID0gMHg4QjgwLAotICAgICAgICBMSU5L
X1NUQVRVUyA9IDB4OEI4MiwKLSAgICAgICAgVkFMSURBVEVfU1RBVFVTID0gMHg4QjgzLAotICAg
ICAgICBBVFRBQ0hFRF9TSEFERVJTID0gMHg4Qjg1LAotICAgICAgICBBQ1RJVkVfVU5JRk9STVMg
PSAweDhCODYsCi0gICAgICAgIEFDVElWRV9VTklGT1JNX01BWF9MRU5HVEggPSAweDhCODcsCi0g
ICAgICAgIEFDVElWRV9BVFRSSUJVVEVTID0gMHg4Qjg5LAotICAgICAgICBBQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEggPSAweDhCOEEsCi0gICAgICAgIFNIQURJTkdfTEFOR1VBR0VfVkVSU0lP
TiA9IDB4OEI4QywKLSAgICAgICAgQ1VSUkVOVF9QUk9HUkFNID0gMHg4QjhELAotICAgICAgICBO
RVZFUiA9IDB4MDIwMCwKLSAgICAgICAgTEVTUyA9IDB4MDIwMSwKLSAgICAgICAgRVFVQUwgPSAw
eDAyMDIsCi0gICAgICAgIExFUVVBTCA9IDB4MDIwMywKLSAgICAgICAgR1JFQVRFUiA9IDB4MDIw
NCwKLSAgICAgICAgTk9URVFVQUwgPSAweDAyMDUsCi0gICAgICAgIEdFUVVBTCA9IDB4MDIwNiwK
LSAgICAgICAgQUxXQVlTID0gMHgwMjA3LAotICAgICAgICBLRUVQID0gMHgxRTAwLAotICAgICAg
ICBSRVBMQUNFID0gMHgxRTAxLAotICAgICAgICBJTkNSID0gMHgxRTAyLAotICAgICAgICBERUNS
ID0gMHgxRTAzLAotICAgICAgICBJTlZFUlQgPSAweDE1MEEsCi0gICAgICAgIElOQ1JfV1JBUCA9
IDB4ODUwNywKLSAgICAgICAgREVDUl9XUkFQID0gMHg4NTA4LAotICAgICAgICBWRU5ET1IgPSAw
eDFGMDAsCi0gICAgICAgIFJFTkRFUkVSID0gMHgxRjAxLAotICAgICAgICBWRVJTSU9OID0gMHgx
RjAyLAotICAgICAgICBFWFRFTlNJT05TID0gMHgxRjAzLAotICAgICAgICBORUFSRVNUID0gMHgy
NjAwLAotICAgICAgICBMSU5FQVIgPSAweDI2MDEsCi0gICAgICAgIE5FQVJFU1RfTUlQTUFQX05F
QVJFU1QgPSAweDI3MDAsCi0gICAgICAgIExJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IDB4MjcwMSwK
LSAgICAgICAgTkVBUkVTVF9NSVBNQVBfTElORUFSID0gMHgyNzAyLAotICAgICAgICBMSU5FQVJf
TUlQTUFQX0xJTkVBUiA9IDB4MjcwMywKLSAgICAgICAgVEVYVFVSRV9NQUdfRklMVEVSID0gMHgy
ODAwLAotICAgICAgICBURVhUVVJFX01JTl9GSUxURVIgPSAweDI4MDEsCi0gICAgICAgIFRFWFRV
UkVfV1JBUF9TID0gMHgyODAyLAotICAgICAgICBURVhUVVJFX1dSQVBfVCA9IDB4MjgwMywKLSAg
ICAgICAgVEVYVFVSRSA9IDB4MTcwMiwKLSAgICAgICAgVEVYVFVSRV9DVUJFX01BUCA9IDB4ODUx
MywKLSAgICAgICAgVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQID0gMHg4NTE0LAotICAgICAgICBU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPSAweDg1MTUsCi0gICAgICAgIFRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWCA9IDB4ODUxNiwKLSAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZID0gMHg4NTE3LAotICAgICAgICBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgPSAw
eDg1MTgsCi0gICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiA9IDB4ODUxOSwKLSAg
ICAgICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aID0gMHg4NTFBLAotICAgICAgICBNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMHg4NTFDLAotICAgICAgICBURVhUVVJFMCA9IDB4ODRD
MCwKLSAgICAgICAgVEVYVFVSRTEgPSAweDg0QzEsCi0gICAgICAgIFRFWFRVUkUyID0gMHg4NEMy
LAotICAgICAgICBURVhUVVJFMyA9IDB4ODRDMywKLSAgICAgICAgVEVYVFVSRTQgPSAweDg0QzQs
Ci0gICAgICAgIFRFWFRVUkU1ID0gMHg4NEM1LAotICAgICAgICBURVhUVVJFNiA9IDB4ODRDNiwK
LSAgICAgICAgVEVYVFVSRTcgPSAweDg0QzcsCi0gICAgICAgIFRFWFRVUkU4ID0gMHg4NEM4LAot
ICAgICAgICBURVhUVVJFOSA9IDB4ODRDOSwKLSAgICAgICAgVEVYVFVSRTEwID0gMHg4NENBLAot
ICAgICAgICBURVhUVVJFMTEgPSAweDg0Q0IsCi0gICAgICAgIFRFWFRVUkUxMiA9IDB4ODRDQywK
LSAgICAgICAgVEVYVFVSRTEzID0gMHg4NENELAotICAgICAgICBURVhUVVJFMTQgPSAweDg0Q0Us
Ci0gICAgICAgIFRFWFRVUkUxNSA9IDB4ODRDRiwKLSAgICAgICAgVEVYVFVSRTE2ID0gMHg4NEQw
LAotICAgICAgICBURVhUVVJFMTcgPSAweDg0RDEsCi0gICAgICAgIFRFWFRVUkUxOCA9IDB4ODRE
MiwKLSAgICAgICAgVEVYVFVSRTE5ID0gMHg4NEQzLAotICAgICAgICBURVhUVVJFMjAgPSAweDg0
RDQsCi0gICAgICAgIFRFWFRVUkUyMSA9IDB4ODRENSwKLSAgICAgICAgVEVYVFVSRTIyID0gMHg4
NEQ2LAotICAgICAgICBURVhUVVJFMjMgPSAweDg0RDcsCi0gICAgICAgIFRFWFRVUkUyNCA9IDB4
ODREOCwKLSAgICAgICAgVEVYVFVSRTI1ID0gMHg4NEQ5LAotICAgICAgICBURVhUVVJFMjYgPSAw
eDg0REEsCi0gICAgICAgIFRFWFRVUkUyNyA9IDB4ODREQiwKLSAgICAgICAgVEVYVFVSRTI4ID0g
MHg4NERDLAotICAgICAgICBURVhUVVJFMjkgPSAweDg0REQsCi0gICAgICAgIFRFWFRVUkUzMCA9
IDB4ODRERSwKLSAgICAgICAgVEVYVFVSRTMxID0gMHg4NERGLAotICAgICAgICBBQ1RJVkVfVEVY
VFVSRSA9IDB4ODRFMCwKLSAgICAgICAgUkVQRUFUID0gMHgyOTAxLAotICAgICAgICBDTEFNUF9U
T19FREdFID0gMHg4MTJGLAotICAgICAgICBNSVJST1JFRF9SRVBFQVQgPSAweDgzNzAsCi0gICAg
ICAgIEZMT0FUX1ZFQzIgPSAweDhCNTAsCi0gICAgICAgIEZMT0FUX1ZFQzMgPSAweDhCNTEsCi0g
ICAgICAgIEZMT0FUX1ZFQzQgPSAweDhCNTIsCi0gICAgICAgIElOVF9WRUMyID0gMHg4QjUzLAot
ICAgICAgICBJTlRfVkVDMyA9IDB4OEI1NCwKLSAgICAgICAgSU5UX1ZFQzQgPSAweDhCNTUsCi0g
ICAgICAgIEJPT0wgPSAweDhCNTYsCi0gICAgICAgIEJPT0xfVkVDMiA9IDB4OEI1NywKLSAgICAg
ICAgQk9PTF9WRUMzID0gMHg4QjU4LAotICAgICAgICBCT09MX1ZFQzQgPSAweDhCNTksCi0gICAg
ICAgIEZMT0FUX01BVDIgPSAweDhCNUEsCi0gICAgICAgIEZMT0FUX01BVDMgPSAweDhCNUIsCi0g
ICAgICAgIEZMT0FUX01BVDQgPSAweDhCNUMsCi0gICAgICAgIFNBTVBMRVJfMkQgPSAweDhCNUUs
Ci0gICAgICAgIFNBTVBMRVJfQ1VCRSA9IDB4OEI2MCwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9B
UlJBWV9FTkFCTEVEID0gMHg4NjIyLAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUg
PSAweDg2MjMsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFID0gMHg4NjI0LAot
ICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgPSAweDg2MjUsCi0gICAgICAgIFZFUlRF
WF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCA9IDB4ODg2QSwKLSAgICAgICAgVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9QT0lOVEVSID0gMHg4NjQ1LAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX0JV
RkZFUl9CSU5ESU5HID0gMHg4ODlGLAotICAgICAgICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEUgPSAweDhCOUEsCi0gICAgICAgIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFU
ID0gMHg4QjlCLAotICAgICAgICBDT01QSUxFX1NUQVRVUyA9IDB4OEI4MSwKLSAgICAgICAgSU5G
T19MT0dfTEVOR1RIID0gMHg4Qjg0LAotICAgICAgICBTSEFERVJfU09VUkNFX0xFTkdUSCA9IDB4
OEI4OCwKLSAgICAgICAgU0hBREVSX0NPTVBJTEVSID0gMHg4REZBLAotICAgICAgICBTSEFERVJf
QklOQVJZX0ZPUk1BVFMgPSAweDhERjgsCi0gICAgICAgIE5VTV9TSEFERVJfQklOQVJZX0ZPUk1B
VFMgPSAweDhERjksCi0gICAgICAgIExPV19GTE9BVCA9IDB4OERGMCwKLSAgICAgICAgTUVESVVN
X0ZMT0FUID0gMHg4REYxLAotICAgICAgICBISUdIX0ZMT0FUID0gMHg4REYyLAotICAgICAgICBM
T1dfSU5UID0gMHg4REYzLAotICAgICAgICBNRURJVU1fSU5UID0gMHg4REY0LAotICAgICAgICBI
SUdIX0lOVCA9IDB4OERGNSwKLSAgICAgICAgRlJBTUVCVUZGRVIgPSAweDhENDAsCi0gICAgICAg
IFJFTkRFUkJVRkZFUiA9IDB4OEQ0MSwKLSAgICAgICAgUkdCQTQgPSAweDgwNTYsCi0gICAgICAg
IFJHQjVfQTEgPSAweDgwNTcsCi0gICAgICAgIFJHQjU2NSA9IDB4OEQ2MiwKLSAgICAgICAgREVQ
VEhfQ09NUE9ORU5UMTYgPSAweDgxQTUsCi0gICAgICAgIFNURU5DSUxfSU5ERVggPSAweDE5MDEs
Ci0gICAgICAgIFNURU5DSUxfSU5ERVg4ID0gMHg4RDQ4LAotICAgICAgICBSRU5ERVJCVUZGRVJf
V0lEVEggPSAweDhENDIsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9IRUlHSFQgPSAweDhENDMsCi0g
ICAgICAgIFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgPSAweDhENDQsCi0gICAgICAgIFJF
TkRFUkJVRkZFUl9SRURfU0laRSA9IDB4OEQ1MCwKLSAgICAgICAgUkVOREVSQlVGRkVSX0dSRUVO
X1NJWkUgPSAweDhENTEsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9CTFVFX1NJWkUgPSAweDhENTIs
Ci0gICAgICAgIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFID0gMHg4RDUzLAotICAgICAgICBSRU5E
RVJCVUZGRVJfREVQVEhfU0laRSA9IDB4OEQ1NCwKLSAgICAgICAgUkVOREVSQlVGRkVSX1NURU5D
SUxfU0laRSA9IDB4OEQ1NSwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRSA9IDB4OENEMCwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFN
RSA9IDB4OENEMSwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVM
ID0gMHg4Q0QyLAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9N
QVBfRkFDRSA9IDB4OENEMywKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDAgPSAweDhDRTAsCi0g
ICAgICAgIERFUFRIX0FUVEFDSE1FTlQgPSAweDhEMDAsCi0gICAgICAgIFNURU5DSUxfQVRUQUNI
TUVOVCA9IDB4OEQyMCwKLSAgICAgICAgTk9ORSA9IDAsCi0gICAgICAgIEZSQU1FQlVGRkVSX0NP
TVBMRVRFID0gMHg4Q0Q1LAotICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQgPSAweDhDRDYsCi0gICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRB
Q0hNRU5UID0gMHg4Q0Q3LAotICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lP
TlMgPSAweDhDRDksCi0gICAgICAgIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEID0gMHg4Q0RELAot
ICAgICAgICBGUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0E2LAotICAgICAgICBSRU5ERVJCVUZG
RVJfQklORElORyA9IDB4OENBNywKLSAgICAgICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gMHg4
NEU4LAotICAgICAgICBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiA9IDB4MDUwNiwKLQot
ICAgICAgICAvLyBXZWJHTC1zcGVjaWZpYyBlbnVtcwotICAgICAgICBVTlBBQ0tfRkxJUF9ZX1dF
QkdMID0gMHg5MjQwLAotICAgICAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgPSAw
eDkyNDEsCi0gICAgICAgIENPTlRFWFRfTE9TVF9XRUJHTCA9IDB4OTI0MiwKLSAgICAgICAgVU5Q
QUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA9IDB4OTI0MywKLSAgICAgICAgQlJPV1NF
Ul9ERUZBVUxUX1dFQkdMID0gMHg5MjQ0LAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUgPSAweDg4RkUsCi0gICAgICAgIAotICAgICAgICAvLyBXZWJHTDIgY29uc3Rh
bnRzCi0gICAgICAgIFJFQURfQlVGRkVSID0gMHgwQzAyLAotICAgICAgICBVTlBBQ0tfUk9XX0xF
TkdUSCA9IDB4MENGMiwKLSAgICAgICAgVU5QQUNLX1NLSVBfUk9XUyA9IDB4MENGMywKLSAgICAg
ICAgVU5QQUNLX1NLSVBfUElYRUxTID0gMHgwQ0Y0LAotICAgICAgICBQQUNLX1JPV19MRU5HVEgg
PSAweDBEMDIsCi0gICAgICAgIFBBQ0tfU0tJUF9ST1dTID0gMHgwRDAzLAotICAgICAgICBQQUNL
X1NLSVBfUElYRUxTID0gMHgwRDA0LAotICAgICAgICBDT0xPUiA9IDB4MTgwMCwKLSAgICAgICAg
REVQVEggPSAweDE4MDEsCi0gICAgICAgIFNURU5DSUwgPSAweDE4MDIsCi0gICAgICAgIFJFRCA9
IDB4MTkwMywKLSAgICAgICAgUkdCOCA9IDB4ODA1MSwKLSAgICAgICAgUkdCQTggPSAweDgwNTgs
Ci0gICAgICAgIFJHQjEwX0EyID0gMHg4MDU5LAotICAgICAgICBURVhUVVJFX0JJTkRJTkdfM0Qg
PSAweDgwNkEsCi0gICAgICAgIFVOUEFDS19TS0lQX0lNQUdFUyA9IDB4ODA2RCwKLSAgICAgICAg
VU5QQUNLX0lNQUdFX0hFSUdIVCA9IDB4ODA2RSwKLSAgICAgICAgVEVYVFVSRV8zRCA9IDB4ODA2
RiwKLSAgICAgICAgVEVYVFVSRV9XUkFQX1IgPSAweDgwNzIsCi0gICAgICAgIE1BWF8zRF9URVhU
VVJFX1NJWkUgPSAweDgwNzMsCi0gICAgICAgIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViA9
IDB4ODM2OCwKLSAgICAgICAgTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTID0gMHg4MEU4LAotICAgICAg
ICBNQVhfRUxFTUVOVFNfSU5ESUNFUyA9IDB4ODBFOSwKLSAgICAgICAgVEVYVFVSRV9NSU5fTE9E
ID0gMHg4MTNBLAotICAgICAgICBURVhUVVJFX01BWF9MT0QgPSAweDgxM0IsCi0gICAgICAgIFRF
WFRVUkVfQkFTRV9MRVZFTCA9IDB4ODEzQywKLSAgICAgICAgVEVYVFVSRV9NQVhfTEVWRUwgPSAw
eDgxM0QsCi0gICAgICAgIE1JTiA9IDB4ODAwNywKLSAgICAgICAgTUFYID0gMHg4MDA4LAotICAg
ICAgICBERVBUSF9DT01QT05FTlQyNCA9IDB4ODFBNiwKLSAgICAgICAgTUFYX1RFWFRVUkVfTE9E
X0JJQVMgPSAweDg0RkQsCi0gICAgICAgIFRFWFRVUkVfQ09NUEFSRV9NT0RFID0gMHg4ODRDLAot
ICAgICAgICBURVhUVVJFX0NPTVBBUkVfRlVOQyA9IDB4ODg0RCwKLSAgICAgICAgQ1VSUkVOVF9R
VUVSWSA9IDB4ODg2NSwKLSAgICAgICAgUVVFUllfUkVTVUxUID0gMHg4ODY2LAotICAgICAgICBR
VUVSWV9SRVNVTFRfQVZBSUxBQkxFID0gMHg4ODY3LAotICAgICAgICBTVFJFQU1fUkVBRCA9IDB4
ODhFMSwKLSAgICAgICAgU1RSRUFNX0NPUFkgPSAweDg4RTIsCi0gICAgICAgIFNUQVRJQ19SRUFE
ID0gMHg4OEU1LAotICAgICAgICBTVEFUSUNfQ09QWSA9IDB4ODhFNiwKLSAgICAgICAgRFlOQU1J
Q19SRUFEID0gMHg4OEU5LAotICAgICAgICBEWU5BTUlDX0NPUFkgPSAweDg4RUEsCi0gICAgICAg
IE1BWF9EUkFXX0JVRkZFUlMgPSAweDg4MjQsCi0gICAgICAgIERSQVdfQlVGRkVSMCA9IDB4ODgy
NSwKLSAgICAgICAgRFJBV19CVUZGRVIxID0gMHg4ODI2LAotICAgICAgICBEUkFXX0JVRkZFUjIg
PSAweDg4MjcsCi0gICAgICAgIERSQVdfQlVGRkVSMyA9IDB4ODgyOCwKLSAgICAgICAgRFJBV19C
VUZGRVI0ID0gMHg4ODI5LAotICAgICAgICBEUkFXX0JVRkZFUjUgPSAweDg4MkEsCi0gICAgICAg
IERSQVdfQlVGRkVSNiA9IDB4ODgyQiwKLSAgICAgICAgRFJBV19CVUZGRVI3ID0gMHg4ODJDLAot
ICAgICAgICBEUkFXX0JVRkZFUjggPSAweDg4MkQsCi0gICAgICAgIERSQVdfQlVGRkVSOSA9IDB4
ODgyRSwKLSAgICAgICAgRFJBV19CVUZGRVIxMCA9IDB4ODgyRiwKLSAgICAgICAgRFJBV19CVUZG
RVIxMSA9IDB4ODgzMCwKLSAgICAgICAgRFJBV19CVUZGRVIxMiA9IDB4ODgzMSwKLSAgICAgICAg
RFJBV19CVUZGRVIxMyA9IDB4ODgzMiwKLSAgICAgICAgRFJBV19CVUZGRVIxNCA9IDB4ODgzMywK
LSAgICAgICAgRFJBV19CVUZGRVIxNSA9IDB4ODgzNCwKLSAgICAgICAgTUFYX0ZSQUdNRU5UX1VO
SUZPUk1fQ09NUE9ORU5UUyA9IDB4OEI0OSwKLSAgICAgICAgTUFYX1ZFUlRFWF9VTklGT1JNX0NP
TVBPTkVOVFMgPSAweDhCNEEsCi0gICAgICAgIFNBTVBMRVJfM0QgPSAweDhCNUYsCi0gICAgICAg
IFNBTVBMRVJfMkRfU0hBRE9XID0gMHg4QjYyLAotICAgICAgICBGUkFHTUVOVF9TSEFERVJfREVS
SVZBVElWRV9ISU5UID0gMHg4QjhCLAotICAgICAgICBQSVhFTF9QQUNLX0JVRkZFUiA9IDB4ODhF
QiwKLSAgICAgICAgUElYRUxfVU5QQUNLX0JVRkZFUiA9IDB4ODhFQywKLSAgICAgICAgUElYRUxf
UEFDS19CVUZGRVJfQklORElORyA9IDB4ODhFRCwKLSAgICAgICAgUElYRUxfVU5QQUNLX0JVRkZF
Ul9CSU5ESU5HID0gMHg4OEVGLAotICAgICAgICBGTE9BVF9NQVQyeDMgPSAweDhCNjUsCi0gICAg
ICAgIEZMT0FUX01BVDJ4NCA9IDB4OEI2NiwKLSAgICAgICAgRkxPQVRfTUFUM3gyID0gMHg4QjY3
LAotICAgICAgICBGTE9BVF9NQVQzeDQgPSAweDhCNjgsCi0gICAgICAgIEZMT0FUX01BVDR4MiA9
IDB4OEI2OSwKLSAgICAgICAgRkxPQVRfTUFUNHgzID0gMHg4QjZBLAotICAgICAgICBTUkdCID0g
MHg4QzQwLAotICAgICAgICBTUkdCOCA9IDB4OEM0MSwKLSAgICAgICAgU1JHQl9BTFBIQSA9IDB4
OEM0MiwKLSAgICAgICAgU1JHQjhfQUxQSEE4ID0gMHg4QzQzLAotICAgICAgICBDT01QQVJFX1JF
Rl9UT19URVhUVVJFID0gMHg4ODRFLAotICAgICAgICBSR0JBMzJGID0gMHg4ODE0LAotICAgICAg
ICBSR0IzMkYgPSAweDg4MTUsCi0gICAgICAgIFJHQkExNkYgPSAweDg4MUEsCi0gICAgICAgIFJH
QjE2RiA9IDB4ODgxQiwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSID0gMHg4
OEZELAotICAgICAgICBNQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAweDg4RkYsCi0gICAgICAg
IE1JTl9QUk9HUkFNX1RFWEVMX09GRlNFVCA9IDB4ODkwNCwKLSAgICAgICAgTUFYX1BST0dSQU1f
VEVYRUxfT0ZGU0VUID0gMHg4OTA1LAotICAgICAgICBNQVhfVkFSWUlOR19DT01QT05FTlRTID0g
MHg4QjRCLAotICAgICAgICBURVhUVVJFXzJEX0FSUkFZID0gMHg4QzFBLAotICAgICAgICBURVhU
VVJFX0JJTkRJTkdfMkRfQVJSQVkgPSAweDhDMUQsCi0gICAgICAgIFIxMUZfRzExRl9CMTBGID0g
MHg4QzNBLAotICAgICAgICBVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWID0gMHg4QzNCLAot
ICAgICAgICBSR0I5X0U1ID0gMHg4QzNELAotICAgICAgICBVTlNJR05FRF9JTlRfNV85XzlfOV9S
RVYgPSAweDhDM0UsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERSA9IDB4
OEM3RiwKLSAgICAgICAgTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRT
ID0gMHg4QzgwLAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1MgPSAweDhDODMs
Ci0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQgPSAweDhDODQsCi0gICAg
ICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRSA9IDB4OEM4NSwKLSAgICAgICAgVFJB
TlNGT1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTiA9IDB4OEM4OCwKLSAgICAgICAgUkFT
VEVSSVpFUl9ESVNDQVJEID0gMHg4Qzg5LAotICAgICAgICBNQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0lOVEVSTEVBVkVEX0NPTVBPTkVOVFMgPSAweDhDOEEsCi0gICAgICAgIE1BWF9UUkFOU0ZPUk1f
RkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCUyA9IDB4OEM4QiwKLSAgICAgICAgSU5URVJMRUFWRURf
QVRUUklCUyA9IDB4OEM4QywKLSAgICAgICAgU0VQQVJBVEVfQVRUUklCUyA9IDB4OEM4RCwKLSAg
ICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUiA9IDB4OEM4RSwKLSAgICAgICAgVFJBTlNG
T1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HID0gMHg4QzhGLAotICAgICAgICBSR0JBMzJVSSA9
IDB4OEQ3MCwKLSAgICAgICAgUkdCMzJVSSA9IDB4OEQ3MSwKLSAgICAgICAgUkdCQTE2VUkgPSAw
eDhENzYsCi0gICAgICAgIFJHQjE2VUkgPSAweDhENzcsCi0gICAgICAgIFJHQkE4VUkgPSAweDhE
N0MsCi0gICAgICAgIFJHQjhVSSA9IDB4OEQ3RCwKLSAgICAgICAgUkdCQTMySSA9IDB4OEQ4MiwK
LSAgICAgICAgUkdCMzJJID0gMHg4RDgzLAotICAgICAgICBSR0JBMTZJID0gMHg4RDg4LAotICAg
ICAgICBSR0IxNkkgPSAweDhEODksCi0gICAgICAgIFJHQkE4SSA9IDB4OEQ4RSwKLSAgICAgICAg
UkdCOEkgPSAweDhEOEYsCi0gICAgICAgIFJFRF9JTlRFR0VSID0gMHg4RDk0LAotICAgICAgICBS
R0JfSU5URUdFUiA9IDB4OEQ5OCwKLSAgICAgICAgUkdCQV9JTlRFR0VSID0gMHg4RDk5LAotICAg
ICAgICBTQU1QTEVSXzJEX0FSUkFZID0gMHg4REMxLAotICAgICAgICBTQU1QTEVSXzJEX0FSUkFZ
X1NIQURPVyA9IDB4OERDNCwKLSAgICAgICAgU0FNUExFUl9DVUJFX1NIQURPVyA9IDB4OERDNSwK
LSAgICAgICAgVU5TSUdORURfSU5UX1ZFQzIgPSAweDhEQzYsCi0gICAgICAgIFVOU0lHTkVEX0lO
VF9WRUMzID0gMHg4REM3LAotICAgICAgICBVTlNJR05FRF9JTlRfVkVDNCA9IDB4OERDOCwKLSAg
ICAgICAgSU5UX1NBTVBMRVJfMkQgPSAweDhEQ0EsCi0gICAgICAgIElOVF9TQU1QTEVSXzNEID0g
MHg4RENCLAotICAgICAgICBJTlRfU0FNUExFUl9DVUJFID0gMHg4RENDLAotICAgICAgICBJTlRf
U0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwKLSAgICAgICAgVU5TSUdORURfSU5UX1NBTVBMRVJf
MkQgPSAweDhERDIsCi0gICAgICAgIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEID0gMHg4REQzLAot
ICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFID0gMHg4REQ0LAotICAgICAgICBVTlNJ
R05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERENywKLSAgICAgICAgREVQVEhfQ09NUE9O
RU5UMzJGID0gMHg4Q0FDLAotICAgICAgICBERVBUSDMyRl9TVEVOQ0lMOCA9IDB4OENBRCwKLSAg
ICAgICAgRkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWID0gMHg4REFELAotICAgICAgICBG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HID0gMHg4MjEwLAotICAgICAgICBG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFID0gMHg4MjExLAotICAgICAgICBG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFID0gMHg4MjEyLAotICAgICAgICBGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0dSRUVOX1NJWkUgPSAweDgyMTMsCi0gICAgICAgIEZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQkxVRV9TSVpFID0gMHg4MjE0LAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0FMUEhBX1NJWkUgPSAweDgyMTUsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRSA9IDB4ODIxNiwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9T
VEVOQ0lMX1NJWkUgPSAweDgyMTcsCi0gICAgICAgIEZSQU1FQlVGRkVSX0RFRkFVTFQgPSAweDgy
MTgsCi0gICAgICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4ODIxQSwKLSAgICAgICAg
REVQVEhfU1RFTkNJTCA9IDB4ODRGOSwKLSAgICAgICAgVU5TSUdORURfSU5UXzI0XzggPSAweDg0
RkEsCi0gICAgICAgIERFUFRIMjRfU1RFTkNJTDggPSAweDg4RjAsCi0gICAgICAgIFVOU0lHTkVE
X05PUk1BTElaRUQgPSAweDhDMTcsCi0gICAgICAgIERSQVdfRlJBTUVCVUZGRVJfQklORElORyA9
IDB4OENBNiwgLyogU2FtZSBhcyBGUkFNRUJVRkZFUl9CSU5ESU5HICovCi0gICAgICAgIFJFQURf
RlJBTUVCVUZGRVIgPSAweDhDQTgsCi0gICAgICAgIERSQVdfRlJBTUVCVUZGRVIgPSAweDhDQTks
Ci0gICAgICAgIFJFQURfRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBQSwKLSAgICAgICAgUkVO
REVSQlVGRkVSX1NBTVBMRVMgPSAweDhDQUIsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9MQVlFUiA9IDB4OENENCwKLSAgICAgICAgTUFYX0NPTE9SX0FUVEFDSE1FTlRT
ID0gMHg4Q0RGLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMSA9IDB4OENFMSwKLSAgICAgICAg
Q09MT1JfQVRUQUNITUVOVDIgPSAweDhDRTIsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQzID0g
MHg4Q0UzLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNCA9IDB4OENFNCwKLSAgICAgICAgQ09M
T1JfQVRUQUNITUVOVDUgPSAweDhDRTUsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ2ID0gMHg4
Q0U2LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNyA9IDB4OENFNywKLSAgICAgICAgQ09MT1Jf
QVRUQUNITUVOVDggPSAweDhDRTgsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ5ID0gMHg4Q0U5
LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTAgPSAweDhDRUEsCi0gICAgICAgIENPTE9SX0FU
VEFDSE1FTlQxMSA9IDB4OENFQiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEyID0gMHg4Q0VD
LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTMgPSAweDhDRUQsCi0gICAgICAgIENPTE9SX0FU
VEFDSE1FTlQxNCA9IDB4OENFRSwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDE1ID0gMHg4Q0VG
LAotICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFID0gMHg4RDU2LAot
ICAgICAgICBNQVhfU0FNUExFUyA9IDB4OEQ1NywKLSAgICAgICAgSEFMRl9GTE9BVCA9IDB4MTQw
QiwKLSAgICAgICAgUkcgPSAweDgyMjcsCi0gICAgICAgIFJHX0lOVEVHRVIgPSAweDgyMjgsCi0g
ICAgICAgIFI4ID0gMHg4MjI5LAotICAgICAgICBSRzggPSAweDgyMkIsCi0gICAgICAgIFIxNkYg
PSAweDgyMkQsCi0gICAgICAgIFIzMkYgPSAweDgyMkUsCi0gICAgICAgIFJHMTZGID0gMHg4MjJG
LAotICAgICAgICBSRzMyRiA9IDB4ODIzMCwKLSAgICAgICAgUjhJID0gMHg4MjMxLAotICAgICAg
ICBSOFVJID0gMHg4MjMyLAotICAgICAgICBSMTZJID0gMHg4MjMzLAotICAgICAgICBSMTZVSSA9
IDB4ODIzNCwKLSAgICAgICAgUjMySSA9IDB4ODIzNSwKLSAgICAgICAgUjMyVUkgPSAweDgyMzYs
Ci0gICAgICAgIFJHOEkgPSAweDgyMzcsCi0gICAgICAgIFJHOFVJID0gMHg4MjM4LAotICAgICAg
ICBSRzE2SSA9IDB4ODIzOSwKLSAgICAgICAgUkcxNlVJID0gMHg4MjNBLAotICAgICAgICBSRzMy
SSA9IDB4ODIzQiwKLSAgICAgICAgUkczMlVJID0gMHg4MjNDLAotICAgICAgICBWRVJURVhfQVJS
QVlfQklORElORyA9IDB4ODVCNSwKLSAgICAgICAgUjhfU05PUk0gPSAweDhGOTQsCi0gICAgICAg
IFJHOF9TTk9STSA9IDB4OEY5NSwKLSAgICAgICAgUkdCOF9TTk9STSA9IDB4OEY5NiwKLSAgICAg
ICAgUkdCQThfU05PUk0gPSAweDhGOTcsCi0gICAgICAgIFNJR05FRF9OT1JNQUxJWkVEID0gMHg4
RjlDLAotICAgICAgICBDT1BZX1JFQURfQlVGRkVSID0gMHg4RjM2LAotICAgICAgICBDT1BZX1dS
SVRFX0JVRkZFUiA9IDB4OEYzNywKLSAgICAgICAgQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HID0g
MHg4RjM2LCAvKiBTYW1lIGFzIENPUFlfUkVBRF9CVUZGRVIgKi8KLSAgICAgICAgQ09QWV9XUklU
RV9CVUZGRVJfQklORElORyA9IDB4OEYzNywgLyogU2FtZSBhcyBDT1BZX1dSSVRFX0JVRkZFUiAq
LwotICAgICAgICBVTklGT1JNX0JVRkZFUiA9IDB4OEExMSwKLSAgICAgICAgVU5JRk9STV9CVUZG
RVJfQklORElORyA9IDB4OEEyOCwKLSAgICAgICAgVU5JRk9STV9CVUZGRVJfU1RBUlQgPSAweDhB
MjksCi0gICAgICAgIFVOSUZPUk1fQlVGRkVSX1NJWkUgPSAweDhBMkEsCi0gICAgICAgIE1BWF9W
RVJURVhfVU5JRk9STV9CTE9DS1MgPSAweDhBMkIsCi0gICAgICAgIE1BWF9GUkFHTUVOVF9VTklG
T1JNX0JMT0NLUyA9IDB4OEEyRCwKLSAgICAgICAgTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tT
ID0gMHg4QTJFLAotICAgICAgICBNQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1MgPSAweDhBMkYs
Ci0gICAgICAgIE1BWF9VTklGT1JNX0JMT0NLX1NJWkUgPSAweDhBMzAsCi0gICAgICAgIE1BWF9D
T01CSU5FRF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTID0gMHg4QTMxLAotICAgICAgICBNQVhf
Q09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTID0gMHg4QTMzLAotICAgICAgICBV
TklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UID0gMHg4QTM0LAotICAgICAgICBBQ1RJVkVf
VU5JRk9STV9CTE9DS1MgPSAweDhBMzYsCi0gICAgICAgIFVOSUZPUk1fVFlQRSA9IDB4OEEzNywK
LSAgICAgICAgVU5JRk9STV9TSVpFID0gMHg4QTM4LAotICAgICAgICBVTklGT1JNX0JMT0NLX0lO
REVYID0gMHg4QTNBLAotICAgICAgICBVTklGT1JNX09GRlNFVCA9IDB4OEEzQiwKLSAgICAgICAg
VU5JRk9STV9BUlJBWV9TVFJJREUgPSAweDhBM0MsCi0gICAgICAgIFVOSUZPUk1fTUFUUklYX1NU
UklERSA9IDB4OEEzRCwKLSAgICAgICAgVU5JRk9STV9JU19ST1dfTUFKT1IgPSAweDhBM0UsCi0g
ICAgICAgIFVOSUZPUk1fQkxPQ0tfQklORElORyA9IDB4OEEzRiwKLSAgICAgICAgVU5JRk9STV9C
TE9DS19EQVRBX1NJWkUgPSAweDhBNDAsCi0gICAgICAgIFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VO
SUZPUk1TID0gMHg4QTQyLAotICAgICAgICBVTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNX0lO
RElDRVMgPSAweDhBNDMsCi0gICAgICAgIFVOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJU
RVhfU0hBREVSID0gMHg4QTQ0LAotICAgICAgICBVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllf
RlJBR01FTlRfU0hBREVSID0gMHg4QTQ2LAotICAgICAgICBJTlZBTElEX0lOREVYID0gMHhGRkZG
RkZGRiwKLSAgICAgICAgTUFYX1ZFUlRFWF9PVVRQVVRfQ09NUE9ORU5UUyA9IDB4OTEyMiwKLSAg
ICAgICAgTUFYX0ZSQUdNRU5UX0lOUFVUX0NPTVBPTkVOVFMgPSAweDkxMjUsCi0gICAgICAgIE1B
WF9TRVJWRVJfV0FJVF9USU1FT1VUID0gMHg5MTExLAotICAgICAgICBPQkpFQ1RfVFlQRSA9IDB4
OTExMiwKLSAgICAgICAgU1lOQ19DT05ESVRJT04gPSAweDkxMTMsCi0gICAgICAgIFNZTkNfU1RB
VFVTID0gMHg5MTE0LAotICAgICAgICBTWU5DX0ZMQUdTID0gMHg5MTE1LAotICAgICAgICBTWU5D
X0ZFTkNFID0gMHg5MTE2LAotICAgICAgICBTWU5DX0dQVV9DT01NQU5EU19DT01QTEVURSA9IDB4
OTExNywKLSAgICAgICAgVU5TSUdOQUxFRCA9IDB4OTExOCwKLSAgICAgICAgU0lHTkFMRUQgPSAw
eDkxMTksCi0gICAgICAgIEFMUkVBRFlfU0lHTkFMRUQgPSAweDkxMUEsCi0gICAgICAgIFRJTUVP
VVRfRVhQSVJFRCA9IDB4OTExQiwKLSAgICAgICAgQ09ORElUSU9OX1NBVElTRklFRCA9IDB4OTEx
QywKLSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIFdBSVRfRkFJTEVEX1dJTiA9IDB4OTExRCwK
LSNlbHNlCi0gICAgICAgIFdBSVRfRkFJTEVEID0gMHg5MTFELAotI2VuZGlmCi0gICAgICAgIFNZ
TkNfRkxVU0hfQ09NTUFORFNfQklUID0gMHgwMDAwMDAwMSwKLSAgICAgICAgVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9ESVZJU09SID0gMHg4OEZFLAotICAgICAgICBBTllfU0FNUExFU19QQVNTRUQgPSAw
eDhDMkYsCi0gICAgICAgIEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUgPSAweDhENkEs
Ci0gICAgICAgIFNBTVBMRVJfQklORElORyA9IDB4ODkxOSwKLSAgICAgICAgUkdCMTBfQTJVSSA9
IDB4OTA2RiwKLSAgICAgICAgVEVYVFVSRV9TV0laWkxFX1IgPSAweDhFNDIsCi0gICAgICAgIFRF
WFRVUkVfU1dJWlpMRV9HID0gMHg4RTQzLAotICAgICAgICBURVhUVVJFX1NXSVpaTEVfQiA9IDB4
OEU0NCwKLSAgICAgICAgVEVYVFVSRV9TV0laWkxFX0EgPSAweDhFNDUsCi0gICAgICAgIEdSRUVO
ID0gMHgxOTA0LAotICAgICAgICBCTFVFID0gMHgxOTA1LAotICAgICAgICBJTlRfMl8xMF8xMF8x
MF9SRVYgPSAweDhEOUYsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDSyA9IDB4OEUyMiwKLSAg
ICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRCA9IDB4OEUyMywKLSAgICAgICAgVFJBTlNG
T1JNX0ZFRURCQUNLX0FDVElWRSA9IDB4OEUyNCwKLSAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNL
X0JJTkRJTkcgPSAweDhFMjUsCi0gICAgICAgIENPTVBSRVNTRURfUjExX0VBQyA9IDB4OTI3MCwK
LSAgICAgICAgQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQyA9IDB4OTI3MSwKLSAgICAgICAgQ09N
UFJFU1NFRF9SRzExX0VBQyA9IDB4OTI3MiwKLSAgICAgICAgQ09NUFJFU1NFRF9TSUdORURfUkcx
MV9FQUMgPSAweDkyNzMsCi0gICAgICAgIENPTVBSRVNTRURfUkdCOF9FVEMyID0gMHg5Mjc0LAot
ICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0VUQzIgPSAweDkyNzUsCi0gICAgICAgIENPTVBSRVNT
RURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgPSAweDkyNzYsCi0gICAgICAgIENPTVBS
RVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc3LAotICAgICAgICBD
T01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDID0gMHg5Mjc4LAotICAgICAgICBDT01QUkVTU0VEX1NS
R0I4X0FMUEhBOF9FVEMyX0VBQyA9IDB4OTI3OSwKLSAgICAgICAgVEVYVFVSRV9JTU1VVEFCTEVf
Rk9STUFUID0gMHg5MTJGLAotICAgICAgICBNQVhfRUxFTUVOVF9JTkRFWCA9IDB4OEQ2QiwKLSAg
ICAgICAgTlVNX1NBTVBMRV9DT1VOVFMgPSAweDkzODAsCi0gICAgICAgIFRFWFRVUkVfSU1NVVRB
QkxFX0xFVkVMUyA9IDB4ODJERiwKLSAgICAgICAgUFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5E
RVggPSAweDhENjksCi0gICAgICAgIFBSSU1JVElWRV9SRVNUQVJUID0gMHg4RjlELAotCi0gICAg
ICAgIC8vIE9wZW5HTCBFUyAzIGNvbnN0YW50cy4KLSAgICAgICAgTUFQX1JFQURfQklUID0gMHgw
MDAxLAotCi0gICAgICAgIC8vIE5lY2Vzc2FyeSBkZXNrdG9wIE9wZW5HTCBjb25zdGFudHMuCi0g
ICAgICAgIFRFWFRVUkVfUkVDVEFOR0xFX0FSQiA9IDB4ODRGNQotICAgIH07Ci0KLSAgICBlbnVt
IGNsYXNzIERhdGFGb3JtYXQgOiB1aW50OF90IHsKLSAgICAgICAgUkdCQTggPSAwLAotICAgICAg
ICBSR0JBMTZMaXR0bGUsCi0gICAgICAgIFJHQkExNkJpZywKLSAgICAgICAgUkdCQTE2RiwKLSAg
ICAgICAgUkdCQTMyRiwKLSAgICAgICAgUkdCOCwKLSAgICAgICAgUkdCMTZMaXR0bGUsCi0gICAg
ICAgIFJHQjE2QmlnLAotICAgICAgICBSR0IxNkYsCi0gICAgICAgIFJHQjMyRiwKLSAgICAgICAg
QkdSOCwKLSAgICAgICAgQkdSQTgsCi0gICAgICAgIEJHUkExNkxpdHRsZSwKLSAgICAgICAgQkdS
QTE2QmlnLAotICAgICAgICBBUkdCOCwKLSAgICAgICAgQVJHQjE2TGl0dGxlLAotICAgICAgICBB
UkdCMTZCaWcsCi0gICAgICAgIEFCR1I4LAotICAgICAgICBSR0JBNTU1MSwKLSAgICAgICAgUkdC
QTQ0NDQsCi0gICAgICAgIFJHQjU2NSwKLSAgICAgICAgUjgsCi0gICAgICAgIFIxNkxpdHRsZSwK
LSAgICAgICAgUjE2QmlnLAotICAgICAgICBSMTZGLAotICAgICAgICBSMzJGLAotICAgICAgICBS
QTgsCi0gICAgICAgIFJBMTZMaXR0bGUsCi0gICAgICAgIFJBMTZCaWcsCi0gICAgICAgIFJBMTZG
LAotICAgICAgICBSQTMyRiwKLSAgICAgICAgQVI4LAotICAgICAgICBBUjE2TGl0dGxlLAotICAg
ICAgICBBUjE2QmlnLAotICAgICAgICBBOCwKLSAgICAgICAgQTE2TGl0dGxlLAotICAgICAgICBB
MTZCaWcsCi0gICAgICAgIEExNkYsCi0gICAgICAgIEEzMkYsCi0gICAgICAgIE51bUZvcm1hdHMK
LSAgICB9OwotCi0gICAgZW51bSBjbGFzcyBEZXN0aW5hdGlvbiA6IHVpbnQ4X3QgewotICAgICAg
ICBPZmZzY3JlZW4sCi0gICAgICAgIERpcmVjdGx5VG9Ib3N0V2luZG93LAotICAgIH07Ci0KLSAg
ICBlbnVtIGNsYXNzIENoYW5uZWxCaXRzIDogdWludDhfdCB7Ci0gICAgICAgIFJlZCA9IDEsCi0g
ICAgICAgIEdyZWVuID0gMiwKLSAgICAgICAgQmx1ZSA9IDQsCi0gICAgICAgIEFscGhhID0gOCwK
LSAgICAgICAgRGVwdGggPSAxNiwKLSAgICAgICAgU3RlbmNpbCA9IDMyLAotICAgICAgICBSR0Ig
PSBSZWQgfCBHcmVlbiB8IEJsdWUsCi0gICAgICAgIFJHQkEgPSBSR0IgfCBBbHBoYSwKLSAgICAg
ICAgRGVwdGhTdGVuY2lsID0gRGVwdGggfCBTdGVuY2lsLAotICAgIH07Ci0KLSAgICAvLyBQb3Nz
aWJsZSBhbHBoYSBvcGVyYXRpb25zIHRoYXQgbWF5IG5lZWQgdG8gb2NjdXIgZHVyaW5nCi0gICAg
Ly8gcGl4ZWwgcGFja2luZy4gRklYTUU6IGtBbHBoYURvVW5tdWx0aXBseSBpcyBsb3NzeSBhbmQg
bXVzdAotICAgIC8vIGJlIHJlbW92ZWQuCi0gICAgZW51bSBBbHBoYU9wIDogdWludDhfdCB7Ci0g
ICAgICAgIERvTm90aGluZywKLSAgICAgICAgRG9QcmVtdWx0aXBseSwKLSAgICAgICAgRG9Vbm11
bHRpcGx5LAotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIERPTVNvdXJjZSA6IHVpbnQ4X3Qgewot
ICAgICAgICBJbWFnZSwKLSAgICAgICAgQ2FudmFzLAotICAgICAgICBWaWRlbywKLSAgICAgICAg
Tm9uZSwKLSAgICB9OwotCi0jaWYgVVNFKEFOR0xFKQotICAgIGVudW0gewotICAgICAgICAvLyBU
aGVzZSBjb25zdGFudHMgYXJlIHJlZGVmaW5lZCBoZXJlIGZyb20gQU5HTEUncyBPcGVuR0wgRVMg
aGVhZGVycyB0bwotICAgICAgICAvLyBwcm92aWRlIGEgc2luZ2xlIHBsYWNlIHdoZXJlIG11bHRp
cGxlIHBvcnRpb25zIG9mIHBsYXRmb3JtIGNvZGUgY2FuCi0gICAgICAgIC8vIHJlZmVyZW5jZSB0
aGVtLgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9
IFRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgLy8gYWxzbyBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdM
RQotICAgICAgICBFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0ID0gMHgzNDVCLCAvLyBFR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUKLSNlbHNlCi0gICAgICAgIElPU3VyZmFjZVRleHR1cmVUYXJn
ZXQgPSBURVhUVVJFXzJELAotICAgICAgICBFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0ID0gMHgz
MDVGLCAvLyBFR0xfVEVYVFVSRV8yRAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLSAgICB9Owot
I2VuZGlmIC8vIFVTRShBTkdMRSkKLQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
UGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOwotCi0gICAgQUxXQVlT
X0lOTElORSBzdGF0aWMgYm9vbCBoYXNBbHBoYShEYXRhRm9ybWF0IGZvcm1hdCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QTg6Ci0g
ICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QTE2RjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpB
MzJGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBODoKLSAgICAgICAgY2FzZSBEYXRhRm9y
bWF0OjpBUjg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkExNkY6Ci0gICAgICAgIGNhc2Ug
RGF0YUZvcm1hdDo6UkEzMkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTg6Ci0gICAg
ICAgIGNhc2UgRGF0YUZvcm1hdDo6QkdSQTg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QVJH
Qjg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QUJHUjg6Ci0gICAgICAgIGNhc2UgRGF0YUZv
cm1hdDo6UkdCQTE2RjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBMzJGOgotICAgICAg
ICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE0NDQ0OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJH
QkE1NTUxOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBib29sIGhhc0NvbG9yKERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBODoKLSAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBMTZGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6
OlJHQkEzMkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCODoKLSAgICAgICAgY2FzZSBE
YXRhRm9ybWF0OjpSR0IxNkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCMzJGOgotICAg
ICAgICBjYXNlIERhdGFGb3JtYXQ6OkJHUjg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QkdS
QTg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QVJHQjg6Ci0gICAgICAgIGNhc2UgRGF0YUZv
cm1hdDo6QUJHUjg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTU1NTE6Ci0gICAgICAg
IGNhc2UgRGF0YUZvcm1hdDo6UkdCQTQ0NDQ6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdC
NTY1OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlI4OgotICAgICAgICBjYXNlIERhdGFGb3Jt
YXQ6OlIxNkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UjMyRjoKLSAgICAgICAgY2FzZSBE
YXRhRm9ybWF0OjpSQTg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkExNkY6Ci0gICAgICAg
IGNhc2UgRGF0YUZvcm1hdDo6UkEzMkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QVI4Ogot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgZm9y
bWF0IGlzIG9uZSBvZiB0aGUgZm9ybWF0cyBmcm9tIHRoZSBJbWFnZURhdGEgb3IgRE9NIGVsZW1l
bnRzLgotICAgIC8vIFRoZSBmb3JtYXRzIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBSR0JBOC4K
LSAgICAvLyBUaGUgZm9ybWF0cyBmcm9tIERPTSBlbGVtZW50cyB2YXJ5IHdpdGggR3JhcGhpY3Mg
cG9ydHMuIEl0IGNhbiBvbmx5IGJlIFJHQkE4IG9yIEJHUkE4IGZvciBub24tQ0cgcG9ydCB3aGls
ZSBhIGxpdHRsZSBtb3JlIGZvciBDRyBwb3J0LgotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJv
b2wgc3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhKERhdGFGb3JtYXQgU3Jj
Rm9ybWF0KQotICAgIHsKLSNpZiBVU0UoQ0cpCi0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0
dXJuIFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdDo6QVJHQjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJHQjgKLSAgICAgICAgfHwg
U3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6
QVI4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdDo6QTg7Ci0jZWxzZQotICAgIC8vIFRoYXQgTElUVExFX0VORElBTiBjYXNlIGhhcyBtb3Jl
IHBvc3NpYmxlIGZvcm1hdHMgdGhhbiBCSUdfRU5ESUFOIGNhc2UgaXMgYmVjYXVzZSBzb21lIGRl
Y29kZWQgaW1hZ2UgZGF0YSBpcyBhY3R1YWxseSBiaWcgZW5kaWFuCi0gICAgLy8gZXZlbiBvbiBs
aXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZXMuCi0gICAgcmV0dXJuIFNyY0Zvcm1hdCA9PSBEYXRh
Rm9ybWF0OjpCR1JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QUJHUjggfHwgU3JjRm9y
bWF0ID09IERhdGFGb3JtYXQ6OkJHUjgKLSAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3Jt
YXQ6OlJHQkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBUkdCOCB8fCBTcmNGb3JtYXQg
PT0gRGF0YUZvcm1hdDo6UkdCOAotICAgICAgICB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6
UjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkE4Ci0gICAgICAgIHx8IFNyY0Zvcm1hdCA9
PSBEYXRhRm9ybWF0OjpSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFSODsKLSNlbmRp
ZgotI2Vsc2UKLSAgICByZXR1cm4gU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkJHUkE4IHx8IFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0JBODsKLSNlbmRpZgotICAgIH0KLQotICAgIHN0cnVj
dCBBY3RpdmVJbmZvIHsKLSAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIEdDM0RlbnVtIHR5
cGU7Ci0gICAgICAgIEdDM0RpbnQgc2l6ZTsKLSAgICB9OwotCi0gICAgR3JhcGhpY3NDb250ZXh0
M0RCYXNlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcywgRGVzdGluYXRpb24gPSBEZXN0aW5h
dGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGljc0NvbnRleHQzREJhc2UqIHNoYXJlZENvbnRleHQgPSBu
dWxscHRyKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzREJhc2UoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAvLyA9PT09PT09PT09IFdlYkdMIDEgZW50cnkgcG9pbnRzLgotCi0gICAgdmlydHVh
bCB2b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRSZW5kZXJi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBm
IGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2Rl
QWxwaGEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3Is
IEdDM0RlbnVtIGRmYWN0b3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBH
QzNEZW51bSBkc3RBbHBoYSkgPSAwOwotCi0gICAgdmlydHVhbCBHQzNEZW51bSBjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVh
cihHQzNEYml0ZmllbGQgbWFzaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbG9yKEdD
M0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFt
cGYgYWxwaGEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChHQzNEY2xhbXBmIGRl
cHRoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50IHMpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4g
Z3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgUGxh
dGZvcm0zRE9iamVjdCBjcmVhdGVCdWZmZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNE
T2JqZWN0IGNyZWF0ZUZyYW1lYnVmZmVyKCkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9i
amVjdCBjcmVhdGVQcm9ncmFtKCkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBj
cmVhdGVSZW5kZXJidWZmZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNy
ZWF0ZVNoYWRlcihHQzNEZW51bSkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBj
cmVhdGVUZXh0dXJlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGN1bGxGYWNlKEdDM0RlbnVt
IG1vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9i
amVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZh
cikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCwg
UGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEdDM0RlbnVt
IGNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0Mz
RHVpbnQgaW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludHB0ciBvZmZzZXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBlbmFibGUo
R0MzRGVudW0gY2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0Mz
RGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
YXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50
IGxldmVsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2RlKSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgQWN0aXZlSW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QXR0YWNoZWRTaGFk
ZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6
ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKLQotICAg
IC8vIGdldFBhcmFtZXRlcgotICAgIHZpcnR1YWwgU3RyaW5nIGdldFN0cmluZyhHQzNEZW51bSBu
YW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VydihHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZWdl
cjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYoR0Mz
RGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkgPSAwOwotCi0gICAgdmlydHVhbCBHQzNE
ZW51bSBnZXRFcnJvcigpID0gMDsKLQotICAgIC8vIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcgotICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkgPSAwOwotCi0gICAgLy8gZ2V0UHJvZ3JhbVBhcmFtZXRlcgotICAg
IHZpcnR1YWwgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
LQotICAgIC8vIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcgotICAgIHZpcnR1YWwgdm9pZCBnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkgPSAwOwotCi0gICAgLy8gZ2V0U2hhZGVyUGFyYW1ldGVyCi0gICAgdmly
dHVhbCB2b2lkIGdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0U2hhZGVySW5mb0xv
ZyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBH
QzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0
cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0gICAgLy8gZ2V0
VGV4UGFyYW1ldGVyCi0gICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpID0gMDsKLQotICAgIC8vIGdldFVuaWZvcm0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlmb3Jt
aXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2
YWx1ZSkgPSAwOwotCi0gICAgdmlydHVhbCBHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0
Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKLQotICAgIC8vIGdldFZlcnRl
eEF0dHJpYgotICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkgPSAwOwotCi0gICAgdmlydHVhbCBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0
cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSA9IDA7Ci0gICAg
dmlydHVhbCBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAg
dmlydHVhbCBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKSA9IDA7Ci0gICAgdmly
dHVhbCBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAg
ICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0g
ICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9
IDA7Ci0gICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSA9
IDA7Ci0gICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQg
dW5pdHMpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVDb3ZlcmFnZShHQzNE
Y2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RP
YmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3Rl
bmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdD
M0RlbnVtIHpwYXNzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdD
M0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFz
cykgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBw
YXJhbSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWZ2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgdW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0
IEdDM0RpbnQqIHYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50IHgsIEdDM0RpbnQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBHQzNEZmxvYXQgeikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2Z2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRGludCB6KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZh
bHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCog
dmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdD
M0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRl
eCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4
QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGlu
ZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0
ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNE
ZmxvYXQgeiwgR0MzRGZsb2F0IHcpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmli
NGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9y
dChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQq
IGRhdGEsIEdDM0RlbnVtIHVzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlclN1YkRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjb21wcmVzc2VkVGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpID0gMDsKLQotICAgIHZpcnR1
YWwgYm9vbCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdB
cnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNv
dW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVt
ZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRp
dmlzb3IpID0gMDsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBjb250ZXh0QXR0
cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cnM7IH0KLSAgICB2b2lkIHNldENvbnRleHRB
dHRyaWJ1dGVzKGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyYgYXR0cnMpIHsgbV9h
dHRycyA9IGF0dHJzOyB9Ci0KLSAgICAvLyBWZXJ0ZXhBcnJheU9qZWN0IGNhbGxzCi0gICAgdmly
dHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmly
dHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLQot
I2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCi0gICAgdmlydHVhbCB2b2lkIHByaW1p
dGl2ZVJlc3RhcnRJbmRleChHQzNEdWludCkgPSAwOwotI2VuZGlmCi0KLSAgICAvLyBTdXBwb3J0
IGZvciBleHRlbnNpb25zLiBSZXR1cm5zIGEgbm9uLW51bGwgb2JqZWN0LCB0aG91Z2ggbm90Ci0g
ICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFpbnMgbWF5IG5lY2Vzc2FyaWx5IGJlIHN1cHBvcnRl
ZCBvbiB0aGUKLSAgICAvLyBjdXJyZW50IGhhcmR3YXJlLiBNdXN0IGNhbGwgRXh0ZW5zaW9uczNE
OjpzdXBwb3J0cygpIHRvCi0gICAgLy8gZGV0ZXJtaW5lIHRoaXMuCi0gICAgdmlydHVhbCBFeHRl
bnNpb25zM0QmIGdldEV4dGVuc2lvbnMoKSA9IDA7Ci0KLSAgICAvLyA9PT09PT09PT09IFdlYkdM
IDIgZW50cnkgcG9pbnRzLgotCi0gICAgdmlydHVhbCB2b2lkKiBtYXBCdWZmZXJSYW5nZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBHQzNE
Yml0ZmllbGQgYWNjZXNzKSA9IDA7Ci0gICAgdmlydHVhbCBHQzNEYm9vbGVhbiB1bm1hcEJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29weUJ1ZmZlclN1YkRh
dGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpdGVUYXJnZXQsIEdDM0RpbnRwdHIg
cmVhZE9mZnNldCwgR0MzRGludHB0ciB3cml0ZU9mZnNldCwgR0MzRHNpemVpcHRyKSA9IDA7Ci0K
LSAgICAvLyBnZXRJbnRlcm5hbEZvcm1hdFBhcmFtZXRlcgotICAgIHZpcnR1YWwgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCB0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXpl
aSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGdl
dEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdD
M0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4m
IHBhcmFtcykgPSAwOwotCi0gICAgLy8gPT09PT09PT09PSBOb24tV2ViR0wgYmFzZWQgZW50cnkg
cG9pbnRzLgotCi0gICAgc3RhdGljIHVuc2lnbmVkIGdldENsZWFyQml0c0J5QXR0YWNobWVudFR5
cGUoR0MzRGVudW0pOwotICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDbGVhckJpdHNCeUZvcm1hdChH
QzNEZW51bSk7Ci0KLSAgICBzdGF0aWMgdWludDhfdCBnZXRDaGFubmVsQml0c0J5Rm9ybWF0KEdD
M0RlbnVtKTsKLQotICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEQXR0cmli
dXRlcyBtX2F0dHJzOwotICAgIERlc3RpbmF0aW9uIG1fZGVzdGluYXRpb247Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODYxZGZiZWMxMjlmMjk0ODBhYjg3OTc4YjE4
YWIxNTQ4NjIzOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RNYW5h
Z2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotI2lmIEhBVkUoQVBQTEVfR1JBUEhJ
Q1NfQ09OVFJPTCkKLSNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRG
T1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCi0jaW5jbHVkZSAiU3dpdGNo
aW5nR1BVQ2xpZW50LmgiCi0jaW5jbHVkZSA8T3BlbkdML09wZW5HTC5oPgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKLQot
ZW51bSB7Ci0gICAga0FHQ09wZW4sCi0gICAga0FHQ0Nsb3NlCi19OwotCi1zdGF0aWMgaW9fY29u
bmVjdF90IGF0dGFjaFRvQXBwbGVHcmFwaGljc0NvbnRyb2woKQotewotICAgIG1hY2hfcG9ydF90
IG1hc3RlclBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICAKLSAgICBpZiAoSU9NYXN0ZXJQb3J0
KE1BQ0hfUE9SVF9OVUxMLCAmbWFzdGVyUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICBy
ZXR1cm4gTUFDSF9QT1JUX05VTEw7Ci0gICAgCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIGNsYXNzVG9N
YXRjaCA9IElPU2VydmljZU1hdGNoaW5nKCJBcHBsZUdyYXBoaWNzQ29udHJvbCIpOwotICAgIGlm
ICghY2xhc3NUb01hdGNoKQotICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7Ci0gICAgCi0g
ICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OwotICAgIGlvX2l0ZXJhdG9yX3QgaXRlcmF0b3I7
Ci0gICAgaWYgKChrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlcyhtYXN0
ZXJQb3J0LCBjbGFzc1RvTWF0Y2gsICZpdGVyYXRvcikpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAg
ICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotICAgIAotICAgIGlvX3NlcnZpY2VfdCBzZXJ2aWNl
T2JqZWN0ID0gSU9JdGVyYXRvck5leHQoaXRlcmF0b3IpOwotICAgIElPT2JqZWN0UmVsZWFzZShp
dGVyYXRvcik7Ci0gICAgaWYgKCFzZXJ2aWNlT2JqZWN0KQotICAgICAgICByZXR1cm4gTUFDSF9Q
T1JUX05VTEw7Ci0gICAgCi0gICAgaW9fY29ubmVjdF90IGRhdGFQb3J0OwotICAgIElPT2JqZWN0
UmV0YWluKHNlcnZpY2VPYmplY3QpOwotICAgIGtlcm5SZXN1bHQgPSBJT1NlcnZpY2VPcGVuKHNl
cnZpY2VPYmplY3QsIG1hY2hfdGFza19zZWxmKCksIDAsICZkYXRhUG9ydCk7Ci0gICAgSU9PYmpl
Y3RSZWxlYXNlKHNlcnZpY2VPYmplY3QpOwotICAgIAotICAgIHJldHVybiAoa2VyblJlc3VsdCA9
PSBLRVJOX1NVQ0NFU1MpID8gZGF0YVBvcnQgOiBNQUNIX1BPUlRfTlVMTDsKLX0KLQotc3RhdGlj
IGJvb2wgaGFzTXV4Q2FwYWJpbGl0eSgpCi17Ci0gICAgaW9fY29ubmVjdF90IGRhdGFQb3J0ID0g
YXR0YWNoVG9BcHBsZUdyYXBoaWNzQ29udHJvbCgpOwotICAgIAotICAgIGlmIChkYXRhUG9ydCA9
PSBNQUNIX1BPUlRfTlVMTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGJvb2wg
cmVzdWx0OwotICAgIGlmIChJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0aG9kKGRhdGFQb3J0LCBrQUdD
T3BlbiwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cikgPT0gS0VSTl9TVUNDRVNTKSB7Ci0g
ICAgICAgIElPQ29ubmVjdENhbGxTY2FsYXJNZXRob2QoZGF0YVBvcnQsIGtBR0NDbG9zZSwgbnVs
bHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJlc3VsdCA9IHRydWU7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgIAotICAgIElPU2VydmljZUNsb3Nl
KGRhdGFQb3J0KTsKLSAgICAKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMg
ZGV0ZWN0aW5nIE1hYyBoYXJkd2FyZSB3aXRoIGFuIEludGVsIGc1NzUgR1BVLCB3aGljaAotICAg
ICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIG1ha2UgYXZhaWxhYmxlIHRvIG11eGluZy4KLSAgICAg
ICAgLy8gQmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBBcHBsZSdzIE9wZW5HTCB0ZWFtLCBzdWNo
IGRldmljZXMKLSAgICAgICAgLy8gaGF2ZSBmb3VyIG9yIGZld2VyIHByb2Nlc3NvcnMuCi0gICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zMDA2MDM3OD4KLSAgICAgICAgaW50IG5hbWVzWzJdID0g
eyBDVExfSFcsIEhXX05DUFUgfTsKLSAgICAgICAgaW50IGNwdUNvdW50OwotICAgICAgICBzaXpl
X3QgY3B1Q291bnRMZW5ndGggPSBzaXplb2YoY3B1Q291bnQpOwotICAgICAgICBzeXNjdGwobmFt
ZXMsIDIsICZjcHVDb3VudCwgJmNwdUNvdW50TGVuZ3RoLCBudWxscHRyLCAwKTsKLSAgICAgICAg
cmVzdWx0ID0gY3B1Q291bnQgPiA0OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKQotewotICAgIHN0YXRpYyBib29sIGNh
bk11eCA9IGhhc011eENhcGFiaWxpdHkoKTsKLSAgICByZXR1cm4gY2FuTXV4OwotfQotI2VuZGlm
IC8vIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKLQotR3JhcGhpY3NDb250ZXh0M0RNYW5h
Z2VyJiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI+IHNfbWFuYWdlcjsK
LSAgICByZXR1cm4gc19tYW5hZ2VyOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNw
bGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9pZCopCi17Ci0gICAg
TE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1
cmVkIik7Ci0gICAgaWYgKGZsYWdzICYga0NHRGlzcGxheVNldE1vZGVGbGFnKQotICAgICAgICBH
cmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250ZXh0
cygpOwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjp1cGRhdGVB
bGxDb250ZXh0cygpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNF
KEFOR0xFKSkKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHQgOiBtX2NvbnRleHRzKSB7Ci0g
ICAgICAgIGNvbnRleHQtPnVwZGF0ZUNHTENvbnRleHQoKTsKLSAgICAgICAgY29udGV4dC0+ZGlz
cGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOwotICAgIH0KLSNlbmRpZgotfQotCi0j
aWYgUExBVEZPUk0oTUFDKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNjcmVlbkRp
ZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIGNvbnN0IEhvc3RXaW5kb3cqIHdp
bmRvdykKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHRBbmRXaW5kb3cgOiBtX2NvbnRl
eHRXaW5kb3dNYXApIHsKLSAgICAgICAgaWYgKGNvbnRleHRBbmRXaW5kb3cudmFsdWUgPT0gd2lu
ZG93KSB7Ci0gICAgICAgICAgICBjb250ZXh0QW5kV2luZG93LmtleS0+c2NyZWVuRGlkQ2hhbmdl
KGRpc3BsYXlJRCk7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJDaGFuZ2luZyBjb250ZXh0ICgl
cCkgdG8gZGlzcGxheSAoJWQpLiIsIGNvbnRleHRBbmRXaW5kb3cua2V5LCBkaXNwbGF5SUQpOwot
ICAgICAgICB9Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5h
Z2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiB3
aW5kb3cpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhRU5BQkxFKFdFQlBST0NFU1NfV0lO
RE9XU0VSVkVSX0JMT0NLSU5HKQotICAgIGlmICghbV9jb250ZXh0cy5zaXplKCkpCi0gICAgICAg
IENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29u
ZmlndXJlZCwgbnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIEFTU0VSVCghbV9jb250ZXh0cy5jb250
YWlucyhjb250ZXh0KSk7Ci0gICAgbV9jb250ZXh0cy5hcHBlbmQoY29udGV4dCk7Ci0gICAgbV9j
b250ZXh0V2luZG93TWFwLnNldChjb250ZXh0LCB3aW5kb3cpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNETWFuYWdlcjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKLXsKLSAgICBpZiAoIW1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NvbnRleHRzLnJlbW92ZUZpcnN0KGNvbnRleHQpOwotICAgIG1fY29udGV4
dFdpbmRvd01hcC5yZW1vdmUoY29udGV4dCk7Ci0gICAgcmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hp
Z2hQZXJmb3JtYW5jZShjb250ZXh0KTsKLSAgICAKLSNpZiBQTEFURk9STShNQUMpICYmICFFTkFC
TEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCi0gICAgaWYgKCFtX2NvbnRleHRz
LnNpemUoKSkKLSAgICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2so
ZGlzcGxheVdhc1JlY29uZmlndXJlZCwgbnVsbHB0cik7Ci0jZW5kaWYKLX0KLQotSG9zdFdpbmRv
dyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpob3N0V2luZG93Rm9yQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0V2luZG93
TWFwLmNvbnRhaW5zKGNvbnRleHQpKTsKLSAgICByZXR1cm4gbV9jb250ZXh0V2luZG93TWFwLmdl
dChjb250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmFkZENvbnRl
eHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17
Ci0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIEFTU0VSVChtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKTsKLSAgICBB
U1NFUlQoIW1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29udGFpbnMoY29udGV4
dCkpOwotICAgIAotICAgIExPRyhXZWJHTCwgIlRoaXMgY29udGV4dCAoJXApIHJlcXVpcmVzIHRo
ZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iLCBjb250ZXh0KTsKLSAgICBtX2NvbnRleHRzUmVxdWly
aW5nSGlnaFBlcmZvcm1hbmNlLmFkZChjb250ZXh0KTsKLSAgICAKLSAgICB1cGRhdGVIaWdoUGVy
Zm9ybWFuY2VTdGF0ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6cmVt
b3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKLXsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5jb250YWlucyhjb250ZXh0KSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIExPRyhXZWJHTCwgIlRoaXMgY29udGV4dCAoJXApIG5v
IGxvbmdlciByZXF1aXJlcyB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIiwgY29udGV4dCk7Ci0g
ICAgbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5yZW1vdmUoY29udGV4dCk7Ci0g
ICAgCi0gICAgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRE1hbmFnZXI6OnVwZGF0ZUhpZ2hQZXJmb3JtYW5jZVN0YXRlKCkKLXsKLSNpZiBQ
TEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQotICAgIGlmICghaGFz
TG93QW5kSGlnaFBvd2VyR1BVcygpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1f
Y29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uuc2l6ZSgpKSB7Ci0gICAgICAgIAotICAg
ICAgICBpZiAobV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuaXNBY3RpdmUoKSkgewot
ICAgICAgICAgICAgTE9HKFdlYkdMLCAiQ2FuY2VsIHBlbmRpbmcgdGltZXIgZm9yIHR1cm5pbmcg
b2ZmIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOwotICAgICAgICAgICAgbV9kaXNhYmxlSGlnaFBl
cmZvcm1hbmNlR1BVVGltZXIuc3RvcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX3Jl
cXVlc3RpbmdIaWdoUGVyZm9ybWFuY2UpIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIlJlcXVl
c3QgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOwotICAgICAgICAgICAgbV9yZXF1ZXN0aW5n
SGlnaFBlcmZvcm1hbmNlID0gdHJ1ZTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICBT
d2l0Y2hpbmdHUFVDbGllbnQ6OnNpbmdsZXRvbigpLnJlcXVlc3RIaWdoUGVyZm9ybWFuY2VHUFUo
KTsKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBEb24ndCBp
bW1lZGlhdGVseSB0dXJuIG9mZiB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIFRoZSB1c2VyIG1p
Z2h0IGJlCi0gICAgICAgIC8vIHN3YXBwaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGFicyBv
ciB3aW5kb3dzLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQotICAgICAgICAvLyBjaHVybiBp
ZiB3ZSBjYW4gYXZvaWQgaXQuCi0gICAgICAgIGlmICghbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNl
R1BVVGltZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgTE9HKFdlYkdMLCAiU2V0IGEgdGlt
ZXIgdG8gcmVsZWFzZSB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIik7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogRXhwb3NlIHRoaXMgdmFsdWUgYXMgYSBTZXR0aW5nLCB3aGljaCB3b3VsZCByZXF1
aXJlIHRoaXMgY2xhc3MKLSAgICAgICAgICAgIC8vIHRvIHJlZmVyZW5jZSBhIGZyYW1lLCBwYWdl
IG9yIGRvY3VtZW50LgotICAgICAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGltZVRvS2Vl
cEhpZ2hQZXJmb3JtYW5jZUdQVUFsaXZlIHsgMTBfcyB9OwotICAgICAgICAgICAgbV9kaXNhYmxl
SGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuc3RhcnRPbmVTaG90KHRpbWVUb0tlZXBIaWdoUGVyZm9y
bWFuY2VHUFVBbGl2ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRE1hbmFnZXI6OmRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVk
KCkKLXsKLSAgICBpZiAobV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmVxdWVzdGluZ0hpZ2hQZXJmb3JtYW5jZSA9IGZh
bHNlOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCi0g
ICAgU3dpdGNoaW5nR1BVQ2xpZW50OjpzaW5nbGV0b24oKS5yZWxlYXNlSGlnaFBlcmZvcm1hbmNl
R1BVKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnJlY3lj
bGVDb250ZXh0SWZOZWNlc3NhcnkoKQotewotICAgIGlmIChoYXNUb29NYW55Q29udGV4dHMoKSkg
ewotICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIgcmVjeWNsZWQg
Y29udGV4dCAoJXApLiIsIG1fY29udGV4dHNbMF0pOwotICAgICAgICBtX2NvbnRleHRzWzBdLT5y
ZWN5Y2xlQ29udGV4dCgpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTZmYTgyNTNmY2YzYzM3ZDNhZTEzZWE3
NWJkNTU3NDRlODFmM2UxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
TWFuYWdlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxheUNvbmZpZ3VyYXRpb24uaD4KLSNpbmNsdWRlIDxPcGVu
R0wvQ0dMVHlwZXMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IHVu
c2lnbmVkIE1heENvbnRleHRzID0gMTY7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xh
c3MgSG9zdFdpbmRvdzsKLQotdXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKLQot
I2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFz
TG93QW5kSGlnaFBvd2VyR1BVcygpOwotI2VuZGlmCi0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
TWFuYWdlciB7Ci0gICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPEdyYXBoaWNzQ29udGV4dDNETWFu
YWdlcj47Ci1wdWJsaWM6Ci0gICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlciYgc2hh
cmVkTWFuYWdlcigpOwotICAgIAotICAgIHZvaWQgYWRkQ29udGV4dChHcmFwaGljc0NvbnRleHQz
RCosIEhvc3RXaW5kb3cqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0
M0QqKTsKLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3dGb3JDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dDNEKikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBhZGRDb250ZXh0UmVxdWlyaW5nSGlnaFBl
cmZvcm1hbmNlKEdyYXBoaWNzQ29udGV4dDNEKik7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0UmVx
dWlyaW5nSGlnaFBlcmZvcm1hbmNlKEdyYXBoaWNzQ29udGV4dDNEKik7Ci0gICAgCi0gICAgdm9p
ZCByZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7Ci0gICAgYm9vbCBoYXNUb29NYW55Q29udGV4
dHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRzLnNpemUoKSA+PSBNYXhDb250ZXh0czsgfQot
ICAgIAotICAgIHZvaWQgdXBkYXRlQWxsQ29udGV4dHMoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICB2b2lkIHNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCwgY29uc3QgSG9zdFdp
bmRvdyopOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncywgdm9p
ZCopOwotI2VuZGlmCi0gICAgCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdl
cigpCi0gICAgICAgIDogbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIoKnRoaXMsICZH
cmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZp
cmVkKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZUhpZ2hQZXJmb3JtYW5jZVN0YXRl
KCk7Ci0gICAgdm9pZCBkaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXJGaXJlZCgpOwotCi0g
ICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4gbV9jb250ZXh0czsKLSAgICBIYXNoTWFwPEdy
YXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRvdyo+IG1fY29udGV4dFdpbmRvd01hcDsKLSAgICBI
YXNoU2V0PEdyYXBoaWNzQ29udGV4dDNEKj4gbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3Jt
YW5jZTsKLSAgICAKLSAgICBUaW1lciBtX2Rpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lcjsK
LSAgICBib29sIG1fcmVxdWVzdGluZ0hpZ2hQZXJmb3JtYW5jZSB7IGZhbHNlIH07Ci19OwotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTNlNmQyNTgyMTQ1ZGU4YzE2MDkwYmQwZWM4YzBmZTM0MGY0MmVkYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiAgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmgiCi0KLSNpbmNsdWRlICJIb3N0V2luZG93LmgiCi0jaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgotCi0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkv
Z2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5j
bHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0j
ZW5kaWYKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQotewotICAgIHN3aXRjaCAoZGVzdGlu
YXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbjo6T2Zmc2Ny
ZWVuOgotICAgICAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29u
dGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uOjpE
aXJlY3RseVRvSG9zdFdpbmRvdzoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKCkgPSBkZWZhdWx0OwotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICByZXR1cm4gbV9nbENvbnRleHQg
PyBtX2dsQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkgOiBmYWxzZTsKLX0KLQotUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBsYXRmb3JtQ29u
dGV4dCgpCi17Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8gbV9nbENvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpIDogR0xDb250ZXh0OjpjdXJyZW50KCktPnBsYXRmb3JtQ29udGV4dCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09O
VEVYVF8zRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGYzMjU0YTgwNTliNTYyYTE1NmE3YzU2YjZhMTg2ODdjZTM0N2U3MmIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAqICBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZV9oCi0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9oCi0KLSNpbmNsdWRl
ICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmVHTDsKLQotY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBHcmFwaGlj
c0NvbnRleHQzRDo6RGVzdGluYXRpb24pOwotICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUo
KTsKLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEdMQ29udGV4dD4gbV9nbENvbnRleHQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyY2JlZDA2ODE2MWNk
MWZhYTUyMzAxYjJhYWFmMzRmYmE5MGYwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5jcHAKQEAgLTAsMCArMSwx
ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TC5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0w6OkdyYXBoaWNzQ29udGV4
dEdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRycywgRGVzdGluYXRpb24gZGVzdGlu
YXRpb24sIEdyYXBoaWNzQ29udGV4dEdMKikKKyAgICA6IG1fYXR0cnMoYXR0cnMpCisgICAgLCBt
X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQoreworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRl
eHRHTDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQzNEZW51bSBhdHRhY2htZW50KQor
eworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkNPTE9SX0FUVEFDSE1FTlQwOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hN
RU5UMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQyX0VYVDoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDNfRVhUOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UNF9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTE9SX0FUVEFDSE1FTlQ1X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1Jf
QVRUQUNITUVOVDZfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5U
N19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQ4X0VYVDoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDlfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UMTBfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT0xPUl9BVFRBQ0hNRU5UMTFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9B
VFRBQ0hNRU5UMTJfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5U
MTNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UMTRfRVhUOgor
ICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UMTVfRVhUOgorICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgR3JhcGhp
Y3NDb250ZXh0R0w6OmdldENsZWFyQml0c0J5Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAg
ICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFO
Q0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhfU05PUk06Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Ukc4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZGOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
OFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4X1NOT1JNOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxMUZfRzExRl9CMTBGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjlfRTU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0I4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOEk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJVSToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQTE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMlVJOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpTUkdCX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQ6
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfQ09NUE9ORU5UOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0JVRkZFUl9CSVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9JTkRFWDg6
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJ
VDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3VpbnQ4X3Qg
R3JhcGhpY3NDb250ZXh0R0w6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0gZm9ybWF0
KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
QUxQSEE6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6
QWxwaGEpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpSR0IpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpSR0JBKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KENoYW5uZWxCaXRzOjpSR0IpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9F
WFQ6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdC
QSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OkRlcHRoKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX0lOREVYODoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpTdGVuY2lsKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4o
Q2hhbm5lbEJpdHM6OkRlcHRoU3RlbmNpbCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzkzNDg1NDY5OTMxOTM3ZWVlMjRhZGY4ZDcx
ODgwYWMxMWI3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaApAQCAtMCwwICsxLDEwOTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworI2lmIE9TKFdJTkRPV1MpCisvLyBEZWZpbmVkIGluIHdpbmVycm9y
LmgKKyNpZmRlZiBOT19FUlJPUgorI3VuZGVmIE5PX0VSUk9SCisjZW5kaWYKKyNlbmRpZgorCit0
eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0w7Cit0eXBlZGVmIHZvaWQqIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5OwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMU3VyZmFjZTsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTENvbmZpZzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRXh0ZW5zaW9uc0dM
OworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRh
OworCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYXBoaWNz
Q29udGV4dEdMPiB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIC8vIFdlYkdMIDEgY29u
c3RhbnRzLgorICAgICAgICBERVBUSF9CVUZGRVJfQklUID0gMHgwMDAwMDEwMCwKKyAgICAgICAg
U1RFTkNJTF9CVUZGRVJfQklUID0gMHgwMDAwMDQwMCwKKyAgICAgICAgQ09MT1JfQlVGRkVSX0JJ
VCA9IDB4MDAwMDQwMDAsCisgICAgICAgIFBPSU5UUyA9IDB4MDAwMCwKKyAgICAgICAgTElORVMg
PSAweDAwMDEsCisgICAgICAgIExJTkVfTE9PUCA9IDB4MDAwMiwKKyAgICAgICAgTElORV9TVFJJ
UCA9IDB4MDAwMywKKyAgICAgICAgVFJJQU5HTEVTID0gMHgwMDA0LAorICAgICAgICBUUklBTkdM
RV9TVFJJUCA9IDB4MDAwNSwKKyAgICAgICAgVFJJQU5HTEVfRkFOID0gMHgwMDA2LAorICAgICAg
ICBaRVJPID0gMCwKKyAgICAgICAgT05FID0gMSwKKyAgICAgICAgU1JDX0NPTE9SID0gMHgwMzAw
LAorICAgICAgICBPTkVfTUlOVVNfU1JDX0NPTE9SID0gMHgwMzAxLAorICAgICAgICBTUkNfQUxQ
SEEgPSAweDAzMDIsCisgICAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgPSAweDAzMDMsCisgICAg
ICAgIERTVF9BTFBIQSA9IDB4MDMwNCwKKyAgICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSA9IDB4
MDMwNSwKKyAgICAgICAgRFNUX0NPTE9SID0gMHgwMzA2LAorICAgICAgICBPTkVfTUlOVVNfRFNU
X0NPTE9SID0gMHgwMzA3LAorICAgICAgICBTUkNfQUxQSEFfU0FUVVJBVEUgPSAweDAzMDgsCisg
ICAgICAgIEZVTkNfQUREID0gMHg4MDA2LAorICAgICAgICBCTEVORF9FUVVBVElPTiA9IDB4ODAw
OSwKKyAgICAgICAgQkxFTkRfRVFVQVRJT05fUkdCID0gMHg4MDA5LAorICAgICAgICBCTEVORF9F
UVVBVElPTl9BTFBIQSA9IDB4ODgzRCwKKyAgICAgICAgRlVOQ19TVUJUUkFDVCA9IDB4ODAwQSwK
KyAgICAgICAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUID0gMHg4MDBCLAorICAgICAgICBCTEVORF9E
U1RfUkdCID0gMHg4MEM4LAorICAgICAgICBCTEVORF9TUkNfUkdCID0gMHg4MEM5LAorICAgICAg
ICBCTEVORF9EU1RfQUxQSEEgPSAweDgwQ0EsCisgICAgICAgIEJMRU5EX1NSQ19BTFBIQSA9IDB4
ODBDQiwKKyAgICAgICAgQ09OU1RBTlRfQ09MT1IgPSAweDgwMDEsCisgICAgICAgIE9ORV9NSU5V
U19DT05TVEFOVF9DT0xPUiA9IDB4ODAwMiwKKyAgICAgICAgQ09OU1RBTlRfQUxQSEEgPSAweDgw
MDMsCisgICAgICAgIE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSA9IDB4ODAwNCwKKyAgICAgICAg
QkxFTkRfQ09MT1IgPSAweDgwMDUsCisgICAgICAgIEFSUkFZX0JVRkZFUiA9IDB4ODg5MiwKKyAg
ICAgICAgRUxFTUVOVF9BUlJBWV9CVUZGRVIgPSAweDg4OTMsCisgICAgICAgIEFSUkFZX0JVRkZF
Ul9CSU5ESU5HID0gMHg4ODk0LAorICAgICAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
ID0gMHg4ODk1LAorICAgICAgICBTVFJFQU1fRFJBVyA9IDB4ODhFMCwKKyAgICAgICAgU1RBVElD
X0RSQVcgPSAweDg4RTQsCisgICAgICAgIERZTkFNSUNfRFJBVyA9IDB4ODhFOCwKKyAgICAgICAg
QlVGRkVSX1NJWkUgPSAweDg3NjQsCisgICAgICAgIEJVRkZFUl9VU0FHRSA9IDB4ODc2NSwKKyAg
ICAgICAgQ1VSUkVOVF9WRVJURVhfQVRUUklCID0gMHg4NjI2LAorICAgICAgICBGUk9OVCA9IDB4
MDQwNCwKKyAgICAgICAgQkFDSyA9IDB4MDQwNSwKKyAgICAgICAgRlJPTlRfQU5EX0JBQ0sgPSAw
eDA0MDgsCisgICAgICAgIFRFWFRVUkVfMkQgPSAweDBERTEsCisgICAgICAgIENVTExfRkFDRSA9
IDB4MEI0NCwKKyAgICAgICAgQkxFTkQgPSAweDBCRTIsCisgICAgICAgIERJVEhFUiA9IDB4MEJE
MCwKKyAgICAgICAgU1RFTkNJTF9URVNUID0gMHgwQjkwLAorICAgICAgICBERVBUSF9URVNUID0g
MHgwQjcxLAorICAgICAgICBTQ0lTU09SX1RFU1QgPSAweDBDMTEsCisgICAgICAgIFBPTFlHT05f
T0ZGU0VUX0ZJTEwgPSAweDgwMzcsCisgICAgICAgIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSA9
IDB4ODA5RSwKKyAgICAgICAgU0FNUExFX0NPVkVSQUdFID0gMHg4MEEwLAorICAgICAgICBOT19F
UlJPUiA9IDAsCisgICAgICAgIElOVkFMSURfRU5VTSA9IDB4MDUwMCwKKyAgICAgICAgSU5WQUxJ
RF9WQUxVRSA9IDB4MDUwMSwKKyAgICAgICAgSU5WQUxJRF9PUEVSQVRJT04gPSAweDA1MDIsCisg
ICAgICAgIE9VVF9PRl9NRU1PUlkgPSAweDA1MDUsCisgICAgICAgIENXID0gMHgwOTAwLAorICAg
ICAgICBDQ1cgPSAweDA5MDEsCisgICAgICAgIExJTkVfV0lEVEggPSAweDBCMjEsCisgICAgICAg
IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSA9IDB4ODQ2RCwKKyAgICAgICAgQUxJQVNFRF9MSU5F
X1dJRFRIX1JBTkdFID0gMHg4NDZFLAorICAgICAgICBDVUxMX0ZBQ0VfTU9ERSA9IDB4MEI0NSwK
KyAgICAgICAgRlJPTlRfRkFDRSA9IDB4MEI0NiwKKyAgICAgICAgREVQVEhfUkFOR0UgPSAweDBC
NzAsCisgICAgICAgIERFUFRIX1dSSVRFTUFTSyA9IDB4MEI3MiwKKyAgICAgICAgREVQVEhfQ0xF
QVJfVkFMVUUgPSAweDBCNzMsCisgICAgICAgIERFUFRIX0ZVTkMgPSAweDBCNzQsCisgICAgICAg
IFNURU5DSUxfQ0xFQVJfVkFMVUUgPSAweDBCOTEsCisgICAgICAgIFNURU5DSUxfRlVOQyA9IDB4
MEI5MiwKKyAgICAgICAgU1RFTkNJTF9GQUlMID0gMHgwQjk0LAorICAgICAgICBTVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTCA9IDB4MEI5NSwKKyAgICAgICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1Mg
PSAweDBCOTYsCisgICAgICAgIFNURU5DSUxfUkVGID0gMHgwQjk3LAorICAgICAgICBTVEVOQ0lM
X1ZBTFVFX01BU0sgPSAweDBCOTMsCisgICAgICAgIFNURU5DSUxfV1JJVEVNQVNLID0gMHgwQjk4
LAorICAgICAgICBTVEVOQ0lMX0JBQ0tfRlVOQyA9IDB4ODgwMCwKKyAgICAgICAgU1RFTkNJTF9C
QUNLX0ZBSUwgPSAweDg4MDEsCisgICAgICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwg
PSAweDg4MDIsCisgICAgICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgPSAweDg4MDMs
CisgICAgICAgIFNURU5DSUxfQkFDS19SRUYgPSAweDhDQTMsCisgICAgICAgIFNURU5DSUxfQkFD
S19WQUxVRV9NQVNLID0gMHg4Q0E0LAorICAgICAgICBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLID0g
MHg4Q0E1LAorICAgICAgICBWSUVXUE9SVCA9IDB4MEJBMiwKKyAgICAgICAgU0NJU1NPUl9CT1gg
PSAweDBDMTAsCisgICAgICAgIENPTE9SX0NMRUFSX1ZBTFVFID0gMHgwQzIyLAorICAgICAgICBD
T0xPUl9XUklURU1BU0sgPSAweDBDMjMsCisgICAgICAgIFVOUEFDS19BTElHTk1FTlQgPSAweDBD
RjUsCisgICAgICAgIFBBQ0tfQUxJR05NRU5UID0gMHgwRDA1LAorICAgICAgICBNQVhfVEVYVFVS
RV9TSVpFID0gMHgwRDMzLAorICAgICAgICBNQVhfVklFV1BPUlRfRElNUyA9IDB4MEQzQSwKKyAg
ICAgICAgU1VCUElYRUxfQklUUyA9IDB4MEQ1MCwKKyAgICAgICAgUkVEX0JJVFMgPSAweDBENTIs
CisgICAgICAgIEdSRUVOX0JJVFMgPSAweDBENTMsCisgICAgICAgIEJMVUVfQklUUyA9IDB4MEQ1
NCwKKyAgICAgICAgQUxQSEFfQklUUyA9IDB4MEQ1NSwKKyAgICAgICAgREVQVEhfQklUUyA9IDB4
MEQ1NiwKKyAgICAgICAgU1RFTkNJTF9CSVRTID0gMHgwRDU3LAorICAgICAgICBQT0xZR09OX09G
RlNFVF9VTklUUyA9IDB4MkEwMCwKKyAgICAgICAgUE9MWUdPTl9PRkZTRVRfRkFDVE9SID0gMHg4
MDM4LAorICAgICAgICBURVhUVVJFX0JJTkRJTkdfMkQgPSAweDgwNjksCisgICAgICAgIFNBTVBM
RV9CVUZGRVJTID0gMHg4MEE4LAorICAgICAgICBTQU1QTEVTID0gMHg4MEE5LAorICAgICAgICBT
QU1QTEVfQ09WRVJBR0VfVkFMVUUgPSAweDgwQUEsCisgICAgICAgIFNBTVBMRV9DT1ZFUkFHRV9J
TlZFUlQgPSAweDgwQUIsCisgICAgICAgIE5VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyA9
IDB4ODZBMiwKKyAgICAgICAgQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTMsCisg
ICAgICAgIERPTlRfQ0FSRSA9IDB4MTEwMCwKKyAgICAgICAgRkFTVEVTVCA9IDB4MTEwMSwKKyAg
ICAgICAgTklDRVNUID0gMHgxMTAyLAorICAgICAgICBHRU5FUkFURV9NSVBNQVBfSElOVCA9IDB4
ODE5MiwKKyAgICAgICAgQllURSA9IDB4MTQwMCwKKyAgICAgICAgVU5TSUdORURfQllURSA9IDB4
MTQwMSwKKyAgICAgICAgU0hPUlQgPSAweDE0MDIsCisgICAgICAgIFVOU0lHTkVEX1NIT1JUID0g
MHgxNDAzLAorICAgICAgICBJTlQgPSAweDE0MDQsCisgICAgICAgIFVOU0lHTkVEX0lOVCA9IDB4
MTQwNSwKKyAgICAgICAgRkxPQVQgPSAweDE0MDYsCisgICAgICAgIEhBTEZfRkxPQVRfT0VTID0g
MHg4RDYxLAorICAgICAgICBGSVhFRCA9IDB4MTQwQywKKyAgICAgICAgREVQVEhfQ09NUE9ORU5U
ID0gMHgxOTAyLAorICAgICAgICBBTFBIQSA9IDB4MTkwNiwKKyAgICAgICAgUkdCID0gMHgxOTA3
LAorICAgICAgICBSR0JBID0gMHgxOTA4LAorICAgICAgICBCR1JBID0gMHg4MEUxLAorICAgICAg
ICBMVU1JTkFOQ0UgPSAweDE5MDksCisgICAgICAgIExVTUlOQU5DRV9BTFBIQSA9IDB4MTkwQSwK
KyAgICAgICAgVU5TSUdORURfU0hPUlRfNF80XzRfNCA9IDB4ODAzMywKKyAgICAgICAgVU5TSUdO
RURfU0hPUlRfNV81XzVfMSA9IDB4ODAzNCwKKyAgICAgICAgVU5TSUdORURfU0hPUlRfNV82XzUg
PSAweDgzNjMsCisgICAgICAgIEZSQUdNRU5UX1NIQURFUiA9IDB4OEIzMCwKKyAgICAgICAgVkVS
VEVYX1NIQURFUiA9IDB4OEIzMSwKKyAgICAgICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMHg4ODY5
LAorICAgICAgICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGQiwKKyAgICAgICAg
TUFYX1ZBUllJTkdfVkVDVE9SUyA9IDB4OERGQywKKyAgICAgICAgTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMgPSAweDhCNEQsCisgICAgICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUyA9IDB4OEI0QywKKyAgICAgICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDg4
NzIsCisgICAgICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkQsCisgICAg
ICAgIFNIQURFUl9UWVBFID0gMHg4QjRGLAorICAgICAgICBERUxFVEVfU1RBVFVTID0gMHg4Qjgw
LAorICAgICAgICBMSU5LX1NUQVRVUyA9IDB4OEI4MiwKKyAgICAgICAgVkFMSURBVEVfU1RBVFVT
ID0gMHg4QjgzLAorICAgICAgICBBVFRBQ0hFRF9TSEFERVJTID0gMHg4Qjg1LAorICAgICAgICBB
Q1RJVkVfVU5JRk9STVMgPSAweDhCODYsCisgICAgICAgIEFDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggPSAweDhCODcsCisgICAgICAgIEFDVElWRV9BVFRSSUJVVEVTID0gMHg4Qjg5LAorICAgICAg
ICBBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggPSAweDhCOEEsCisgICAgICAgIFNIQURJTkdf
TEFOR1VBR0VfVkVSU0lPTiA9IDB4OEI4QywKKyAgICAgICAgQ1VSUkVOVF9QUk9HUkFNID0gMHg4
QjhELAorICAgICAgICBORVZFUiA9IDB4MDIwMCwKKyAgICAgICAgTEVTUyA9IDB4MDIwMSwKKyAg
ICAgICAgRVFVQUwgPSAweDAyMDIsCisgICAgICAgIExFUVVBTCA9IDB4MDIwMywKKyAgICAgICAg
R1JFQVRFUiA9IDB4MDIwNCwKKyAgICAgICAgTk9URVFVQUwgPSAweDAyMDUsCisgICAgICAgIEdF
UVVBTCA9IDB4MDIwNiwKKyAgICAgICAgQUxXQVlTID0gMHgwMjA3LAorICAgICAgICBLRUVQID0g
MHgxRTAwLAorICAgICAgICBSRVBMQUNFID0gMHgxRTAxLAorICAgICAgICBJTkNSID0gMHgxRTAy
LAorICAgICAgICBERUNSID0gMHgxRTAzLAorICAgICAgICBJTlZFUlQgPSAweDE1MEEsCisgICAg
ICAgIElOQ1JfV1JBUCA9IDB4ODUwNywKKyAgICAgICAgREVDUl9XUkFQID0gMHg4NTA4LAorICAg
ICAgICBWRU5ET1IgPSAweDFGMDAsCisgICAgICAgIFJFTkRFUkVSID0gMHgxRjAxLAorICAgICAg
ICBWRVJTSU9OID0gMHgxRjAyLAorICAgICAgICBFWFRFTlNJT05TID0gMHgxRjAzLAorICAgICAg
ICBORUFSRVNUID0gMHgyNjAwLAorICAgICAgICBMSU5FQVIgPSAweDI2MDEsCisgICAgICAgIE5F
QVJFU1RfTUlQTUFQX05FQVJFU1QgPSAweDI3MDAsCisgICAgICAgIExJTkVBUl9NSVBNQVBfTkVB
UkVTVCA9IDB4MjcwMSwKKyAgICAgICAgTkVBUkVTVF9NSVBNQVBfTElORUFSID0gMHgyNzAyLAor
ICAgICAgICBMSU5FQVJfTUlQTUFQX0xJTkVBUiA9IDB4MjcwMywKKyAgICAgICAgVEVYVFVSRV9N
QUdfRklMVEVSID0gMHgyODAwLAorICAgICAgICBURVhUVVJFX01JTl9GSUxURVIgPSAweDI4MDEs
CisgICAgICAgIFRFWFRVUkVfV1JBUF9TID0gMHgyODAyLAorICAgICAgICBURVhUVVJFX1dSQVBf
VCA9IDB4MjgwMywKKyAgICAgICAgVEVYVFVSRSA9IDB4MTcwMiwKKyAgICAgICAgVEVYVFVSRV9D
VUJFX01BUCA9IDB4ODUxMywKKyAgICAgICAgVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQID0gMHg4
NTE0LAorICAgICAgICBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPSAweDg1MTUsCisgICAg
ICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCA9IDB4ODUxNiwKKyAgICAgICAgVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9ZID0gMHg4NTE3LAorICAgICAgICBURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1kgPSAweDg1MTgsCisgICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WiA9IDB4ODUxOSwKKyAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aID0gMHg4NTFB
LAorICAgICAgICBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID0gMHg4NTFDLAorICAgICAgICBU
RVhUVVJFMCA9IDB4ODRDMCwKKyAgICAgICAgVEVYVFVSRTEgPSAweDg0QzEsCisgICAgICAgIFRF
WFRVUkUyID0gMHg4NEMyLAorICAgICAgICBURVhUVVJFMyA9IDB4ODRDMywKKyAgICAgICAgVEVY
VFVSRTQgPSAweDg0QzQsCisgICAgICAgIFRFWFRVUkU1ID0gMHg4NEM1LAorICAgICAgICBURVhU
VVJFNiA9IDB4ODRDNiwKKyAgICAgICAgVEVYVFVSRTcgPSAweDg0QzcsCisgICAgICAgIFRFWFRV
UkU4ID0gMHg4NEM4LAorICAgICAgICBURVhUVVJFOSA9IDB4ODRDOSwKKyAgICAgICAgVEVYVFVS
RTEwID0gMHg4NENBLAorICAgICAgICBURVhUVVJFMTEgPSAweDg0Q0IsCisgICAgICAgIFRFWFRV
UkUxMiA9IDB4ODRDQywKKyAgICAgICAgVEVYVFVSRTEzID0gMHg4NENELAorICAgICAgICBURVhU
VVJFMTQgPSAweDg0Q0UsCisgICAgICAgIFRFWFRVUkUxNSA9IDB4ODRDRiwKKyAgICAgICAgVEVY
VFVSRTE2ID0gMHg4NEQwLAorICAgICAgICBURVhUVVJFMTcgPSAweDg0RDEsCisgICAgICAgIFRF
WFRVUkUxOCA9IDB4ODREMiwKKyAgICAgICAgVEVYVFVSRTE5ID0gMHg4NEQzLAorICAgICAgICBU
RVhUVVJFMjAgPSAweDg0RDQsCisgICAgICAgIFRFWFRVUkUyMSA9IDB4ODRENSwKKyAgICAgICAg
VEVYVFVSRTIyID0gMHg4NEQ2LAorICAgICAgICBURVhUVVJFMjMgPSAweDg0RDcsCisgICAgICAg
IFRFWFRVUkUyNCA9IDB4ODREOCwKKyAgICAgICAgVEVYVFVSRTI1ID0gMHg4NEQ5LAorICAgICAg
ICBURVhUVVJFMjYgPSAweDg0REEsCisgICAgICAgIFRFWFRVUkUyNyA9IDB4ODREQiwKKyAgICAg
ICAgVEVYVFVSRTI4ID0gMHg4NERDLAorICAgICAgICBURVhUVVJFMjkgPSAweDg0REQsCisgICAg
ICAgIFRFWFRVUkUzMCA9IDB4ODRERSwKKyAgICAgICAgVEVYVFVSRTMxID0gMHg4NERGLAorICAg
ICAgICBBQ1RJVkVfVEVYVFVSRSA9IDB4ODRFMCwKKyAgICAgICAgUkVQRUFUID0gMHgyOTAxLAor
ICAgICAgICBDTEFNUF9UT19FREdFID0gMHg4MTJGLAorICAgICAgICBNSVJST1JFRF9SRVBFQVQg
PSAweDgzNzAsCisgICAgICAgIEZMT0FUX1ZFQzIgPSAweDhCNTAsCisgICAgICAgIEZMT0FUX1ZF
QzMgPSAweDhCNTEsCisgICAgICAgIEZMT0FUX1ZFQzQgPSAweDhCNTIsCisgICAgICAgIElOVF9W
RUMyID0gMHg4QjUzLAorICAgICAgICBJTlRfVkVDMyA9IDB4OEI1NCwKKyAgICAgICAgSU5UX1ZF
QzQgPSAweDhCNTUsCisgICAgICAgIEJPT0wgPSAweDhCNTYsCisgICAgICAgIEJPT0xfVkVDMiA9
IDB4OEI1NywKKyAgICAgICAgQk9PTF9WRUMzID0gMHg4QjU4LAorICAgICAgICBCT09MX1ZFQzQg
PSAweDhCNTksCisgICAgICAgIEZMT0FUX01BVDIgPSAweDhCNUEsCisgICAgICAgIEZMT0FUX01B
VDMgPSAweDhCNUIsCisgICAgICAgIEZMT0FUX01BVDQgPSAweDhCNUMsCisgICAgICAgIFNBTVBM
RVJfMkQgPSAweDhCNUUsCisgICAgICAgIFNBTVBMRVJfQ1VCRSA9IDB4OEI2MCwKKyAgICAgICAg
VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEID0gMHg4NjIyLAorICAgICAgICBWRVJURVhfQVRU
UklCX0FSUkFZX1NJWkUgPSAweDg2MjMsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RS
SURFID0gMHg4NjI0LAorICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgPSAweDg2MjUs
CisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCA9IDB4ODg2QSwKKyAgICAg
ICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSID0gMHg4NjQ1LAorICAgICAgICBWRVJURVhf
QVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGLAorICAgICAgICBJTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX1RZUEUgPSAweDhCOUEsCisgICAgICAgIElNUExFTUVOVEFUSU9OX0NP
TE9SX1JFQURfRk9STUFUID0gMHg4QjlCLAorICAgICAgICBDT01QSUxFX1NUQVRVUyA9IDB4OEI4
MSwKKyAgICAgICAgSU5GT19MT0dfTEVOR1RIID0gMHg4Qjg0LAorICAgICAgICBTSEFERVJfU09V
UkNFX0xFTkdUSCA9IDB4OEI4OCwKKyAgICAgICAgU0hBREVSX0NPTVBJTEVSID0gMHg4REZBLAor
ICAgICAgICBTSEFERVJfQklOQVJZX0ZPUk1BVFMgPSAweDhERjgsCisgICAgICAgIE5VTV9TSEFE
RVJfQklOQVJZX0ZPUk1BVFMgPSAweDhERjksCisgICAgICAgIExPV19GTE9BVCA9IDB4OERGMCwK
KyAgICAgICAgTUVESVVNX0ZMT0FUID0gMHg4REYxLAorICAgICAgICBISUdIX0ZMT0FUID0gMHg4
REYyLAorICAgICAgICBMT1dfSU5UID0gMHg4REYzLAorICAgICAgICBNRURJVU1fSU5UID0gMHg4
REY0LAorICAgICAgICBISUdIX0lOVCA9IDB4OERGNSwKKyAgICAgICAgRlJBTUVCVUZGRVIgPSAw
eDhENDAsCisgICAgICAgIFJFTkRFUkJVRkZFUiA9IDB4OEQ0MSwKKyAgICAgICAgUkdCQTQgPSAw
eDgwNTYsCisgICAgICAgIFJHQjVfQTEgPSAweDgwNTcsCisgICAgICAgIFJHQjU2NSA9IDB4OEQ2
MiwKKyAgICAgICAgREVQVEhfQ09NUE9ORU5UMTYgPSAweDgxQTUsCisgICAgICAgIFNURU5DSUxf
SU5ERVggPSAweDE5MDEsCisgICAgICAgIFNURU5DSUxfSU5ERVg4ID0gMHg4RDQ4LAorICAgICAg
ICBSRU5ERVJCVUZGRVJfV0lEVEggPSAweDhENDIsCisgICAgICAgIFJFTkRFUkJVRkZFUl9IRUlH
SFQgPSAweDhENDMsCisgICAgICAgIFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgPSAweDhE
NDQsCisgICAgICAgIFJFTkRFUkJVRkZFUl9SRURfU0laRSA9IDB4OEQ1MCwKKyAgICAgICAgUkVO
REVSQlVGRkVSX0dSRUVOX1NJWkUgPSAweDhENTEsCisgICAgICAgIFJFTkRFUkJVRkZFUl9CTFVF
X1NJWkUgPSAweDhENTIsCisgICAgICAgIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFID0gMHg4RDUz
LAorICAgICAgICBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSA9IDB4OEQ1NCwKKyAgICAgICAgUkVO
REVSQlVGRkVSX1NURU5DSUxfU0laRSA9IDB4OEQ1NSwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRSA9IDB4OENEMCwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRSA9IDB4OENEMSwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9URVhUVVJFX0xFVkVMID0gMHg4Q0QyLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSA9IDB4OENEMywKKyAgICAgICAgQ09MT1JfQVRUQUNITUVO
VDAgPSAweDhDRTAsCisgICAgICAgIERFUFRIX0FUVEFDSE1FTlQgPSAweDhEMDAsCisgICAgICAg
IFNURU5DSUxfQVRUQUNITUVOVCA9IDB4OEQyMCwKKyAgICAgICAgTk9ORSA9IDAsCisgICAgICAg
IEZSQU1FQlVGRkVSX0NPTVBMRVRFID0gMHg4Q0Q1LAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQgPSAweDhDRDYsCisgICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTUlTU0lOR19BVFRBQ0hNRU5UID0gMHg4Q0Q3LAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0RJTUVOU0lPTlMgPSAweDhDRDksCisgICAgICAgIEZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEID0gMHg4Q0RELAorICAgICAgICBGUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0E2LAorICAg
ICAgICBSRU5ERVJCVUZGRVJfQklORElORyA9IDB4OENBNywKKyAgICAgICAgTUFYX1JFTkRFUkJV
RkZFUl9TSVpFID0gMHg4NEU4LAorICAgICAgICBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElP
TiA9IDB4MDUwNiwKKworICAgICAgICAvLyBXZWJHTC1zcGVjaWZpYyBlbnVtcworICAgICAgICBV
TlBBQ0tfRkxJUF9ZX1dFQkdMID0gMHg5MjQwLAorICAgICAgICBVTlBBQ0tfUFJFTVVMVElQTFlf
QUxQSEFfV0VCR0wgPSAweDkyNDEsCisgICAgICAgIENPTlRFWFRfTE9TVF9XRUJHTCA9IDB4OTI0
MiwKKyAgICAgICAgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA9IDB4OTI0MywK
KyAgICAgICAgQlJPV1NFUl9ERUZBVUxUX1dFQkdMID0gMHg5MjQ0LAorICAgICAgICBWRVJURVhf
QVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEUgPSAweDg4RkUsCisgICAgICAgIAorICAgICAgICAv
LyBXZWJHTDIgY29uc3RhbnRzCisgICAgICAgIFJFQURfQlVGRkVSID0gMHgwQzAyLAorICAgICAg
ICBVTlBBQ0tfUk9XX0xFTkdUSCA9IDB4MENGMiwKKyAgICAgICAgVU5QQUNLX1NLSVBfUk9XUyA9
IDB4MENGMywKKyAgICAgICAgVU5QQUNLX1NLSVBfUElYRUxTID0gMHgwQ0Y0LAorICAgICAgICBQ
QUNLX1JPV19MRU5HVEggPSAweDBEMDIsCisgICAgICAgIFBBQ0tfU0tJUF9ST1dTID0gMHgwRDAz
LAorICAgICAgICBQQUNLX1NLSVBfUElYRUxTID0gMHgwRDA0LAorICAgICAgICBDT0xPUiA9IDB4
MTgwMCwKKyAgICAgICAgREVQVEggPSAweDE4MDEsCisgICAgICAgIFNURU5DSUwgPSAweDE4MDIs
CisgICAgICAgIFJFRCA9IDB4MTkwMywKKyAgICAgICAgUkdCOCA9IDB4ODA1MSwKKyAgICAgICAg
UkdCQTggPSAweDgwNTgsCisgICAgICAgIFJHQjEwX0EyID0gMHg4MDU5LAorICAgICAgICBURVhU
VVJFX0JJTkRJTkdfM0QgPSAweDgwNkEsCisgICAgICAgIFVOUEFDS19TS0lQX0lNQUdFUyA9IDB4
ODA2RCwKKyAgICAgICAgVU5QQUNLX0lNQUdFX0hFSUdIVCA9IDB4ODA2RSwKKyAgICAgICAgVEVY
VFVSRV8zRCA9IDB4ODA2RiwKKyAgICAgICAgVEVYVFVSRV9XUkFQX1IgPSAweDgwNzIsCisgICAg
ICAgIE1BWF8zRF9URVhUVVJFX1NJWkUgPSAweDgwNzMsCisgICAgICAgIFVOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFViA9IDB4ODM2OCwKKyAgICAgICAgTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTID0g
MHg4MEU4LAorICAgICAgICBNQVhfRUxFTUVOVFNfSU5ESUNFUyA9IDB4ODBFOSwKKyAgICAgICAg
VEVYVFVSRV9NSU5fTE9EID0gMHg4MTNBLAorICAgICAgICBURVhUVVJFX01BWF9MT0QgPSAweDgx
M0IsCisgICAgICAgIFRFWFRVUkVfQkFTRV9MRVZFTCA9IDB4ODEzQywKKyAgICAgICAgVEVYVFVS
RV9NQVhfTEVWRUwgPSAweDgxM0QsCisgICAgICAgIE1JTiA9IDB4ODAwNywKKyAgICAgICAgTUFY
ID0gMHg4MDA4LAorICAgICAgICBERVBUSF9DT01QT05FTlQyNCA9IDB4ODFBNiwKKyAgICAgICAg
TUFYX1RFWFRVUkVfTE9EX0JJQVMgPSAweDg0RkQsCisgICAgICAgIFRFWFRVUkVfQ09NUEFSRV9N
T0RFID0gMHg4ODRDLAorICAgICAgICBURVhUVVJFX0NPTVBBUkVfRlVOQyA9IDB4ODg0RCwKKyAg
ICAgICAgQ1VSUkVOVF9RVUVSWSA9IDB4ODg2NSwKKyAgICAgICAgUVVFUllfUkVTVUxUID0gMHg4
ODY2LAorICAgICAgICBRVUVSWV9SRVNVTFRfQVZBSUxBQkxFID0gMHg4ODY3LAorICAgICAgICBT
VFJFQU1fUkVBRCA9IDB4ODhFMSwKKyAgICAgICAgU1RSRUFNX0NPUFkgPSAweDg4RTIsCisgICAg
ICAgIFNUQVRJQ19SRUFEID0gMHg4OEU1LAorICAgICAgICBTVEFUSUNfQ09QWSA9IDB4ODhFNiwK
KyAgICAgICAgRFlOQU1JQ19SRUFEID0gMHg4OEU5LAorICAgICAgICBEWU5BTUlDX0NPUFkgPSAw
eDg4RUEsCisgICAgICAgIE1BWF9EUkFXX0JVRkZFUlMgPSAweDg4MjQsCisgICAgICAgIERSQVdf
QlVGRkVSMCA9IDB4ODgyNSwKKyAgICAgICAgRFJBV19CVUZGRVIxID0gMHg4ODI2LAorICAgICAg
ICBEUkFXX0JVRkZFUjIgPSAweDg4MjcsCisgICAgICAgIERSQVdfQlVGRkVSMyA9IDB4ODgyOCwK
KyAgICAgICAgRFJBV19CVUZGRVI0ID0gMHg4ODI5LAorICAgICAgICBEUkFXX0JVRkZFUjUgPSAw
eDg4MkEsCisgICAgICAgIERSQVdfQlVGRkVSNiA9IDB4ODgyQiwKKyAgICAgICAgRFJBV19CVUZG
RVI3ID0gMHg4ODJDLAorICAgICAgICBEUkFXX0JVRkZFUjggPSAweDg4MkQsCisgICAgICAgIERS
QVdfQlVGRkVSOSA9IDB4ODgyRSwKKyAgICAgICAgRFJBV19CVUZGRVIxMCA9IDB4ODgyRiwKKyAg
ICAgICAgRFJBV19CVUZGRVIxMSA9IDB4ODgzMCwKKyAgICAgICAgRFJBV19CVUZGRVIxMiA9IDB4
ODgzMSwKKyAgICAgICAgRFJBV19CVUZGRVIxMyA9IDB4ODgzMiwKKyAgICAgICAgRFJBV19CVUZG
RVIxNCA9IDB4ODgzMywKKyAgICAgICAgRFJBV19CVUZGRVIxNSA9IDB4ODgzNCwKKyAgICAgICAg
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4OEI0OSwKKyAgICAgICAgTUFYX1ZF
UlRFWF9VTklGT1JNX0NPTVBPTkVOVFMgPSAweDhCNEEsCisgICAgICAgIFNBTVBMRVJfM0QgPSAw
eDhCNUYsCisgICAgICAgIFNBTVBMRVJfMkRfU0hBRE9XID0gMHg4QjYyLAorICAgICAgICBGUkFH
TUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UID0gMHg4QjhCLAorICAgICAgICBQSVhFTF9QQUNL
X0JVRkZFUiA9IDB4ODhFQiwKKyAgICAgICAgUElYRUxfVU5QQUNLX0JVRkZFUiA9IDB4ODhFQywK
KyAgICAgICAgUElYRUxfUEFDS19CVUZGRVJfQklORElORyA9IDB4ODhFRCwKKyAgICAgICAgUElY
RUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HID0gMHg4OEVGLAorICAgICAgICBGTE9BVF9NQVQyeDMg
PSAweDhCNjUsCisgICAgICAgIEZMT0FUX01BVDJ4NCA9IDB4OEI2NiwKKyAgICAgICAgRkxPQVRf
TUFUM3gyID0gMHg4QjY3LAorICAgICAgICBGTE9BVF9NQVQzeDQgPSAweDhCNjgsCisgICAgICAg
IEZMT0FUX01BVDR4MiA9IDB4OEI2OSwKKyAgICAgICAgRkxPQVRfTUFUNHgzID0gMHg4QjZBLAor
ICAgICAgICBTUkdCID0gMHg4QzQwLAorICAgICAgICBTUkdCOCA9IDB4OEM0MSwKKyAgICAgICAg
U1JHQl9BTFBIQSA9IDB4OEM0MiwKKyAgICAgICAgU1JHQjhfQUxQSEE4ID0gMHg4QzQzLAorICAg
ICAgICBDT01QQVJFX1JFRl9UT19URVhUVVJFID0gMHg4ODRFLAorICAgICAgICBSR0JBMzJGID0g
MHg4ODE0LAorICAgICAgICBSR0IzMkYgPSAweDg4MTUsCisgICAgICAgIFJHQkExNkYgPSAweDg4
MUEsCisgICAgICAgIFJHQjE2RiA9IDB4ODgxQiwKKyAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJB
WV9JTlRFR0VSID0gMHg4OEZELAorICAgICAgICBNQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAw
eDg4RkYsCisgICAgICAgIE1JTl9QUk9HUkFNX1RFWEVMX09GRlNFVCA9IDB4ODkwNCwKKyAgICAg
ICAgTUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUID0gMHg4OTA1LAorICAgICAgICBNQVhfVkFSWUlO
R19DT01QT05FTlRTID0gMHg4QjRCLAorICAgICAgICBURVhUVVJFXzJEX0FSUkFZID0gMHg4QzFB
LAorICAgICAgICBURVhUVVJFX0JJTkRJTkdfMkRfQVJSQVkgPSAweDhDMUQsCisgICAgICAgIFIx
MUZfRzExRl9CMTBGID0gMHg4QzNBLAorICAgICAgICBVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZf
UkVWID0gMHg4QzNCLAorICAgICAgICBSR0I5X0U1ID0gMHg4QzNELAorICAgICAgICBVTlNJR05F
RF9JTlRfNV85XzlfOV9SRVYgPSAweDhDM0UsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfTU9ERSA9IDB4OEM3RiwKKyAgICAgICAgTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBB
UkFURV9DT01QT05FTlRTID0gMHg4QzgwLAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfVkFS
WUlOR1MgPSAweDhDODMsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQg
PSAweDhDODQsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRSA9IDB4OEM4
NSwKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTiA9IDB4OEM4
OCwKKyAgICAgICAgUkFTVEVSSVpFUl9ESVNDQVJEID0gMHg4Qzg5LAorICAgICAgICBNQVhfVFJB
TlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFMgPSAweDhDOEEsCisgICAgICAg
IE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCUyA9IDB4OEM4QiwKKyAgICAg
ICAgSU5URVJMRUFWRURfQVRUUklCUyA9IDB4OEM4QywKKyAgICAgICAgU0VQQVJBVEVfQVRUUklC
UyA9IDB4OEM4RCwKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUiA9IDB4OEM4RSwK
KyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HID0gMHg4QzhGLAorICAg
ICAgICBSR0JBMzJVSSA9IDB4OEQ3MCwKKyAgICAgICAgUkdCMzJVSSA9IDB4OEQ3MSwKKyAgICAg
ICAgUkdCQTE2VUkgPSAweDhENzYsCisgICAgICAgIFJHQjE2VUkgPSAweDhENzcsCisgICAgICAg
IFJHQkE4VUkgPSAweDhEN0MsCisgICAgICAgIFJHQjhVSSA9IDB4OEQ3RCwKKyAgICAgICAgUkdC
QTMySSA9IDB4OEQ4MiwKKyAgICAgICAgUkdCMzJJID0gMHg4RDgzLAorICAgICAgICBSR0JBMTZJ
ID0gMHg4RDg4LAorICAgICAgICBSR0IxNkkgPSAweDhEODksCisgICAgICAgIFJHQkE4SSA9IDB4
OEQ4RSwKKyAgICAgICAgUkdCOEkgPSAweDhEOEYsCisgICAgICAgIFJFRF9JTlRFR0VSID0gMHg4
RDk0LAorICAgICAgICBSR0JfSU5URUdFUiA9IDB4OEQ5OCwKKyAgICAgICAgUkdCQV9JTlRFR0VS
ID0gMHg4RDk5LAorICAgICAgICBTQU1QTEVSXzJEX0FSUkFZID0gMHg4REMxLAorICAgICAgICBT
QU1QTEVSXzJEX0FSUkFZX1NIQURPVyA9IDB4OERDNCwKKyAgICAgICAgU0FNUExFUl9DVUJFX1NI
QURPVyA9IDB4OERDNSwKKyAgICAgICAgVU5TSUdORURfSU5UX1ZFQzIgPSAweDhEQzYsCisgICAg
ICAgIFVOU0lHTkVEX0lOVF9WRUMzID0gMHg4REM3LAorICAgICAgICBVTlNJR05FRF9JTlRfVkVD
NCA9IDB4OERDOCwKKyAgICAgICAgSU5UX1NBTVBMRVJfMkQgPSAweDhEQ0EsCisgICAgICAgIElO
VF9TQU1QTEVSXzNEID0gMHg4RENCLAorICAgICAgICBJTlRfU0FNUExFUl9DVUJFID0gMHg4REND
LAorICAgICAgICBJTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwKKyAgICAgICAgVU5TSUdO
RURfSU5UX1NBTVBMRVJfMkQgPSAweDhERDIsCisgICAgICAgIFVOU0lHTkVEX0lOVF9TQU1QTEVS
XzNEID0gMHg4REQzLAorICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFID0gMHg4REQ0
LAorICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERENywKKyAgICAg
ICAgREVQVEhfQ09NUE9ORU5UMzJGID0gMHg4Q0FDLAorICAgICAgICBERVBUSDMyRl9TVEVOQ0lM
OCA9IDB4OENBRCwKKyAgICAgICAgRkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWID0gMHg4
REFELAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HID0gMHg4
MjEwLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFID0gMHg4
MjExLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFID0gMHg4MjEyLAor
ICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0dSRUVOX1NJWkUgPSAweDgyMTMsCisgICAg
ICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFID0gMHg4MjE0LAorICAgICAgICBG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkUgPSAweDgyMTUsCisgICAgICAgIEZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRSA9IDB4ODIxNiwKKyAgICAgICAgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9TVEVOQ0lMX1NJWkUgPSAweDgyMTcsCisgICAgICAgIEZSQU1FQlVGRkVS
X0RFRkFVTFQgPSAweDgyMTgsCisgICAgICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA9IDB4
ODIxQSwKKyAgICAgICAgREVQVEhfU1RFTkNJTCA9IDB4ODRGOSwKKyAgICAgICAgVU5TSUdORURf
SU5UXzI0XzggPSAweDg0RkEsCisgICAgICAgIERFUFRIMjRfU1RFTkNJTDggPSAweDg4RjAsCisg
ICAgICAgIFVOU0lHTkVEX05PUk1BTElaRUQgPSAweDhDMTcsCisgICAgICAgIERSQVdfRlJBTUVC
VUZGRVJfQklORElORyA9IDB4OENBNiwgLyogU2FtZSBhcyBGUkFNRUJVRkZFUl9CSU5ESU5HICov
CisgICAgICAgIFJFQURfRlJBTUVCVUZGRVIgPSAweDhDQTgsCisgICAgICAgIERSQVdfRlJBTUVC
VUZGRVIgPSAweDhDQTksCisgICAgICAgIFJFQURfRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENB
QSwKKyAgICAgICAgUkVOREVSQlVGRkVSX1NBTVBMRVMgPSAweDhDQUIsCisgICAgICAgIEZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MQVlFUiA9IDB4OENENCwKKyAgICAgICAgTUFYX0NP
TE9SX0FUVEFDSE1FTlRTID0gMHg4Q0RGLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMSA9IDB4
OENFMSwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDIgPSAweDhDRTIsCisgICAgICAgIENPTE9S
X0FUVEFDSE1FTlQzID0gMHg4Q0UzLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNCA9IDB4OENF
NCwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDUgPSAweDhDRTUsCisgICAgICAgIENPTE9SX0FU
VEFDSE1FTlQ2ID0gMHg4Q0U2LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNyA9IDB4OENFNywK
KyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDggPSAweDhDRTgsCisgICAgICAgIENPTE9SX0FUVEFD
SE1FTlQ5ID0gMHg4Q0U5LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTAgPSAweDhDRUEsCisg
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMSA9IDB4OENFQiwKKyAgICAgICAgQ09MT1JfQVRUQUNI
TUVOVDEyID0gMHg4Q0VDLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTMgPSAweDhDRUQsCisg
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQxNCA9IDB4OENFRSwKKyAgICAgICAgQ09MT1JfQVRUQUNI
TUVOVDE1ID0gMHg4Q0VGLAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FN
UExFID0gMHg4RDU2LAorICAgICAgICBNQVhfU0FNUExFUyA9IDB4OEQ1NywKKyAgICAgICAgSEFM
Rl9GTE9BVCA9IDB4MTQwQiwKKyAgICAgICAgUkcgPSAweDgyMjcsCisgICAgICAgIFJHX0lOVEVH
RVIgPSAweDgyMjgsCisgICAgICAgIFI4ID0gMHg4MjI5LAorICAgICAgICBSRzggPSAweDgyMkIs
CisgICAgICAgIFIxNkYgPSAweDgyMkQsCisgICAgICAgIFIzMkYgPSAweDgyMkUsCisgICAgICAg
IFJHMTZGID0gMHg4MjJGLAorICAgICAgICBSRzMyRiA9IDB4ODIzMCwKKyAgICAgICAgUjhJID0g
MHg4MjMxLAorICAgICAgICBSOFVJID0gMHg4MjMyLAorICAgICAgICBSMTZJID0gMHg4MjMzLAor
ICAgICAgICBSMTZVSSA9IDB4ODIzNCwKKyAgICAgICAgUjMySSA9IDB4ODIzNSwKKyAgICAgICAg
UjMyVUkgPSAweDgyMzYsCisgICAgICAgIFJHOEkgPSAweDgyMzcsCisgICAgICAgIFJHOFVJID0g
MHg4MjM4LAorICAgICAgICBSRzE2SSA9IDB4ODIzOSwKKyAgICAgICAgUkcxNlVJID0gMHg4MjNB
LAorICAgICAgICBSRzMySSA9IDB4ODIzQiwKKyAgICAgICAgUkczMlVJID0gMHg4MjNDLAorICAg
ICAgICBWRVJURVhfQVJSQVlfQklORElORyA9IDB4ODVCNSwKKyAgICAgICAgUjhfU05PUk0gPSAw
eDhGOTQsCisgICAgICAgIFJHOF9TTk9STSA9IDB4OEY5NSwKKyAgICAgICAgUkdCOF9TTk9STSA9
IDB4OEY5NiwKKyAgICAgICAgUkdCQThfU05PUk0gPSAweDhGOTcsCisgICAgICAgIFNJR05FRF9O
T1JNQUxJWkVEID0gMHg4RjlDLAorICAgICAgICBDT1BZX1JFQURfQlVGRkVSID0gMHg4RjM2LAor
ICAgICAgICBDT1BZX1dSSVRFX0JVRkZFUiA9IDB4OEYzNywKKyAgICAgICAgQ09QWV9SRUFEX0JV
RkZFUl9CSU5ESU5HID0gMHg4RjM2LCAvKiBTYW1lIGFzIENPUFlfUkVBRF9CVUZGRVIgKi8KKyAg
ICAgICAgQ09QWV9XUklURV9CVUZGRVJfQklORElORyA9IDB4OEYzNywgLyogU2FtZSBhcyBDT1BZ
X1dSSVRFX0JVRkZFUiAqLworICAgICAgICBVTklGT1JNX0JVRkZFUiA9IDB4OEExMSwKKyAgICAg
ICAgVU5JRk9STV9CVUZGRVJfQklORElORyA9IDB4OEEyOCwKKyAgICAgICAgVU5JRk9STV9CVUZG
RVJfU1RBUlQgPSAweDhBMjksCisgICAgICAgIFVOSUZPUk1fQlVGRkVSX1NJWkUgPSAweDhBMkEs
CisgICAgICAgIE1BWF9WRVJURVhfVU5JRk9STV9CTE9DS1MgPSAweDhBMkIsCisgICAgICAgIE1B
WF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUyA9IDB4OEEyRCwKKyAgICAgICAgTUFYX0NPTUJJTkVE
X1VOSUZPUk1fQkxPQ0tTID0gMHg4QTJFLAorICAgICAgICBNQVhfVU5JRk9STV9CVUZGRVJfQklO
RElOR1MgPSAweDhBMkYsCisgICAgICAgIE1BWF9VTklGT1JNX0JMT0NLX1NJWkUgPSAweDhBMzAs
CisgICAgICAgIE1BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTID0gMHg4QTMx
LAorICAgICAgICBNQVhfQ09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTID0gMHg4
QTMzLAorICAgICAgICBVTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UID0gMHg4QTM0LAor
ICAgICAgICBBQ1RJVkVfVU5JRk9STV9CTE9DS1MgPSAweDhBMzYsCisgICAgICAgIFVOSUZPUk1f
VFlQRSA9IDB4OEEzNywKKyAgICAgICAgVU5JRk9STV9TSVpFID0gMHg4QTM4LAorICAgICAgICBV
TklGT1JNX0JMT0NLX0lOREVYID0gMHg4QTNBLAorICAgICAgICBVTklGT1JNX09GRlNFVCA9IDB4
OEEzQiwKKyAgICAgICAgVU5JRk9STV9BUlJBWV9TVFJJREUgPSAweDhBM0MsCisgICAgICAgIFVO
SUZPUk1fTUFUUklYX1NUUklERSA9IDB4OEEzRCwKKyAgICAgICAgVU5JRk9STV9JU19ST1dfTUFK
T1IgPSAweDhBM0UsCisgICAgICAgIFVOSUZPUk1fQkxPQ0tfQklORElORyA9IDB4OEEzRiwKKyAg
ICAgICAgVU5JRk9STV9CTE9DS19EQVRBX1NJWkUgPSAweDhBNDAsCisgICAgICAgIFVOSUZPUk1f
QkxPQ0tfQUNUSVZFX1VOSUZPUk1TID0gMHg4QTQyLAorICAgICAgICBVTklGT1JNX0JMT0NLX0FD
VElWRV9VTklGT1JNX0lORElDRVMgPSAweDhBNDMsCisgICAgICAgIFVOSUZPUk1fQkxPQ0tfUkVG
RVJFTkNFRF9CWV9WRVJURVhfU0hBREVSID0gMHg4QTQ0LAorICAgICAgICBVTklGT1JNX0JMT0NL
X1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSID0gMHg4QTQ2LAorICAgICAgICBJTlZBTElE
X0lOREVYID0gMHhGRkZGRkZGRiwKKyAgICAgICAgTUFYX1ZFUlRFWF9PVVRQVVRfQ09NUE9ORU5U
UyA9IDB4OTEyMiwKKyAgICAgICAgTUFYX0ZSQUdNRU5UX0lOUFVUX0NPTVBPTkVOVFMgPSAweDkx
MjUsCisgICAgICAgIE1BWF9TRVJWRVJfV0FJVF9USU1FT1VUID0gMHg5MTExLAorICAgICAgICBP
QkpFQ1RfVFlQRSA9IDB4OTExMiwKKyAgICAgICAgU1lOQ19DT05ESVRJT04gPSAweDkxMTMsCisg
ICAgICAgIFNZTkNfU1RBVFVTID0gMHg5MTE0LAorICAgICAgICBTWU5DX0ZMQUdTID0gMHg5MTE1
LAorICAgICAgICBTWU5DX0ZFTkNFID0gMHg5MTE2LAorICAgICAgICBTWU5DX0dQVV9DT01NQU5E
U19DT01QTEVURSA9IDB4OTExNywKKyAgICAgICAgVU5TSUdOQUxFRCA9IDB4OTExOCwKKyAgICAg
ICAgU0lHTkFMRUQgPSAweDkxMTksCisgICAgICAgIEFMUkVBRFlfU0lHTkFMRUQgPSAweDkxMUEs
CisgICAgICAgIFRJTUVPVVRfRVhQSVJFRCA9IDB4OTExQiwKKyAgICAgICAgQ09ORElUSU9OX1NB
VElTRklFRCA9IDB4OTExQywKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIFdBSVRfRkFJTEVE
X1dJTiA9IDB4OTExRCwKKyNlbHNlCisgICAgICAgIFdBSVRfRkFJTEVEID0gMHg5MTFELAorI2Vu
ZGlmCisgICAgICAgIFNZTkNfRkxVU0hfQ09NTUFORFNfQklUID0gMHgwMDAwMDAwMSwKKyAgICAg
ICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SID0gMHg4OEZFLAorICAgICAgICBBTllfU0FN
UExFU19QQVNTRUQgPSAweDhDMkYsCisgICAgICAgIEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJW
QVRJVkUgPSAweDhENkEsCisgICAgICAgIFNBTVBMRVJfQklORElORyA9IDB4ODkxOSwKKyAgICAg
ICAgUkdCMTBfQTJVSSA9IDB4OTA2RiwKKyAgICAgICAgVEVYVFVSRV9TV0laWkxFX1IgPSAweDhF
NDIsCisgICAgICAgIFRFWFRVUkVfU1dJWlpMRV9HID0gMHg4RTQzLAorICAgICAgICBURVhUVVJF
X1NXSVpaTEVfQiA9IDB4OEU0NCwKKyAgICAgICAgVEVYVFVSRV9TV0laWkxFX0EgPSAweDhFNDUs
CisgICAgICAgIEdSRUVOID0gMHgxOTA0LAorICAgICAgICBCTFVFID0gMHgxOTA1LAorICAgICAg
ICBJTlRfMl8xMF8xMF8xMF9SRVYgPSAweDhEOUYsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFD
SyA9IDB4OEUyMiwKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRCA9IDB4OEUyMywK
KyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0FDVElWRSA9IDB4OEUyNCwKKyAgICAgICAgVFJB
TlNGT1JNX0ZFRURCQUNLX0JJTkRJTkcgPSAweDhFMjUsCisgICAgICAgIENPTVBSRVNTRURfUjEx
X0VBQyA9IDB4OTI3MCwKKyAgICAgICAgQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQyA9IDB4OTI3
MSwKKyAgICAgICAgQ09NUFJFU1NFRF9SRzExX0VBQyA9IDB4OTI3MiwKKyAgICAgICAgQ09NUFJF
U1NFRF9TSUdORURfUkcxMV9FQUMgPSAweDkyNzMsCisgICAgICAgIENPTVBSRVNTRURfUkdCOF9F
VEMyID0gMHg5Mjc0LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0VUQzIgPSAweDkyNzUsCisg
ICAgICAgIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgPSAweDkyNzYs
CisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5
Mjc3LAorICAgICAgICBDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDID0gMHg5Mjc4LAorICAgICAg
ICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyA9IDB4OTI3OSwKKyAgICAgICAgVEVY
VFVSRV9JTU1VVEFCTEVfRk9STUFUID0gMHg5MTJGLAorICAgICAgICBNQVhfRUxFTUVOVF9JTkRF
WCA9IDB4OEQ2QiwKKyAgICAgICAgTlVNX1NBTVBMRV9DT1VOVFMgPSAweDkzODAsCisgICAgICAg
IFRFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUyA9IDB4ODJERiwKKyAgICAgICAgUFJJTUlUSVZFX1JF
U1RBUlRfRklYRURfSU5ERVggPSAweDhENjksCisgICAgICAgIFBSSU1JVElWRV9SRVNUQVJUID0g
MHg4RjlELAorCisgICAgICAgIC8vIE9wZW5HTCBFUyAzIGNvbnN0YW50cy4KKyAgICAgICAgTUFQ
X1JFQURfQklUID0gMHgwMDAxLAorCisgICAgICAgIC8vIE5lY2Vzc2FyeSBkZXNrdG9wIE9wZW5H
TCBjb25zdGFudHMuCisgICAgICAgIFRFWFRVUkVfUkVDVEFOR0xFX0FSQiA9IDB4ODRGNQorICAg
IH07CisKKyAgICBlbnVtIGNsYXNzIERhdGFGb3JtYXQgOiB1aW50OF90IHsKKyAgICAgICAgUkdC
QTggPSAwLAorICAgICAgICBSR0JBMTZMaXR0bGUsCisgICAgICAgIFJHQkExNkJpZywKKyAgICAg
ICAgUkdCQTE2RiwKKyAgICAgICAgUkdCQTMyRiwKKyAgICAgICAgUkdCOCwKKyAgICAgICAgUkdC
MTZMaXR0bGUsCisgICAgICAgIFJHQjE2QmlnLAorICAgICAgICBSR0IxNkYsCisgICAgICAgIFJH
QjMyRiwKKyAgICAgICAgQkdSOCwKKyAgICAgICAgQkdSQTgsCisgICAgICAgIEJHUkExNkxpdHRs
ZSwKKyAgICAgICAgQkdSQTE2QmlnLAorICAgICAgICBBUkdCOCwKKyAgICAgICAgQVJHQjE2TGl0
dGxlLAorICAgICAgICBBUkdCMTZCaWcsCisgICAgICAgIEFCR1I4LAorICAgICAgICBSR0JBNTU1
MSwKKyAgICAgICAgUkdCQTQ0NDQsCisgICAgICAgIFJHQjU2NSwKKyAgICAgICAgUjgsCisgICAg
ICAgIFIxNkxpdHRsZSwKKyAgICAgICAgUjE2QmlnLAorICAgICAgICBSMTZGLAorICAgICAgICBS
MzJGLAorICAgICAgICBSQTgsCisgICAgICAgIFJBMTZMaXR0bGUsCisgICAgICAgIFJBMTZCaWcs
CisgICAgICAgIFJBMTZGLAorICAgICAgICBSQTMyRiwKKyAgICAgICAgQVI4LAorICAgICAgICBB
UjE2TGl0dGxlLAorICAgICAgICBBUjE2QmlnLAorICAgICAgICBBOCwKKyAgICAgICAgQTE2TGl0
dGxlLAorICAgICAgICBBMTZCaWcsCisgICAgICAgIEExNkYsCisgICAgICAgIEEzMkYsCisgICAg
ICAgIE51bUZvcm1hdHMKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBEZXN0aW5hdGlvbiA6IHVp
bnQ4X3QgeworICAgICAgICBPZmZzY3JlZW4sCisgICAgICAgIERpcmVjdGx5VG9Ib3N0V2luZG93
LAorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIENoYW5uZWxCaXRzIDogdWludDhfdCB7CisgICAg
ICAgIFJlZCA9IDEsCisgICAgICAgIEdyZWVuID0gMiwKKyAgICAgICAgQmx1ZSA9IDQsCisgICAg
ICAgIEFscGhhID0gOCwKKyAgICAgICAgRGVwdGggPSAxNiwKKyAgICAgICAgU3RlbmNpbCA9IDMy
LAorICAgICAgICBSR0IgPSBSZWQgfCBHcmVlbiB8IEJsdWUsCisgICAgICAgIFJHQkEgPSBSR0Ig
fCBBbHBoYSwKKyAgICAgICAgRGVwdGhTdGVuY2lsID0gRGVwdGggfCBTdGVuY2lsLAorICAgIH07
CisKKyAgICAvLyBQb3NzaWJsZSBhbHBoYSBvcGVyYXRpb25zIHRoYXQgbWF5IG5lZWQgdG8gb2Nj
dXIgZHVyaW5nCisgICAgLy8gcGl4ZWwgcGFja2luZy4gRklYTUU6IGtBbHBoYURvVW5tdWx0aXBs
eSBpcyBsb3NzeSBhbmQgbXVzdAorICAgIC8vIGJlIHJlbW92ZWQuCisgICAgZW51bSBBbHBoYU9w
IDogdWludDhfdCB7CisgICAgICAgIERvTm90aGluZywKKyAgICAgICAgRG9QcmVtdWx0aXBseSwK
KyAgICAgICAgRG9Vbm11bHRpcGx5LAorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIERPTVNvdXJj
ZSA6IHVpbnQ4X3QgeworICAgICAgICBJbWFnZSwKKyAgICAgICAgQ2FudmFzLAorICAgICAgICBW
aWRlbywKKyAgICAgICAgTm9uZSwKKyAgICB9OworCisjaWYgVVNFKEFOR0xFKQorICAgIGVudW0g
eworICAgICAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHJlZGVmaW5lZCBoZXJlIGZyb20gQU5H
TEUncyBPcGVuR0wgRVMgaGVhZGVycyB0bworICAgICAgICAvLyBwcm92aWRlIGEgc2luZ2xlIHBs
YWNlIHdoZXJlIG11bHRpcGxlIHBvcnRpb25zIG9mIHBsYXRmb3JtIGNvZGUgY2FuCisgICAgICAg
IC8vIHJlZmVyZW5jZSB0aGVtLgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgSU9TdXJmYWNl
VGV4dHVyZVRhcmdldCA9IFRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgLy8gYWxzbyBHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BTkdMRQorICAgICAgICBFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0ID0gMHgz
NDVCLCAvLyBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUKKyNlbHNlCisgICAgICAgIElPU3Vy
ZmFjZVRleHR1cmVUYXJnZXQgPSBURVhUVVJFXzJELAorICAgICAgICBFR0xJT1N1cmZhY2VUZXh0
dXJlVGFyZ2V0ID0gMHgzMDVGLCAvLyBFR0xfVEVYVFVSRV8yRAorI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKKyAgICB9OworI2VuZGlmIC8vIFVTRShBTkdMRSkKKworICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAw
OworCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBoYXNBbHBoYShEYXRhRm9ybWF0IGZv
cm1hdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgRGF0
YUZvcm1hdDo6QTg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QTE2RjoKKyAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0OjpBMzJGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBODoKKyAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0OjpBUjg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkExNkY6
CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkEzMkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dDo6UkdCQTg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QkdSQTg6CisgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdDo6QVJHQjg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QUJHUjg6CisgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTE2RjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpS
R0JBMzJGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE0NDQ0OgorICAgICAgICBjYXNl
IERhdGFGb3JtYXQ6OlJHQkE1NTUxOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0NvbG9yKERhdGFGb3JtYXQgZm9ybWF0
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9y
bWF0OjpSR0JBODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBMTZGOgorICAgICAgICBj
YXNlIERhdGFGb3JtYXQ6OlJHQkEzMkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCODoK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0IxNkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dDo6UkdCMzJGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkJHUjg6CisgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdDo6QkdSQTg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QVJHQjg6CisgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdDo6QUJHUjg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdC
QTU1NTE6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTQ0NDQ6CisgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdDo6UkdCNTY1OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlI4OgorICAgICAg
ICBjYXNlIERhdGFGb3JtYXQ6OlIxNkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UjMyRjoK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6
UkExNkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkEzMkY6CisgICAgICAgIGNhc2UgRGF0
YUZvcm1hdDo6QVI4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBD
aGVjayBpZiB0aGUgZm9ybWF0IGlzIG9uZSBvZiB0aGUgZm9ybWF0cyBmcm9tIHRoZSBJbWFnZURh
dGEgb3IgRE9NIGVsZW1lbnRzLgorICAgIC8vIFRoZSBmb3JtYXRzIGZyb20gSW1hZ2VEYXRhIGlz
IGFsd2F5cyBSR0JBOC4KKyAgICAvLyBUaGUgZm9ybWF0cyBmcm9tIERPTSBlbGVtZW50cyB2YXJ5
IHdpdGggR3JhcGhpY3MgcG9ydHMuIEl0IGNhbiBvbmx5IGJlIFJHQkE4IG9yIEJHUkE4IGZvciBu
b24tQ0cgcG9ydCB3aGlsZSBhIGxpdHRsZSBtb3JlIGZvciBDRyBwb3J0LgorICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGJvb2wgc3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRh
KERhdGFGb3JtYXQgU3JjRm9ybWF0KQorICAgIHsKKyNpZiBVU0UoQ0cpCisjaWYgQ1BVKEJJR19F
TkRJQU4pCisgICAgcmV0dXJuIFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0JBOCB8fCBTcmNG
b3JtYXQgPT0gRGF0YUZvcm1hdDo6QVJHQjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJH
QjgKKyAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJBOCB8fCBTcmNGb3JtYXQg
PT0gRGF0YUZvcm1hdDo6QVI4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSOCB8fCBTcmNG
b3JtYXQgPT0gRGF0YUZvcm1hdDo6QTg7CisjZWxzZQorICAgIC8vIFRoYXQgTElUVExFX0VORElB
TiBjYXNlIGhhcyBtb3JlIHBvc3NpYmxlIGZvcm1hdHMgdGhhbiBCSUdfRU5ESUFOIGNhc2UgaXMg
YmVjYXVzZSBzb21lIGRlY29kZWQgaW1hZ2UgZGF0YSBpcyBhY3R1YWxseSBiaWcgZW5kaWFuCisg
ICAgLy8gZXZlbiBvbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZXMuCisgICAgcmV0dXJuIFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpCR1JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6
QUJHUjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkJHUjgKKyAgICAgICAgfHwgU3JjRm9y
bWF0ID09IERhdGFGb3JtYXQ6OlJHQkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBUkdC
OCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCOAorICAgICAgICB8fCBTcmNGb3JtYXQg
PT0gRGF0YUZvcm1hdDo6UjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkE4CisgICAgICAg
IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3Jt
YXQ6OkFSODsKKyNlbmRpZgorI2Vsc2UKKyAgICByZXR1cm4gU3JjRm9ybWF0ID09IERhdGFGb3Jt
YXQ6OkJHUkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0JBODsKKyNlbmRpZgorICAg
IH0KKworICAgIHN0cnVjdCBBY3RpdmVJbmZvIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAg
ICAgIEdDM0RlbnVtIHR5cGU7CisgICAgICAgIEdDM0RpbnQgc2l6ZTsKKyAgICB9OworCisgICAg
R3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBEZXN0aW5hdGlv
biA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNzQ29udGV4dEdMKiBzaGFyZWRDb250
ZXh0ID0gbnVsbHB0cik7CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0woKSA9IGRlZmF1
bHQ7CisKKyAgICAvLyA9PT09PT09PT09IFdlYkdMIDEgZW50cnkgcG9pbnRzLgorCisgICAgdmly
dHVhbCB2b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm0zRE9iamVjdCwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xh
bXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBt
b2RlQWxwaGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0
b3IsIEdDM0RlbnVtIGRmYWN0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhh
LCBHQzNEZW51bSBkc3RBbHBoYSkgPSAwOworCisgICAgdmlydHVhbCBHQzNEZW51bSBjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihHQzNEYml0ZmllbGQgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvbG9y
KEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0Rj
bGFtcGYgYWxwaGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEZXB0aChHQzNEY2xhbXBm
IGRlcHRoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50IHMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xl
YW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKKworICAgIHZpcnR1YWwg
UGxhdGZvcm0zRE9iamVjdCBjcmVhdGVCdWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9y
bTNET2JqZWN0IGNyZWF0ZUZyYW1lYnVmZmVyKCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm0z
RE9iamVjdCBjcmVhdGVQcm9ncmFtKCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVSZW5kZXJidWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZVNoYWRlcihHQzNEZW51bSkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVUZXh0dXJlKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGN1bGxGYWNlKEdDM0Rl
bnVtIG1vZGUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVCdWZmZXIoUGxhdGZvcm0z
RE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZv
cm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYg
ekZhcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVj
dCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEdDM0Rl
bnVtIGNhcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
R0MzRHVpbnQgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHQzNEZW51
bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBlbmFi
bGUoR0MzRGVudW0gY2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KEdDM0R1aW50IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwg
R0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNE
aW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2Rl
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0
KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNE
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKSA9IDA7CisKKyAgICB2aXJ0
dWFsIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKKwor
ICAgIC8vIGdldFBhcmFtZXRlcgorICAgIHZpcnR1YWwgU3RyaW5nIGdldFN0cmluZyhHQzNEZW51
bSBuYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwg
R0MzRGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VydihHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50
ZWdlcjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYo
R0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCBH
QzNEZW51bSBnZXRFcnJvcigpID0gMDsKKworICAgIC8vIGdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcgorICAgIHZpcnR1YWwgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSkgPSAwOworCisgICAgLy8gZ2V0UHJvZ3JhbVBhcmFtZXRlcgor
ICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKKworICAgIC8vIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcgorICAgIHZpcnR1YWwgdm9pZCBn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkgPSAwOworCisgICAgLy8gZ2V0U2hhZGVyUGFyYW1ldGVyCisgICAg
dmlydHVhbCB2b2lkIGdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0U2hhZGVySW5m
b0xvZyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBl
LCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKSA9IDA7CisKKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisgICAgLy8g
Z2V0VGV4UGFyYW1ldGVyCisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKKworICAgIC8vIGdldFVuaWZvcm0KKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlm
b3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCBHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlvbihQ
bGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKKworICAgIC8vIGdldFZl
cnRleEF0dHJpYgorICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkgPSAwOworCisgICAgdmlydHVhbCBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSA9IDA7Cisg
ICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Cisg
ICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKSA9IDA7CisgICAg
dmlydHVhbCBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
KyAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVj
dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxv
YXQgdW5pdHMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzYW1wbGVDb3ZlcmFnZShH
QzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6
cGFzcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCBwYXJhbSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgeCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNv
bnN0IEdDM0RpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0
KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50IHgsIEdDM0RpbnQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMml2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2Z2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRGludCB6KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaXYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQq
IHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2
YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQq
IHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9h
dCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2
KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50
IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0
cmliNGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0Rp
bnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVp
IHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2aWV3
cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQs
IEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZv
aWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlclN1
YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb21wcmVzc2Vk
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRy
YXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVp
IGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdF
bGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50
IGRpdmlzb3IpID0gMDsKKworICAgIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBjb250ZXh0
QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cnM7IH0KKyAgICB2b2lkIHNldENvbnRl
eHRBdHRyaWJ1dGVzKGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyYgYXR0cnMpIHsg
bV9hdHRycyA9IGF0dHJzOyB9CisKKyAgICAvLyBWZXJ0ZXhBcnJheU9qZWN0IGNhbGxzCisgICAg
dmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAg
dmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
KworI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCisgICAgdmlydHVhbCB2b2lkIHBy
aW1pdGl2ZVJlc3RhcnRJbmRleChHQzNEdWludCkgPSAwOworI2VuZGlmCisKKyAgICAvLyBTdXBw
b3J0IGZvciBleHRlbnNpb25zLiBSZXR1cm5zIGEgbm9uLW51bGwgb2JqZWN0LCB0aG91Z2ggbm90
CisgICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFpbnMgbWF5IG5lY2Vzc2FyaWx5IGJlIHN1cHBv
cnRlZCBvbiB0aGUKKyAgICAvLyBjdXJyZW50IGhhcmR3YXJlLiBNdXN0IGNhbGwgRXh0ZW5zaW9u
c0dMOjpzdXBwb3J0cygpIHRvCisgICAgLy8gZGV0ZXJtaW5lIHRoaXMuCisgICAgdmlydHVhbCBF
eHRlbnNpb25zR0wmIGdldEV4dGVuc2lvbnMoKSA9IDA7CisKKyAgICAvLyA9PT09PT09PT09IFdl
YkdMIDIgZW50cnkgcG9pbnRzLgorCisgICAgdmlydHVhbCB2b2lkKiBtYXBCdWZmZXJSYW5nZShH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBH
QzNEYml0ZmllbGQgYWNjZXNzKSA9IDA7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiB1bm1hcEJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weUJ1ZmZlclN1
YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpdGVUYXJnZXQsIEdDM0RpbnRw
dHIgcmVhZE9mZnNldCwgR0MzRGludHB0ciB3cml0ZU9mZnNldCwgR0MzRHNpemVpcHRyKSA9IDA7
CisKKyAgICAvLyBnZXRJbnRlcm5hbEZvcm1hdFBhcmFtZXRlcgorICAgIHZpcnR1YWwgdm9pZCBn
ZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCB0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IGdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9y
PEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGlu
dD4mIHBhcmFtcykgPSAwOworCisgICAgLy8gPT09PT09PT09PSBOb24tV2ViR0wgYmFzZWQgZW50
cnkgcG9pbnRzLgorCisgICAgc3RhdGljIHVuc2lnbmVkIGdldENsZWFyQml0c0J5QXR0YWNobWVu
dFR5cGUoR0MzRGVudW0pOworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDbGVhckJpdHNCeUZvcm1h
dChHQzNEZW51bSk7CisKKyAgICBzdGF0aWMgdWludDhfdCBnZXRDaGFubmVsQml0c0J5Rm9ybWF0
KEdDM0RlbnVtKTsKKworICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBtX2F0dHJzOworICAgIERlc3RpbmF0aW9uIG1fZGVzdGluYXRpb247Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lOTI1YTM1Y2VmM2M5MzQ4OGY4ODA0Y2UzN2IzZTM4MjljMzJkMzhjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgR3JhcGhpY3ND
b250ZXh0R0xQb3dlclByZWZlcmVuY2UgeworICAgIERlZmF1bHQsCisgICAgTG93UG93ZXIsCisg
ICAgSGlnaFBlcmZvcm1hbmNlCit9OworCitzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIHsKKyAgICAvLyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzCisgICAgYm9vbCBhbHBoYSB7IHRy
dWUgfTsKKyAgICBib29sIGRlcHRoIHsgdHJ1ZSB9OworICAgIGJvb2wgc3RlbmNpbCB7IGZhbHNl
IH07CisgICAgYm9vbCBhbnRpYWxpYXMgeyB0cnVlIH07CisgICAgYm9vbCBwcmVtdWx0aXBsaWVk
QWxwaGEgeyB0cnVlIH07CisgICAgYm9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgeyBmYWxzZSB9
OworICAgIGJvb2wgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCB7IGZhbHNlIH07CisgICAg
dXNpbmcgUG93ZXJQcmVmZXJlbmNlID0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U7
CisgICAgUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZSB7IFBvd2VyUHJlZmVyZW5jZTo6
RGVmYXVsdCB9OworCisgICAgLy8gQWRkaXRpb25hbCBhdHRyaWJ1dGVzLgorICAgIGJvb2wgc2hh
cmVSZXNvdXJjZXMgeyB0cnVlIH07CisgICAgYm9vbCBpc1dlYkdMMiB7IGZhbHNlIH07CisgICAg
Ym9vbCBub0V4dGVuc2lvbnMgeyBmYWxzZSB9OworICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW8g
eyAxIH07CisgICAgUG93ZXJQcmVmZXJlbmNlIGluaXRpYWxQb3dlclByZWZlcmVuY2UgeyBQb3dl
clByZWZlcmVuY2U6OkRlZmF1bHQgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCAwZThkYWYxZWE5NTU4OWM1MzQw
ZTAyNmU0NDY4NTVhNTExMmJjMDU2Li4xYTBmODE2ZmRhODAzMDI3OTZhYTNhM2U1OWI2ZGY5MTk5
NWQwM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1ib29sIEltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBHQzNEZW51bSwg
UGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpCitib29sIEltYWdlQnVmZmVy
Ojpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQzNEZW51
bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpCiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgKaW5kZXggMTE4ODBjYTE4NTY4MmUzNDBhMDU4NWRmMWUwMWU1MTU5OWQwMjE1NC4uNTMz
M2NmNGVjMjI4ZjlkYjM3M2YyNThlNmI5YzdiOWVlNGZjOGFjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC00Niw3ICs0Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDsKIGNsYXNzIEltYWdlOwogY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSW50UG9pbnQ7CkBA
IC0xMzQsNyArMTM0LDcgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVt
ZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBv
bmx5IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1h
dCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51
bSwgYm9vbCwgYm9vbCk7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJv
b2wsIGJvb2wpOwogCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBp
bmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9y
IGNsaXBwZXIuCiAgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHAKaW5kZXggNjM1NTc4MjRhZjM2YjM0MGZjMmEzYjlhMDljMDFhZTUxNWRjNWUxYy4uMGEz
NTNjYmMyMTk4YTdhZWNlMjllMjkzNDM3ZmQ3YWE2NDdmOWZhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAtOTU1LDcgKzk1NSw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXI6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCYgcCwgY29uc3QgRmxvYXRSZWN0CiAgICAgbV9wcml2YXRlLT5wYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChwLCByKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllcjo6Y29weVZpZGVvVGV4
dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBNZWRpYVBsYXllcjo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQogewogICAgIHJldHVybiBtX3By
aXZhdGUtPmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJl
LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBs
eUFscGhhLCBmbGlwWSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuaAppbmRleCAwYzdkZDliNjBlNmUwMGVjZTlhOTA1YjNkMDQ4MGUzMzYwNjhh
YmE5Li43NjFlNTFkZmU1Zjg3ZWJjMjg5MWIzMzQ5MTIxZjk3MjFiOTVjOTI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTYxLDcgKzYx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlcjsKIGNs
YXNzIENETUluc3RhbmNlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7Ci1jbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKIGNsYXNzIExlZ2Fj
eUNETVNlc3Npb25DbGllbnQ7CkBAIC00MjEsNyArNDIxLDcgQEAgcHVibGljOgogICAgIC8vIFRo
ZSBkZXN0aW5hdGlvbiB0ZXh0dXJlIG1heSBuZWVkIHRvIGJlIHJlc2l6ZWQgdG8gdG8gdGhlIGRp
bWVuc2lvbnMgb2YgdGhlIHNvdXJjZSB0ZXh0dXJlIG9yIHJlLWRlZmluZWQgdG8gdGhlIHJlcXVp
cmVkIGludGVybmFsRm9ybWF0LgogICAgIC8vIFRoZSBjdXJyZW50IHJlc3RyaWN0aW9ucyByZXF1
aXJlIHRoYXQgZm9ybWF0IHNob3VkIGJlIFJHQiBvciBSR0JBLCB0eXBlIHNob3VsZCBiZSBVTlNJ
R05FRF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUg
ZnV0dXJlLgogCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKKyAg
ICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOwogCiAgICAgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCmluZGV4
IDYyYzdkZDAyZmJmM2ZiMWZhYTgzNTMxZTI3MzBmZjFlNTMyNTI3YTMuLmIwMDNiMWMxYTdiMGQ2
ODgxODMzMzBhMWYwNTBkMzRiZjNiODZkNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC0xNTcsNyArMTU3LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJ
bkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjLCBjb25zdCBGbG9hdFJlY3QmIHIpIHsgcGFpbnQo
Yywgcik7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdDM0Rp
bnQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIGJvb2wsIGJvb2wpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBH
QzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBib29sLCBib29sKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50VGltZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVs
b2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcAppbmRleCBmNzk3NmU2MWRkODUyNDZkMmY0ZTI3
NjJjOGMxODdlMDk5ODA0ZGM1Li41MjgwYmVmMWU3MzEzZGY1ZjZkMjI0YjNkNmQ1ODE4NTFlYTc3
MmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xT
aGltcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hp
bXMuY3BwCkBAIC0xNyw3ICsxNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lm
IEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQorI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhU
X0dMKQogCiAjZGVmaW5lIERJU0FCTEVfU0hJTVMKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgpA
QCAtMjMwLDQgKzIzMCw0IEBAIGJvb2wgaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0Qp
CisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdM
RS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYTQwY2I5MDk5NjIxNzIyZDYy
MjczNWZiZmE4ZDQzNDBmNzhiM2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5z
aW9uczNEQU5HTEUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYg
VVNFKEFOR0xFKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzREFOR0xFLmgiCi0KLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNf
Ml8wX2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18zXzBfYXV0
b2dlbi5oPgotLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4
dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KLSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4
dAotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCi10eXBlZGVmIHZvaWQq
IEdMZWdsQ29udGV4dDsKLSNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0
b2dlbi5oPgotCi0vLyBOb3RlOiB0aGlzIGZpbGUgY2FuJ3QgYmUgY29tcGlsZWQgaW4gdGhlIHNh
bWUgdW5pZmllZCBzb3VyY2UgZmlsZQotLy8gYXMgb3RoZXJzIHdoaWNoIGluY2x1ZGUgdGhlIHN5
c3RlbSdzIE9wZW5HTCBoZWFkZXJzLgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUV4dGVuc2lv
bnMzREFOR0xFOjpFeHRlbnNpb25zM0RBTkdMRShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
Ym9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQotICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4
dGVuc2lvbnMoZmFsc2UpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1faXNOVklE
SUEoZmFsc2UpCi0gICAgLCBtX2lzQU1EKGZhbHNlKQotICAgICwgbV9pc0ludGVsKGZhbHNlKQot
ICAgICwgbV9pc0ltYWdpbmF0aW9uKGZhbHNlKQotICAgICwgbV9yZXF1aXJlc0J1aWx0SW5GdW5j
dGlvbkVtdWxhdGlvbihmYWxzZSkKLSAgICAsIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRl
eHR1cmVTaXplKGZhbHNlKQotICAgICwgbV91c2VJbmRleGVkR2V0U3RyaW5nKHVzZUluZGV4ZWRH
ZXRTdHJpbmcpCi17Ci0gICAgLy8gRklYTUU6IGlkZWFsbHksIHJlbW92ZSB0aGlzIGluaXRpYWxp
emF0aW9uIGFsdG9nZXRoZXIuIEFOR0xFCi0gICAgLy8gc3Vic3VtZXMgdGhlIHJlc3BvbnNpYmls
aXR5IGZvciBncmFwaGljcyBkcml2ZXIgd29ya2Fyb3VuZHMuCi0gICAgbV92ZW5kb3IgPSBTdHJp
bmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9WRU5ET1Ip
KSk7Ci0gICAgbV9yZW5kZXJlciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihnbDo6R2V0U3RyaW5nKEdMX1JFTkRFUkVSKSkpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gdmVu
ZG9yQ29tcG9uZW50cyA9IG1fdmVuZG9yLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3BsaXQo
JyAnKTsKLSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygibnZpZGlhIikpCi0gICAg
ICAgIG1faXNOVklESUEgPSB0cnVlOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5z
KCJhdGkiKSB8fCB2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJhbWQiKSkKLSAgICAgICAgbV9p
c0FNRCA9IHRydWU7Ci0gICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImludGVsIikp
Ci0gICAgICAgIG1faXNJbnRlbCA9IHRydWU7Ci0gICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29u
dGFpbnMoImltYWdpbmF0aW9uIikpCi0gICAgICAgIG1faXNJbWFnaW5hdGlvbiA9IHRydWU7Ci19
Ci0KLUV4dGVuc2lvbnMzREFOR0xFOjp+RXh0ZW5zaW9uczNEQU5HTEUoKSA9IGRlZmF1bHQ7Ci0K
LWJvb2wgRXh0ZW5zaW9uczNEQU5HTEU6OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKQotICAgICAgICBpbml0
aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOwotCi0gICAgcmV0dXJuIHN1cHBvcnRzRXh0ZW5z
aW9uKG5hbWUpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjplbnN1cmVFbmFibGVkKGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYg
bm90IGVuYWJsZWQgYWxyZWFkeSkuCi0gICAgaWYgKG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmNv
bnRhaW5zKG5hbWUpICYmICFtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGdsOjpSZXF1
ZXN0RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIG1fZW5hYmxl
ZEV4dGVuc2lvbnMuYWRkKG5hbWUpOwotICAgIH0KLX0KLQotYm9vbCBFeHRlbnNpb25zM0RBTkdM
RTo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpIHx8IG1fZW5hYmxlZEV4dGVuc2lvbnMuY29udGFp
bnMobmFtZSk7Ci19Ci0KLWludCBFeHRlbnNpb25zM0RBTkdMRTo6Z2V0R3JhcGhpY3NSZXNldFN0
YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLX0K
LQotU3RyaW5nIEV4dGVuc2lvbnMzREFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5H
TEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaW50IHNvdXJjZUxlbmd0aCA9IDA7
Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdMX1RSQU5TTEFURURfU0hBREVS
X1NPVVJDRV9MRU5HVEhfQU5HTEUsICZzb3VyY2VMZW5ndGgpOwotICAgIGlmICghc291cmNlTGVu
Z3RoKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBWZWN0b3I8R0xjaGFyPiBu
YW1lKHNvdXJjZUxlbmd0aCk7IC8vIEdMX1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhf
QU5HTEUgaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBpbnQgcmV0dXJuZWRMZW5ndGgg
PSAwOwotICAgIGdsOjpHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyLCBzb3Vy
Y2VMZW5ndGgsICZyZXR1cm5lZExlbmd0aCwgbmFtZS5kYXRhKCkpOwotICAgIGlmICghcmV0dXJu
ZWRMZW5ndGgpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIC8vIHJldHVybmVk
TGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIG51bGwgdGVybWluYXRvci4KLSAgICBBU1NFUlQo
cmV0dXJuZWRMZW5ndGggPT0gc291cmNlTGVuZ3RoIC0gMSk7Ci0gICAgcmV0dXJuIFN0cmluZyhu
YW1lLmRhdGEoKSwgcmV0dXJuZWRMZW5ndGgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xF
Ojppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKG1fdXNlSW5kZXhl
ZEdldFN0cmluZykgewotICAgICAgICBHTGludCBudW1FeHRlbnNpb25zID0gMDsKLSAgICAgICAg
Z2w6OkdldEludGVnZXJ2KEdMX05VTV9FWFRFTlNJT05TLCAmbnVtRXh0ZW5zaW9ucyk7Ci0gICAg
ICAgIGZvciAoR0xpbnQgaSA9IDA7IGkgPCBudW1FeHRlbnNpb25zOyArK2kpCi0gICAgICAgICAg
ICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGdsOjpHZXRTdHJpbmdpKEdMX0VYVEVOU0lPTlMs
IGkpKTsKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX05VTV9SRVFVRVNUQUJMRV9FWFRFTlNJ
T05TX0FOR0xFLCAmbnVtRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZvciAoR0xpbnQgaSA9IDA7IGkg
PCBudW1FeHRlbnNpb25zOyArK2kpCi0gICAgICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9u
cy5hZGQoZ2w6OkdldFN0cmluZ2koR0xfUkVRVUVTVEFCTEVfRVhURU5TSU9OU19BTkdMRSwgaSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gZ2V0RXh0
ZW5zaW9ucygpOwotICAgICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNTdHJp
bmcuc3BsaXQoJyAnKSkKLSAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0
ZW5zaW9uKTsKLSAgICAgICAgZXh0ZW5zaW9uc1N0cmluZyA9IFN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdMX1JFUVVFU1RBQkxFX0VYVEVOU0lPTlNf
QU5HTEUpKSk7Ci0gICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogZXh0ZW5zaW9uc1N0cmlu
Zy5zcGxpdCgnICcpKQotICAgICAgICAgICAgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuYWRkKGV4
dGVuc2lvbik7Ci0gICAgfQotICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0g
dHJ1ZTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6cmVhZG5QaXhlbHNFWFQoaW50LCBp
bnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwg
dm9pZCAqKQotewotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpnZXRuVW5pZm9ybWZ2RVhU
KEdDM0R1aW50LCBpbnQsIEdDM0RzaXplaSwgZmxvYXQgKikKLXsKLSAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNp
b25zM0RBTkdMRTo6Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGlu
dCAqKQotewotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpibGl0RnJhbWVidWZmZXIobG9u
ZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwg
bG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1
bnNpZ25lZCBsb25nIGZpbHRlcikKLXsKLSAgICAvLyBGSVhNRTogY29uc2lkZXIgYWRkaW5nIHN1
cHBvcnQgZm9yIEFQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlLgotICAgIGdsOjpCbGl0RnJh
bWVidWZmZXJBTkdMRShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBk
c3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBnbDo6UmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNEQU5H
TEU6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIEdMdWludCBhcnJheSA9IDA7Ci0gICAgZ2w6OkdlblZlcnRleEFycmF5
c09FUygxLCAmYXJyYXkpOwotICAgIHJldHVybiBhcnJheTsKLX0KLQotdm9pZCBFeHRlbnNpb25z
M0RBTkdMRTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsK
LSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5
KTsKLX0KLQotR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNEQU5HTEU6OmlzVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1
cm4gR0xfRkFMU0U7Ci0KLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9u
czNEQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJpbmRWZXJ0ZXhB
cnJheU9FUyhhcnJheSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6Omluc2VydEV2ZW50
TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlz
IGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgotICAg
IHJldHVybjsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6cHVzaEdyb3VwTWFya2VyRVhU
KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9u
IGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgotICAgIHJldHVybjsK
LX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6cG9wR3JvdXBNYXJrZXJFWFQodm9pZCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVi
dWdfbWFya2VyIGluIHN1cHBvcnRzKCkuCi0gICAgcmV0dXJuOwotfQotCi1ib29sIEV4dGVuc2lv
bnMzREFOR0xFOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSB8fCBtX3JlcXVlc3Rh
YmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdM
RTo6ZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpIG4sIGNvbnN0IEdDM0RlbnVtKiBidWZzKQotewot
ICAgIGdsOjpEcmF3QnVmZmVyc0VYVChuLCBidWZzKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RB
TkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1v
ZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdM
RTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEcmF3RWxlbWVu
dHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7Ci19Ci0KLXZv
aWQgRXh0ZW5zaW9uczNEQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgs
IEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbDo6VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKLX0K
LQotU3RyaW5nIEV4dGVuc2lvbnMzREFOR0xFOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICByZXR1
cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcoR0xf
RVhURU5TSU9OUykpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xFLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdM
RS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjQ1ODU5NTNmNGU1ZjlkYThjZDU3
ZWNlOTljZTkzMDU3NjVlNzk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lv
bnMzREFOR0xFLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBFeHRlbnNpb25zM0RBTkdMRSA6IHB1YmxpYyBFeHRlbnNp
b25zM0QgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIFRo
aXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb25zLgotICAgIEV4dGVuc2lvbnMzREFOR0xFKEdyYXBoaWNzQ29udGV4
dDNEKiwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nID0gZmFsc2UpOwotICAgIHZpcnR1YWwgfkV4
dGVuc2lvbnMzREFOR0xFKCk7Ci0KLSAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KLSAgICBi
b29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5zdXJlRW5h
YmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBib29sIGlzRW5hYmxlZChjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIG92
ZXJyaWRlOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7Ci0gICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcHVzaEdyb3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcG9wR3JvdXBNYXJrZXJFWFQodm9pZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVtKikgb3ZlcnJp
ZGU7Ci0KLSAgICBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNY
MCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBk
c3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25l
ZCBsb25nIGZpbHRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdD
M0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHBy
aW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYkRp
dmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpIG92ZXJyaWRlOwotCi0gICAg
Ly8gRVhUIFJvYnVzdG5lc3MgLSB1c2VzIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotICAg
IHZvaWQgcmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1
ZlNpemUsIHZvaWQgKmRhdGEpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0blVuaWZvcm1mdkVYVChH
QzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAq
cGFyYW1zKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJv
Z3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpIG92ZXJy
aWRlOwotCi0gICAgYm9vbCBpc05WSURJQSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNOVklESUE7
IH0KLSAgICBib29sIGlzQU1EKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0FNRDsgfQotICAgIGJv
b2wgaXNJbnRlbCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNJbnRlbDsgfQotICAgIGJvb2wgaXNJ
bWFnaW5hdGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNJbWFnaW5hdGlvbjsgfQotICAgIFN0
cmluZyB2ZW5kb3IoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZlbmRvcjsgfQotCi0gICAgYm9vbCBy
ZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVx
dWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247IH0KLSAgICBib29sIHJlcXVpcmVzUmVzdHJp
Y3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNSZXN0
cmljdGVkTWF4aW11bVRleHR1cmVTaXplOyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBzdXBwb3J0
c0V4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIFN0cmluZyBnZXRFeHRlbnNpb25z
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsK
LSAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOwotICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fcmVx
dWVzdGFibGVFeHRlbnNpb25zOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNp
b25zOwotCi0gICAgLy8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0M0QuCi0g
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKLQotICAgIGJvb2wgbV9pc05WSURJQTsK
LSAgICBib29sIG1faXNBTUQ7Ci0gICAgYm9vbCBtX2lzSW50ZWw7Ci0gICAgYm9vbCBtX2lzSW1h
Z2luYXRpb247Ci0gICAgYm9vbCBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uOwot
ICAgIGJvb2wgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemU7Ci0KLSAgICBi
b29sIG1fdXNlSW5kZXhlZEdldFN0cmluZyB7IGZhbHNlIH07Ci0KLSAgICBTdHJpbmcgbV92ZW5k
b3I7Ci0gICAgU3RyaW5nIG1fcmVuZGVyZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRl
bnNpb25zR0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc1MTNhYmVkOThiZjRlNzQyNDU5
MDllMjNmNjQxNjYwZTY2NTk3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcApAQCAtMCwwICsxLDI1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKSAmJiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMQU5HTEUuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpbmNsdWRlIDxBTkdM
RS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5
X3BvaW50c19nbGVzXzNfMF9hdXRvZ2VuLmg+CisvLyBTa2lwIHRoZSBpbmNsdXNpb24gb2YgQU5H
TEUncyBleHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50cyBmb3Igbm93LgorI2RlZmluZSBHTF9B
TkdMRV9leHBsaWNpdF9jb250ZXh0CisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHRf
Z2xlczEKK3R5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0OworI2luY2x1ZGUgPEFOR0xFL2VudHJ5
X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmg+CisKKy8vIE5vdGU6IHRoaXMgZmlsZSBjYW4ndCBi
ZSBjb21waWxlZCBpbiB0aGUgc2FtZSB1bmlmaWVkIHNvdXJjZSBmaWxlCisvLyBhcyBvdGhlcnMg
d2hpY2ggaW5jbHVkZSB0aGUgc3lzdGVtJ3MgT3BlbkdMIGhlYWRlcnMuCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworRXh0ZW5zaW9uc0dMQU5HTEU6OkV4dGVuc2lvbnNHTEFOR0xFKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcpCisgICAg
OiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQorICAgICwgbV9pc05WSURJQShmYWxzZSkKKyAgICAsIG1faXNBTUQoZmFsc2Up
CisgICAgLCBtX2lzSW50ZWwoZmFsc2UpCisgICAgLCBtX2lzSW1hZ2luYXRpb24oZmFsc2UpCisg
ICAgLCBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKGZhbHNlKQorICAgICwgbV9y
ZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoZmFsc2UpCisgICAgLCBtX3VzZUlu
ZGV4ZWRHZXRTdHJpbmcodXNlSW5kZXhlZEdldFN0cmluZykKK3sKKyAgICAvLyBGSVhNRTogaWRl
YWxseSwgcmVtb3ZlIHRoaXMgaW5pdGlhbGl6YXRpb24gYWx0b2dldGhlci4gQU5HTEUKKyAgICAv
LyBzdWJzdW1lcyB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGdyYXBoaWNzIGRyaXZlciB3b3JrYXJv
dW5kcy4KKyAgICBtX3ZlbmRvciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihnbDo6R2V0U3RyaW5nKEdMX1ZFTkRPUikpKTsKKyAgICBtX3JlbmRlcmVyID0gU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcoR0xfUkVOREVSRVIpKSk7
CisKKyAgICBWZWN0b3I8U3RyaW5nPiB2ZW5kb3JDb21wb25lbnRzID0gbV92ZW5kb3IuY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UoKS5zcGxpdCgnICcpOworICAgIGlmICh2ZW5kb3JDb21wb25lbnRz
LmNvbnRhaW5zKCJudmlkaWEiKSkKKyAgICAgICAgbV9pc05WSURJQSA9IHRydWU7CisgICAgaWYg
KHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImF0aSIpIHx8IHZlbmRvckNvbXBvbmVudHMuY29u
dGFpbnMoImFtZCIpKQorICAgICAgICBtX2lzQU1EID0gdHJ1ZTsKKyAgICBpZiAodmVuZG9yQ29t
cG9uZW50cy5jb250YWlucygiaW50ZWwiKSkKKyAgICAgICAgbV9pc0ludGVsID0gdHJ1ZTsKKyAg
ICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiaW1hZ2luYXRpb24iKSkKKyAgICAgICAg
bV9pc0ltYWdpbmF0aW9uID0gdHJ1ZTsKK30KKworRXh0ZW5zaW9uc0dMQU5HTEU6On5FeHRlbnNp
b25zR0xBTkdMRSgpID0gZGVmYXVsdDsKKworYm9vbCBFeHRlbnNpb25zR0xBTkdMRTo6c3VwcG9y
dHMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJs
ZUV4dGVuc2lvbnMpCisgICAgICAgIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7CisK
KyAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEVu
YWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KS4KKyAgICBpZiAo
bV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkgJiYgIW1fZW5hYmxlZEV4dGVu
c2lvbnMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRShuYW1lLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgbV9lbmFibGVkRXh0ZW5zaW9ucy5hZGQobmFtZSk7CisgICAgfQor
fQorCitib29sIEV4dGVuc2lvbnNHTEFOR0xFOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkgfHwg
bV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKK3sKKyAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0R0w6Ok5PX0VSUk9SOworfQorCitTdHJpbmcgRXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sK
KyAgICBpbnQgc291cmNlTGVuZ3RoID0gMDsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNo
YWRlciwgR0xfVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRSwgJnNvdXJjZUxl
bmd0aCk7CisgICAgaWYgKCFzb3VyY2VMZW5ndGgpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUoc291cmNlTGVuZ3RoKTsgLy8gR0xfVFJBTlNM
QVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRSBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9u
LgorICAgIGludCByZXR1cm5lZExlbmd0aCA9IDA7CisgICAgZ2w6OkdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRShzaGFkZXIsIHNvdXJjZUxlbmd0aCwgJnJldHVybmVkTGVuZ3RoLCBuYW1l
LmRhdGEoKSk7CisgICAgaWYgKCFyZXR1cm5lZExlbmd0aCkKKyAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgLy8gcmV0dXJuZWRMZW5ndGggZG9lcyBub3QgaW5jbHVkZSB0aGUgbnVs
bCB0ZXJtaW5hdG9yLgorICAgIEFTU0VSVChyZXR1cm5lZExlbmd0aCA9PSBzb3VyY2VMZW5ndGgg
LSAxKTsKKyAgICByZXR1cm4gU3RyaW5nKG5hbWUuZGF0YSgpLCByZXR1cm5lZExlbmd0aCk7Cit9
CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25z
KCkKK3sKKyAgICBpZiAobV91c2VJbmRleGVkR2V0U3RyaW5nKSB7CisgICAgICAgIEdMaW50IG51
bUV4dGVuc2lvbnMgPSAwOworICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfTlVNX0VYVEVOU0lP
TlMsICZudW1FeHRlbnNpb25zKTsKKyAgICAgICAgZm9yIChHTGludCBpID0gMDsgaSA8IG51bUV4
dGVuc2lvbnM7ICsraSkKKyAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoZ2w6
OkdldFN0cmluZ2koR0xfRVhURU5TSU9OUywgaSkpOworICAgICAgICBnbDo6R2V0SW50ZWdlcnYo
R0xfTlVNX1JFUVVFU1RBQkxFX0VYVEVOU0lPTlNfQU5HTEUsICZudW1FeHRlbnNpb25zKTsKKyAg
ICAgICAgZm9yIChHTGludCBpID0gMDsgaSA8IG51bUV4dGVuc2lvbnM7ICsraSkKKyAgICAgICAg
ICAgIG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmFkZChnbDo6R2V0U3RyaW5naShHTF9SRVFVRVNU
QUJMRV9FWFRFTlNJT05TX0FOR0xFLCBpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5n
IGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgICAgIGZvciAoYXV0byYg
ZXh0ZW5zaW9uIDogZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgnICcpKQorICAgICAgICAgICAgbV9h
dmFpbGFibGVFeHRlbnNpb25zLmFkZChleHRlbnNpb24pOworICAgICAgICBleHRlbnNpb25zU3Ry
aW5nID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmco
R0xfUkVRVUVTVEFCTEVfRVhURU5TSU9OU19BTkdMRSkpKTsKKyAgICAgICAgZm9yIChhdXRvJiBl
eHRlbnNpb24gOiBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCcgJykpCisgICAgICAgICAgICBtX3Jl
cXVlc3RhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsKKyAgICB9CisgICAgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpyZWFkblBpeGVsc0VYVChpbnQsIGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRHNpemVpLCB2b2lkICopCit7CisgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQsIGludCwgR0MzRHNpemVpLCBmbG9h
dCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWl2RVhUKEdD
M0R1aW50LCBpbnQsIEdDM0RzaXplaSwgaW50ICopCit7CisgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gx
LCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRz
dFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQoreworICAgIC8v
IEZJWE1FOiBjb25zaWRlciBhZGRpbmcgc3VwcG9ydCBmb3IgQVBQTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUuCisgICAgZ2w6OkJsaXRGcmFtZWJ1ZmZlckFOR0xFKHNyY1gwLCBzcmNZMCwgc3Jj
WDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKK30K
Kwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQoreworICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSh0YXJn
ZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxhdGZv
cm0zRE9iamVjdCBFeHRlbnNpb25zR0xBTkdMRTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQorewor
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IGFycmF5ID0g
MDsKKyAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CisgICAgcmV0dXJuIGFy
cmF5OworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOworfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25z
R0xBTkdMRTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAg
IGlmICghYXJyYXkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5T0VTKGFy
cmF5KTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5T0VTKFBs
YXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbDo6QmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKK30KKwordm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVidWdf
bWFya2VyIGluIHN1cHBvcnRzKCkuCisgICAgcmV0dXJuOworfQorCit2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVidWdfbWFya2VyIGlu
IHN1cHBvcnRzKCkuCisgICAgcmV0dXJuOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpw
b3BHcm91cE1hcmtlckVYVCh2b2lkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBm
dW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KKyAgICBy
ZXR1cm47Cit9CisKK2Jvb2wgRXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNv
bnRhaW5zKG5hbWUpIHx8IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOwor
fQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgbiwg
Y29uc3QgR0MzRGVudW0qIGJ1ZnMpCit7CisgICAgZ2w6OkRyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMp
OworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1j
b3VudCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpE
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwor
fQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0
eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZz
ZXQpKSwgcHJpbWNvdW50KTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEUoaW5kZXgsIGRpdmlzb3IpOworfQorCitTdHJpbmcgRXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYg
VVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTExNGQ0OGY3OGY3Yzcz
OWY0N2Q5MTY2OGEwOGZjNmQ2ZjI2MzA1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmgKQEAgLTAsMCAr
MSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5o
IgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5z
aW9uc0dMQU5HTEUgOiBwdWJsaWMgRXh0ZW5zaW9uc0dMIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5z
dGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGltcGxlbWVudGF0aW9ucy4KKyAg
ICBFeHRlbnNpb25zR0xBTkdMRShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIGJvb2wgdXNlSW5k
ZXhlZEdldFN0cmluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0xBTkdMRSgp
OworCisgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCisgICAgYm9vbCBzdXBwb3J0cyhjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CisgICAgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSBvdmVycmlkZTsKKworICAgIFBs
YXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIEdD
M0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0J1ZmZl
cnNFWFQoR0MzRHNpemVpLCBjb25zdCBHQzNEZW51bSopIG92ZXJyaWRlOworCisgICAgU3RyaW5n
IGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKKworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxv
bmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEs
IGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KSBvdmVy
cmlkZTsKKworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRl
OworICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1j
b3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGlu
ZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKworICAgIC8vIEVYVCBSb2J1c3RuZXNz
IC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKKyAgICB2b2lkIHJlYWRuUGl4ZWxz
RVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRh
KSBvdmVycmlkZTsKKyAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwg
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7
CisgICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlv
biwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsKKworICAgIGJvb2wg
aXNOVklESUEoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzTlZJRElBOyB9CisgICAgYm9vbCBpc0FN
RCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNBTUQ7IH0KKyAgICBib29sIGlzSW50ZWwoKSBvdmVy
cmlkZSB7IHJldHVybiBtX2lzSW50ZWw7IH0KKyAgICBib29sIGlzSW1hZ2luYXRpb24oKSBvdmVy
cmlkZSB7IHJldHVybiBtX2lzSW1hZ2luYXRpb247IH0KKyAgICBTdHJpbmcgdmVuZG9yKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV92ZW5kb3I7IH0KKworICAgIGJvb2wgcmVxdWlyZXNCdWlsdEluRnVu
Y3Rpb25FbXVsYXRpb24oKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0
aW9uRW11bGF0aW9uOyB9CisgICAgYm9vbCByZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVy
ZVNpemUoKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0
dXJlU2l6ZTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3Qg
V1RGOjpTdHJpbmcmKTsKKyAgICBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpOworCisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7CisgICAgYm9vbCBtX2luaXRp
YWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9u
czsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9uczsKKworICAgIC8vIFdl
YWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgorICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiBtX2NvbnRleHQ7CisKKyAgICBib29sIG1faXNOVklESUE7CisgICAg
Ym9vbCBtX2lzQU1EOworICAgIGJvb2wgbV9pc0ludGVsOworICAgIGJvb2wgbV9pc0ltYWdpbmF0
aW9uOworICAgIGJvb2wgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbjsKKyAgICBi
b29sIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplOworCisgICAgYm9vbCBt
X3VzZUluZGV4ZWRHZXRTdHJpbmcgeyBmYWxzZSB9OworCisgICAgU3RyaW5nIG1fdmVuZG9yOwor
ICAgIFN0cmluZyBtX3JlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3ND
b250ZXh0M0RBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZmY0NWE5ZjQ1YzBlMmEyMjRiYzgyZWYyNjc0ZTIxODdiZmFiNGM5Ni4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDE4MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKSAmJiBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0RJT1MuaCIKLSNlbmRpZgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzREFOR0xFLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGluZy5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+Ci0jaW5jbHVk
ZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8d3RmL0hleE51bWJl
ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRp
ZgotCi0vLyBTa2lwIHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNpdCBjb250ZXh0IGVu
dHJ5IHBvaW50cyBmb3Igbm93LgotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0Ci0j
ZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKLXR5cGVkZWYgdm9pZCogR0xl
Z2xDb250ZXh0OwotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2Vu
Lmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfM18wX2F1dG9nZW4uaD4KLSNp
bmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgotI2luY2x1ZGUg
PEFOR0xFL2dsMmV4dC5oPgotI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgotCi0vLyBO
b3RlOiB0aGlzIGZpbGUgY2FuJ3QgYmUgY29tcGlsZWQgaW4gdGhlIHNhbWUgdW5pZmllZCBzb3Vy
Y2UgZmlsZQotLy8gYXMgb3RoZXJzIHdoaWNoIGluY2x1ZGUgdGhlIHN5c3RlbSdzIE9wZW5HTCBo
ZWFkZXJzLgotCi0vLyBUaGlzIG9uZSBkZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVk
IGZvciBnbDJleHQuaCwgd2hpY2gKLS8vIHdvdWxkIG5lZWQgbW9yZSB3b3JrIHRvIGJlIGluY2x1
ZGVkIGZyb20gV2ViQ29yZS4KLSNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIDB4OEQ1NwotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0jZGVm
aW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAweDhDRTAKLSNkZWZpbmUgR0xfRlJBTUVCVUZG
RVJfRVhUIDB4OEQ0MAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUgPSAiR0xfT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsIjsKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hh
bm5lbEZyb21QaXhlbHMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhl
bHMpCi17Ci0gICAgLy8gV2UgY2FuIGFzc3VtZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgYmVjYXVz
ZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMKLSAgICAvLyB1c2UgY2hlY2tlZCBhcml0aG1ldGljLgot
ICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQotICAgICAgICBwaXhlbHNbaSArIDNdID0gMjU1
OwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252
ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IHVuc2lnbmVkIGNoYXIqIHBpeGVscykKLXsKLSAgICAvLyBOVklESUEgZHJpdmVycyBoYXZlIGEg
YnVnIHdoZXJlIGNhbGxpbmcgcmVhZFBpeGVscyBpbiBCR1JBIGNhbiByZXR1cm4gdGhlIHdyb25n
IHZhbHVlcyBmb3IgdGhlIGFscGhhIGNoYW5uZWwgd2hlbiB0aGUgYWxwaGEgaXMgb2ZmIGZvciB0
aGUgY29udGV4dC4KLSAgICBnbDo6UmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
IHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLndp
ZHRoID0gd2lkdGg7Ci0gICAgc3JjLnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIHNyYy5kYXRh
ID0gcGl4ZWxzOwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3QuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lk
dGggKiA0OwotICAgIGRlc3QuZGF0YSA9IHBpeGVsczsKLQotICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRl
c3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBpbnQgdG90YWxCeXRlcyA9IHdp
ZHRoICogaGVpZ2h0ICogNDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGEpCi0gICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKHdpZHRoLCBoZWlnaHQsIHBp
eGVscyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRy
aWJ1dGVzKCkKLXsKLSAgICB2YWxpZGF0ZURlcHRoU3RlbmNpbChwYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb25OYW1lKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3Mo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgY29uc3QgaW50
IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgR0x1aW50IGNvbG9yRm9ybWF0LCBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7Ci0gICAgaWYgKGF0dHJzLmFscGhhKSB7Ci0gICAgICAg
IG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OwotICAgICAgICBjb2xvckZvcm1hdCA9
IEdMX1JHQkE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0g
R0xfUkdCODsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgfQotICAgIGlmIChh
dHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGFsbG93
IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCi0g
ICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgotCi0g
ICAgICAgIEV4dGVuc2lvbnMzRCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICAg
ICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQu
Ci0gICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbk5hbWUpKQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICB9Ci0KLSAgICAv
LyBSZXNpemUgbXVsdGlzYW1wbGUgRkJPLgotICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKLSAg
ICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9N
QVhfU0FNUExFU19BTkdMRSwgJm1heFNhbXBsZUNvdW50KTsKLSAgICAgICAgLy8gVXNpbmcgbW9y
ZSB0aGFuIDQgc2FtcGxlcyBpcyBzbG93IG9uIHNvbWUgaGFyZHdhcmUgYW5kIGlzIHVubGlrZWx5
IHRvCi0gICAgICAgIC8vIHByb2R1Y2UgYSBzaWduaWZpY2FudGx5IGJldHRlciByZXN1bHQuCi0g
ICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291bnQpOwot
ICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxl
RkJPKTsKLSAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBnZXRFeHRlbnNpb25zKCkucmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIG1faW50
ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGdsOjpGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1JF
TkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJz
LnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgICAgICAgICBnZXRFeHRlbnNpb25zKCkucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRl
IHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCi0gICAgICAgICAgICAv
LyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRB
Q0hNRU5UIHBvaW50LgotICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCi0gICAg
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAoYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRF
UkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF0dHJzLmRlcHRoKQotICAgICAgICAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRF
UkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCAwKTsKLSAgICAgICAgaWYgKGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVG
RkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IGNsZWFudXAuCi0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCi0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIEFTU0VSVChtX3RleHR1cmUpOwotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7Ci0gICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3Jl
RnJvbUxheWVyKCk7Ci0gICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVS
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OklPU3VyZmFjZVRleHR1
cmVUYXJnZXQsIG1fdGV4dHVyZSwgMCk7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3RleHR1cmUpOwotICAgIGds
OjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwLCBtX2ludGVybmFsQ29s
b3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRF
LCAwKTsKLSAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0dXJlLCAw
KTsKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkgewotICAgICAgICBnbDo6QmluZFRleHR1
cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAg
ICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCwgbV9pbnRl
cm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgMCk7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BTkdMRSwgMCk7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BTkdMRSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgICAg
ICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOwotICAgIH0K
LSNlbHNlCi0jZXJyb3IgRklYTUU6IFBvcnQgdG8gbm9uLUNvY29hIHBsYXRmb3Jtcy4KLSNlbmRp
ZiAvLyBQTEFURk9STShDT0NPQSkKLQotICAgIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklm
TmVlZGVkKGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAg
IGJvb2wgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsK
LSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
Ci0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJvKQotICAgICAgICAgICAgbXVzdFJlc3Rv
cmVGQk8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVl
ZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYg
KCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpKSB7Ci0g
ICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZG
RVIsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
Ly8gV2ViR0wgMS4wJ3MgcnVsZXMgc3RhdGUgdGhhdCBjb21iaW5lZCBkZXB0aC9zdGVuY2lsIHJl
bmRlcmJ1ZmZlcnMKLSAgICAgICAgLy8gaGF2ZSB0byBiZSBhdHRhY2hlZCB0byB0aGUgc3ludGhl
dGljIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCBwb2ludC4KLSAgICAgICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkgJiYgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVMpCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGF0
dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwg
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQotICAg
ICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
R0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgICAgIH0KLSAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVG
RkVSLCAwKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xf
RlJBTUVCVUZGRVIpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNz
b3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5n
IHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLQotICAgIEdMaW50IGJvdW5kRnJh
bWVCdWZmZXI7Ci0gICAgZ2w6OkdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZi
b3VuZEZyYW1lQnVmZmVyKTsKLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVC
VUZGRVJfQU5HTEUsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIo
R0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSwgbV9mYm8pOwotCi0gICAgLy8gRklYTUU6IGZpZ3Vy
ZSBvdXQgbW9yZSBlZmZpY2llbnQgc29sdXRpb24gZm9yIGlPUy4KLSAgICBJbnRSZWN0IHJlc29s
dmVSZWN0ID0gcmVjdDsKLSAgICAvLyBXaGVuIHVzaW5nIGFuIEVTIDIuMCBjb250ZXh0LCB0aGUg
ZnVsbCBmcmFtZWJ1ZmZlciBtdXN0IGFsd2F5cyBiZQotICAgIC8vIHJlc29sdmVkOyBwYXJ0aWFs
IGJsaXRzIGFyZSBub3QgYWxsb3dlZC4KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSB8fCBy
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzb2x2ZVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwotCi0gICAgZ2w6OkJsaXRGcmFtZWJ1ZmZlckFO
R0xFKHJlc29sdmVSZWN0LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCks
IHJlc29sdmVSZWN0Lm1heFkoKSwgcmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJl
c29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCBHTF9DT0xPUl9CVUZGRVJfQklU
LCBHTF9ORUFSRVNUKTsKLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBi
b3VuZEZyYW1lQnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVm
ZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBNQVhfVEVYVFVSRV9TSVpFOgot
ICAgICAgICBnbDo6R2V0SW50ZWdlcnYoTUFYX1RFWFRVUkVfU0laRSwgdmFsdWUpOwotICAgICAg
ICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6
ZSgpKQotICAgICAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oNDA5NiwgKnZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAgICBn
bDo6R2V0SW50ZWdlcnYoTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgdmFsdWUpOwotICAgICAg
ICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6
ZSgpKQotICAgICAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oMTAyNCwgKnZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFNvbWUgb2xkZXIgaGFyZHdhcmUg
YWR2ZXJ0aXNlcyBhIGxhcmdlciBtYXhpbXVtIHRoYW4gdGhleQotICAgIC8vIGNhbiBhY3R1YWxs
eSBoYW5kbGUuIFJhdGhlciB0aGFuIGRldGVjdGluZyBzdWNoIGRldmljZXMsIHNpbXBseQotICAg
IC8vIGNsYW1wIHRoZSBtYXhpbXVtIHRvIDgxOTIsIHdoaWNoIGlzIGJpZyBlbm91Z2ggZm9yIGEg
NUsgZGlzcGxheS4KLSAgICBjYXNlIE1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgZ2w6
OkdldEludGVnZXJ2KE1BWF9SRU5ERVJCVUZGRVJfU0laRSwgdmFsdWUpOwotICAgICAgICAqdmFs
dWUgPSBzdGQ6Om1pbig4MTkyLCAqdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1B
WF9WSUVXUE9SVF9ESU1TOgotICAgICAgICBnbDo6R2V0SW50ZWdlcnYoTUFYX1ZJRVdQT1JUX0RJ
TVMsIHZhbHVlKTsKLSAgICAgICAgdmFsdWVbMF0gPSBzdGQ6Om1pbig4MTkyLCB2YWx1ZVswXSk7
Ci0gICAgICAgIHZhbHVlWzFdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMV0pOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihwbmFt
ZSwgdmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5
cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHNoYWRlclR5cGUpOwotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgQVNTRVJUKHByZWNpc2lv
bik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN3aXRjaCAocHJlY2lzaW9u
VHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19JTlQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpISUdIX0lOVDoKLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYSAzMi1iaXQgdHdv
cy1jb21wbGVtZW50IGludGVnZXIgZm9ybWF0LgotICAgICAgICByYW5nZVswXSA9IDMxOwotICAg
ICAgICByYW5nZVsxXSA9IDMwOwotICAgICAgICBwcmVjaXNpb25bMF0gPSAwOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGFuIElFRUUg
c2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuCi0gICAgICAgIHJhbmdlWzBd
ID0gMTI3OwotICAgICAgICByYW5nZVsxXSA9IDEyNzsKLSAgICAgICAgcHJlY2lzaW9uWzBdID0g
MjM7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpCi17Ci0gICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNs
YW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oekZhcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRl
cHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2w6OkNsZWFyRGVwdGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwotfQotCi1FeHRlbnNp
b25zM0QmIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1f
ZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25z
M0RBTkdMRT4odGhpcyk7Ci0gICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCB2b2lkKiBkYXRhKQotewotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNh
bGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0gICAgLy8gYWxsIHByZXZp
b3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMu
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkZsdXNoKCk7Ci0gICAgYXV0byBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBt
X3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAg
ICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKLSAgICAgICAgZ2w6OkZsdXNoKCk7Ci0gICAgfQotICAgIGdsOjpSZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgaWYgKGF0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAg
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X211bHRpc2FtcGxlRkJPKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWF0dHJzLmFs
cGhhICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpCR1JBKSAmJiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX2ZibyB8fCAo
YXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykp
KQotICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkpOwotI2VuZGlmCi19Ci0KLQotLy8gVGhlIGNv
bnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uIGZvbGxvdywgcG9ydGVkIHRv
IHVzZSBBTkdMRS4KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0ZW5j
aWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQotewotICAgIEV4dGVu
c2lvbnMzRCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICBhdXRvIGF0dHJzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAg
IGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb24pOwotICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVl
LgotICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKLSAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0
ZXMoYXR0cnMpOwotICAgIH0KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBtdXN0IGFkanVzdCB0aGlzIHdoZW4gdXBncmFkaW5nIHRvIFdlYkdMIDIuMCAvIE9w
ZW5HTCBFUyAzLjAgc3VwcG9ydC4KLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpIHx8ICFleHRlbnNpb25zLnN1cHBvcnRz
KCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgfHwgIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdM
X09FU19yZ2I4X3JnYmE4IikpIHsKLSAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNl
OwotICAgICAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFi
bGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAgICAgICAgICBleHRlbnNpb25z
LmVuc3VyZUVuYWJsZWQoIkdMX09FU19yZ2I4X3JnYmE4Iik7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3Zl
cmZsb3c+IHJvd0J5dGVzID0gQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRX
aWR0aCkgKiA0OwotICAgIGlmIChyb3dCeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNr
ZWQgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKLSAgICBpZiAodG90YWxCeXRlc0NoZWNr
ZWQuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IHRvdGFsQnl0ZXMg
PSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVHZXQoKTsKLQotICAgIGF1dG8gcGl4ZWxzID0gbWFr
ZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHRvdGFsQnl0ZXMpOwotICAgIGlmICghcGl4ZWxz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0
KCksIHRvdGFsQnl0ZXMpOwotCi0gICAgaWYgKCFjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRp
cGxpZWRBbHBoYSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkgewotICAgICAgICAgICAgLy8gUHJlbXVsdGlwbHkgYWxwaGEuCi0gICAgICAgICAgICBw
aXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAz
XSAvIDI1NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhl
bHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSAr
IDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50
U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVy
bmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKLQotI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIC8vIEZJWE1FOiB3b3JrIG9uIGlPUyBpbnRlZ3JhdGlv
bi4KLSAgICBwcmVzZW50UmVuZGVyYnVmZmVyKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKikK
LXsKLSAgICAvLyBOb3QgbmVlZGVkIGF0IHRoZSBtb21lbnQsIHNvIHJldHVybiB0aGF0IG5vdGhp
bmcgd2FzIGRvbmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1SZWZQdHI8SW1hZ2VEYXRhPiBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQotewot
ICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVs
dGlwbHlpbmcsIHdoaWNoIGlzCi0gICAgLy8gbG9zc3kuCi0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0KSk7Ci0gICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VE
YXRhLT5kYXRhKCktPmRhdGEoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHRv
dGFsQnl0ZXNDaGVja2VkID0gNCAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJy
ZW50V2lkdGgpICogQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRIZWlnaHQp
OwotICAgIGlmICh0b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBpbWFnZURhdGE7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSB0b3RhbEJ5dGVzQ2hlY2tlZC51
bnNhZmVHZXQoKTsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRl
cyk7Ci0KLSAgICAvLyBDb252ZXJ0IHRvIFJHQkEuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tp
ICsgMl0pOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cHJlcGFyZVRleHR1cmUoKQotewotICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6
OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90
ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
TkdMRSwgbV90ZXh0dXJlLCAwKTsKLSAgICBnbDo6Rmx1c2goKTsKLQotICAgIGlmIChtX3N0YXRl
LmJvdW5kRkJPICE9IG1fZmJvKQotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Ci0gICAgZWxzZQotICAg
ICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOwotI2Vsc2UKLSAgICBnbDo6Rmx1c2goKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMs
IGludCBwaXhlbHNTaXplKQotewotICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGgg
KiBtX2N1cnJlbnRIZWlnaHQgKiA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAo
Y29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9m
Ym8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKLSAgICBi
b29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGdsOjpHZXRJbnRlZ2Vy
dihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwotICAgIGlmIChwYWNrQWxpZ25t
ZW50ID4gNCkgewotICAgICAgICBnbDo6UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQp
OwotICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwotICAgIH0KLQotICAg
IHJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoMCwgMCwgbV9jdXJyZW50V2lk
dGgsIG1fY3VycmVudEhlaWdodCwgcGl4ZWxzKTsKLQotICAgIGlmIChtdXN0UmVzdG9yZVBhY2tB
bGlnbm1lbnQpCi0gICAgICAgIGdsOjpQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFj
a0FsaWdubWVudCk7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIGdsOjpCaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5k
RkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQg
PT0gbV9jdXJyZW50SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGgg
Pj0gMCAmJiBoZWlnaHQgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3Vy
cmVudFdpZHRoID0gd2lkdGg7Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0KLSAgICBU
ZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZB
TFNFKTsKLSAgICBUZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwg
R0xfRkFMU0UpOwotCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVGQk9zKEludFNp
emUod2lkdGgsIGhlaWdodCkpOwotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygp
OwotCi0gICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBj
bGVhckNvbG9yW10gPSB7MCwgMCwgMCwgMH0sIGNsZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNs
ZWFyU3RlbmNpbCA9IDA7Ci0gICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWlu
dCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmYsIHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7
Ci0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIGds
OjpHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIGdsOjpD
bGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsOjpHZXRCb29sZWFudihHTF9DT0xPUl9XUklU
RU1BU0ssIGNvbG9yTWFzayk7Ci0gICAgZ2w6OkNvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBH
TF9UUlVFLCBHTF9UUlVFKTsKLSAgICBpZiAoYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgZ2w6Okdl
dEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCgxKTsKLSAgICAgICAgZ2w6OkdldEJvb2xlYW52KEdM
X0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7Ci0gICAgICAgIGdsOjpEZXB0aE1hc2soR0xf
VFJVRSk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwotICAgIH0K
LSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfU1RF
TkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIGdsOjpDbGVhclN0ZW5j
aWwoMCk7Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVp
bnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOwotICAgICAgICBnbDo6R2V0SW50
ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+
KCZzdGVuY2lsTWFza0JhY2spKTsKLSAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9C
QUNLLCAweGZmZmZmZmZmKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVS
X0JJVDsKLSAgICB9Ci0KLSAgICBnbDo6Q2xlYXIoY2xlYXJNYXNrKTsKLQotICAgIGdsOjpDbGVh
ckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFy
Q29sb3JbM10pOwotICAgIGdsOjpDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0s
IGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKLSAgICBpZiAoYXR0cnMuZGVwdGgpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Ci0gICAgICAg
IGdsOjpEZXB0aE1hc2soZGVwdGhNYXNrKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwp
IHsKLSAgICAgICAgZ2w6OkNsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOwotICAgICAgICBnbDo6
U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNpbE1hc2spOwotICAgICAgICBnbDo6
U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBzdGVuY2lsTWFza0JhY2spOwotICAgIH0KLQot
ICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOwotCi0gICAgZ2w6
OkZsdXNoKCk7Ci19Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJh
bWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZl
VGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwotICAgIGdsOjpBY3RpdmVU
ZXh0dXJlKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFk
ZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsK
LSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2w6OkF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Qmlu
ZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2w6OkJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgZmJvOwotICAg
IGlmIChidWZmZXIpCi0gICAgICAgIGZibyA9IGJ1ZmZlcjsKLSAgICBlbHNlCi0gICAgICAgIGZi
byA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBt
X2Zibyk7Ci0gICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRkJPKSB7Ci0gICAgICAgIGdsOjpC
aW5kRnJhbWVidWZmZXIodGFyZ2V0LCBmYm8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0g
ZmJvOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwg
cmVuZGVyYnVmZmVyKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVy
ZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFj
dGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0
YXJnZXQsIHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9y
KEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0Rj
bGFtcGYgYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJsZW5k
Q29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51
bSBtb2RlQWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJsZW5k
RXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotfQotCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9y
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCbGVuZEZ1bmMoc2ZhY3Rv
ciwgZGZhY3Rvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwg
R0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6
OkJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
R0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
ZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBj
b25zdCB2b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpC
dWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKLX0KLQotdm9pZCogR3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0
ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nlc3MpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpNYXBCdWZmZXJSYW5nZSh0
YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHQzRDo6dW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6VW5tYXBCdWZmZXIodGFyZ2V0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weUJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gcmVhZFRh
cmdldCwgR0MzRGVudW0gd3JpdGVUYXJnZXQsIEdDM0RpbnRwdHIgcmVhZE9mZnNldCwgR0MzRGlu
dHB0ciB3cml0ZU9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2w6OkNvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFy
Z2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEludGVybmFsZm9ybWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50
KiBwYXJhbXMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldEludGVy
bmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFt
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6
OlRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdG9yYWdlM0Qo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlRleFN0b3JhZ2UzRCh0YXJnZXQs
IGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKLSAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywg
R0MzRGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGdsOjpHZXRBY3RpdmVV
bmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMu
ZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29u
dGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0
dXModGFyZ2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihHQzNE
Y2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNsZWFyQ29sb3IociwgZywgYiwgYSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDbGVhcihtYXNrKTsKLSAgICBj
aGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhclN0ZW5j
aWwoR0MzRGludCBzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDbGVh
clN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhHQzNE
Ym9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9v
bGVhbiBhbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAvLyBXZSBuZWVkIHRoaXMg
ZXh0ZW5zaW9uIHRvIHN1cHBvcnQgSU9TdXJmYWNlIGJhY2tidWZmZXJzLCBidXQgd2UKLSAgICAv
LyBkb24ndCB3YW50IGl0IGV4cG9zZWQgdG8gV2ViR0wgdXNlciBzaGFkZXJzLiBUZW1wb3Jhcmls
eSBkaXNhYmxlCi0gICAgLy8gaXQgZHVyaW5nIHNoYWRlciBjb21waWxhdGlvbi4KLSAgICBnbDo6
RGlzYWJsZUV4dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOwotICAg
IGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25BTkdM
RSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAg
ICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q29t
cGlsZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRycy5hbnRp
YWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAg
IHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSk7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIGdsOjpDb3B5VGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAg
ICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAg
ICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgZ2w6OkNvcHlUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
ICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbDo6RGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0
aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbDo6RGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRh
Y2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGlzYWJsZShjYXApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQg
aW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdB
cnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEcmF3QXJyYXlzKG1vZGUsIGZpcnN0
LCBjb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2w6OkRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotICAgIGNoZWNrR1BV
U3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBj
YXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkVuYWJsZShjYXApOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNE
dWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpm
aW5pc2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpGaW5pc2goKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1l
bnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbDo6RnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Ci19Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAo
IXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgZ2w6OkdldFByb2dyYW1pdihwcm9n
cmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsK
LSAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVf
QVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNp
emVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBl
ID0gMDsKLSAgICBnbDo6R2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1
dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAgaWYg
KCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbmZvLm5hbWUgPSBT
dHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0g
ICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIGdldEFjdGl2ZUF0
dHJpYkltcGwocHJvZ3JhbSwgaW5kZXgsIGluZm8pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IG1heFVu
aWZvcm1TaXplID0gMDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7Ci0KLSAgICBWZWN0b3I8R0xjaGFy
PiBuYW1lKG1heFVuaWZvcm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBp
bmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0g
ICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIGdsOjpHZXRBY3Rp
dmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZz
aXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1l
TGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKLXsKLSAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaW5k
ZXgsIGluZm8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRl
cnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXpl
aSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgaWYgKCFwcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRBdHRh
Y2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKLX0KLQotaW50
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAg
IHJldHVybiAtMTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgcmV0dXJuIGds
OjpHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1p
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBnZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwotCi0gICAgLy8gU2V0IGFuIGFy
Yml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKLSAg
ICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBj
bGVhciB0aGUgZXJyb3IuCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50
aWwgd2UgZ290IE5PX0VSUk9SLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsr
aSkgewotICAgICAgICBHQzNEZW51bSBlcnJvciA9IGdsOjpHZXRFcnJvcigpOwotICAgICAgICBp
ZiAoZXJyb3IgPT0gTk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9zeW50
aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKLSAgICAgICAgbW92ZWRBbkVycm9yID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbW92ZWRBbkVycm9yOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50aGV0aWNFcnJvcnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhl
IHN5bnRoZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKLSAgICAgICAgLy8gdGhhdCBlcnJvciBpcyBh
bHJlYWR5IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgYm90aAotICAgICAg
ICAvLyBnbEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBvbmx5IHJlcG9ydCBlYWNoIGVycm9y
IGNvZGUgb25jZS4KLSAgICAgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0g
ICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKLSAgICB9Ci0KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OkdldEVycm9yKCk7Ci19Ci0K
LVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKG5hbWUpKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpIaW50KHRhcmdldCwgbW9kZSk7Ci19Ci0K
LUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc0J1ZmZlcihidWZm
ZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0Rl
bnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6Oklz
RW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZnJhbWVi
dWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHJldHVybiBnbDo6SXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc1Byb2dyYW0ocHJv
Z3JhbSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZl
cihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIGdsOjpJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpCi17Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6SXNTaGFkZXIoc2hhZGVyKTsK
LX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNE
T2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4gR0xf
RkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OklzVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRoKEdD
M0RmbG9hdCB3aWR0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6TGlu
ZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6TGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50IHBhcmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpQaXhlbFN0
b3JlaShwbmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29u
T2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1
ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpT
Y2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gc3RyaW5nLnV0Zjgo
KTsKLSAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5n
LmRhdGEoKTsKLSAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmlu
Zy5sZW5ndGgoKTsKLSAgICBnbDo6U2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJj
ZVB0ciwgJnNoYWRlclNvdXJjZUxlbmd0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpTdGVuY2lsRnVuYyhmdW5jLCBy
ZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpTdGVuY2lsRnVuY1Nl
cGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2w6OlN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUo
ZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNE
ZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBm
YWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFy
YW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2w6OlVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlm
b3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9h
dCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0yZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxv
YXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9hdCog
YXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0zZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQg
djIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNv
bnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVu
aWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjApCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bDo6VW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBH
QzNEaW50KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTJp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGlu
dCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTNpKGxv
Y2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJy
YXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMu
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0Rp
bnQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm00aShs
b2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50
KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTRpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDkuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogYXJy
YXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2w6OlZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgs
IHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1
aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNE
ZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0
dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZnYoaW5k
ZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIs
IEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVy
dGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBl
LCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmli
UG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJl
dF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi1QbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGFycmF5ID0gMDsKLSAgICBnbDo6R2Vu
VmVydGV4QXJyYXlzKDEsICZhcnJheSk7Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5
KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbDo6RGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmpl
Y3QgYXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheShh
cnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRWZXJ0ZXhBcnJheShQbGF0
Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpCaW5kVmVydGV4QXJyYXkoYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVu
dW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2w6OkdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotfQotICAgIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0SW50ZWdlcjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1
ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgICp2YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcg
dGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGlu
ZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4K
LSAgICAvLyBnbDo6R2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoYXR0YWNobWVudCA9
PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9B
VFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICBn
bDo6R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50
LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFt
aXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFByb2dyYW1pdihw
cm9ncmFtLCBwbmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBHQzNEc2l6ZWkg
Y291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQotewotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJzKTsK
LSAgICBVTlVTRURfUEFSQU0oY291bnQpOwotICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRl
ckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLQotICAgIFN0cmluZ0J1aWxkZXIg
cHJvY2Vzc2VkTG9nOwotCi0gICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5l
IGludG8gdGhlIHNoYWRlciBzb3VyY2UgdGhhdAotICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4g
c29tZSBjb21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKLSAgICAvLyB0aGlzIHdh
cm5pbmcgdG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAot
ICAgIC8vIGlzIGNhdXNpbmcgaXQuCi0gICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gYW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1
X3NoYWRlcjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OwotICAgIGludCBzdGFydEZyb20gPSBs
b2cuc3RhcnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgp
IDogMDsKLSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBs
b2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKLQotICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBT
aGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
KQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9J
TkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFy
PiBpbmZvKGxlbmd0aCk7Ci0gICAgZ2w6OkdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0
aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIEdDM0RzaXplaSBjb3VudDsKLSAgICBQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0s
IDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhz
aGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0g
ICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
R2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGlu
dCBsZW5ndGggPSAwOwotICAgIGdsOjpHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xF
TkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVu
Z3RoKTsKLSAgICBnbDo6R2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGlu
Zm8uZGF0YSgpKTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVy
LCAwIH07Ci0gICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5n
KGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QpCi17Ci0gICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9y
bWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0VW5pZm9y
bWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotR0MzRGludCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0
VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6
OkdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQotCi1HQzNEc2l6ZWlw
dHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBH
THZvaWQqIHBvaW50ZXIgPSAwOwotICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRl
eCwgcG5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRy
PihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxs
IG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGlt
YWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KLSAgICBnbDo6
VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0
YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsOjpHZW5CdWZmZXJzKDEs
ICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIEdMdWludCBvID0gMDsKLSAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZvKTsKLSAgICBy
ZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
UHJvZ3JhbSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpD
cmVhdGVQcm9ncmFtKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
R0x1aW50IG8gPSAwOwotICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZvKTsKLSAgICByZXR1
cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hh
ZGVyKEdDM0RlbnVtIHR5cGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsOjpDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdN
RU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZvKTsKLSAg
ICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwotICAgIHJldHVybiBvOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMo
MSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVm
ZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91bmRGQk8pIHsKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBm
b3IgZHJhd2luZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4K
LSAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgZ2w6
OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRlbGV0ZVNoYWRlcihzaGFkZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3N0YXRl
LmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7Ci0g
ICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOwotICAgIH0pOwot
ICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgLy8gTmVlZCB0byBt
b3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgdG8KLSAg
ICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNhbGxlciB0byBnZXRFcnJv
ciB3aWxsIGdldAotICAgIC8vIGFueSBlcnJvcnMgZnJvbSBnbDo6RXJyb3IgYmVmb3JlIHRoZSBl
cnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgotICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCgpOwotICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbV9sYXllckNvbXBv
c2l0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0xheWVyQ29t
cG9zaXRlZCgpCi17Ci0gICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwotCi0gICAgZm9yIChh
dXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5k
aWRDb21wb3NpdGUoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3Np
dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZvcmNlQ29udGV4dExvc3QoKQotewotICAgIGZvciAoYXV0byog
Y2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+Zm9yY2VD
b250ZXh0TG9zdCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWN5Y2xlQ29udGV4
dCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkK
LSAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKLXsKLSAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQt
PmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4
dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNv
dW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsK
LSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0
eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcikKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKSAmJiBVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM1MWE1MjFjNGI4YTRjMmVlZGVhODYzYWVkYWQ1YTRlMTBlYmExMjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcApAQCAtMCwwICsxLDE4MzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKEFOR0xFKQor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaCIKKyNlbmRp
ZgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGluZy5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURSkK
KyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCisvLyBTa2lwIHRo
ZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50cyBmb3Ig
bm93LgorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0CisjZGVmaW5lIEdMX0FOR0xF
X2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKK3R5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0OworI2lu
Y2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+CisjaW5jbHVkZSA8
QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfM18wX2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9l
bnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dC5o
PgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorCisvLyBOb3RlOiB0aGlzIGZpbGUg
Y2FuJ3QgYmUgY29tcGlsZWQgaW4gdGhlIHNhbWUgdW5pZmllZCBzb3VyY2UgZmlsZQorLy8gYXMg
b3RoZXJzIHdoaWNoIGluY2x1ZGUgdGhlIHN5c3RlbSdzIE9wZW5HTCBoZWFkZXJzLgorCisvLyBU
aGlzIG9uZSBkZWZpbml0aW9uIHNob3J0LWNpcmN1aXRzIHRoZSBuZWVkIGZvciBnbDJleHQuaCwg
d2hpY2gKKy8vIHdvdWxkIG5lZWQgbW9yZSB3b3JrIHRvIGJlIGluY2x1ZGVkIGZyb20gV2ViQ29y
ZS4KKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIDB4OEQ1NworCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjZGVmaW5lIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCAweDhDRTAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfRVhUIDB4OEQ0MAor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIHBhY2tl
ZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUgPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2ls
IjsKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVNoYWRlckNvbXBpbGVy
KCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21Q
aXhlbHMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit7Cisg
ICAgLy8gV2UgY2FuIGFzc3VtZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgYmVjYXVzZSB0aGUgY2Fs
bGluZyBmdW5jdGlvbnMKKyAgICAvLyB1c2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgIGludCB0
b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICBwaXhlbHNbaSArIDNdID0gMjU1OworfQorI2Vu
ZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNBbmRDb252ZXJ0
VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVu
c2lnbmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICAvLyBOVklESUEgZHJpdmVycyBoYXZlIGEgYnVn
IHdoZXJlIGNhbGxpbmcgcmVhZFBpeGVscyBpbiBCR1JBIGNhbiByZXR1cm4gdGhlIHdyb25nIHZh
bHVlcyBmb3IgdGhlIGFscGhhIGNoYW5uZWwgd2hlbiB0aGUgYWxwaGEgaXMgb2ZmIGZvciB0aGUg
Y29udGV4dC4KKyAgICBnbDo6UmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOworICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgc3JjLndpZHRo
ID0gd2lkdGg7CisgICAgc3JjLnJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIHNyYy5kYXRhID0g
cGl4ZWxzOworCisgICAgdkltYWdlX0J1ZmZlciBkZXN0OworICAgIGRlc3QuaGVpZ2h0ID0gaGVp
Z2h0OworICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKKyAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGgg
KiA0OworICAgIGRlc3QuZGF0YSA9IHBpeGVsczsKKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgZnJvbSBSR0JBIHRvIEJHUkEuCisgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEs
IDAsIDMgfTsKKyAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3Qs
IG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworI2Vsc2UKKyAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRo
ICogaGVpZ2h0ICogNDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0g
NCkKKyAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEp
CisgICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKHdpZHRoLCBoZWlnaHQsIHBpeGVs
cyk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3sKKyAgICB2YWxpZGF0ZURlcHRoU3RlbmNpbChwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25OYW1lKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAg
Y29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgR0x1aW50IGNvbG9yRm9ybWF0
LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7CisgICAgaWYgKGF0dHJzLmFscGhhKSB7
CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBjb2xv
ckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQor
ICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSB7CisgICAgICAgIC8vIFdlIGRv
bid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBp
cyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzLgorCisgICAgICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVu
c2lvbnMoKTsKKyAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3ZSBr
bm93IHdlIGhhdmUgaXQuCisgICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUpKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsK
KyAgICB9CisKKyAgICAvLyBSZXNpemUgbXVsdGlzYW1wbGUgRkJPLgorICAgIGlmIChhdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIGdsOjpH
ZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19BTkdMRSwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAg
ICAgLy8gVXNpbmcgbW9yZSB0aGFuIDQgc2FtcGxlcyBpcyBzbG93IG9uIHNvbWUgaGFyZHdhcmUg
YW5kIGlzIHVubGlrZWx5IHRvCisgICAgICAgIC8vIHByb2R1Y2UgYSBzaWduaWZpY2FudGx5IGJl
dHRlciByZXN1bHQuCisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4
U2FtcGxlQ291bnQpOworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBnZXRFeHRlbnNp
b25zKCkucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdMX1JFTkRFUkJVRkZFUiwgc2Ft
cGxlQ291bnQsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRU
QUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAg
ICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIGds
OjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBnZXRFeHRlbnNpb25zKCkucmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIC8vIFdlYkdMIDEu
MCdzIHJ1bGVzIHN0YXRlIHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJz
CisgICAgICAgICAgICAvLyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5UIHBvaW50LgorICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkgJiYgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVMpCisgICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwg
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFD
SE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFD
SE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIo
R0xfUkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKGdsOjpDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAg
ICAgICAgLy8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIEFTU0VSVChtX3RleHR1
cmUpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5n
U3RvcmUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0
dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCk7CisgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0R0w6
OklPU3VyZmFjZVRleHR1cmVUYXJnZXQsIG1fdGV4dHVyZSwgMCk7CisjZWxpZiBQTEFURk9STShH
VEspCisgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3Rl
eHR1cmUpOworICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAw
LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJB
TUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdM
RSwgbV90ZXh0dXJlLCAwKTsKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkgeworICAgICAg
ICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fY29tcG9zaXRv
clRleHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
TkdMRSwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZv
cm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICAgICAg
Z2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDAsIG1faW50ZXJuYWxD
b2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApOworICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5H
TEUsIDApOworICAgIH0KKyNlbHNlCisjZXJyb3IgRklYTUU6IFBvcnQgdG8gbm9uLUNvY29hIHBs
YXRmb3Jtcy4KKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKKworICAgIGF0dGFjaERlcHRoQW5k
U3RlbmNpbEJ1ZmZlcklmTmVlZGVkKGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIGlmIChhdHRy
cy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJvKQorICAgICAg
ICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbXVzdFJl
c3RvcmVGQk87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaERlcHRo
QW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0
cmlidXRlcygpOworCisgICAgaWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwg
fHwgYXR0cnMuZGVwdGgpKSB7CisgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
U3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgLy8gV2ViR0wgMS4wJ3MgcnVsZXMgc3RhdGUgdGhhdCBjb21i
aW5lZCBkZXB0aC9zdGVuY2lsIHJlbmRlcmJ1ZmZlcnMKKyAgICAgICAgLy8gaGF2ZSB0byBiZSBh
dHRhY2hlZCB0byB0aGUgc3ludGhldGljIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCBwb2ludC4K
KyAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCisgICAgICAgICAgICBnbDo6RnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIERFUFRIX1NURU5DSUxfQVRUQUNITUVO
VCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1F
TlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAg
aWYgKGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVS
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgZ2w6OkJpbmRSZW5k
ZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKKyAgICB9CisKKyAgICBpZiAoZ2w6OkNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7
CisgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZB
TFNFKTsKKworICAgIEdMaW50IGJvdW5kRnJhbWVCdWZmZXI7CisgICAgZ2w6OkdldEludGVnZXJ2
KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZib3VuZEZyYW1lQnVmZmVyKTsKKyAgICBnbDo6Qmlu
ZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUsIG1fbXVsdGlzYW1wbGVGQk8p
OworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSwgbV9m
Ym8pOworCisgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgbW9yZSBlZmZpY2llbnQgc29sdXRpb24g
Zm9yIGlPUy4KKyAgICBJbnRSZWN0IHJlc29sdmVSZWN0ID0gcmVjdDsKKyAgICAvLyBXaGVuIHVz
aW5nIGFuIEVTIDIuMCBjb250ZXh0LCB0aGUgZnVsbCBmcmFtZWJ1ZmZlciBtdXN0IGFsd2F5cyBi
ZQorICAgIC8vIHJlc29sdmVkOyBwYXJ0aWFsIGJsaXRzIGFyZSBub3QgYWxsb3dlZC4KKyAgICBp
ZiAoIWlzR0xFUzJDb21wbGlhbnQoKSB8fCByZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzb2x2
ZVJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwor
CisgICAgZ2w6OkJsaXRGcmFtZWJ1ZmZlckFOR0xFKHJlc29sdmVSZWN0LngoKSwgcmVzb2x2ZVJl
Y3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1heFkoKSwgcmVzb2x2ZVJl
Y3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3Qu
bWF4WSgpLCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9ORUFSRVNUKTsKKyAgICBnbDo6QmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlJlbmRlcmJ1ZmZl
clN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBzd2l0Y2gg
KHBuYW1lKSB7CisgICAgY2FzZSBNQVhfVEVYVFVSRV9TSVpFOgorICAgICAgICBnbDo6R2V0SW50
ZWdlcnYoTUFYX1RFWFRVUkVfU0laRSwgdmFsdWUpOworICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9u
cygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQorICAgICAgICAgICAg
KnZhbHVlID0gc3RkOjptaW4oNDA5NiwgKnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgorICAgICAgICBnbDo6R2V0SW50ZWdlcnYoTUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgdmFsdWUpOworICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9u
cygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQorICAgICAgICAgICAg
KnZhbHVlID0gc3RkOjptaW4oMTAyNCwgKnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIC8vIFNvbWUgb2xkZXIgaGFyZHdhcmUgYWR2ZXJ0aXNlcyBhIGxhcmdl
ciBtYXhpbXVtIHRoYW4gdGhleQorICAgIC8vIGNhbiBhY3R1YWxseSBoYW5kbGUuIFJhdGhlciB0
aGFuIGRldGVjdGluZyBzdWNoIGRldmljZXMsIHNpbXBseQorICAgIC8vIGNsYW1wIHRoZSBtYXhp
bXVtIHRvIDgxOTIsIHdoaWNoIGlzIGJpZyBlbm91Z2ggZm9yIGEgNUsgZGlzcGxheS4KKyAgICBj
YXNlIE1BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9S
RU5ERVJCVUZGRVJfU0laRSwgdmFsdWUpOworICAgICAgICAqdmFsdWUgPSBzdGQ6Om1pbig4MTky
LCAqdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1BWF9WSUVXUE9SVF9ESU1TOgor
ICAgICAgICBnbDo6R2V0SW50ZWdlcnYoTUFYX1ZJRVdQT1JUX0RJTVMsIHZhbHVlKTsKKyAgICAg
ICAgdmFsdWVbMF0gPSBzdGQ6Om1pbig4MTkyLCB2YWx1ZVswXSk7CisgICAgICAgIHZhbHVlWzFd
ID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMV0pOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAg
IGRlZmF1bHQ6CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIH0K
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQq
IHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pCit7CisgICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5
cGUpOworICAgIEFTU0VSVChyYW5nZSk7CisgICAgQVNTRVJUKHByZWNpc2lvbik7CisKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxPV19JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUVESVVNX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0lOVDoK
KyAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYSAzMi1iaXQgdHdvcy1jb21wbGVtZW50
IGludGVnZXIgZm9ybWF0LgorICAgICAgICByYW5nZVswXSA9IDMxOworICAgICAgICByYW5nZVsx
XSA9IDMwOworICAgICAgICBwcmVjaXNpb25bMF0gPSAwOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUVESVVNX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhJR0hfRkxP
QVQ6CisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGFuIElFRUUgc2luZ2xlLXByZWNp
c2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuCisgICAgICAgIHJhbmdlWzBdID0gMTI3OworICAg
ICAgICByYW5nZVsxXSA9IDEyNzsKKyAgICAgICAgcHJlY2lzaW9uWzBdID0gMjM7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7
CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0MzRGNs
YW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpEZXB0aFJhbmdlZihzdGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oekZhcikpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2w6OkNsZWFyRGVwdGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOworfQorCitF
eHRlbnNpb25zR0wmIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK3sK
KyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1
ZTxFeHRlbnNpb25zR0xBTkdMRT4odGhpcyk7CisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQoreworICAgIC8vIEZJWE1FOiByZW1vdmUg
dGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4s
CisgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZv
cmUgcmVhZGluZyBwaXhlbHMuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkZs
dXNoKCk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgaWYgKGF0
dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsK
KyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgZ2w6OkZsdXNoKCk7CisgICAgfQor
ICAgIGdsOjpSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0
YSk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pCisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBpZiAoIWF0dHJzLmFscGhhICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpCR1JBKSAmJiAobV9zdGF0ZS5ib3Vu
ZEZCTyA9PSBtX2ZibyB8fCAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0g
bV9tdWx0aXNhbXBsZUZCTykpKQorICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3
aWR0aCwgaGVpZ2h0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkpOworI2VuZGlm
Cit9CisKKworLy8gVGhlIGNvbnRlbnRzIG9mIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
IGZvbGxvdywgcG9ydGVkIHRvIHVzZSBBTkdMRS4KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uKQoreworICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lv
bnMoKTsKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChh
dHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5h
YmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2Ug
ZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgorICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVl
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAg
ICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMu
YW50aWFsaWFzKSB7CisgICAgICAgIC8vIEZJWE1FOiBtdXN0IGFkanVzdCB0aGlzIHdoZW4gdXBn
cmFkaW5nIHRvIFdlYkdMIDIuMCAvIE9wZW5HTCBFUyAzLjAgc3VwcG9ydC4KKyAgICAgICAgaWYg
KCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
IHx8ICFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgfHwg
IWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX09FU19yZ2I4X3JnYmE4IikpIHsKKyAgICAgICAgICAg
IGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgICAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0
ZXMoYXR0cnMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1
cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgICAgICAg
ICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Iik7
CisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX09FU19yZ2I4X3JnYmE4
Iik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikK
K3sKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHJvd0J5dGVzID0gQ2hlY2tlZDxp
bnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRXaWR0aCkgKiA0OworICAgIGlmIChyb3dCeXRl
cy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENoZWNrZWQ8aW50LCBS
ZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSByb3dCeXRlcyAqIG1fY3VycmVudEhl
aWdodDsKKyAgICBpZiAodG90YWxCeXRlc0NoZWNrZWQuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgaW50IHRvdGFsQnl0ZXMgPSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVH
ZXQoKTsKKworICAgIGF1dG8gcGl4ZWxzID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+
KHRvdGFsQnl0ZXMpOworICAgIGlmICghcGl4ZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFsQnl0ZXMpOworCisgICAgaWYg
KCFjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkgeworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkgeworICAgICAgICAgICAgLy8gUHJl
bXVsdGlwbHkgYWxwaGEuCisgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1
LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhl
bHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAv
IDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNb
aSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBw
YWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgIC8v
IEZJWE1FOiB3b3JrIG9uIGlPUyBpbnRlZ3JhdGlvbi4KKyAgICBwcmVzZW50UmVuZGVyYnVmZmVy
KCk7CisjZW5kaWYKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKikKK3sKKyAgICAvLyBOb3QgbmVlZGVk
IGF0IHRoZSBtb21lbnQsIHNvIHJldHVybiB0aGF0IG5vdGhpbmcgd2FzIGRvbmUuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIC8vIFJlYWRpbmcg
cHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNo
IGlzCisgICAgLy8gbG9zc3kuCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlw
bGllZEFscGhhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKTsKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2Vk
ID0gNCAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50V2lkdGgpICogQ2hl
Y2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRIZWlnaHQpOworICAgIGlmICh0b3Rh
bEJ5dGVzQ2hlY2tlZC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBpbWFnZURhdGE7
CisgICAgaW50IHRvdGFsQnl0ZXMgPSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVHZXQoKTsKKwor
ICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7CisKKyAgICAvLyBD
b252ZXJ0IHRvIFJHQkEuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9
IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisgICAg
cmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJl
cGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAoY29udGV4dEF0dHJp
YnV0ZXMoKS5hbnRpYWxpYXMpCisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkoKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBzdGQ6OnN3YXAobV90
ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBt
X2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG1fZmJvKTsKKyAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90
ZXh0dXJlLCAwKTsKKyAgICBnbDo6Rmx1c2goKTsKKworICAgIGlmIChtX3N0YXRlLmJvdW5kRkJP
ICE9IG1fZmJvKQorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7CisgICAgZWxzZQorICAgICAgICBnbDo6
QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwor
I2Vsc2UKKyAgICBnbDo6Rmx1c2goKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGlu
dCBwaXhlbHNTaXplKQoreworICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBt
X2N1cnJlbnRIZWlnaHQgKiA0KQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSgpOworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRy
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8p
IHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsOjpC
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBib29s
IG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGdsOjpHZXRJbnRlZ2VydihH
TF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25tZW50
ID4gNCkgeworICAgICAgICBnbDo6UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOwor
ICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKworICAgIHJl
YWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoMCwgMCwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwgcGl4ZWxzKTsKKworICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGln
bm1lbnQpCisgICAgICAgIGdsOjpQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0Fs
aWdubWVudCk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJP
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpCit7CisgICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWln
aHQgPT0gbV9jdXJyZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQod2lk
dGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
KQorICAgICAgICByZXR1cm47CisKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIG1f
Y3VycmVudFdpZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKKyAg
ICBUZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdM
X0ZBTFNFKTsKKyAgICBUZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhF
UiwgR0xfRkFMU0UpOworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVGQk9zKElu
dFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRl
cygpOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xmbG9h
dCBjbGVhckNvbG9yW10gPSB7MCwgMCwgMCwgMH0sIGNsZWFyRGVwdGggPSAwOworICAgIEdMaW50
IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUs
IEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOworICAgIEdM
dWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmYsIHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZm
ZmY7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAg
IGdsOjpHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOworICAgIGds
OjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIGdsOjpHZXRCb29sZWFudihHTF9DT0xPUl9X
UklURU1BU0ssIGNvbG9yTWFzayk7CisgICAgZ2w6OkNvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFKTsKKyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgZ2w6
OkdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKKyAgICAgICAgZ2w6OkdldEJv
b2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIGdsOjpEZXB0
aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklU
OworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBnbDo6R2V0SW50ZWdl
cnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7CisgICAgICAgIGdsOjpD
bGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX1dSSVRF
TUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOworICAgICAgICBn
bDo6R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2Fz
dDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICBnbDo6U3RlbmNpbE1hc2tTZXBh
cmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5D
SUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICBnbDo6Q2xlYXIoY2xlYXJNYXNrKTsKKworICAg
IGdsOjpDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3Jb
Ml0sIGNsZWFyQ29sb3JbM10pOworICAgIGdsOjpDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xv
ck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAoYXR0cnMuZGVw
dGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoY2xlYXJE
ZXB0aCk7CisgICAgICAgIGdsOjpEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYg
KGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgZ2w6OkNsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwp
OworICAgICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNpbE1hc2sp
OworICAgICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBzdGVuY2lsTWFza0Jh
Y2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgZ2w6OkJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRG
Qk8pOworCisgICAgZ2w6OkZsdXNoKCk7Cit9CisKK0ludFNpemUgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQg
PSB0ZXh0dXJlOworICAgIGdsOjpBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7Cisg
ICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkF0
dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
dWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QmluZEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkJpbmRCdWZm
ZXIodGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgZmJvOworICAgIGlmIChi
dWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNlCisgICAgICAgIGZibyA9IChj
b250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7
CisgICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRkJPKSB7CisgICAgICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gZmJvOwor
ICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwg
cmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
VGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0
YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOworICAgIGdsOjpCaW5kVGV4
dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBm
IGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2w6OkJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShH
QzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OkJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxw
aGEpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQzNE
ZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwg
R0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkJsZW5kRnVuY1NlcGFyYXRlKHNy
Y1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNp
emUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRy
IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNh
Z2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCdWZm
ZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKK30KKwordm9pZCogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nlc3MpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpNYXBCdWZmZXJSYW5n
ZSh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworfQorCitHQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6VW5tYXBCdWZmZXIodGFyZ2V0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEo
R0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpdGVUYXJnZXQsIEdDM0RpbnRwdHIgcmVh
ZE9mZnNldCwgR0MzRGludHB0ciB3cml0ZU9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNvcHlCdWZmZXJTdWJEYXRhKHJlYWRU
YXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rz
aXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OkdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
cG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlRleFN0b3JhZ2UyRCh0YXJnZXQsIGxl
dmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OlRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0MzRGVudW0gcG5h
bWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGdsOjpHZXRBY3RpdmVVbmlmb3Jtc2l2KHBy
b2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFt
ZSwgcGFyYW1zLmRhdGEoKSk7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFy
Z2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQzNE
Y2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNsZWFyQ29sb3IociwgZywgYiwgYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDM0RiaXRmaWVsZCBt
YXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpDbGVhcihtYXNrKTsK
KyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsOjpDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9v
bGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6Q29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICAvLyBXZSBuZWVkIHRoaXMgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgSU9TdXJmYWNlIGJh
Y2tidWZmZXJzLCBidXQgd2UKKyAgICAvLyBkb24ndCB3YW50IGl0IGV4cG9zZWQgdG8gV2ViR0wg
dXNlciBzaGFkZXJzLiBUZW1wb3JhcmlseSBkaXNhYmxlCisgICAgLy8gaXQgZHVyaW5nIHNoYWRl
ciBjb21waWxhdGlvbi4KKyAgICBnbDo6RGlzYWJsZUV4dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90
ZXh0dXJlX3JlY3RhbmdsZSIpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAg
Z2w6OlJlcXVlc3RFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Q29tcGlsZVNoYWRlcihzaGFkZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGdsOjpC
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Cisg
ICAgfQorICAgIGdsOjpDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFz
ICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1w
bGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGF1dG8gYXR0
cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBt
X3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAg
ICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKKyAgICB9CisgICAgZ2w6OkNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAg
ICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxG
YWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OkN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0
aEZ1bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6RGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6RGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRldGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGlzYWJs
ZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2w6OkRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGdsOjpEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CisgICAgY2hlY2tHUFVTdGF0dXMo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZz
ZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRyYXdFbGVtZW50cyht
b2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ob2Zmc2V0KSkpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2go
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpGaW5pc2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsOjpGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBi
dWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RnJvbnRGYWNlKG1vZGUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51
bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdlbmVyYXRl
TWlwbWFwKHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9
IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01B
WF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1h
eEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVk
ZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdM
aW50IHNpemUgPSAwOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICBnbDo6R2V0QWN0aXZlQXR0
cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUs
ICZ0eXBlLCBuYW1lLmRhdGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5n
dGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZl
QXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCit7CisgICAgcmV0dXJuIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaW5k
ZXgsIGluZm8pOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVV
bmlmb3JtSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsK
KyAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEgsICZtYXhVbmlmb3JtU2l6ZSk7CisKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heFVuaWZv
cm1TaXplKTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRl
cm1pbmF0aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9
IDA7CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIGdsOjpHZXRBY3RpdmVVbmlmb3JtKHByb2dy
YW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFt
ZS5kYXRhKCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBp
bmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykK
K3sKKyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaW5kZXgsIGluZm8p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSog
Y291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9ncmFtKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRBdHRhY2hl
ZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKK30KKworaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAg
ICAgIHJldHVybiAtMTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgcmV0dXJu
IGdsOjpHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
CitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVy
biBnZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOworCisg
ICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGlu
ZyBhIGhhbmcgaWYKKyAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNl
cyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCisgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3Vs
ZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBHQzNEZW51bSBlcnJvciA9IGdsOjpHZXRFcnJv
cigpOworICAgICAgICBpZiAoZXJyb3IgPT0gTk9fRVJST1IpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKKyAgICAgICAgbW92ZWRBbkVy
cm9yID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbW92ZWRBbkVycm9yOworfQorCitHQzNE
ZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IoKQoreworICAgIGlmICghbV9z
eW50aGV0aWNFcnJvcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUg
Y3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKKyAgICAg
ICAgLy8gdGhhdCBlcnJvciBpcyBhbHJlYWR5IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVo
YXZpb3Igb2YgYm90aAorICAgICAgICAvLyBnbEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBv
bmx5IHJlcG9ydCBlYWNoIGVycm9yIGNvZGUgb25jZS4KKyAgICAgICAgbW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCk7CisgICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtl
Rmlyc3QoKTsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
Z2w6OkdldEVycm9yKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U3RyaW5nKEdDM0RlbnVtIG5hbWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
cmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5n
KG5hbWUpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsOjpIaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjppc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBp
ZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpJc0J1ZmZlcihidWZmZXIpOworfQorCitHQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OklzRW5hYmxlZChjYXAp
OworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZl
cihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIGlmICghZnJhbWVidWZmZXIp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBnbDo6SXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Cit9CisKK0dDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpJc1Byb2dyYW0ocHJv
Z3JhbSk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1JlbmRl
cmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgcmV0dXJuIGdsOjpJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworfQor
CitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6SXNTaGFk
ZXIoc2hhZGVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gZ2w6OklzVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6TGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6TGlua1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9h
dCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6UG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJv
b2xlYW4gaW52ZXJ0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpTYW1w
bGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpTY2lz
c29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gc3RyaW5nLnV0
ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3Ry
aW5nLmRhdGEoKTsKKyAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0
cmluZy5sZW5ndGgoKTsKKyAgICBnbDo6U2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNv
dXJjZVB0ciwgJnNoYWRlclNvdXJjZUxlbmd0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWlu
dCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpTdGVuY2lsRnVu
YyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQg
cmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlN0ZW5jaWxNYXNrKG1hc2spOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFp
bCwgR0MzRGVudW0genBhc3MpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OlN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFz
cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVlKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVy
aShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbDo6VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IHNpemUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OlVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsOjpVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2w6OlVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2
MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OlVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMuCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OlVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2
MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9hdCog
YXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDQuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjApCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCB2MCwgR0MzRGludCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6VW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBjb25zdCBHQzNEaW50KiBhcnJheSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMi4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
VW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0Mz
RGludCB2MSwgR0MzRGludCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6VW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDMuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OlVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdD
M0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0RpbnQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKK3sKKyAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdD
M0RmbG9hdCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDQuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCog
YXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDkuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXgzZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7
CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2LgorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9u
LCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OlZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0
cmliMWYoaW5kZXgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgs
IGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
MmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYx
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdD
M0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEs
IHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2
KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9h
dCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmli
NGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWI0
ZnYoaW5kZXgsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVy
dGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0
eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRy
IG9mZnNldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0
cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQor
CitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhB
cnJheSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IGFycmF5ID0g
MDsKKyAgICBnbDo6R2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CisgICAgcmV0dXJuIGFycmF5
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQ
bGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGVsZXRlVmVydGV4QXJyYXlz
KDEsICZhcnJheSk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheShhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCaW5kVmVydGV4QXJyYXkoYXJyYXkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCb29sZWFudihHQzNEZW51
bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6R2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5h
bWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2w6OkdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorICAgIAordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgICp2YWx1ZSA9IDA7CisgICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcg
dGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGlu
ZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4K
KyAgICAvLyBnbDo6R2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoYXR0YWNo
bWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCisgICAgICAgIGF0dGFjaG1lbnQgPSBE
RVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4K
KyAgICBnbDo6R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRh
Y2htZW50LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6Okdl
dFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXJzWzJdLCBHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQoreworICAgIFVOVVNF
RF9QQVJBTShzaGFkZXJzKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAgIExPRyhXZWJH
TCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKKwor
ICAgIFN0cmluZ0J1aWxkZXIgcHJvY2Vzc2VkTG9nOworCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBh
ICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNoYWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNh
dXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dp
bmcKKyAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3Jp
dGUgdGhlIGNvZGUgdGhhdAorICAgIC8vIGlzIGNhdXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0
ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAg
IGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJu
aW5nLmdldCgpLmxlbmd0aCgpIDogMDsKKyAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJz
dHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKKworICAgIExPRyhX
ZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgZ2w6Okdl
dFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXplaSBzaXpl
ID0gMDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgZ2w6OkdldFByb2dy
YW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgIEdD
M0RzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICByZXR1
cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgp
LCBzaXplKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBw
bmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNo
YWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsZW5ndGggPSAwOwor
ICAgIGdsOjpHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBHTHNp
emVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICBnbDo6
R2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKwor
ICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07CisgICAgcmV0
dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBz
aXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291
cmNlKFBsYXRmb3JtM0RPYmplY3QpCit7CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1l
dGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldFRleFBhcmFtZXRlcml2KHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
R2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsOjpHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsK
K30KKworR0MzRGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEFT
U0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBn
bDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJp
Yml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldFZlcnRleEF0dHJpYml2KGluZGV4
LCBwbmFtZSwgdmFsdWUpOworfQorCitHQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBHTHZvaWQqIHBvaW50ZXIgPSAw
OworICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVy
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihyZWludGVycHJldF9jYXN0
PGludHB0cl90Pihwb2ludGVyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KKyAgICBnbDo6VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJl
bnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdl
U2l6ZSwgZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK1BsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsOjpHZW5CdWZm
ZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEs
ICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgcmV0dXJuIGdsOjpDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsOjpHZW5SZW5kZXJi
dWZmZXJzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpDcmVhdGVTaGFkZXIoKHR5cGUg
PT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFE
RVIpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVh
dGVUZXh0dXJlKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9
IDA7CisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZvKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQuYWRkKG8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91bmRGQk8pIHsKKyAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2lu
ZworICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4KKyAgICAgICAg
YmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKKyAgICB9CisgICAgZ2w6OkRlbGV0ZUZy
YW1lYnVmZmVycygxLCAmZnJhbWVidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZyZW5kZXJidWZmZXIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlbGV0ZVNoYWRl
cihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0
dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8m
IGtleVZhbHVlKSB7CisgICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0
dXJlOworICAgIH0pOworICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3Ip
Cit7CisgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgdG8KKyAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBz
byBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAorICAgIC8vIGFueSBlcnJvcnMgZnJvbSBn
bDo6RXJyb3IgYmVmb3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgorICAgIG1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChl
cnJvcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcmtDb250ZXh0Q2hh
bmdlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFya0xheWVyQ29tcG9zaXRlZCgpCit7CisgICAgbV9sYXll
ckNvbXBvc2l0ZWQgPSB0cnVlOworCisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0
b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaWRDb21wb3NpdGUoKTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZvcmNlQ29udGV4dExvc3QoKQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29w
eVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+Zm9yY2VDb250ZXh0TG9zdCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWN5Y2xlQ29udGV4dCgpCit7
CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAg
ICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKK3sKKyAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQt
PmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQor
eworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBj
b3VudCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNp
emVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7CisgICAgY2hlY2tHUFVT
dGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
RGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBnZXRFeHRl
bnNpb25zKCkudmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7Cit9CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoQU5HTEUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9UZW1wb3JhcnlB
TkdMRVNldHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
VGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcAppbmRleCBiYjk1OGRhMDJhMGQ2NGY5ZDQzMmQzYmJi
YzFmOWZhZGE0ZThiZjJiLi42MTk5NDNkYTJiMzJkOTMwMGRlYWZkMTA3M2I0MmYwNWRkMGY1ZWJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9UZW1w
b3JhcnlBTkdMRVNldHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYm
IFVTRShBTkdMRSkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKEFOR0xF
KQogI2luY2x1ZGUgIlRlbXBvcmFyeUFOR0xFU2V0dGluZy5oIgogCiAjaW5jbHVkZSA8QU5HTEUv
ZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KQEAgLTYwLDQgKzYwLDQgQEAgVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nOjp+VGVtcG9yYXJ5QU5HTEVTZXR0aW5nKCkKIAogfQogCi0jZW5kaWYg
Ly8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShBTkdMRSkKKyNlbmRpZiAvLyBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5oCmluZGV4IGE5ZDUwMTc2ZWNjZDMzZDBlNzU5NGI3YmJjMjE2ZTIyYjNjZDU0YjEuLjUzMmJl
Y2YxYTkzMmNlN2ZhNzVlY2E4OTZiMzllNDk5Njc5OTY3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
LmgKQEAgLTI3MSw3ICsyNzEsNyBAQCBwcml2YXRlOgogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudFRpbWUoKSBvdmVycmlkZTsKICAgICB2b2lkIHdhaXRGb3JWaWRlb091
dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UoKTsKIAotICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRv
UGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpIG92ZXJyaWRlOworICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkp
IG92ZXJyaWRlOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IGIyZjNhMmFkOGJiNGFiMGNjNDA3Y2E4YTNlY2Nh
OWRmM2Q4NWUxOGUuLmIzZGM3YWE3ZWI5MDRhYWQ0ODJmYTYzZWViNmZkYzBkZTY0YzlkNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtMzgsMTEgKzM4LDExIEBACiAjaW1wb3J0ICJDRE1T
ZXNzaW9uQVZGb3VuZGF0aW9uT2JqQy5oIgogI2ltcG9ydCAiQ29va2llLmgiCiAjaW1wb3J0ICJE
ZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaCIKLSNpbXBvcnQgIkV4dGVuc2lvbnMzRC5oIgorI2lt
cG9ydCAiRXh0ZW5zaW9uc0dMLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oIgogI2ltcG9ydCAiSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5oIgogI2ltcG9ydCAiSW5i
YW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlQVZGLmgiCiAjaW1wb3J0ICJJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGT2JqQy5oIgpAQCAtMjI5NSw3ICsyMjk1LDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dChHcmFwaGljc0Nv
bnRleHQmIGMKIAogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK2Jv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y29weVZpZGVvVGV4dHVyZVRv
UGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBQbGF0Zm9y
bTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQogewogICAgIEFTU0VSVChj
b250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAppbmRleCA1MzE0MDliZDM2Yjg2NGM0
ZDUyYTEwNmE5ZjFhMjZlNDliMTQ1ZmFiLi4wNTAwMWU3M2YzMTZmMmE3MzU1N2JhOTU3NmYxOTQy
YTlkMTcwOWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaApAQCAtMjIzLDcgKzIyMyw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCB1cGRhdGVMYXN0SW1hZ2UoKTsKICAgICB2b2lkIHBhaW50KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7
CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CiAKICAg
ICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKICAg
ICAvLyBjYWxsZWQgd2hlbiB0aGUgcmVuZGVyaW5nIHN5c3RlbSBmbGlwcyB0aGUgaW50byBvciBv
dXQgb2YgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIG1vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
bW0KaW5kZXggMjNjNGQ0OTYyMzE4YmQ0YzM4YjZlMjI2OTU1ODhmOGYwNzE4ZmI4NS4uNzUyZjg5
ZWFiYTE2NzBkNmRkM2ZkN2Q2NDc4YzQyOTRjYTcyZWI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQy5tbQpAQCAtNjMxLDcgKzYzMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvCiAgICAg
Y29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlUmVjdC5zaXplKCksIG91dHB1dFJl
Y3QsIGltYWdlUmVjdCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0
cHV0VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxp
cFkpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQogewogICAg
IC8vIFdlIGhhdmUgYmVlbiBhc2tlZCB0byBwYWludCBpbnRvIGEgV2ViR0wgY2FudmFzLCBzbyB0
YWtlIHRoYXQgYXMgYSBzaWduYWwgdG8gY3JlYXRlCiAgICAgLy8gYSBkZWNvbXByZXNzaW9uIHNl
c3Npb24sIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUgbmF0aXZlIHZpZGVvIGNhbid0IGFsc28gYmUg
ZGlzcGxheWVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0ODg5NTdlMmU1N2M4MDY2NzAxODMxYjMwN2NkOTc4YzFkZDM5NzE2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0j
aWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShDQUlSTykKLQotI2luY2x1ZGUg
IkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZVNv
dXJjZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVm
UHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkgPSBk
ZWZhdWx0OwotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFj
dEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSkKLXsKLSAgICBpZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAv
LyBXZSBuZWVkIHRoaXMgdG8gc3RheSBpbiBzY29wZSBiZWNhdXNlIHRoZSBuYXRpdmUgaW1hZ2Ug
aXMganVzdCBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGF0YS4KLSAgICBBbHBoYU9wdGlvbiBhbHBo
YU9wdGlvbiA9IHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCA6
IEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkOwotICAgIEdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uID0gaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUgPyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkOwotICAgIGF1dG8gc291cmNlID0gSW1hZ2VTb3VyY2U6
OmNyZWF0ZShudWxscHRyLCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24p
OwotICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90aGluZzsKLQotICAgIGlmIChtX2ltYWdl
LT5kYXRhKCkpIHsKLSAgICAgICAgc291cmNlLT5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1
ZSk7Ci0gICAgICAgIGlmICghc291cmNlLT5mcmFtZUNvdW50KCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIG1faW1hZ2VTdXJmYWNlID0gc291cmNlLT5jcmVhdGVGcmFtZUlt
YWdlQXRJbmRleCgwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1f
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIC8vIDEuIEZvciB0
ZXhJbWFnZTJEIHdpdGggSFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlw
bHlBbHBoYSBoYWQgYmVlbiBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3Ig
ZWFjaCBwaXhlbCwKLSAgICAgICAgLy8gd2hpY2ggaXMgdHJ1ZSBhdCBwcmVzZW50IGFuZCBtYXkg
YmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIGFuZCBuZWVkcyBhZGp1c3RtZW50IGFjY29yZGluZ2x5
LgotICAgICAgICAvLyAyLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxDYW52YXNFbGVtZW50IGlu
cHV0IGluIHdoaWNoIEFscGhhIGlzIGFscmVhZHkgUHJlbXVsdGlwbGllZCBpbiB0aGlzIHBvcnQs
IAotICAgICAgICAvLyBkbyBBbHBoYURvVW5tdWx0aXBseSBpZiBVTlBBQ0tfUFJFTVVMVElQTFlf
QUxQSEFfV0VCR0wgaXMgc2V0IHRvIGZhbHNlLgotICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxw
aGEgJiYgbV9pbWFnZUh0bWxEb21Tb3VyY2UgIT0gRE9NU291cmNlOjpWaWRlbykKLSAgICAgICAg
ICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvVW5tdWx0aXBseTsKLQotICAgICAgICAvLyBpZiBt
X2ltYWdlU3VyZmFjZSBpcyBub3QgYW4gaW1hZ2UsIGV4dHJhY3QgYSBjb3B5IG9mIHRoZSBzdXJm
YWNlCi0gICAgICAgIGlmIChtX2ltYWdlU3VyZmFjZSAmJiBjYWlyb19zdXJmYWNlX2dldF90eXBl
KG1faW1hZ2VTdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKLSAg
ICAgICAgICAgIEludFNpemUgc3VyZmFjZVNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2VT
dXJmYWNlLmdldCgpKTsKLSAgICAgICAgICAgIGF1dG8gdG1wU3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHN1cmZhY2VTaXpl
LndpZHRoKCksIHN1cmZhY2VTaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBjb3B5UmVjdEZy
b21PbmVTdXJmYWNlVG9Bbm90aGVyKG1faW1hZ2VTdXJmYWNlLmdldCgpLCB0bXBTdXJmYWNlLmdl
dCgpLCBJbnRTaXplKCksIEludFJlY3QoSW50UG9pbnQoKSwgc3VyZmFjZVNpemUpLCBJbnRTaXpl
KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgICAgICAgICBtX2ltYWdlU3VyZmFjZSA9
IFdURk1vdmUodG1wU3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1faW1h
Z2VTdXJmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShtX2ltYWdlU3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFKTsKLQotICAgIEludFNpemUgaW1hZ2VTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2lt
YWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgbV9pbWFnZVdpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7
Ci0gICAgbV9pbWFnZUhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKLSAgICBpZiAoIW1faW1h
Z2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChtX2ltYWdlU3VyZmFjZS5nZXQoKSkg
IT0gQ0FJUk9fRk9STUFUX0FSR0IzMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5z
aWduZWQgaW50IHNyY1VucGFja0FsaWdubWVudCA9IDE7Ci0gICAgc2l6ZV90IGJ5dGVzUGVyUm93
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsK
LSAgICBzaXplX3QgYml0c1BlclBpeGVsID0gMzI7Ci0gICAgdW5zaWduZWQgcGFkZGluZyA9IGJ5
dGVzUGVyUm93IC0gYml0c1BlclBpeGVsIC8gOCAqIG1faW1hZ2VXaWR0aDsKLSAgICBpZiAocGFk
ZGluZykgewotICAgICAgICBzcmNVbnBhY2tBbGlnbm1lbnQgPSBwYWRkaW5nICsgMTsKLSAgICAg
ICAgd2hpbGUgKGJ5dGVzUGVyUm93ICUgc3JjVW5wYWNrQWxpZ25tZW50KQotICAgICAgICAgICAg
KytzcmNVbnBhY2tBbGlnbm1lbnQ7Ci0gICAgfQotCi0gICAgbV9pbWFnZVBpeGVsRGF0YSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIG1f
aW1hZ2VTb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0OjpCR1JBODsKLSAgICBtX2ltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNp
emUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoIWlt
YWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNv
bnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlmICghcGxhdGZvcm1Db250
ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4
dC0+Y3IoKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQtPnNhdmUoKTsKLQotICAgIGNhaXJvX3JlY3Rh
bmdsZShjciwgMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsK
LSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAgICBj
YWlyb19wYWludChjcik7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZh
Y2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAg
ICAgY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VQaXhlbHMpLCBDQUlST19GT1JNQVRf
QVJHQjMyLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCBpbWFnZVNpemUu
d2lkdGgoKSAqIDQpKTsKLQotICAgIC8vIE9wZW5HTCBrZWVwcyB0aGUgcGl4ZWxzIHN0b3JlZCBi
b3R0b20gdXAsIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgaW1hZ2UgaGVyZS4KLSAgICBjYWlyb190
cmFuc2xhdGUoY3IsIDAsIGltYWdlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fc2NhbGUoY3Is
IDEsIC0xKTsKLQotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZF
Uik7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBpbWFnZVN1cmZhY2UuZ2V0KCks
IDAsIDApOwotICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgp
LCAtY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBjYWlyb19maWxsKGNyKTsKLSAgICBwbGF0
Zm9ybUNvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShDQUlSTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEdMQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE1Y2M5ZDYxNTVmZmE4NzJk
M2QxMGIwYWY2ZGE5ZWM3YzVmMjMwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCkBAIC0w
LDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKSAmJiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGll
cy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsK
KworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJ
bWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8g
V2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGltYWdlIGlz
IGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCisgICAgQWxwaGFPcHRpb24gYWxwaGFP
cHRpb24gPSBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgOiBB
bHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZDsKKyAgICBHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbjo6QXBwbGllZDsKKyAgICBhdXRvIHNvdXJjZSA9IEltYWdlU291cmNlOjpj
cmVhdGUobnVsbHB0ciwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsK
KyAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb05vdGhpbmc7CisKKyAgICBpZiAobV9pbWFnZS0+
ZGF0YSgpKSB7CisgICAgICAgIHNvdXJjZS0+c2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUp
OworICAgICAgICBpZiAoIXNvdXJjZS0+ZnJhbWVDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IHNvdXJjZS0+Y3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgoMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2lt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICAvLyAxLiBGb3IgdGV4
SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5
QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVh
Y2ggcGl4ZWwsCisgICAgICAgIC8vIHdoaWNoIGlzIHRydWUgYXQgcHJlc2VudCBhbmQgbWF5IGJl
IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBhbmQgbmVlZHMgYWRqdXN0bWVudCBhY2NvcmRpbmdseS4K
KyAgICAgICAgLy8gMi4gRm9yIHRleEltYWdlMkQgd2l0aCBIVE1MQ2FudmFzRWxlbWVudCBpbnB1
dCBpbiB3aGljaCBBbHBoYSBpcyBhbHJlYWR5IFByZW11bHRpcGxpZWQgaW4gdGhpcyBwb3J0LCAK
KyAgICAgICAgLy8gZG8gQWxwaGFEb1VubXVsdGlwbHkgaWYgVU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMIGlzIHNldCB0byBmYWxzZS4KKyAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhh
ICYmIG1faW1hZ2VIdG1sRG9tU291cmNlICE9IERPTVNvdXJjZTo6VmlkZW8pCisgICAgICAgICAg
ICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1VubXVsdGlwbHk7CisKKyAgICAgICAgLy8gaWYgbV9p
bWFnZVN1cmZhY2UgaXMgbm90IGFuIGltYWdlLCBleHRyYWN0IGEgY29weSBvZiB0aGUgc3VyZmFj
ZQorICAgICAgICBpZiAobV9pbWFnZVN1cmZhY2UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZSht
X2ltYWdlU3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7CisgICAg
ICAgICAgICBJbnRTaXplIHN1cmZhY2VTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlU3Vy
ZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIHRtcFN1cmZhY2UgPSBhZG9wdFJlZihjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBzdXJmYWNlU2l6ZS53
aWR0aCgpLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29weVJlY3RGcm9t
T25lU3VyZmFjZVRvQW5vdGhlcihtX2ltYWdlU3VyZmFjZS5nZXQoKSwgdG1wU3VyZmFjZS5nZXQo
KSwgSW50U2l6ZSgpLCBJbnRSZWN0KEludFBvaW50KCksIHN1cmZhY2VTaXplKSwgSW50U2l6ZSgp
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBX
VEZNb3ZlKHRtcFN1cmZhY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX2ltYWdl
U3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGNhaXJvX3N1cmZh
Y2VfZ2V0X3R5cGUobV9pbWFnZVN1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9J
TUFHRSk7CisKKyAgICBJbnRTaXplIGltYWdlU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFn
ZVN1cmZhY2UuZ2V0KCkpOworICAgIG1faW1hZ2VXaWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOwor
ICAgIG1faW1hZ2VIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgaWYgKCFtX2ltYWdl
V2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQobV9pbWFnZVN1cmZhY2UuZ2V0KCkpICE9
IENBSVJPX0ZPUk1BVF9BUkdCMzIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2ln
bmVkIHNyY1VucGFja0FsaWdubWVudCA9IDE7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBz
aXplX3QgYml0c1BlclBpeGVsID0gMzI7CisgICAgdW5zaWduZWQgcGFkZGluZyA9IGJ5dGVzUGVy
Um93IC0gYml0c1BlclBpeGVsIC8gOCAqIG1faW1hZ2VXaWR0aDsKKyAgICBpZiAocGFkZGluZykg
eworICAgICAgICBzcmNVbnBhY2tBbGlnbm1lbnQgPSBwYWRkaW5nICsgMTsKKyAgICAgICAgd2hp
bGUgKGJ5dGVzUGVyUm93ICUgc3JjVW5wYWNrQWxpZ25tZW50KQorICAgICAgICAgICAgKytzcmNV
bnBhY2tBbGlnbm1lbnQ7CisgICAgfQorCisgICAgbV9pbWFnZVBpeGVsRGF0YSA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOworICAgIG1faW1hZ2VT
b3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0OjpCR1JBODsKKyAgICBtX2ltYWdlU291cmNlVW5wYWNr
QWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNp
emUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIWlt
YWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNv
bnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghcGxhdGZvcm1Db250
ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4
dC0+Y3IoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPnNhdmUoKTsKKworICAgIGNhaXJvX3JlY3Rh
bmdsZShjciwgMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsK
KyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBj
YWlyb19wYWludChjcik7CisKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZh
Y2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAg
ICAgY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VQaXhlbHMpLCBDQUlST19GT1JNQVRf
QVJHQjMyLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCBpbWFnZVNpemUu
d2lkdGgoKSAqIDQpKTsKKworICAgIC8vIE9wZW5HTCBrZWVwcyB0aGUgcGl4ZWxzIHN0b3JlZCBi
b3R0b20gdXAsIHNvIHdlIG5lZWQgdG8gZmxpcCB0aGUgaW1hZ2UgaGVyZS4KKyAgICBjYWlyb190
cmFuc2xhdGUoY3IsIDAsIGltYWdlU2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fc2NhbGUoY3Is
IDEsIC0xKTsKKworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfT1ZF
Uik7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBpbWFnZVN1cmZhY2UuZ2V0KCks
IDAsIDApOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgp
LCAtY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBjYWlyb19maWxsKGNyKTsKKyAgICBwbGF0
Zm9ybUNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShDQUlSTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAKaW5kZXggNmI2N2Y1NWRjOThiMDc2NmEwMzFjM2E0ZTdiOTA2MGZkYjhi
NTA0ZS4uOWRlOTA0NDgwN2I5MTc2OWU0ZjM0ZDM1Y2IxNmU2MzQ1M2U2YmQyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyby5jcHAKQEAgLTcyMyw3ICs3MjMsNyBAQCBQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCYsIEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCitib29s
IEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmLCBHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgZGVzdGluYXRpb25UZXh0dXJl
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZs
aXBZKQogewogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2Fu
dmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3
YXlzIDEuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHQzRENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiYzkzOGI0NDJiODExOGFhYmEzZjQzMzEwNmIxNzdkMGY4Mjc1ZDIzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8z
RCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2Uu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0KLSNpZiBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RORU9OLmgiCi0jZW5k
aWYKLQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KLSNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGF0
YVByb3ZpZGVyLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4KLQotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBTb3VyY2VEYXRhRm9ybWF0QmFzZSB7Ci0gICAgU291
cmNlRm9ybWF0QmFzZVIgPSAwLAotICAgIFNvdXJjZUZvcm1hdEJhc2VBLAotICAgIFNvdXJjZUZv
cm1hdEJhc2VSQSwKLSAgICBTb3VyY2VGb3JtYXRCYXNlQVIsCi0gICAgU291cmNlRm9ybWF0QmFz
ZVJHQiwKLSAgICBTb3VyY2VGb3JtYXRCYXNlUkdCQSwKLSAgICBTb3VyY2VGb3JtYXRCYXNlQVJH
QiwKLSAgICBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cwotfTsKLQotZW51bSBBbHBoYUZvcm1h
dCB7Ci0gICAgQWxwaGFGb3JtYXROb25lID0gMCwKLSAgICBBbHBoYUZvcm1hdEZpcnN0LAotICAg
IEFscGhhRm9ybWF0TGFzdCwKLSAgICBBbHBoYUZvcm1hdE51bUZvcm1hdHMKLX07Ci0KLS8vIFRo
aXMgcmV0dXJucyBTb3VyY2VGb3JtYXROdW1Gb3JtYXRzIGlmIHRoZSBjb21iaW5hdGlvbiBvZiBp
bnB1dCBwYXJhbWV0ZXJzIGlzIHVuc3VwcG9ydGVkLgotc3RhdGljIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IGdldFNvdXJjZURhdGFGb3JtYXQodW5zaWduZWQgY29tcG9uZW50c1BlclBp
eGVsLCBBbHBoYUZvcm1hdCBhbHBoYUZvcm1hdCwgYm9vbCBpczE2Qml0Rm9ybWF0LCBib29sIGJp
Z0VuZGlhbikKLXsKLSAgICBjb25zdCBzdGF0aWMgU291cmNlRGF0YUZvcm1hdEJhc2UgZm9ybWF0
VGFibGVCYXNlWzRdW0FscGhhRm9ybWF0TnVtRm9ybWF0c10gPSB7IC8vIGNvbXBvbmVudHNQZXJQ
aXhlbCB4IEFscGhhRm9ybWF0Ci0gICAgICAgIC8vIEFscGhhRm9ybWF0Tm9uZSAgICAgICAgICAg
IEFscGhhRm9ybWF0Rmlyc3QgICAgICAgICAgICBBbHBoYUZvcm1hdExhc3QKLSAgICAgICAgeyBT
b3VyY2VGb3JtYXRCYXNlUiwgICAgICAgICAgU291cmNlRm9ybWF0QmFzZUEsICAgICAgICAgIFNv
dXJjZUZvcm1hdEJhc2VBICAgICAgICAgIH0sIC8vIDEgY29tcG9uZW50c1BlclBpeGVsCi0gICAg
ICAgIHsgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNvdXJjZUZvcm1hdEJhc2VBUiwgICAg
ICAgICBTb3VyY2VGb3JtYXRCYXNlUkEgICAgICAgICB9LCAvLyAyIGNvbXBvbmVudHNQZXJQaXhl
bAotICAgICAgICB7IFNvdXJjZUZvcm1hdEJhc2VSR0IsICAgICAgICBTb3VyY2VGb3JtYXRCYXNl
TnVtRm9ybWF0cywgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMgfSwgLy8gMyBjb21wb25lbnRz
UGVyUGl4ZWwKLSAgICAgICAgeyBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cywgU291cmNlRm9y
bWF0QmFzZUFSR0IsICAgICAgIFNvdXJjZUZvcm1hdEJhc2VSR0JBICAgICAgICB9IC8vIDQgY29t
cG9uZW50c1BlclBpeGVsCi0gICAgfTsKLSAgICBjb25zdCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgZm9ybWF0VGFibGVbU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHNdWzRd
ID0geyAvLyBTb3VyY2VEYXRhRm9ybWF0OjpCYXNlIHggYml0c1BlckNvbXBvbmVudCB4IGVuZGlh
bgotICAgICAgICAvLyA4Yml0cywgbGl0dGxlIGVuZGlhbiAgICAgICAgICAgICAgICAgOGJpdHMs
IGJpZyBlbmRpYW4gICAgICAgICAgICAgICAgICAgICAxNmJpdHMsIGxpdHRsZSBlbmRpYW4gICAg
ICAgICAgICAgICAgICAgICAgICAxNmJpdHMsIGJpZyBlbmRpYW4KLSAgICAgICAgeyBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSOCwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkxpdHRsZSwgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkJpZyB9LAotICAgICAgICB7IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBOCwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OkE4LCAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2TGl0dGxlLCAg
ICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2QmlnIH0sCi0gICAgICAgIHsgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSOCwgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkE4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2TGl0dGxl
LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2QmlnIH0sCi0gICAgICAgIHsg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgICBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6QVI4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjE2TGl0
dGxlLCAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjE2QmlnIH0sCi0gICAgICAg
IHsgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUjgsICBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCOCwgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0Ix
NkxpdHRsZSwgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkJpZyB9LAotICAg
ICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBQkdSOCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCQTE2TGl0dGxlLCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2QmlnIH0s
Ci0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4LCBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjgsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpBUkdCMTZMaXR0bGUsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCMTZC
aWcgfQotICAgIH07Ci0KLSAgICBBU1NFUlQoY29tcG9uZW50c1BlclBpeGVsIDw9IDQgJiYgY29t
cG9uZW50c1BlclBpeGVsID4gMCk7Ci0gICAgU291cmNlRGF0YUZvcm1hdEJhc2UgZm9ybWF0QmFz
ZSA9IGZvcm1hdFRhYmxlQmFzZVtjb21wb25lbnRzUGVyUGl4ZWwgLSAxXVthbHBoYUZvcm1hdF07
Ci0gICAgaWYgKGZvcm1hdEJhc2UgPT0gU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMpCi0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6TnVtRm9ybWF0czsKLSAg
ICByZXR1cm4gZm9ybWF0VGFibGVbZm9ybWF0QmFzZV1bKGlzMTZCaXRGb3JtYXQgPyAyIDogMCkg
KyAoYmlnRW5kaWFuID8gMSA6IDApXTsKLX0KLQotbmFtZXNwYWNlIHsKLXVpbnQ4X3QgY29udmVy
dENvbG9yMTZMaXR0bGVUbzgodWludDE2X3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlID4+
IDg7Ci19Ci0KLXVpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2X3QgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlICYgMHgwMEZGKTsKLX0KLQot
dGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZm9ybWF0LCB0eXBlbmFtZSBT
b3VyY2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBlPgotQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQx
NkJpdEZvcm1hdFRvUkdCQTgoY29uc3QgU291cmNlVHlwZSosIERzdFR5cGUqLCB1bnNpZ25lZCkK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsK
LSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgU0lNRDo6dW5wYWNrT25lUm93T2ZS
R0JBMTZMaXR0bGVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7Ci0j
ZW5kaWYKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
LSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2Vb
MF0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNv
dXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZMaXR0bGVU
bzgoc291cmNlWzJdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkxp
dHRsZVRvOChzb3VyY2VbM10pOwotICAgICAgICBzb3VyY2UgKz0gNDsKLSAgICAgICAgZGVzdGlu
YXRpb24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNv
bnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QkExNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9u
WzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRp
b25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5h
dGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsyXSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzNdKTsKLSAgICAgICAgc291
cmNlICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCi17Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIFNJTUQ6OnVu
cGFja09uZVJvd09mUkdCMTZMaXR0bGVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVs
c1BlclJvdyk7Ci0jZW5kaWYKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRs
ZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENv
bG9yMTZMaXR0bGVUbzgoc291cmNlWzJdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSAweEZG
OwotICAgICAgICBzb3VyY2UgKz0gMzsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRv
UkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2QmlnLCB1aW50MTZfdCwg
dWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3Ix
NkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzJdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSAweEZGOwot
ICAgICAgICBzb3VyY2UgKz0gMzsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdC
QTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0IxNkxpdHRsZSwgdWludDE2X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQot
ICAgIFNJTUQ6OnVucGFja09uZVJvd09mQVJHQjE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3Rp
bmF0aW9uLCBwaXhlbHNQZXJSb3cpOwotI2VuZGlmCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVy
dENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBj
b252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMl0pOwotICAgICAgICBkZXN0aW5hdGlvblsy
XSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVszXSk7Ci0gICAgICAgIGRlc3RpbmF0
aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgc291
cmNlICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291
cmNlWzJdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChz
b3VyY2VbM10pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84
KHNvdXJjZVswXSk7Ci0gICAgICAgIHNvdXJjZSArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbiAr
PSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2
Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2TGl0dGxl
LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBj
b252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsx
XSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0
aW9uWzJdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVz
dGluYXRpb25bM10gPSAweEZGOwotICAgICAgICBzb3VyY2UgKz0gMTsKLSAgICAgICAgZGVzdGlu
YXRpb24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNv
bnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIx
NkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25b
MV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlv
blsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0
aW9uWzNdID0gMHhGRjsKLSAgICAgICAgc291cmNlICs9IDE7Ci0gICAgICAgIGRlc3RpbmF0aW9u
ICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0
MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2TGl0
dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0g
PSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlv
blsxXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uWzJdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAg
ZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwotICAg
ICAgICBzb3VyY2UgKz0gMjsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90
Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84
KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdU
bzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJp
Z1RvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2
QmlnVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIHNvdXJjZSArPSAyOwotICAgICAgICBkZXN0aW5h
dGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29u
dmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVIx
NkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9u
WzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGlu
YXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwotICAgICAgICBk
ZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsK
LSAgICAgICAgc291cmNlICs9IDI7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JH
QkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjE2QmlnLCB1aW50MTZfdCwgdWlu
dDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxz
UGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJp
Z1RvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2
QmlnVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9y
MTZCaWdUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29s
b3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBzb3VyY2UgKz0gMjsKLSAgICAgICAgZGVz
dGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0
aW9uWzBdID0gMHgwOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IDB4MDsKLSAgICAgICAgZGVz
dGluYXRpb25bMl0gPSAweDA7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9y
MTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgc291cmNlICs9IDE7Ci0gICAgICAgIGRl
c3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlv
blswXSA9IDB4MDsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSAweDA7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uWzJdID0gMHgwOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2
QmlnVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIHNvdXJjZSArPSAxOwotICAgICAgICBkZXN0aW5h
dGlvbiArPSA0OwotICAgIH0KLX0KLQotdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNyY0Zvcm1hdCwgY29uc3QgdWludDE2X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSNk
ZWZpbmUgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChTcmNGb3JtYXQpIFwKLSAgICBjYXNlIFNy
Y0Zvcm1hdDogXAotICAgICAgICByZXR1cm4gY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxTcmNG
b3JtYXQ+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7Ci0KLSAgICBzd2l0Y2gg
KHNyY0Zvcm1hdCkgewotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZMaXR0bGUpCi0gICAgICAgIENPTlZFUlQxNkJJVEZP
Uk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkJpZykKLSAgICAg
ICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QTE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZCaWcpCi0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1B
VFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZMaXR0bGUpCi0gICAg
ICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJBMTZCaWcpCi0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSMTZMaXR0bGUpCi0gICAgICAgIENPTlZFUlQxNkJJVEZP
Uk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSMTZCaWcpCi0gICAg
ICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQjE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkJpZykKLSAgICAgICAgQ09OVkVSVDE2QklU
Rk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2TGl0dGxl
KQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0JBMTZCaWcpCi0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgo
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0IxNkxpdHRsZSkKLSAgICAgICAgQ09O
VkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJH
QjE2QmlnKQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLSN1bmRlZiBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4Ci19Ci0KLX0KLQotR3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQotewot
ICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wgaGFzQWxw
aGEgPSAhbV9pbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCk7Ci0gICAgaWYgKChp
Z25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxw
aGEpKSAmJiBtX2ltYWdlLT5kYXRhKCkpIHsKLSAgICAgICAgYXV0byBzb3VyY2UgPSBJbWFnZVNv
dXJjZTo6Y3JlYXRlKG51bGxwdHIsIEFscGhhT3B0aW9uOjpOb3RQcmVtdWx0aXBsaWVkLCBpZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25v
cmVkIDogR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQpOwotICAgICAgICBzb3Vy
Y2UtPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKLSAgICAgICAgaWYgKCFzb3VyY2Ut
PmZyYW1lQ291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBtX2Rl
Y29kZWRJbWFnZSA9IHNvdXJjZS0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7Ci0gICAgICAg
IG1fY2dJbWFnZSA9IG1fZGVjb2RlZEltYWdlOwotICAgIH0gZWxzZQotICAgICAgICBtX2NnSW1h
Z2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGlmICghbV9j
Z0ltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2ltYWdlV2lkdGggPSBDR0lt
YWdlR2V0V2lkdGgobV9jZ0ltYWdlLmdldCgpKTsKLSAgICBtX2ltYWdlSGVpZ2h0ID0gQ0dJbWFn
ZUdldEhlaWdodChtX2NnSW1hZ2UuZ2V0KCkpOwotICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFt
X2ltYWdlSGVpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTZWUgd2hldGhl
ciB0aGUgaW1hZ2UgaXMgdXNpbmcgYW4gaW5kZXhlZCBjb2xvciBzcGFjZSwgYW5kIGlmCi0gICAg
Ly8gc28sIHJlLXJlbmRlciBpdCBpbnRvIGFuIFJHQiBjb2xvciBzcGFjZS4gVGhlIGltYWdlIHJl
LXBhY2tpbmcKLSAgICAvLyBjb2RlIHJlcXVpcmVzIGNvbG9yIGRhdGEsIG5vdCBjb2xvciB0YWJs
ZSBpbmRpY2VzLCBmb3IgdGhlCi0gICAgLy8gaW1hZ2UgZGF0YS4KLSAgICBDR0NvbG9yU3BhY2VS
ZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKG1fY2dJbWFnZS5nZXQoKSk7Ci0g
ICAgQ0dDb2xvclNwYWNlTW9kZWwgbW9kZWwgPSBDR0NvbG9yU3BhY2VHZXRNb2RlbChjb2xvclNw
YWNlKTsKLSAgICBpZiAobW9kZWwgPT0ga0NHQ29sb3JTcGFjZU1vZGVsSW5kZXhlZCkgewotICAg
ICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBiaXRtYXBDb250ZXh0OwotICAgICAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIHByb2JhYmx5IG1hbnVhbGx5IGNvbnZlcnQgdGhlIGltYWdlIGJ5IGlu
ZGV4aW5nIGludG8KLSAgICAgICAgLy8gdGhlIGNvbG9yIHRhYmxlLCB3aGljaCB3b3VsZCBhbGxv
dyB1cyB0byBhdm9pZCBwcmVtdWx0aXBseWluZyB0aGUKLSAgICAgICAgLy8gYWxwaGEgY2hhbm5l
bC4gQ3JlYXRpb24gb2YgYSBiaXRtYXAgY29udGV4dCB3aXRoIGFuIGFscGhhIGNoYW5uZWwKLSAg
ICAgICAgLy8gZG9lc24ndCBzZWVtIHRvIHdvcmsgdW5sZXNzIGl0J3MgcHJlbXVsdGlwbGllZC4K
LSAgICAgICAgYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAs
IG1faW1hZ2VXaWR0aCwgbV9pbWFnZUhlaWdodCwgOCwgbV9pbWFnZVdpZHRoICogNCwKLSAgICAg
ICAgICAgIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmly
c3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKLSAgICAgICAgaWYgKCFiaXRtYXBDb250
ZXh0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIENHQ29udGV4dFNldEJs
ZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAg
Q0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoYml0bWFwQ29udGV4dC5nZXQoKSwga0NH
SW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29u
dGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQp
LCBtX2NnSW1hZ2UuZ2V0KCkpOwotCi0gICAgICAgIC8vIE5vdyBkaXNjYXJkIHRoZSBvcmlnaW5h
bCBDRyBpbWFnZSBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgY29weSBmcm9tIHRoZSBiaXRtYXAgY29u
dGV4dC4KLSAgICAgICAgbV9kZWNvZGVkSW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZUltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKLSAgICAgICAgbV9jZ0ltYWdlID0gbV9k
ZWNvZGVkSW1hZ2UuZ2V0KCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQg
PSBDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChtX2NnSW1hZ2UuZ2V0KCkpOwotICAgIHNpemVf
dCBiaXRzUGVyUGl4ZWwgPSBDR0ltYWdlR2V0Qml0c1BlclBpeGVsKG1fY2dJbWFnZS5nZXQoKSk7
Ci0gICAgaWYgKGJpdHNQZXJDb21wb25lbnQgIT0gOCAmJiBiaXRzUGVyQ29tcG9uZW50ICE9IDE2
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGJpdHNQZXJQaXhlbCAlIGJpdHNQZXJD
b21wb25lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzaXplX3QgY29tcG9uZW50c1Bl
clBpeGVsID0gYml0c1BlclBpeGVsIC8gYml0c1BlckNvbXBvbmVudDsKLQotICAgIENHQml0bWFw
SW5mbyBiaXRJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8obV9jZ0ltYWdlLmdldCgpKTsKLSAg
ICBib29sIGJpZ0VuZGlhblNvdXJjZSA9IGZhbHNlOwotICAgIC8vIFRoZXNlIGNvdWxkIHRlY2hu
aWNhbGx5IGJlIGNvbWJpbmVkIGludG8gb25lIGxhcmdlIHN3aXRjaAotICAgIC8vIHN0YXRlbWVu
dCwgYnV0IHdlIHByZWZlciBub3QgdG8gc28gdGhhdCB3ZSBmYWlsIGZhc3QgaWYgd2UKLSAgICAv
LyBlbmNvdW50ZXIgYW4gdW5leHBlY3RlZCBpbWFnZSBjb25maWd1cmF0aW9uLgotICAgIGlmIChi
aXRzUGVyQ29tcG9uZW50ID09IDE2KSB7Ci0gICAgICAgIHN3aXRjaCAoYml0SW5mbyAmIGtDR0Jp
dG1hcEJ5dGVPcmRlck1hc2spIHsKLSAgICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXIxNkJp
ZzoKLSAgICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXIxNkxpdHRsZToKLSAgICAgICAgICAg
IGJpZ0VuZGlhblNvdXJjZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2Uga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdDoKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBi
dWcgaW4gZWFybGllciB2ZXJzaW9uIG9mIGNnIHdoZXJlIHRoZSBkZWZhdWx0IGVuZGlhbgotICAg
ICAgICAgICAgLy8gaXMgbGl0dGxlIHdoZXJlYXMgdGhlIGRlY29kZWQgMTYtYml0IHBuZyBpbWFn
ZSBkYXRhIGlzIGFjdHVhbGx5Ci0gICAgICAgICAgICAvLyBCaWcuIExhdGVyIHZlcnNpb24gKDEw
LjYuNCkgbm8gbG9uZ2VyIHJldHVybnMgQnl0ZU9yZGVyRGVmYXVsdC4KLSAgICAgICAgICAgIGJp
Z0VuZGlhblNvdXJjZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHN3aXRjaCAoYml0SW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlck1hc2spIHsKLSAgICAg
ICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZzoKLSAgICAgICAgICAgIGJpZ0VuZGlhblNv
dXJjZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkxpdHRsZToKLSAgICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVs
dDoKLSAgICAgICAgICAgIC8vIEl0IGFwcGVhcnMgdGhhdCB0aGUgZGVmYXVsdCBieXRlIG9yZGVy
IGlzIGFjdHVhbGx5IGJpZwotICAgICAgICAgICAgLy8gZW5kaWFuIGV2ZW4gb24gbGl0dGxlIGVu
ZGlhbiBhcmNoaXRlY3R1cmVzLgotICAgICAgICAgICAgYmlnRW5kaWFuU291cmNlID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9O
b3RoaW5nOwotICAgIEFscGhhRm9ybWF0IGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXROb25lOwot
ICAgIHN3aXRjaCAoQ0dJbWFnZUdldEFscGhhSW5mbyhtX2NnSW1hZ2UuZ2V0KCkpKSB7Ci0gICAg
Y2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0OgotICAgICAgICBpZiAoIXByZW11
bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1VubXVsdGlw
bHk7Ci0gICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJzdDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBrQ0dJbWFnZUFscGhhRmlyc3Q6Ci0gICAgICAgIC8vIFRoaXMgcGF0aCBp
cyBvbmx5IGFjY2Vzc2libGUgZm9yIE1hY09TIGVhcmxpZXIgdGhhbiAxMC42LjQuCi0gICAgICAg
IGlmIChwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6
RG9QcmVtdWx0aXBseTsKLSAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0OgotICAg
ICAgICAvLyBUaGlzIHBhdGggaXMgb25seSBhY2Nlc3NpYmxlIGZvciBNYWNPUyBlYXJsaWVyIHRo
YW4gMTAuNi40LgotICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2Uga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OgotICAg
ICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBo
YU9wOjpEb1VubXVsdGlwbHk7Ci0gICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtDR0ltYWdlQWxwaGFMYXN0OgotICAgICAgICBp
ZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRv
UHJlbXVsdGlwbHk7Ci0gICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q6Ci0gICAgICAg
IGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IGtDR0ltYWdlQWxwaGFOb25lOgotICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Tm9u
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBnZXRTb3VyY2VEYXRhRm9ybWF0KGNv
bXBvbmVudHNQZXJQaXhlbCwgYWxwaGFGb3JtYXQsIGJpdHNQZXJDb21wb25lbnQgPT0gMTYsIGJp
Z0VuZGlhblNvdXJjZSk7Ci0gICAgaWYgKG1faW1hZ2VTb3VyY2VGb3JtYXQgPT0gRGF0YUZvcm1h
dDo6TnVtRm9ybWF0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9waXhlbERhdGEg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlciht
X2NnSW1hZ2UuZ2V0KCkpKSk7Ci0gICAgaWYgKCFtX3BpeGVsRGF0YSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgbV9pbWFnZVBpeGVsRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dm9pZCo+KENGRGF0YUdldEJ5dGVQdHIobV9waXhlbERhdGEuZ2V0KCkpKTsKLQotICAgIHVuc2ln
bmVkIGludCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAwOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9
IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhtX2NnSW1hZ2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIHBh
ZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDggKiBtX2ltYWdlV2lkdGg7Ci0g
ICAgaWYgKHBhZGRpbmcpIHsKLSAgICAgICAgc3JjVW5wYWNrQWxpZ25tZW50ID0gcGFkZGluZyAr
IDE7Ci0gICAgICAgIHdoaWxlIChieXRlc1BlclJvdyAlIHNyY1VucGFja0FsaWdubWVudCkKLSAg
ICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25tZW50OwotICAgIH0KLQotICAgIG1faW1hZ2VTb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQgPSBzcmNVbnBhY2tBbGlnbm1lbnQ7Ci0gICAgLy8gVXNpbmcgYSBi
aXRtYXAgY29udGV4dCBjcmVhdGVkIGFjY29yZGluZyB0byBkZXN0aW5hdGlvbiBmb3JtYXQgYW5k
IGRyYXdpbmcgdGhlIENHSW1hZ2UgdG8gdGhlIGJpdG1hcCBjb250ZXh0IGNhbiBhbHNvIGRvIHRo
ZSBmb3JtYXQgY29udmVyc2lvbiwKLSAgICAvLyBidXQgaXQgd291bGQgcHJlbXVsdGlwbHkgdGhl
IGFscGhhIGNoYW5uZWwgYXMgYSBzaWRlIGVmZmVjdC4KLSAgICAvLyBQcmVmZXIgdG8gbWFubnVh
bGx5IENvbnZlcnQgMTZiaXQgcGVyLWNvbXBvbmVudCBmb3JtYXRzIHRvIFJHQkE4IGZvcm1hdHMg
aW5zdGVhZC4KLSAgICBpZiAoYml0c1BlckNvbXBvbmVudCA9PSAxNikgewotICAgICAgICBtX2Zv
cm1hbGl6ZWRSR0JBOERhdGEgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhfdD4oKENoZWNrZWQ8c2l6
ZV90PihtX2ltYWdlV2lkdGgpICogbV9pbWFnZUhlaWdodCAqIDRVKS51bnNhZmVHZXQoKSk7Ci0g
ICAgICAgIGNvbnN0IHVpbnQxNl90KiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQxNl90Kj4obV9pbWFnZVBpeGVsRGF0YSk7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
ID0gbV9mb3JtYWxpemVkUkdCQThEYXRhLmdldCgpOwotICAgICAgICBjb25zdCBwdHJkaWZmX3Qg
c3JjU3RyaWRlSW5FbGVtZW50cyA9IGJ5dGVzUGVyUm93IC8gc2l6ZW9mKHVpbnQxNl90KTsKLSAg
ICAgICAgY29uc3QgcHRyZGlmZl90IGRzdFN0cmlkZUluRWxlbWVudHMgPSA0ICogbV9pbWFnZVdp
ZHRoOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPTA7IGkgPCBtX2ltYWdlSGVpZ2h0OyBpKysp
IHsKLSAgICAgICAgICAgIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTgobV9pbWFnZVNvdXJjZUZv
cm1hdCwgc291cmNlLCBkZXN0aW5hdGlvbiwgbV9pbWFnZVdpZHRoKTsKLSAgICAgICAgICAgIHNv
dXJjZSArPSBzcmNTdHJpZGVJbkVsZW1lbnRzOwotICAgICAgICAgICAgZGVzdGluYXRpb24gKz0g
ZHN0U3RyaWRlSW5FbGVtZW50czsKLSAgICAgICAgfQotICAgICAgICBtX2ltYWdlUGl4ZWxEYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obV9mb3JtYWxpemVkUkdCQThEYXRhLmdl
dCgpKTsKLSAgICAgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXQ6OlJHQkE4Owot
ICAgICAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gMTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCkKLXsKLSAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihk
YXRhKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3Qg
dW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAg
IGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCByb3dCeXRlcyA9IGltYWdlU2l6ZS53
aWR0aCgpICogNDsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRl
cjsKLQotICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
dW5zaWduZWQgY2hhciogY29waWVkUGl4ZWxzOwotCi0gICAgICAgIGlmICghdHJ5RmFzdENhbGxv
YyhpbWFnZVNpemUuaGVpZ2h0KCksIHJvd0J5dGVzKS5nZXRWYWx1ZShjb3BpZWRQaXhlbHMpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1lbWNweShjb3BpZWRQaXhlbHMsIGltYWdl
UGl4ZWxzLCByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgc2l6ZV90
IGRhdGFTaXplID0gcm93Qnl0ZXMgKiBpbWFnZVNpemUuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29waWVkUGl4ZWxzLCBkYXRhU2l6ZSk7Ci0gICAgICAg
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBj
b3BpZWRQaXhlbHMsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcm93Qnl0ZXMgKiBpbWFnZVNpemUuaGVpZ2h0KCk7
Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goaW1hZ2VQaXhlbHMsIGRhdGFT
aXplKTsKLSAgICAgICAgZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhEYXRhKDAsIGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSwgMCkpOwotICAgIH0KLQotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCByb3dCeXRlcywgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCwKLSAgICAgICAgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNh
dXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQgb24KLSAgICAvLyB0aGUgcGFn
ZS4gR28gYmFjayB0byB0aGUgQ2FudmFzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKLSAgICAv
LyB3aWR0aCBhbmQgaGVpZ2h0IHRvIGRyYXcuCi0gICAgRmxvYXRSZWN0IGNhbnZhc1JlY3QoRmxv
YXRQb2ludCgpLCBjYW52YXNTaXplKTsKLSAgICAvLyBXZSB3YW50IHRvIGNvbXBsZXRlbHkgb3Zl
cndyaXRlIHRoZSBwcmV2aW91cyBmcmFtZSdzCi0gICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCi0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAg
Y29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSgw
LCAtaW1hZ2VTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGUpOwotICAgIGNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKGNnSW1hZ2UsIGltYWdlU2l6ZSwgY2FudmFzUmVjdCwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eSB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdS
QVBISUNTX0NPTlRFWFRfM0QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiMDMw
ZTA4YTVjNjZiOTM4NTZhYTBhOTVhMzdiYzI1YzJmZjRkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNw
cApAQCAtMCwwICsxLDU0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05U
RVhUX0dMKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisKKyNpZiBI
QVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xORU9O
LmgiCisjZW5kaWYKKworI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4K
KyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHRGF0YVByb3ZpZGVyLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4K
KworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBTb3VyY2VEYXRhRm9ybWF0QmFzZSB7
CisgICAgU291cmNlRm9ybWF0QmFzZVIgPSAwLAorICAgIFNvdXJjZUZvcm1hdEJhc2VBLAorICAg
IFNvdXJjZUZvcm1hdEJhc2VSQSwKKyAgICBTb3VyY2VGb3JtYXRCYXNlQVIsCisgICAgU291cmNl
Rm9ybWF0QmFzZVJHQiwKKyAgICBTb3VyY2VGb3JtYXRCYXNlUkdCQSwKKyAgICBTb3VyY2VGb3Jt
YXRCYXNlQVJHQiwKKyAgICBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cworfTsKKworZW51bSBB
bHBoYUZvcm1hdCB7CisgICAgQWxwaGFGb3JtYXROb25lID0gMCwKKyAgICBBbHBoYUZvcm1hdEZp
cnN0LAorICAgIEFscGhhRm9ybWF0TGFzdCwKKyAgICBBbHBoYUZvcm1hdE51bUZvcm1hdHMKK307
CisKKy8vIFRoaXMgcmV0dXJucyBTb3VyY2VGb3JtYXROdW1Gb3JtYXRzIGlmIHRoZSBjb21iaW5h
dGlvbiBvZiBpbnB1dCBwYXJhbWV0ZXJzIGlzIHVuc3VwcG9ydGVkLgorc3RhdGljIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0IGdldFNvdXJjZURhdGFGb3JtYXQodW5zaWduZWQgY29tcG9u
ZW50c1BlclBpeGVsLCBBbHBoYUZvcm1hdCBhbHBoYUZvcm1hdCwgYm9vbCBpczE2Qml0Rm9ybWF0
LCBib29sIGJpZ0VuZGlhbikKK3sKKyAgICBjb25zdCBzdGF0aWMgU291cmNlRGF0YUZvcm1hdEJh
c2UgZm9ybWF0VGFibGVCYXNlWzRdW0FscGhhRm9ybWF0TnVtRm9ybWF0c10gPSB7IC8vIGNvbXBv
bmVudHNQZXJQaXhlbCB4IEFscGhhRm9ybWF0CisgICAgICAgIC8vIEFscGhhRm9ybWF0Tm9uZSAg
ICAgICAgICAgIEFscGhhRm9ybWF0Rmlyc3QgICAgICAgICAgICBBbHBoYUZvcm1hdExhc3QKKyAg
ICAgICAgeyBTb3VyY2VGb3JtYXRCYXNlUiwgICAgICAgICAgU291cmNlRm9ybWF0QmFzZUEsICAg
ICAgICAgIFNvdXJjZUZvcm1hdEJhc2VBICAgICAgICAgIH0sIC8vIDEgY29tcG9uZW50c1BlclBp
eGVsCisgICAgICAgIHsgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNvdXJjZUZvcm1hdEJh
c2VBUiwgICAgICAgICBTb3VyY2VGb3JtYXRCYXNlUkEgICAgICAgICB9LCAvLyAyIGNvbXBvbmVu
dHNQZXJQaXhlbAorICAgICAgICB7IFNvdXJjZUZvcm1hdEJhc2VSR0IsICAgICAgICBTb3VyY2VG
b3JtYXRCYXNlTnVtRm9ybWF0cywgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMgfSwgLy8gMyBj
b21wb25lbnRzUGVyUGl4ZWwKKyAgICAgICAgeyBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cywg
U291cmNlRm9ybWF0QmFzZUFSR0IsICAgICAgIFNvdXJjZUZvcm1hdEJhc2VSR0JBICAgICAgICB9
IC8vIDQgY29tcG9uZW50c1BlclBpeGVsCisgICAgfTsKKyAgICBjb25zdCBzdGF0aWMgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZm9ybWF0VGFibGVbU291cmNlRm9ybWF0QmFzZU51bUZv
cm1hdHNdWzRdID0geyAvLyBTb3VyY2VEYXRhRm9ybWF0OjpCYXNlIHggYml0c1BlckNvbXBvbmVu
dCB4IGVuZGlhbgorICAgICAgICAvLyA4Yml0cywgbGl0dGxlIGVuZGlhbiAgICAgICAgICAgICAg
ICAgOGJpdHMsIGJpZyBlbmRpYW4gICAgICAgICAgICAgICAgICAgICAxNmJpdHMsIGxpdHRsZSBl
bmRpYW4gICAgICAgICAgICAgICAgICAgICAgICAxNmJpdHMsIGJpZyBlbmRpYW4KKyAgICAgICAg
eyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjgsICAgIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSOCwgICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkxp
dHRsZSwgICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkJpZyB9LAorICAgICAg
ICB7IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBOCwgICAgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OkE4LCAgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2
TGl0dGxlLCAgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2QmlnIH0sCisgICAg
ICAgIHsgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSOCwgICBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkE4LCAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
QTE2TGl0dGxlLCAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2QmlnIH0sCisg
ICAgICAgIHsgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBOCwgICBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6QVI4LCAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBUjE2TGl0dGxlLCAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjE2QmlnIH0s
CisgICAgICAgIHsgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjgsICBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCOCwgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0IxNkxpdHRsZSwgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkJp
ZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBQkdSOCwgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTE2TGl0dGxlLCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTE2QmlnIH0sCisgICAgICAgIHsgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4
LCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjgsIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBUkdCMTZCaWcgfQorICAgIH07CisKKyAgICBBU1NFUlQoY29tcG9uZW50c1BlclBpeGVsIDw9
IDQgJiYgY29tcG9uZW50c1BlclBpeGVsID4gMCk7CisgICAgU291cmNlRGF0YUZvcm1hdEJhc2Ug
Zm9ybWF0QmFzZSA9IGZvcm1hdFRhYmxlQmFzZVtjb21wb25lbnRzUGVyUGl4ZWwgLSAxXVthbHBo
YUZvcm1hdF07CisgICAgaWYgKGZvcm1hdEJhc2UgPT0gU291cmNlRm9ybWF0QmFzZU51bUZvcm1h
dHMpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6TnVtRm9y
bWF0czsKKyAgICByZXR1cm4gZm9ybWF0VGFibGVbZm9ybWF0QmFzZV1bKGlzMTZCaXRGb3JtYXQg
PyAyIDogMCkgKyAoYmlnRW5kaWFuID8gMSA6IDApXTsKK30KKworbmFtZXNwYWNlIHsKK3VpbnQ4
X3QgY29udmVydENvbG9yMTZMaXR0bGVUbzgodWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlID4+IDg7Cit9CisKK3VpbnQ4X3QgY29udmVydENvbG9yMTZCaWdUbzgodWludDE2X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlICYgMHgwMEZG
KTsKK30KKwordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZm9ybWF0LCB0
eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBlPgorQUxXQVlTX0lOTElORSB2b2lk
IGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTgoY29uc3QgU291cmNlVHlwZSosIERzdFR5cGUqLCB1
bnNpZ25lZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3Qg
dWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3sKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgU0lNRDo6dW5wYWNr
T25lUm93T2ZSR0JBMTZMaXR0bGVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1Bl
clJvdyk7CisjZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRv
OChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2TGl0
dGxlVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9y
MTZMaXR0bGVUbzgoc291cmNlWzJdKTsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0
Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbM10pOworICAgICAgICBzb3VyY2UgKz0gNDsKKyAgICAg
ICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQkExNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAg
ZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOworICAgICAg
ICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsyXSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzNdKTsKKyAg
ICAgICAgc291cmNlICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4
PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkxpdHRsZSwgdWludDE2X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit7CisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAg
IFNJTUQ6OnVucGFja09uZVJvd09mUkdCMTZMaXR0bGVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsc1BlclJvdyk7CisjZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29s
b3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZl
cnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0g
Y29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzJdKTsKKyAgICAgICAgZGVzdGluYXRpb25b
M10gPSAweEZGOworICAgICAgICBzb3VyY2UgKz0gMzsKKyAgICAgICAgZGVzdGluYXRpb24gKz0g
NDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJp
dEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2QmlnLCB1
aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252
ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNv
bnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0g
Y29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzJdKTsKKyAgICAgICAgZGVzdGluYXRpb25bM10g
PSAweEZGOworICAgICAgICBzb3VyY2UgKz0gMzsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZv
cm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0IxNkxpdHRsZSwg
dWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisjaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQorICAgIFNJTUQ6OnVucGFja09uZVJvd09mQVJHQjE2TGl0dGxlVG9SR0JBOChzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOworI2VuZGlmCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRp
b25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMl0pOworICAgICAgICBkZXN0
aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVszXSk7CisgICAgICAg
IGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAg
ICAgICAgc291cmNlICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQor
Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4
PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCMTZCaWcsIHVpbnQxNl90LCB1aW50
OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2Qmln
VG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZC
aWdUbzgoc291cmNlWzJdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3Ix
NkJpZ1RvOChzb3VyY2VbM10pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIHNvdXJjZSArPSA0OworICAgICAgICBkZXN0
aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UjE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0
aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAg
IGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAg
ICAgICAgZGVzdGluYXRpb25bM10gPSAweEZGOworICAgICAgICBzb3VyY2UgKz0gMTsKKyAgICAg
ICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlIxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVz
dGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBk
ZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAg
IGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKKyAgICAgICAgc291cmNlICs9IDE7CisgICAgICAgIGRl
c3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSQTE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGlu
YXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBk
ZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsK
KyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2Vb
MV0pOworICAgICAgICBzb3VyY2UgKz0gMjsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1h
dFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZCaWcsIHVpbnQxNl90
LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0
Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7CisgICAgICAgIHNvdXJjZSArPSAyOworICAgICAg
ICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6QVIxNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKKyAgICAg
ICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwor
ICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsx
XSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291
cmNlWzBdKTsKKyAgICAgICAgc291cmNlICs9IDI7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRG
b3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjE2QmlnLCB1aW50
MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0
Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29u
dmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBj
b252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBzb3VyY2UgKz0gMjsKKyAg
ICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAg
IGRlc3RpbmF0aW9uWzBdID0gMHgwOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IDB4MDsKKyAg
ICAgICAgZGVzdGluYXRpb25bMl0gPSAweDA7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29u
dmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgc291cmNlICs9IDE7Cisg
ICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBk
ZXN0aW5hdGlvblswXSA9IDB4MDsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSAweDA7CisgICAg
ICAgIGRlc3RpbmF0aW9uWzJdID0gMHgwOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIHNvdXJjZSArPSAxOworICAgICAg
ICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRU
b1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IHNyY0Zvcm1hdCwgY29uc3QgdWlu
dDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKK3sKKyNkZWZpbmUgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChTcmNGb3JtYXQpIFwKKyAg
ICBjYXNlIFNyY0Zvcm1hdDogXAorICAgICAgICByZXR1cm4gY29udmVydDE2Qml0Rm9ybWF0VG9S
R0JBODxTcmNGb3JtYXQ+KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CisKKyAg
ICBzd2l0Y2ggKHNyY0Zvcm1hdCkgeworICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4
KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZMaXR0bGUpCisgICAgICAgIENPTlZF
UlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkJp
ZykKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QTE2TGl0dGxlKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4
KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZCaWcpCisgICAgICAgIENPTlZFUlQx
NkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZMaXR0
bGUpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJBMTZCaWcpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgo
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSMTZMaXR0bGUpCisgICAgICAgIENPTlZF
UlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSMTZC
aWcpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjE2TGl0dGxlKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JH
QkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkJpZykKKyAgICAgICAgQ09O
VkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTE2TGl0dGxlKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZCaWcpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1B
VFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0IxNkxpdHRsZSkKKyAg
ICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6QVJHQjE2QmlnKQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyN1bmRlZiBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4Cit9CisKK30KKwor
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3Io
KSA9IGRlZmF1bHQ7CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFj
dG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGJvb2wgaGFzQWxwaGEgPSAhbV9pbWFnZS0+Y3VycmVudEZyYW1lS25vd25Ub0Jl
T3BhcXVlKCk7CisgICAgaWYgKChpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxw
aGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBtX2ltYWdlLT5kYXRhKCkpIHsKKyAgICAgICAg
YXV0byBzb3VyY2UgPSBJbWFnZVNvdXJjZTo6Y3JlYXRlKG51bGxwdHIsIEFscGhhT3B0aW9uOjpO
b3RQcmVtdWx0aXBsaWVkLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFw
cGxpZWQpOworICAgICAgICBzb3VyY2UtPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsK
KyAgICAgICAgaWYgKCFzb3VyY2UtPmZyYW1lQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBtX2RlY29kZWRJbWFnZSA9IHNvdXJjZS0+Y3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgoMCk7CisgICAgICAgIG1fY2dJbWFnZSA9IG1fZGVjb2RlZEltYWdlOworICAgIH0g
ZWxzZQorICAgICAgICBtX2NnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOworICAgIGlmICghbV9jZ0ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX2ltYWdlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgobV9jZ0ltYWdlLmdldCgpKTsKKyAgICBt
X2ltYWdlSGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChtX2NnSW1hZ2UuZ2V0KCkpOworICAgIGlm
ICghbV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBTZWUgd2hldGhlciB0aGUgaW1hZ2UgaXMgdXNpbmcgYW4gaW5kZXhlZCBjb2xv
ciBzcGFjZSwgYW5kIGlmCisgICAgLy8gc28sIHJlLXJlbmRlciBpdCBpbnRvIGFuIFJHQiBjb2xv
ciBzcGFjZS4gVGhlIGltYWdlIHJlLXBhY2tpbmcKKyAgICAvLyBjb2RlIHJlcXVpcmVzIGNvbG9y
IGRhdGEsIG5vdCBjb2xvciB0YWJsZSBpbmRpY2VzLCBmb3IgdGhlCisgICAgLy8gaW1hZ2UgZGF0
YS4KKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNl
KG1fY2dJbWFnZS5nZXQoKSk7CisgICAgQ0dDb2xvclNwYWNlTW9kZWwgbW9kZWwgPSBDR0NvbG9y
U3BhY2VHZXRNb2RlbChjb2xvclNwYWNlKTsKKyAgICBpZiAobW9kZWwgPT0ga0NHQ29sb3JTcGFj
ZU1vZGVsSW5kZXhlZCkgeworICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBiaXRtYXBD
b250ZXh0OworICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHByb2JhYmx5IG1hbnVhbGx5IGNv
bnZlcnQgdGhlIGltYWdlIGJ5IGluZGV4aW5nIGludG8KKyAgICAgICAgLy8gdGhlIGNvbG9yIHRh
YmxlLCB3aGljaCB3b3VsZCBhbGxvdyB1cyB0byBhdm9pZCBwcmVtdWx0aXBseWluZyB0aGUKKyAg
ICAgICAgLy8gYWxwaGEgY2hhbm5lbC4gQ3JlYXRpb24gb2YgYSBiaXRtYXAgY29udGV4dCB3aXRo
IGFuIGFscGhhIGNoYW5uZWwKKyAgICAgICAgLy8gZG9lc24ndCBzZWVtIHRvIHdvcmsgdW5sZXNz
IGl0J3MgcHJlbXVsdGlwbGllZC4KKyAgICAgICAgYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKDAsIG1faW1hZ2VXaWR0aCwgbV9pbWFnZUhlaWdodCwgOCwgbV9p
bWFnZVdpZHRoICogNCwKKyAgICAgICAgICAgIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKKyAg
ICAgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoYml0
bWFwQ29udGV4dC5nZXQoKSwga0NHSW50ZXJwb2xhdGlvbk5vbmUpOworICAgICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBtX2ltYWdl
V2lkdGgsIG1faW1hZ2VIZWlnaHQpLCBtX2NnSW1hZ2UuZ2V0KCkpOworCisgICAgICAgIC8vIE5v
dyBkaXNjYXJkIHRoZSBvcmlnaW5hbCBDRyBpbWFnZSBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgY29w
eSBmcm9tIHRoZSBiaXRtYXAgY29udGV4dC4KKyAgICAgICAgbV9kZWNvZGVkSW1hZ2UgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKKyAg
ICAgICAgbV9jZ0ltYWdlID0gbV9kZWNvZGVkSW1hZ2UuZ2V0KCk7CisgICAgfQorCisgICAgc2l6
ZV90IGJpdHNQZXJDb21wb25lbnQgPSBDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChtX2NnSW1h
Z2UuZ2V0KCkpOworICAgIHNpemVfdCBiaXRzUGVyUGl4ZWwgPSBDR0ltYWdlR2V0Qml0c1BlclBp
eGVsKG1fY2dJbWFnZS5nZXQoKSk7CisgICAgaWYgKGJpdHNQZXJDb21wb25lbnQgIT0gOCAmJiBi
aXRzUGVyQ29tcG9uZW50ICE9IDE2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGJp
dHNQZXJQaXhlbCAlIGJpdHNQZXJDb21wb25lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBzaXplX3QgY29tcG9uZW50c1BlclBpeGVsID0gYml0c1BlclBpeGVsIC8gYml0c1BlckNvbXBv
bmVudDsKKworICAgIENHQml0bWFwSW5mbyBiaXRJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8o
bV9jZ0ltYWdlLmdldCgpKTsKKyAgICBib29sIGJpZ0VuZGlhblNvdXJjZSA9IGZhbHNlOworICAg
IC8vIFRoZXNlIGNvdWxkIHRlY2huaWNhbGx5IGJlIGNvbWJpbmVkIGludG8gb25lIGxhcmdlIHN3
aXRjaAorICAgIC8vIHN0YXRlbWVudCwgYnV0IHdlIHByZWZlciBub3QgdG8gc28gdGhhdCB3ZSBm
YWlsIGZhc3QgaWYgd2UKKyAgICAvLyBlbmNvdW50ZXIgYW4gdW5leHBlY3RlZCBpbWFnZSBjb25m
aWd1cmF0aW9uLgorICAgIGlmIChiaXRzUGVyQ29tcG9uZW50ID09IDE2KSB7CisgICAgICAgIHN3
aXRjaCAoYml0SW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlck1hc2spIHsKKyAgICAgICAgY2FzZSBr
Q0dCaXRtYXBCeXRlT3JkZXIxNkJpZzoKKyAgICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXIx
NkxpdHRsZToKKyAgICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdDoKKyAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBidWcgaW4gZWFybGllciB2ZXJzaW9uIG9mIGNnIHdoZXJlIHRo
ZSBkZWZhdWx0IGVuZGlhbgorICAgICAgICAgICAgLy8gaXMgbGl0dGxlIHdoZXJlYXMgdGhlIGRl
Y29kZWQgMTYtYml0IHBuZyBpbWFnZSBkYXRhIGlzIGFjdHVhbGx5CisgICAgICAgICAgICAvLyBC
aWcuIExhdGVyIHZlcnNpb24gKDEwLjYuNCkgbm8gbG9uZ2VyIHJldHVybnMgQnl0ZU9yZGVyRGVm
YXVsdC4KKyAgICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAoYml0SW5mbyAmIGtDR0JpdG1hcEJ5
dGVPcmRlck1hc2spIHsKKyAgICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZzoKKyAg
ICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZToKKyAgICAgICAgICAgIGJpZ0Vu
ZGlhblNvdXJjZSA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NH
Qml0bWFwQnl0ZU9yZGVyRGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEl0IGFwcGVhcnMgdGhhdCB0
aGUgZGVmYXVsdCBieXRlIG9yZGVyIGlzIGFjdHVhbGx5IGJpZworICAgICAgICAgICAgLy8gZW5k
aWFuIGV2ZW4gb24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmVzLgorICAgICAgICAgICAgYmln
RW5kaWFuU291cmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9h
bHBoYU9wID0gQWxwaGFPcDo6RG9Ob3RoaW5nOworICAgIEFscGhhRm9ybWF0IGFscGhhRm9ybWF0
ID0gQWxwaGFGb3JtYXROb25lOworICAgIHN3aXRjaCAoQ0dJbWFnZUdldEFscGhhSW5mbyhtX2Nn
SW1hZ2UuZ2V0KCkpKSB7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0
OgorICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBtX2FscGhhT3Ag
PSBBbHBoYU9wOjpEb1VubXVsdGlwbHk7CisgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3Jt
YXRGaXJzdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhRmlyc3Q6Cisg
ICAgICAgIC8vIFRoaXMgcGF0aCBpcyBvbmx5IGFjY2Vzc2libGUgZm9yIE1hY09TIGVhcmxpZXIg
dGhhbiAxMC42LjQuCisgICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAg
bV9hbHBoYU9wID0gQWxwaGFPcDo6RG9QcmVtdWx0aXBseTsKKyAgICAgICAgYWxwaGFGb3JtYXQg
PSBBbHBoYUZvcm1hdEZpcnN0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR0ltYWdlQWxw
aGFOb25lU2tpcEZpcnN0OgorICAgICAgICAvLyBUaGlzIHBhdGggaXMgb25seSBhY2Nlc3NpYmxl
IGZvciBNYWNPUyBlYXJsaWVyIHRoYW4gMTAuNi40LgorICAgICAgICBhbHBoYUZvcm1hdCA9IEFs
cGhhRm9ybWF0Rmlyc3Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0OgorICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCisgICAgICAg
ICAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1VubXVsdGlwbHk7CisgICAgICAgIGFscGhhRm9y
bWF0ID0gQWxwaGFGb3JtYXRMYXN0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR0ltYWdl
QWxwaGFMYXN0OgorICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgIG1f
YWxwaGFPcCA9IEFscGhhT3A6OkRvUHJlbXVsdGlwbHk7CisgICAgICAgIGFscGhhRm9ybWF0ID0g
QWxwaGFGb3JtYXRMYXN0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR0ltYWdlQWxwaGFO
b25lU2tpcExhc3Q6CisgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIGtDR0ltYWdlQWxwaGFOb25lOgorICAgICAgICBhbHBoYUZv
cm1hdCA9IEFscGhhRm9ybWF0Tm9uZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBn
ZXRTb3VyY2VEYXRhRm9ybWF0KGNvbXBvbmVudHNQZXJQaXhlbCwgYWxwaGFGb3JtYXQsIGJpdHNQ
ZXJDb21wb25lbnQgPT0gMTYsIGJpZ0VuZGlhblNvdXJjZSk7CisgICAgaWYgKG1faW1hZ2VTb3Vy
Y2VGb3JtYXQgPT0gRGF0YUZvcm1hdDo6TnVtRm9ybWF0cykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgbV9waXhlbERhdGEgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJ
bWFnZUdldERhdGFQcm92aWRlcihtX2NnSW1hZ2UuZ2V0KCkpKSk7CisgICAgaWYgKCFtX3BpeGVs
RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pbWFnZVBpeGVsRGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KENGRGF0YUdldEJ5dGVQdHIobV9waXhlbERhdGEu
Z2V0KCkpKTsKKworICAgIHVuc2lnbmVkIHNyY1VucGFja0FsaWdubWVudCA9IDA7CisgICAgc2l6
ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KG1fY2dJbWFnZS5nZXQoKSk7
CisgICAgdW5zaWduZWQgcGFkZGluZyA9IGJ5dGVzUGVyUm93IC0gYml0c1BlclBpeGVsIC8gOCAq
IG1faW1hZ2VXaWR0aDsKKyAgICBpZiAocGFkZGluZykgeworICAgICAgICBzcmNVbnBhY2tBbGln
bm1lbnQgPSBwYWRkaW5nICsgMTsKKyAgICAgICAgd2hpbGUgKGJ5dGVzUGVyUm93ICUgc3JjVW5w
YWNrQWxpZ25tZW50KQorICAgICAgICAgICAgKytzcmNVbnBhY2tBbGlnbm1lbnQ7CisgICAgfQor
CisgICAgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCA9IHNyY1VucGFja0FsaWdubWVudDsK
KyAgICAvLyBVc2luZyBhIGJpdG1hcCBjb250ZXh0IGNyZWF0ZWQgYWNjb3JkaW5nIHRvIGRlc3Rp
bmF0aW9uIGZvcm1hdCBhbmQgZHJhd2luZyB0aGUgQ0dJbWFnZSB0byB0aGUgYml0bWFwIGNvbnRl
eHQgY2FuIGFsc28gZG8gdGhlIGZvcm1hdCBjb252ZXJzaW9uLAorICAgIC8vIGJ1dCBpdCB3b3Vs
ZCBwcmVtdWx0aXBseSB0aGUgYWxwaGEgY2hhbm5lbCBhcyBhIHNpZGUgZWZmZWN0LgorICAgIC8v
IFByZWZlciB0byBtYW5udWFsbHkgQ29udmVydCAxNmJpdCBwZXItY29tcG9uZW50IGZvcm1hdHMg
dG8gUkdCQTggZm9ybWF0cyBpbnN0ZWFkLgorICAgIGlmIChiaXRzUGVyQ29tcG9uZW50ID09IDE2
KSB7CisgICAgICAgIG1fZm9ybWFsaXplZFJHQkE4RGF0YSA9IG1ha2VVbmlxdWVBcnJheTx1aW50
OF90PigoQ2hlY2tlZDxzaXplX3Q+KG1faW1hZ2VXaWR0aCkgKiBtX2ltYWdlSGVpZ2h0ICogNFUp
LnVuc2FmZUdldCgpKTsKKyAgICAgICAgY29uc3QgdWludDE2X3QqIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihtX2ltYWdlUGl4ZWxEYXRhKTsKKyAgICAgICAgdWlu
dDhfdCogZGVzdGluYXRpb24gPSBtX2Zvcm1hbGl6ZWRSR0JBOERhdGEuZ2V0KCk7CisgICAgICAg
IGNvbnN0IHB0cmRpZmZfdCBzcmNTdHJpZGVJbkVsZW1lbnRzID0gYnl0ZXNQZXJSb3cgLyBzaXpl
b2YodWludDE2X3QpOworICAgICAgICBjb25zdCBwdHJkaWZmX3QgZHN0U3RyaWRlSW5FbGVtZW50
cyA9IDQgKiBtX2ltYWdlV2lkdGg7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9MDsgaSA8IG1f
aW1hZ2VIZWlnaHQ7IGkrKykgeworICAgICAgICAgICAgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JB
OChtX2ltYWdlU291cmNlRm9ybWF0LCBzb3VyY2UsIGRlc3RpbmF0aW9uLCBtX2ltYWdlV2lkdGgp
OworICAgICAgICAgICAgc291cmNlICs9IHNyY1N0cmlkZUluRWxlbWVudHM7CisgICAgICAgICAg
ICBkZXN0aW5hdGlvbiArPSBkc3RTdHJpZGVJbkVsZW1lbnRzOworICAgICAgICB9CisgICAgICAg
IG1faW1hZ2VQaXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihtX2Zvcm1h
bGl6ZWRSR0JBOERhdGEuZ2V0KCkpOworICAgICAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gRGF0
YUZvcm1hdDo6UkdCQTg7CisgICAgICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSAx
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZUltYWdl
RGF0YSh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KQoreworICAgIGZhc3RGcmVlKGNv
bnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29uc3Qg
SW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUuaXNF
bXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgaW50
IHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAgIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOworCisgICAgaWYgKGNvbnRleHQuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBjb3BpZWRQaXhlbHM7CisKKyAg
ICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGltYWdlU2l6ZS5oZWlnaHQoKSwgcm93Qnl0ZXMpLmdl
dFZhbHVlKGNvcGllZFBpeGVscykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbWVt
Y3B5KGNvcGllZFBpeGVscywgaW1hZ2VQaXhlbHMsIHJvd0J5dGVzICogaW1hZ2VTaXplLmhlaWdo
dCgpKTsKKworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5o
ZWlnaHQoKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb3BpZWRQaXhl
bHMsIGRhdGFTaXplKTsKKyAgICAgICAgZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGNvcGllZFBpeGVscywgZGF0YVNpemUsIHJlbGVhc2VJbWFn
ZURhdGEpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSByb3dCeXRl
cyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChpbWFnZVBpeGVscywgZGF0YVNpemUpOworICAgICAgICBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgaW1hZ2VQaXhlbHMsIGRhdGFTaXpl
LCAwKSk7CisgICAgfQorCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBhZG9w
dENGKENHSW1hZ2VDcmVhdGUoaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwg
OCwgMzIsIHJvd0J5dGVzLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LAorICAgICAgICBkYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisKKyAg
ICAvLyBDU1Mgc3R5bGluZyBtYXkgY2F1c2UgdGhlIGNhbnZhcydzIGNvbnRlbnQgdG8gYmUgcmVz
aXplZCBvbgorICAgIC8vIHRoZSBwYWdlLiBHbyBiYWNrIHRvIHRoZSBDYW52YXMgdG8gZmlndXJl
IG91dCB0aGUgY29ycmVjdAorICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KKyAgICBG
bG9hdFJlY3QgY2FudmFzUmVjdChGbG9hdFBvaW50KCksIGNhbnZhc1NpemUpOworICAgIC8vIFdl
IHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZyYW1lJ3MKKyAgICAv
LyByZW5kZXJpbmcgcmVzdWx0cy4KKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0KTsKKyAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwor
ICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1pbWFnZVNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRl
eHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9O
b3RJbnRlcnBvbGF0ZSk7CisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY2dJbWFnZSwgaW1h
Z2VTaXplLCBjYW52YXNSZWN0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZVNpemUpLCB7
IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0Nv
bnRleHQzRENvY29hLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2NjYjQ0NTVh
YTVjYjdmY2E3NmJjNGQzZWJmODcxYWVmNzUwNmQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4NTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQot
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
ICYmICFVU0UoQU5HTEUpCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgotI2VuZGlm
Ci0KLSNpbXBvcnQgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmgiCi0jaW1wb3J0
ICJIVE1MQ2FudmFzRWxlbWVudC5oIgotI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgotI2ltcG9ydCAi
SW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYkdMTGF5ZXIu
aCIKLSNpbXBvcnQgIldlYkdMT2JqZWN0LmgiCi0jaW1wb3J0ICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCi0jaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+Ci0jaW1w
b3J0IDxzeXMvc3lzY3RsLmg+Ci0jaW1wb3J0IDxzeXNleGl0cy5oPgotI2ltcG9ydCA8d3RmL0Js
b2NrT2JqQ0V4Y2VwdGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lm
IFVTRShPUEVOR0xfRVMpCi0jaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+Ci0jaW1wb3J0IDxPcGVu
R0xFUy9FQUdMRHJhd2FibGUuaD4KLSNpbXBvcnQgPE9wZW5HTEVTL0VBR0xJT1N1cmZhY2UuaD4K
LSNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFy
dHpDb3JlLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2lvcy9PcGVuR0xFU1NQSS5oPgotI2VsaWYgVVNF
KE9QRU5HTCkKLSNpbXBvcnQgPElPS2l0L0lPS2l0TGliLmg+Ci0jaW1wb3J0IDxPcGVuR0wvZ2wu
aD4KLSNlbGlmIFVTRShBTkdMRSkKLSNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKLS8vIFNr
aXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRz
IGZvciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNkZWZpbmUgR0xf
QU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7
Ci0jaW5jbHVkZSA8QU5HTEUvZWdsLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+Ci0jaW5j
bHVkZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRz
X2VnbC5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19lZ2xfZXh0Lmg+Ci0jaW5jbHVk
ZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxBTkdM
RS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgotI2luY2x1ZGUgPEFOR0xFL2dsMmV4
dC5oPgotI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgotI2VuZGlmCi0KLSNpZiBVU0Uo
T1BFTkdMX0VTKSB8fCBVU0UoT1BFTkdMKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5o
IgotI2VsaWYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzREFOR0xFLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbXBvcnQgIlNjcmVlblByb3BlcnRpZXMuaCIKLSNp
ZiBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCi0jaW1wb3J0IDxPcGVuR0wvQ0dMUmVuZGVyZXJz
Lmg+Ci0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzdGF0dXNDaGVja1RocmVzaG9sZCA9IDU7Ci0KLS8vIEZJWE1FOiBUaGlzIGNs
YXNzIGlzIGN1cnJlbnRseSBlbXB0eSBvbiBNYWMsIGJ1dCB3aWxsIGdldCBwb3B1bGF0ZWQgYXMK
LS8vIHRoZSByZXN0cnVjdHVyaW5nIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjkwMyBpcyBkb25lCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCopIHsgfQotICAgIAotICAgIH5HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoKSB7IH0KLX07Ci0KLVJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBk
ZXN0aW5hdGlvbikKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVu
dGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgotICAgIGlm
IChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3cpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gTWFrZSBzcGFjZSBmb3IgdGhlIGluY29taW5n
IGNvbnRleHQgaWYgd2UncmUgZnVsbC4KLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5yZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKEdyYXBo
aWNzQ29udGV4dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmhhc1Rvb01hbnlDb250ZXh0cygp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdp
bmRvdywgZGVzdGluYXRpb24pKTsKLQotICAgIGlmICghY29udGV4dC0+bV9jb250ZXh0T2JqKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6
c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4dC5nZXQoKSwgaG9zdFdpbmRvdyk7Ci0K
LSAgICByZXR1cm4gY29udGV4dDsKLX0KLQotUmVmPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlU2hhcmVkKEdyYXBoaWNzQ29udGV4dDNEJiBzaGFyZWRDb250ZXh0
KQotewotICAgIGF1dG8gaG9zdFdpbmRvdyA9IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6c2hh
cmVkTWFuYWdlcigpLmhvc3RXaW5kb3dGb3JDb250ZXh0KCZzaGFyZWRDb250ZXh0KTsKLSAgICBh
dXRvIGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dDNEKHNoYXJlZENvbnRl
eHQuY29udGV4dEF0dHJpYnV0ZXMoKSwgaG9zdFdpbmRvdywgc2hhcmVkQ29udGV4dC5kZXN0aW5h
dGlvbigpLCAmc2hhcmVkQ29udGV4dCkpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dChjb250ZXh0LnB0cigpLCBob3N0V2luZG93KTsK
LQotICAgIHJldHVybiBjb250ZXh0OwotfQotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAoVVNFKE9Q
RU5HTCkgfHwgVVNFKEFOR0xFKSkgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGJlIGp1
c3QgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpIC0gc2VlIDxyZGFyOi8vNTMwNjI3OTQ+Lgot
Ci1zdGF0aWMgdm9pZCBzZXRHUFVCeVJlZ2lzdHJ5SUQoQ0dMQ29udGV4dE9iaiBjb250ZXh0T2Jq
LCBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiwgSU9SZWdpc3RyeUdQVUlEIHByZWZl
cnJlZEdQVUlEKQotewotICAgIC8vIFdoZW4gdGhlIFdlYlByb2Nlc3MgZG9lcyBub3QgaGF2ZSBh
Y2Nlc3MgdG8gdGhlIFdpbmRvd1NlcnZlciwgdGhlcmUgaXMgbm8gd2F5IGZvciBPcGVuR0wgdG8g
dGVsbCB3aGljaCBHUFUgaXMgY29ubmVjdGVkIHRvIGEgZGlzcGxheS4KLSAgICAvLyBPbiAxMC4x
MyssIGZpbmQgdGhlIHZpcnR1YWwgc2NyZWVuIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByZWZl
cnJlZCBHUFUgYnkgaXRzIHJlZ2lzdHJ5SUQuCi0gICAgLy8gQ0dMU2V0VmlydHVhbFNjcmVlbiBj
YW4gdGhlbiBiZSB1c2VkIHRvIHRlbGwgT3BlbkdMIHdoaWNoIEdQVSBpdCBzaG91bGQgYmUgdXNp
bmcuCi0KLSAgICBpZiAoIWNvbnRleHRPYmogfHwgIXByZWZlcnJlZEdQVUlEKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHTGludCB2aXJ0dWFsU2NyZWVuQ291bnQgPSAwOwotICAgIENHTEVycm9y
IGVycm9yID0gQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdChwaXhlbEZvcm1hdE9iaiwgMCwga0NHTFBG
QVZpcnR1YWxTY3JlZW5Db3VudCwgJnZpcnR1YWxTY3JlZW5Db3VudCk7Ci0gICAgQVNTRVJUKGVy
cm9yID09IGtDR0xOb0Vycm9yKTsKLQotICAgIEdMaW50IGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4g
PSAtMTsKLQotICAgIGZvciAoR0xpbnQgdmlydHVhbFNjcmVlbiA9IDA7IHZpcnR1YWxTY3JlZW4g
PCB2aXJ0dWFsU2NyZWVuQ291bnQ7ICsrdmlydHVhbFNjcmVlbikgewotICAgICAgICBHTGludCBk
aXNwbGF5TWFzayA9IDA7Ci0gICAgICAgIGVycm9yID0gQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdChw
aXhlbEZvcm1hdE9iaiwgdmlydHVhbFNjcmVlbiwga0NHTFBGQURpc3BsYXlNYXNrLCAmZGlzcGxh
eU1hc2spOwotICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOwotCi0gICAgICAg
IGF1dG8gZ3B1SUQgPSBncHVJREZvckRpc3BsYXlNYXNrKGRpc3BsYXlNYXNrKTsKLQotICAgICAg
ICBpZiAoZ3B1SUQgPT0gcHJlZmVycmVkR1BVSUQpIHsKLSAgICAgICAgICAgIGVycm9yID0gQ0dM
U2V0VmlydHVhbFNjcmVlbihjb250ZXh0T2JqLCB2aXJ0dWFsU2NyZWVuKTsKLSAgICAgICAgICAg
IEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJD
b250ZXh0ICglcCkgc2V0IHRvIEdQVSB3aXRoIElEOiAoJWxsZCkuIiwgY29udGV4dE9iaiwgZ3B1
SUQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpcnN0
QWNjZWxlcmF0ZWRTY3JlZW4gPCAwKSB7Ci0gICAgICAgICAgICBHTGludCBpc0FjY2VsZXJhdGVk
ID0gMDsKLSAgICAgICAgICAgIGVycm9yID0gQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdChwaXhlbEZv
cm1hdE9iaiwgdmlydHVhbFNjcmVlbiwga0NHTFBGQUFjY2VsZXJhdGVkLCAmaXNBY2NlbGVyYXRl
ZCk7Ci0gICAgICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOwotICAgICAgICAg
ICAgaWYgKGlzQWNjZWxlcmF0ZWQpCi0gICAgICAgICAgICAgICAgZmlyc3RBY2NlbGVyYXRlZFNj
cmVlbiA9IHZpcnR1YWxTY3JlZW47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBObyByZWdp
c3RyeUlEIG1hdGNoIGZvdW5kOyBzZXQgdG8gZmlyc3QgaGFyZHdhcmUtYWNjZWxlcmF0ZWQgdmly
dHVhbCBzY3JlZW4uCi0gICAgaWYgKGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4gPj0gMCkgewotICAg
ICAgICBlcnJvciA9IENHTFNldFZpcnR1YWxTY3JlZW4oY29udGV4dE9iaiwgZmlyc3RBY2NlbGVy
YXRlZFNjcmVlbik7Ci0gICAgICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Ci0gICAg
ICAgIExPRyhXZWJHTCwgIlJlZ2lzdHJ5SUQgKCVsbGQpIG5vdCBtYXRjaGVkOyBDb250ZXh0ICgl
cCkgc2V0IHRvIHZpcnR1YWwgc2NyZWVuICglZCkuIiwgcHJlZmVycmVkR1BVSUQsIGNvbnRleHRP
YmosIGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4pOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCi0KLUdyYXBoaWNzQ29udGV4
dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBk
ZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0M0QqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFw
aGljc0NvbnRleHQzREJhc2UoYXR0cnMsIGRlc3RpbmF0aW9uLCBzaGFyZWRDb250ZXh0KQotICAg
ICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPih0aGlzKSkK
LXsKLSAgICBBU1NFUlQoQU5HTEVXZWJLaXRCcmlkZ2U6OmFuZ2xlQXZhaWxhYmxlKCkpOwotICAg
IGlmICghQU5HTEVXZWJLaXRCcmlkZ2U6OmFuZ2xlQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1faXNGb3JXZWJHTDIgPSBhdHRycy5pc1dlYkdMMjsKLQotI2lmIEhBVkUoQVBQ
TEVfR1JBUEhJQ1NfQ09OVFJPTCkKLSAgICBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlv
biA9IChoYXNMb3dBbmRIaWdoUG93ZXJHUFVzKCkgJiYgYXR0cnMucG93ZXJQcmVmZXJlbmNlID09
IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UpID8gR3Jh
cGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSA6IEdyYXBoaWNz
Q29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0OwotI2Vsc2UKLSAgICBtX3Bvd2VyUHJl
ZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiA9IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNl
OjpEZWZhdWx0OwotI2VuZGlmCi0KLSNpZiAhVVNFKEFOR0xFKQotI2lmIFVTRShPUEVOR0xfRVMp
Ci0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktp
dEJyaWRnZShTSF9FU1NMX09VVFBVVCwgU0hfV0VCR0wyX1NQRUMpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVUKTsKLSNlbHNl
Ci0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktp
dEJyaWRnZShTSF9HTFNMXzQxMF9DT1JFX09VVFBVVCwgU0hfV0VCR0wyX1NQRUMpOwotI2VuZGlm
IC8vIFVTRShPUEVOR0xfRVMpCi0jZW5kaWYgLy8gIVVTRShBTkdMRSkKLQotI2lmIFVTRShPUEVO
R0xfRVMpCi0gICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotICAgIEVBR0xSZW5kZXJpbmdB
UEkgYXBpID0gbV9pc0ZvcldlYkdMMiA/IGtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMzIDoga0VB
R0xSZW5kZXJpbmdBUElPcGVuR0xFUzI7Ci0gICAgRUFHTENvbnRleHQgKmNvbnRleHRPYmo7Ci0g
ICAgaWYgKCFzaGFyZWRDb250ZXh0KQotICAgICAgICBjb250ZXh0T2JqID0gW1tFQUdMQ29udGV4
dCBhbGxvY10gaW5pdFdpdGhBUEk6YXBpXTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHRPYmog
PSBbW0VBR0xDb250ZXh0IGFsbG9jXSBpbml0V2l0aEFQSTphcGkgc2hhcmVncm91cDpzdGF0aWNf
Y2FzdDxFQUdMQ29udGV4dCAqPihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopLnNoYXJlZ3Jv
dXBdOwotCi0gICAgbV9jb250ZXh0T2JqID0gc3RhdGljX2Nhc3Q8dm9pZCAqPihjb250ZXh0T2Jq
KTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1faXNGb3JXZWJHTDIp
Ci0gICAgICAgIDo6Z2xFbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlBSSU1JVElWRV9SRVNUQVJU
X0ZJWEVEX0lOREVYKTsKLSNlbGlmIFVTRShPUEVOR0wpCi0KLSAgICBib29sIHVzZU11bHRpc2Ft
cGxpbmcgPSBhdHRycy5hbnRpYWxpYXM7Ci0KLSAgICBWZWN0b3I8Q0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGU+IGF0dHJpYnM7Ci0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmogPSAw
OwotICAgIEdMaW50IG51bVBpeGVsRm9ybWF0cyA9IDA7Ci0KLSAgICBhdHRyaWJzLmFwcGVuZChr
Q0dMUEZBQWNjZWxlcmF0ZWQpOwotICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFDb2xvclNpemUp
OwotICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
PigzMikpOwotICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFEZXB0aFNpemUpOwotICAgIGF0dHJp
YnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigzMikpOwotCi0g
ICAgLy8gVGhpcyBhdHRyaWJ1dGUsIHdoaWxlIG1lbnRpb25pbmcgb2ZmbGluZSByZW5kZXJlcnMs
IGlzIGFjdHVhbGx5Ci0gICAgLy8gYWxsb3dpbmcgdXMgdG8gcmVxdWVzdCB0aGUgaW50ZWdyYXRl
ZCBncmFwaGljcyBvbiBhIGR1YWwgR1BVCi0gICAgLy8gc3lzdGVtLCBhbmQgbm90IGZvcmNlIHRo
ZSBkaXNjcmV0ZSBHUFUuCi0gICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9s
aWJyYXJ5L21hYy90ZWNobm90ZXMvdG4yMjI5L19pbmRleC5odG1sCi0gICAgaWYgKGFsbG93T2Zm
bGluZVJlbmRlcmVycygpKQotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQWxsb3dPZmZs
aW5lUmVuZGVyZXJzKTsKLQotICAgIGlmICh1c2VNdWx0aXNhbXBsaW5nKSB7Ci0gICAgICAgIGF0
dHJpYnMuYXBwZW5kKGtDR0xQRkFNdWx0aXNhbXBsZSk7Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5k
KGtDR0xQRkFTYW1wbGVCdWZmZXJzKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nh
c3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDEpKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQo
a0NHTFBGQVNhbXBsZXMpOwotICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZT4oNCkpOwotICAgIH0KLQotICAgIGlmIChtX2lzRm9yV2ViR0wy
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGJhY2tpbmcgYSBXZWJHTDIgR3JhcGhp
Y3NDb250ZXh0M0Qgd2l0aCBhIE9wZW5HTCA0IGNvbnRleHQsIHdlIHNob3VsZCBpbnN0ZWFkIGJh
Y2sgaXQgd2l0aCBBTkdMRS4KLSAgICAgICAgLy8gVXNlIGFuIE9wZW5HTCA0IGNvbnRleHQgZm9y
IG5vdyB1bnRpbCB0aGUgQU5HTEUgYmFja2VuZCBpcyByZWFkeS4KLSAgICAgICAgYXR0cmlicy5h
cHBlbmQoa0NHTFBGQU9wZW5HTFByb2ZpbGUpOwotICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0
aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oa0NHTE9HTFBWZXJzaW9uX0dMNF9Db3Jl
KSk7Ci0gICAgfQotCi0gICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGU+KDApKTsKLQotICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMuZGF0
YSgpLCAmcGl4ZWxGb3JtYXRPYmosICZudW1QaXhlbEZvcm1hdHMpOwotCi0gICAgaWYgKCFudW1Q
aXhlbEZvcm1hdHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHTENvbnRleHRPYmogY2dsQ29u
dGV4dCA9IG51bGxwdHI7Ci0gICAgQ0dMQ29udGV4dE9iaiBzaGFyZWRDR0xDb250ZXh0ID0gc2hh
cmVkQ29udGV4dCA/IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KHNoYXJlZENvbnRleHQtPm1f
Y29udGV4dE9iaikgOiBudWxscHRyOwotCi0gICAgQ0dMRXJyb3IgZXJyID0gQ0dMQ3JlYXRlQ29u
dGV4dChwaXhlbEZvcm1hdE9iaiwgc2hhcmVkQ0dMQ29udGV4dCwgJmNnbENvbnRleHQpOwotICAg
IEdMaW50IGFib3J0T25CbGFja2xpc3QgPSAwOwotICAgIENHTFNldFBhcmFtZXRlcihjZ2xDb250
ZXh0LCBrQ0dMQ1BBYm9ydE9uR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlzdGVkLCAmYWJvcnRPbkJs
YWNrbGlzdCk7Ci0KLSNpZiBQTEFURk9STShNQUMpIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNo
b3VsZCBiZSBVU0UoT1BFTkdMKSAtIHNlZSA8cmRhcjovLzUzMDYyNzk0Pi4KLQotICAgIGF1dG8g
Z3B1SUQgPSAoaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5kaXNwbGF5SUQoKSkgPyBncHVJREZv
ckRpc3BsYXkoaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpIDogcHJpbWFyeUdQVUlEKCk7Ci0gICAg
c2V0R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRleHQsIHBpeGVsRm9ybWF0T2JqLCBncHVJRCk7Ci0K
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0KLSAgICBDR0xE
ZXN0cm95UGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXRPYmopOwotCi0gICAgbV9jb250ZXh0T2JqID0g
Y2dsQ29udGV4dDsKLQotICAgIGlmIChlcnIgIT0ga0NHTE5vRXJyb3IgfHwgIW1fY29udGV4dE9i
aikgewotICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBjcmVhdGUgdGhlIGNvbnRleHQuCi0g
ICAgICAgIG1fY29udGV4dE9iaiA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHRPYmogPSBjZ2xDb250ZXh0OwotCi0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY2ds
Q29udGV4dCk7Ci0KLSAgICAvLyBXZWJHTCAyIGV4cGVjdHMgRVMgMy1vbmx5IFBSSU1JVElWRV9S
RVNUQVJUX0ZJWEVEX0lOREVYIHRvIGJlIGVuYWJsZWQ7IHdlIG11c3QgZW11bGF0ZSB0aGlzIG9u
IG5vbi1FUyAzIHN5c3RlbXMuCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIDo6Z2xF
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlBSSU1JVElWRV9SRVNUQVJUKTsKLQotI2VsaWYgVVNF
KEFOR0xFKQotCi0gICAgbV9kaXNwbGF5T2JqID0gRUdMX0dldERpc3BsYXkoRUdMX0RFRkFVTFRf
RElTUExBWSk7Ci0gICAgaWYgKG1fZGlzcGxheU9iaiA9PSBFR0xfTk9fRElTUExBWSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIEVHTGludCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbjsKLSAgICBp
ZiAoRUdMX0luaXRpYWxpemUobV9kaXNwbGF5T2JqLCAmbWFqb3JWZXJzaW9uLCAmbWlub3JWZXJz
aW9uKSA9PSBFR0xfRkFMU0UpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiRUdMRGlzcGxheSBJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTE9HKFdl
YkdMLCAiQU5HTEUgaW5pdGlhbGlzZWQgTWFqb3I6ICVkIE1pbm9yOiAlZCIsIG1ham9yVmVyc2lv
biwgbWlub3JWZXJzaW9uKTsKLSAgICBjb25zdCBjaGFyICpkaXNwbGF5RXh0ZW5zaW9ucyA9IEVH
TF9RdWVyeVN0cmluZyhtX2Rpc3BsYXlPYmosIEVHTF9FWFRFTlNJT05TKTsKLSAgICBMT0coV2Vi
R0wsICJFeHRlbnNpb25zOiAlcyIsIGRpc3BsYXlFeHRlbnNpb25zKTsKLQotICAgIEVHTGludCBj
b25maWdBdHRyaWJ1dGVzW10gPSB7Ci0gICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9P
UEVOR0xfRVMyX0JJVCwKLSAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAotICAgICAgICBFR0xfR1JF
RU5fU0laRSwgOCwKLSAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKLSAgICAgICAgRUdMX0FMUEhB
X1NJWkUsIDgsCi0gICAgICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xpbnQgbnVtYmVyQ29u
Zmlnc1JldHVybmVkID0gMDsKLSAgICBFR0xfQ2hvb3NlQ29uZmlnKG1fZGlzcGxheU9iaiwgY29u
ZmlnQXR0cmlidXRlcywgJm1fY29uZmlnT2JqLCAxLCAmbnVtYmVyQ29uZmlnc1JldHVybmVkKTsK
LSAgICBpZiAobnVtYmVyQ29uZmlnc1JldHVybmVkICE9IDEpIHsKLSAgICAgICAgTE9HKFdlYkdM
LCAiRUdMQ29uZmlnIEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29uZmlnIik7Ci0KLSAgICBFR0xfQmluZEFQ
SShFR0xfT1BFTkdMX0VTX0FQSSk7Ci0gICAgaWYgKEVHTF9HZXRFcnJvcigpICE9IEVHTF9TVUND
RVNTKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlVuYWJsZSB0byBiaW5kIHRvIE9QRU5HTF9FU19B
UEkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFZlY3RvcjxFR0xpbnQ+IGVnbENv
bnRleHRBdHRyaWJ1dGVzOwotICAgIGlmIChtX2lzRm9yV2ViR0wyKSB7Ci0gICAgICAgIGVnbENv
bnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7Ci0gICAg
ICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZCgzKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04p
OwotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMik7Ci0gICAgICAgIC8vIEFO
R0xFIHdpbGwgdXBncmFkZSB0aGUgY29udGV4dCB0byBFUzMgYXV0b21hdGljYWxseSB1bmxlc3Mg
dGhpcyBpcyBzcGVjaWZpZWQuCi0gICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfQ09OVEVYVF9PUEVOR0xfQkFDS1dBUkRTX0NPTVBBVElCTEVfQU5HTEUpOwotICAgICAgICBl
Z2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0ZBTFNFKTsKLSAgICB9Ci0gICAgZWdsQ29u
dGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX1dFQkdMX0NPTVBBVElCSUxJVFlfQU5H
TEUpOwotICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfVFJVRSk7Ci0KLSAgICBp
ZiAoc3Ryc3RyKGRpc3BsYXlFeHRlbnNpb25zLCAiRUdMX0FOR0xFX3Bvd2VyX3ByZWZlcmVuY2Ui
KSkgewotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1BPV0VSX1BSRUZF
UkVOQ0VfQU5HTEUpOwotICAgICAgICAvLyBFR0xfTE9XX1BPV0VSX0FOR0xFIGlzIHRoZSBkZWZh
dWx0LiBDaGFuZ2UgdG8KLSAgICAgICAgLy8gRUdMX0hJR0hfUE9XRVJfQU5HTEUgaWYgZGVzaXJl
ZC4KLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9MT1dfUE9XRVJfQU5H
TEUpOwotICAgIH0KLSAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX05PTkUpOwot
Ci0gICAgbV9jb250ZXh0T2JqID0gRUdMX0NyZWF0ZUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2Nv
bmZpZ09iaiwgc2hhcmVkQ29udGV4dCA/IHN0YXRpY19jYXN0PEVHTENvbnRleHQ+KHNoYXJlZENv
bnRleHQtPm1fY29udGV4dE9iaikgOiBFR0xfTk9fQ09OVEVYVCwgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuZGF0YSgpKTsKLSAgICBpZiAobV9jb250ZXh0T2JqID09IEVHTF9OT19DT05URVhUKSB7Ci0g
ICAgICAgIExPRyhXZWJHTCwgIkVHTENvbnRleHQgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIExPRyhXZWJHTCwgIkdvdCBFR0xDb250ZXh0Iik7
Ci0KLSAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX1NVUkZBQ0UsIG1fY29udGV4dE9iaik7Ci0KLSAgICBpZiAobV9pc0ZvcldlYkdMMikKLSAg
ICAgICAgZ2w6OkVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6UFJJTUlUSVZFX1JFU1RBUlRfRklY
RURfSU5ERVgpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIEV4dGVuc2lvbnMzRCYgZXh0ZW5z
aW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hh
ciogcmVxdWlyZWRFeHRlbnNpb25zW10gPSB7Ci0gICAgICAgICJHTF9BTkdMRV90ZXh0dXJlX3Jl
Y3RhbmdsZSIsIC8vIEZvciBJT1N1cmZhY2UtYmFja2VkIHRleHR1cmVzLgotICAgICAgICAiR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IiwgLy8gRm9yIGNyZWF0aW5nIHRoZSBFR0wgc3Vy
ZmFjZSBmcm9tIGFuIElPU3VyZmFjZS4KLSAgICB9OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHJlcXVpcmVkRXh0ZW5zaW9ucyk7ICsraSkgewotICAgICAg
ICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMocmVxdWlyZWRFeHRlbnNpb25zW2ldKSkgewotICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiTWlzc2luZyByZXF1aXJlZCBleHRlbnNpb24uICVzIiwgcmVx
dWlyZWRFeHRlbnNpb25zW2ldKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChyZXF1aXJlZEV4dGVuc2lvbnNbaV0pOwot
ICAgIH0KLQotICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBudWxscHRyOwotICAgIEVHTF9RdWVy
eURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRlcnBy
ZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7Ci0gICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250
ZXh0ID0gbnVsbHB0cjsKLSAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdCA9IG51bGxw
dHI7Ci0gICAgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9DT05URVhU
X0FOR0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZjZ2xDb250ZXh0KSk7Ci0gICAg
RUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9QSVhFTF9GT1JNQVRfQU5H
TEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJnBpeGVsRm9ybWF0KSk7Ci0gICAgYXV0
byBncHVJRCA9IChob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPmRpc3BsYXlJRCgpKSA/IGdwdUlE
Rm9yRGlzcGxheShob3N0V2luZG93LT5kaXNwbGF5SUQoKSkgOiBwcmltYXJ5R1BVSUQoKTsKLSAg
ICBzZXRHUFVCeVJlZ2lzdHJ5SUQoY2dsQ29udGV4dCwgcGl4ZWxGb3JtYXQsIGdwdUlEKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKLQotI2VuZGlmIC8vICNlbGlmIFVTRShBTkdMRSkKLQotICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwotICAgIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBj
aGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgotCi0gICAgLy8gQ3JlYXRlIHRoZSBXZWJHTExheWVy
Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgICAgIG1fd2ViR0xMYXllciA9
IGFkb3B0TlMoW1tXZWJHTExheWVyIGFsbG9jXSBpbml0V2l0aEdyYXBoaWNzQ29udGV4dDNEOnRo
aXNdKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0TmFtZTpAIldl
YkdMIExheWVyIl07Ci0jZW5kaWYKLSNpZiBVU0UoQU5HTEUpCi0gICAgICAgIFttX3dlYkdMTGF5
ZXIgc2V0RUdMRGlzcGxheTptX2Rpc3BsYXlPYmogY29uZmlnOm1fY29uZmlnT2JqXTsKLSNlbmRp
ZgotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLQotI2lmIFVTRShPUEVOR0wpCi0gICAg
aWYgKHVzZU11bHRpc2FtcGxpbmcpCi0gICAgICAgIDo6Z2xFbmFibGUoR0xfTVVMVElTQU1QTEUp
OwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgdGhlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHVzZWQg
Zm9yIHRoZSBmcmFtZWJ1ZmZlci4KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIDo6Z2xHZW5SZW5k
ZXJidWZmZXJzKDEsICZtX3RleHR1cmUpOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICA6OmdsR2Vu
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgLy8gV2UgYmluZCB0byBHTF9URVhUVVJFX1JF
Q1RBTkdMRV9FWFQgcmF0aGVyIHRoYW4gVEVYVFVSRV8yRCBiZWNhdXNlCi0gICAgLy8gdGhhdCdz
IHdoYXQgaXMgcmVxdWlyZWQgZm9yIGEgdGV4dHVyZSBiYWNrZWQgYnkgSU9TdXJmYWNlLgotICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIG1fdGV4dHVyZSk7Ci0g
ICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfRVhULCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0g
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgMCk7Ci0KLSNlbGlm
IFVTRShBTkdMRSkKLQotICAgIEdMZW51bSB0ZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0
M0Q6OklPU3VyZmFjZVRleHR1cmVUYXJnZXQ7Ci0KLSAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIG1fdGV4dHVyZSk7
Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0
ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCAwKTsKLSNl
bHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbgotI2VuZGlmCi0KLSNpZiBVU0Uo
T1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQotICAgIC8vIENyZWF0ZSB0aGUgZnJhbWVidWZmZXIg
b2JqZWN0LgotICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotCi0gICAgbV9z
dGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwotICAgIGlmICghYXR0cnMuYW50aWFsaWFzICYmIChhdHRy
cy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkKLSAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLQotICAgIC8vIElmIG5lY2Vzc2FyeSwgY3Jl
YXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNhbXBsZSByZXN1bHRzLgotICAg
IGlmIChhdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3Vu
ZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cnMuc3RlbmNp
bCB8fCBhdHRycy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0jZWxpZiBVU0UoQU5H
TEUpCi0gICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX3N0YXRlLmJvdW5kRkJPID0g
bV9mYm87Ci0KLSAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBh
dHRycy5kZXB0aCkpCi0gICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0KLSAgICAvLyBJZiBuZWNlc3NhcnksIGNyZWF0ZSBhbm90aGVyIGZyYW1l
YnVmZmVyIGZvciB0aGUgbXVsdGlzYW1wbGUgcmVzdWx0cy4KLSAgICBpZiAoYXR0cnMuYW50aWFs
aWFzKSB7Ci0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8p
OwotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0g
ICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OwotICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkKLSAgICAgICAgICAg
IGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKLSAgICB9Ci0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLSNpZiAhVVNFKEFOR0xFKQotICAg
IC8vIEFOR0xFIHNoYWRlciBjb21waWxlciBpbml0aWFsaXphdGlvbi4KLQotICAgIFNoQnVpbHRJ
blJlc291cmNlcyBBTkdMRVJlc291cmNlczsKLSAgICBzaDo6SW5pdEJ1aWx0SW5SZXNvdXJjZXMo
JkFOR0xFUmVzb3VyY2VzKTsKLQotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291
cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhD
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzKTsKLQotICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgotICAgIEFO
R0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKLSAgICAKLSAgICBHQzNEaW50IHJhbmdl
WzJdLCBwcmVjaXNpb247Ci0gICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0ZMT0FULCBy
YW5nZSwgJnByZWNpc2lvbik7Ci0gICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25I
aWdoID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7Ci0KLSAgICBtX2NvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkK
LSAgICAKLSNpZiBVU0UoT1BFTkdMKQotICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1f
UE9JTlRfU0laRSk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIDo6Z2xF
bmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKLSNlbmRpZgotCi0jaWYgVVNFKE9QRU5HTCkgfHwgVVNF
KE9QRU5HTF9FUykKLSAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSNlbGlmIFVTRShB
TkdMRSkKLSAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSNlbmRpZgotCi0gICAgTE9H
KFdlYkdMLCAiQ3JlYXRlZCBhIEdyYXBoaWNzQ29udGV4dDNEICglcCkuIiwgdGhpcyk7Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIEdyYXBoaWNz
Q29udGV4dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHQodGhpcyk7Ci0K
LSAgICBpZiAobV9jb250ZXh0T2JqKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEQXR0cmli
dXRlcyBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQot
ICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgW3N0YXRpY19jYXN0PEVBR0xD
b250ZXh0ICo+KG1fY29udGV4dE9iaikgcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJCVUZG
RVIgZnJvbURyYXdhYmxlOm5pbF07Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX3RleHR1cmUpOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICAgICAgQ0dMQ29udGV4dE9iaiBj
Z2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250ZXh0T2JqKTsKLSAg
ICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY2dsQ29udGV4dCk7Ci0gICAgICAgIDo6Z2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAgICAgRUdM
X01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNF
LCBtX2NvbnRleHRPYmopOwotICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpCi0gICAgICAg
IGlmIChhdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZm
ZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgaWYgKGF0
dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRy
cy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAgIDo6Z2xEZWxldGVGcmFt
ZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAgICAgaWYgKGF0
dHJzLmFudGlhbGlhcykgewotICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNp
bCB8fCBhdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBnbDo6
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQotICAgICAg
ICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgICAgIH0KLSAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8p
OwotI2VuZGlmCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBbRUFHTENvbnRleHQgc2V0
Q3VycmVudENvbnRleHQ6MF07Ci0gICAgICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCAqPiht
X2NvbnRleHRPYmopIHJlbGVhc2VdOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICAgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQoMCk7Ci0gICAgICAgIENHTERlc3Ryb3lDb250ZXh0KGNnbENvbnRleHQp
OwotI2VsaWYgVVNFKEFOR0xFKQotICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2Jq
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICAg
ICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb250ZXh0T2JqKTsKLSNlbmRp
ZgotICAgICAgICBbbV93ZWJHTExheWVyIHNldENvbnRleHQ6bnVsbHB0cl07Ci0gICAgfQotCi0g
ICAgTE9HKFdlYkdMLCAiRGVzdHJveWVkIGEgR3JhcGhpY3NDb250ZXh0M0QgKCVwKS4iLCB0aGlz
KTsKLX0KLQotI2lmIFVTRShPUEVOR0xfRVMpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRS
ZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBjYWxsIHRvIHNldEJvdW5kcyBi
ZWxvdyB0byB1cGRhdGUgdGhlIGJhY2tpbmcgc3RvcmUgc2l6ZSBidXQgd2UgYWxzbwotICAgIC8v
IGRvIG5vdCB3YW50IHRvIGNsb2JiZXIgdGhlIGJvdW5kcyBzZXQgZHVyaW5nIGxheW91dC4KLSAg
ICBDR1JlY3QgcHJldmlvdXNCb3VuZHMgPSBbbV93ZWJHTExheWVyLmdldCgpIGJvdW5kc107Ci0K
LSAgICBbbV93ZWJHTExheWVyIHNldEJvdW5kczpDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLCBoZWln
aHQpXTsKLSAgICBbbV93ZWJHTExheWVyIHNldE9wYXF1ZTohY29udGV4dEF0dHJpYnV0ZXMoKS5h
bHBoYV07Ci0KLSAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4obV9jb250ZXh0T2JqKSBy
ZW5kZXJidWZmZXJTdG9yYWdlOkdMX1JFTkRFUkJVRkZFUiBmcm9tRHJhd2FibGU6c3RhdGljX2Nh
c3Q8aWQ8RUFHTERyYXdhYmxlPj4obV93ZWJHTExheWVyLmdldCgpKV07Ci0KLSAgICBbbV93ZWJH
TExheWVyIHNldEJvdW5kczpwcmV2aW91c0JvdW5kc107Ci19Ci0jZW5kaWYKLQotYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBpZiAoIW1fY29udGV4
dE9iaikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICBp
ZiAoW0VBR0xDb250ZXh0IGN1cnJlbnRDb250ZXh0XSAhPSBtX2NvbnRleHRPYmopCi0gICAgICAg
IHJldHVybiBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6c3RhdGljX2Nhc3Q8RUFHTENv
bnRleHQqPihtX2NvbnRleHRPYmopXTsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgQ0dMQ29udGV4
dE9iaiBjdXJyZW50Q29udGV4dCA9IENHTEdldEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgaWYgKGN1
cnJlbnRDb250ZXh0ICE9IG1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuIENHTFNldEN1cnJl
bnRDb250ZXh0KHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9iaikpID09IGtD
R0xOb0Vycm9yOwotI2VsaWYgVVNFKEFOR0xFKQotICAgIGlmIChFR0xfR2V0Q3VycmVudENvbnRl
eHQoKSAhPSBtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybiBFR0xfTWFrZUN1cnJlbnQobV9k
aXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29udGV4dE9iaik7
Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y2hlY2tHUFVTdGF0dXMoKQotewotICAgIGlmIChtX2ZhaWxOZXh0U3RhdHVzQ2hlY2spIHsKLSAg
ICAgICAgTE9HKFdlYkdMLCAiUHJldGVuZGluZyB0aGUgR1BVIGhhcyByZXNldCAoJXApLiBMb3Nl
IHRoZSBjb250ZXh0LiIsIHRoaXMpOwotICAgICAgICBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSBm
YWxzZTsKLSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotI2lmIFVTRShPUEVOR0wpCi0gICAg
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSAgICAg
ICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOwotI2VsaWYgVVNFKEFOR0xFKQot
ICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdM
X05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gT25seSBkbyB0aGUgY2hlY2sgZXZlcnkgc3RhdHVzQ2hlY2tUaHJlc2hv
bGQgY2FsbHMuCi0gICAgaWYgKG1fc3RhdHVzQ2hlY2tDb3VudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zdGF0dXNDaGVja0NvdW50ID0gKG1fc3RhdHVzQ2hlY2tDb3VudCArIDEpICUgc3Rh
dHVzQ2hlY2tUaHJlc2hvbGQ7Ci0KLSAgICBHTGludCByZXN0YXJ0U3RhdHVzID0gMDsKLSNpZiBV
U0UoT1BFTkdMKQotICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENH
TENvbnRleHRPYmo+KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgQ0dMR2V0UGFy
YW1ldGVyKGNnbENvbnRleHQsIGtDR0xDUEdQVVJlc3RhcnRTdGF0dXMsICZyZXN0YXJ0U3RhdHVz
KTsKLSAgICBpZiAocmVzdGFydFN0YXR1cyA9PSBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzQmxhY2ts
aXN0ZWQpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiVGhlIEdQVSBoYXMgYmxhY2tsaXN0ZWQgdXMg
KCVwKS4gVGVybWluYXRpbmcuIiwgdGhpcyk7Ci0gICAgICAgIGV4aXQoRVhfT1NFUlIpOwotICAg
IH0KLSAgICBpZiAocmVzdGFydFN0YXR1cyA9PSBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzQ2F1c2Vk
KSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlRoZSBHUFUgaGFzIHJlc2V0IHVzICglcCkuIExvc2Ug
dGhlIGNvbnRleHQuIiwgdGhpcyk7Ci0gICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKLSAgICAg
ICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7Ci0gICAgfQotI2VsaWYgVVNFKE9QRU5HTF9FUykK
LSAgICBFQUdMQ29udGV4dCogY3VycmVudENvbnRleHQgPSBzdGF0aWNfY2FzdDxFQUdMQ29udGV4
dCo+KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgW2N1cnJlbnRDb250ZXh0IGdl
dFBhcmFtZXRlcjprRUFHTENQR1BVUmVzdGFydFN0YXR1cyB0bzomcmVzdGFydFN0YXR1c107Ci0g
ICAgaWYgKHJlc3RhcnRTdGF0dXMgPT0ga0VBR0xDUEdQVVJlc3RhcnRTdGF0dXNDYXVzZWQgfHwg
cmVzdGFydFN0YXR1cyA9PSBrRUFHTENQR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlzdGVkKSB7Ci0g
ICAgICAgIExPRyhXZWJHTCwgIlRoZSBHUFUgaGFzIGVpdGhlciByZXNldCBvciBibGFja2xpc3Rl
ZCB1cyAoJXApLiBMb3NlIHRoZSBjb250ZXh0LiIsIHRoaXMpOwotICAgICAgICBmb3JjZUNvbnRl
eHRMb3N0KCk7Ci0gICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKLSAg
ICB9Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgLy8gRklYTUU6IGNoZWNrIHZpYSBLSFJfcm9idXN0
bmVzcy4KLSAgICByZXN0YXJ0U3RhdHVzID0gMDsKLSNlbmRpZgotfQotCi0jaWYgVVNFKE9QRU5H
TF9FUykKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXNlbnRSZW5kZXJidWZmZXIoKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFu
dGlhbGlhcykKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotCi0g
ICAgOjpnbEZsdXNoKCk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCBtX3RleHR1cmUpOwotICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9i
aikgcHJlc2VudFJlbmRlcmJ1ZmZlcjpHTF9SRU5ERVJCVUZGRVJdOwotICAgIFtFQUdMQ29udGV4
dCBzZXRDdXJyZW50Q29udGV4dDpuaWxdOwotfQotI2VuZGlmCi0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlSU9TdXJmYWNlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiBzdXJmYWNlLCBHQzNEdWludCBwbGFu
ZSkKLXsKLSNpZiBVU0UoT1BFTkdMKQotICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0
YXRpY19jYXN0PENHTENvbnRleHRPYmo+KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0g
ICAgcmV0dXJuIGtDR0xOb0Vycm9yID09IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY2dsQ29udGV4
dCwgdGFyZ2V0LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBz
dXJmYWNlLCBwbGFuZSk7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZB
TUlMWV9TSU1VTEFUT1IpCi0gICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCAqPihw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpIHRleEltYWdlSU9TdXJmYWNlOnN1cmZhY2UgdGFy
Z2V0OnRhcmdldCBpbnRlcm5hbEZvcm1hdDppbnRlcm5hbEZvcm1hdCB3aWR0aDp3aWR0aCBoZWln
aHQ6aGVpZ2h0IGZvcm1hdDpmb3JtYXQgdHlwZTp0eXBlIHBsYW5lOnBsYW5lXTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsRm9ybWF0
KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwot
ICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBV
TlVTRURfUEFSQU0oc3VyZmFjZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBsYW5lKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShPUEVOR0wpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplIHNpemUpCi17Ci0g
ICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2lu
Z1N0b3JlIGF0ICVkIHggJWQuICglcCkiLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHRo
aXMpOwotICAgIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRo
U2l6ZTpzaXplIHVzaW5nQWxwaGE6Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYV07Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9y
ZUZyb21MYXllcigpCi17Ci0gICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0
ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpLiAoJXApIiwgdGhpcyk7
Ci0gICAgW21fd2ViR0xMYXllciBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNl
XTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlQ0dMQ29udGV4dCgpCi17Ci0g
ICAgaWYgKCFtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybjsKLQotICAgIExPRyhXZWJHTCwg
IkRldGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29uZmlndXJhdGlvbi4gQ2FsbCBD
R0xVcGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBDR0xVcGRhdGVDb250ZXh0KHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1fY29u
dGV4dE9iaikpOwotICAgIG1faGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSA9IHRydWU7
Ci19Ci0KLSNlbmRpZiAvLyBVU0UoT1BFTkdMKQotCi0jaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFO
R0xFKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBp
c1Zpc2libGUpCi17Ci0gICAgaWYgKG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID09
IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UpIHsKLSAg
ICAgICAgaWYgKGlzVmlzaWJsZSkKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdl
cjo6c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UodGhp
cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6
c2hhcmVkTWFuYWdlcigpLnJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UodGhp
cyk7Ci0gICAgfQotfQotI2VuZGlmIC8vIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKLQotI2lm
IFVTRShBTkdMRSkKLQotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVwZGF0ZUNHTENvbnRleHQoKQotewotICAgIGlmICghbV9jb250ZXh0T2JqKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBMT0coV2ViR0wsICJEZXRlY3RlZCBhIG11eCBzd2l0Y2ggb3IgZGlzcGxh
eSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dMVXBkYXRlQ29udGV4dC4gKCVwKSIsIHRoaXMpOwot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgRUdMRGV2aWNlRVhUIGRldmljZSA9IG51
bGxwdHI7Ci0gICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJpYkVYVChtX2Rpc3BsYXlPYmosIEVHTF9E
RVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZkZXZpY2UpKTsKLSAgICBD
R0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOwotICAgIEVHTF9RdWVyeURldmljZUF0
dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfQ09OVEVYVF9BTkdMRSwgcmVpbnRlcnByZXRfY2FzdDxF
R0xBdHRyaWIqPigmY2dsQ29udGV4dCkpOwotCi0gICAgQ0dMVXBkYXRlQ29udGV4dChjZ2xDb250
ZXh0KTsKLSAgICBtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUgPSB0cnVlOwotfQot
I2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2lu
Z1N0b3JlKEludFNpemUgc2l6ZSkKLXsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBMT0coV2Vi
R0wsICJHcmFwaGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQg
JWQgeCAlZC4gKCVwKSIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7Ci0gICAg
W21fd2ViR0xMYXllciBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOnNpemUg
dXNpbmdBbHBoYTpjb250ZXh0QXR0cmlidXRlcygpLmFscGhhXTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKHNpemUpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0
ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpCi17Ci0jaWYgSEFWRShJ
T1NVUkZBQ0UpCi0gICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUZyYW1l
YnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpLiAoJXApIiwgdGhpcyk7Ci0gICAg
W21fd2ViR0xMYXllciBiaW5kRnJhbWVidWZmZXJUb05leHRBdmFpbGFibGVTdXJmYWNlXTsKLSNl
bmRpZgotfQotI2VuZGlmIC8vIFVTRShBTkdMRSkKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNGb3JXZWJHTDI7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNpbXVsYXRlQ29udGV4dENoYW5nZWQoKQotewot
ICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnVwZGF0ZUFsbENv
bnRleHRzKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG93T2ZmbGluZVJlbmRl
cmVycygpIGNvbnN0Ci17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoV0VCUFJPQ0VTU19X
SU5ET1dTRVJWRVJfQkxPQ0tJTkcpCi0gICAgLy8gV2hlbiBXaW5kb3dTZXJ2ZXIgYWNjZXNzIGlz
IGJsb2NrZWQgaW4gdGhlIFdlYlByb2Nlc3MsIHRoZXJlIGlzIG5vIHdheQotICAgIC8vIGZvciBP
cGVuR0wgdG8gZGVjaWRlIHdoaWNoIEdQVSBpcyBjb25uZWN0ZWQgdG8gYSBkaXNwbGF5IChvbmxp
bmUvb2ZmbGluZSkuCi0gICAgLy8gT3BlbkdMIHdpbGwgdGhlbiBjb25zaWRlciBhbGwgR1BVcywg
b3IgcmVuZGVyZXJzLCBhcyBvZmZsaW5lLCB3aGljaCBtZWFucwotICAgIC8vIGFsbCBvZmZsaW5l
IHJlbmRlcmVycyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQgd2hlbiBmaW5kaW5nIGEgcGl4ZWwgZm9y
bWF0LgotICAgIC8vIEluIFdlYktpdCBsZWdhY3ksIHRoZXJlIHdpbGwgc3RpbGwgYmUgYSBXaW5k
b3dTZXJ2ZXIgY29ubmVjdGlvbiwgYW5kCi0gICAgLy8gbV9kaXNwbGF5TWFzayB3aWxsIG5vdCBi
ZSBzZXQgaW4gdGhpcyBjYXNlLgotICAgIGlmIChwcmltYXJ5T3BlbkdMRGlzcGxheU1hc2soKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxpZiBQTEFURk9STShNQUNDQVRBTFlTVCkKLSAgICAv
LyBGSVhNRTogPHJkYXI6Ly81MzA2Mjc5ND4gV2UncmUgdmVyeSBpbmNvbnNpc3RlbnQgYWJvdXQg
V0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcKLSAgICAvLyBhbmQgTUFDL01BQ0NBVEFM
WVNUIGFuZCBPUEVOR0wvT1BFTkdMRVMuCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICAg
ICAgCi0jaWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9MKQotICAgIGlmIChoYXNMb3dBbmRI
aWdoUG93ZXJHUFVzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKLXsKLSAg
ICBpZiAoIW1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuOwotI2lmIFVTRShBTkdMRSkKLSAg
ICBpZiAoIW1faGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSkgewotICAgICAgICBFR0xE
ZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKLSAgICAgICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJp
YkVYVChtX2Rpc3BsYXlPYmosIEVHTF9ERVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVHTEF0
dHJpYio+KCZkZXZpY2UpKTsKLSAgICAgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gbnVs
bHB0cjsKLSAgICAgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQgPSBudWxscHRyOwot
ICAgICAgICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2aWNlLCBFR0xfQ0dMX0NPTlRFWFRf
QU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmNnbENvbnRleHQpKTsKLSAgICAg
ICAgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9QSVhFTF9GT1JNQVRf
QU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJnBpeGVsRm9ybWF0KSk7Ci0gICAg
ICAgIHNldEdQVUJ5UmVnaXN0cnlJRChjZ2xDb250ZXh0LCBwaXhlbEZvcm1hdCwgZ3B1SURGb3JE
aXNwbGF5KGRpc3BsYXlJRCkpOwotICAgIH0KLSNlbHNlCi0jaWYgVVNFKE9QRU5HTCkKLSAgICBp
ZiAoIW1faGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSkgewotICAgICAgICBDR0xDb250
ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRP
YmopOwotICAgICAgICBzZXRHUFVCeVJlZ2lzdHJ5SUQoY2dsQ29udGV4dCwgQ0dMR2V0UGl4ZWxG
b3JtYXQoY2dsQ29udGV4dCksIGdwdUlERm9yRGlzcGxheShkaXNwbGF5SUQpKTsKLSAgICB9Ci0j
ZW5kaWYKLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi19Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykK
LQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTM1Yzg1NDE3N2Qz
MWU3MGZkMDMwOTczOTljZDBmMmY5NTE0ODllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2Nv
YS5tbQpAQCAtMCwwICsxLDg1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKQorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFVU0UoQU5HTEUpCisjaW1wb3J0ICJHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKworI2ltcG9ydCAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKKyNpbXBvcnQgIkhUTUxDYW52YXNFbGVtZW50
LmgiCisjaW1wb3J0ICJIb3N0V2luZG93LmgiCisjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgorI2lt
cG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiV2ViR0xMYXllci5oIgorI2ltcG9ydCAiV2ViR0xP
YmplY3QuaCIKKyNpbXBvcnQgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbXBvcnQg
PENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KKyNpbXBvcnQgPHN5cy9zeXNjdGwuaD4K
KyNpbXBvcnQgPHN5c2V4aXRzLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5o
PgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgVVNFKE9QRU5HTF9FUykKKyNp
bXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KKyNpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5o
PgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3VyZmFjZS5oPgorI2ltcG9ydCA8T3BlbkdMRVMv
RVMyL2dsZXh0Lmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQg
PHBhbC9zcGkvaW9zL09wZW5HTEVTU1BJLmg+CisjZWxpZiBVU0UoT1BFTkdMKQorI2ltcG9ydCA8
SU9LaXQvSU9LaXRMaWIuaD4KKyNpbXBvcnQgPE9wZW5HTC9nbC5oPgorI2VsaWYgVVNFKEFOR0xF
KQorI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9m
IEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KKyNkZWZpbmUg
R0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250
ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbmNsdWRlIDxBTkdMRS9l
Z2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHRf
YW5nbGUuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsLmg+CisjaW5jbHVkZSA8
QU5HTEUvZW50cnlfcG9pbnRzX2VnbF9leHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2lu
dHNfZ2xlc18yXzBfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVz
X2V4dF9hdXRvZ2VuLmg+CisjaW5jbHVkZSA8QU5HTEUvZ2wyZXh0Lmg+CisjaW5jbHVkZSA8QU5H
TEUvZ2wyZXh0X2FuZ2xlLmg+CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0xfRVMpIHx8IFVTRShP
UEVOR0wpCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCisjZWxpZiBVU0UoQU5HTEUp
CisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMQU5HTEUuaCIKKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
TUFDKQorI2ltcG9ydCAiU2NyZWVuUHJvcGVydGllcy5oIgorI2lmIFVTRShPUEVOR0wpIHx8IFVT
RShBTkdMRSkKKyNpbXBvcnQgPE9wZW5HTC9DR0xSZW5kZXJlcnMuaD4KKyNlbmRpZgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0YXR1c0No
ZWNrVGhyZXNob2xkID0gNTsKKworLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgY3VycmVudGx5IGVt
cHR5IG9uIE1hYywgYnV0IHdpbGwgZ2V0IHBvcHVsYXRlZCBhcworLy8gdGhlIHJlc3RydWN0dXJp
bmcgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2OTAzIGlzIGRv
bmUKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2
YXRlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKikgeyB9CisgICAgCisgICAgfkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMUHJpdmF0ZSgpIHsgfQorfTsKKworUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0
R0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50YXRp
b24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhv
c3RXaW5kb3cuCisgICAgaWYgKGRlc3RpbmF0aW9uID09IERlc3RpbmF0aW9uOjpEaXJlY3RseVRv
SG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBNYWtlIHNwYWNl
IGZvciB0aGUgaW5jb21pbmcgY29udGV4dCBpZiB3ZSdyZSBmdWxsLgorICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlY3ljbGVDb250ZXh0SWZOZWNl
c3NhcnkoKTsKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkuaGFzVG9vTWFueUNvbnRleHRzKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjb250ZXh0ID0gYWRvcHRSZWYo
bmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJzLCBob3N0V2luZG93LCBkZXN0aW5hdGlv
bikpOworCisgICAgaWYgKCFjb250ZXh0LT5tX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5h
Z2VyKCkuYWRkQ29udGV4dChjb250ZXh0LmdldCgpLCBob3N0V2luZG93KTsKKworICAgIHJldHVy
biBjb250ZXh0OworfQorCitSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIHNoYXJl
ZENvbnRleHQpCit7CisgICAgYXV0byBob3N0V2luZG93ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuaG9zdFdpbmRvd0ZvckNvbnRleHQoJnNoYXJlZENv
bnRleHQpOworICAgIGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woc2hhcmVkQ29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpLCBob3N0V2luZG93LCBz
aGFyZWRDb250ZXh0LmRlc3RpbmF0aW9uKCksICZzaGFyZWRDb250ZXh0KSk7CisKKyAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250ZXh0KGNv
bnRleHQucHRyKCksIGhvc3RXaW5kb3cpOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKKyNp
ZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKSAvLyBGSVhNRTog
VGhpcyBwcm9iYWJseSBzaG91bGQgYmUganVzdCAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkg
LSBzZWUgPHJkYXI6Ly81MzA2Mjc5ND4uCisKK3N0YXRpYyB2b2lkIHNldEdQVUJ5UmVnaXN0cnlJ
RChDR0xDb250ZXh0T2JqIGNvbnRleHRPYmosIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0
T2JqLCBJT1JlZ2lzdHJ5R1BVSUQgcHJlZmVycmVkR1BVSUQpCit7CisgICAgLy8gV2hlbiB0aGUg
V2ViUHJvY2VzcyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgV2luZG93U2VydmVyLCB0aGVy
ZSBpcyBubyB3YXkgZm9yIE9wZW5HTCB0byB0ZWxsIHdoaWNoIEdQVSBpcyBjb25uZWN0ZWQgdG8g
YSBkaXNwbGF5LgorICAgIC8vIE9uIDEwLjEzKywgZmluZCB0aGUgdmlydHVhbCBzY3JlZW4gdGhh
dCBjb3JyZXNwb25kcyB0byB0aGUgcHJlZmVycmVkIEdQVSBieSBpdHMgcmVnaXN0cnlJRC4KKyAg
ICAvLyBDR0xTZXRWaXJ0dWFsU2NyZWVuIGNhbiB0aGVuIGJlIHVzZWQgdG8gdGVsbCBPcGVuR0wg
d2hpY2ggR1BVIGl0IHNob3VsZCBiZSB1c2luZy4KKworICAgIGlmICghY29udGV4dE9iaiB8fCAh
cHJlZmVycmVkR1BVSUQpCisgICAgICAgIHJldHVybjsKKworICAgIEdMaW50IHZpcnR1YWxTY3Jl
ZW5Db3VudCA9IDA7CisgICAgQ0dMRXJyb3IgZXJyb3IgPSBDR0xEZXNjcmliZVBpeGVsRm9ybWF0
KHBpeGVsRm9ybWF0T2JqLCAwLCBrQ0dMUEZBVmlydHVhbFNjcmVlbkNvdW50LCAmdmlydHVhbFNj
cmVlbkNvdW50KTsKKyAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOworCisgICAgR0xp
bnQgZmlyc3RBY2NlbGVyYXRlZFNjcmVlbiA9IC0xOworCisgICAgZm9yIChHTGludCB2aXJ0dWFs
U2NyZWVuID0gMDsgdmlydHVhbFNjcmVlbiA8IHZpcnR1YWxTY3JlZW5Db3VudDsgKyt2aXJ0dWFs
U2NyZWVuKSB7CisgICAgICAgIEdMaW50IGRpc3BsYXlNYXNrID0gMDsKKyAgICAgICAgZXJyb3Ig
PSBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqLCB2aXJ0dWFsU2NyZWVuLCBr
Q0dMUEZBRGlzcGxheU1hc2ssICZkaXNwbGF5TWFzayk7CisgICAgICAgIEFTU0VSVChlcnJvciA9
PSBrQ0dMTm9FcnJvcik7CisKKyAgICAgICAgYXV0byBncHVJRCA9IGdwdUlERm9yRGlzcGxheU1h
c2soZGlzcGxheU1hc2spOworCisgICAgICAgIGlmIChncHVJRCA9PSBwcmVmZXJyZWRHUFVJRCkg
eworICAgICAgICAgICAgZXJyb3IgPSBDR0xTZXRWaXJ0dWFsU2NyZWVuKGNvbnRleHRPYmosIHZp
cnR1YWxTY3JlZW4pOworICAgICAgICAgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9yKTsK
KyAgICAgICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgKCVwKSBzZXQgdG8gR1BVIHdpdGggSUQ6
ICglbGxkKS4iLCBjb250ZXh0T2JqLCBncHVJRCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZmlyc3RBY2NlbGVyYXRlZFNjcmVlbiA8IDApIHsKKyAgICAg
ICAgICAgIEdMaW50IGlzQWNjZWxlcmF0ZWQgPSAwOworICAgICAgICAgICAgZXJyb3IgPSBDR0xE
ZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqLCB2aXJ0dWFsU2NyZWVuLCBrQ0dMUEZB
QWNjZWxlcmF0ZWQsICZpc0FjY2VsZXJhdGVkKTsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvciA9
PSBrQ0dMTm9FcnJvcik7CisgICAgICAgICAgICBpZiAoaXNBY2NlbGVyYXRlZCkKKyAgICAgICAg
ICAgICAgICBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuID0gdmlydHVhbFNjcmVlbjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIE5vIHJlZ2lzdHJ5SUQgbWF0Y2ggZm91bmQ7IHNldCB0byBmaXJz
dCBoYXJkd2FyZS1hY2NlbGVyYXRlZCB2aXJ0dWFsIHNjcmVlbi4KKyAgICBpZiAoZmlyc3RBY2Nl
bGVyYXRlZFNjcmVlbiA+PSAwKSB7CisgICAgICAgIGVycm9yID0gQ0dMU2V0VmlydHVhbFNjcmVl
bihjb250ZXh0T2JqLCBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuKTsKKyAgICAgICAgQVNTRVJUKGVy
cm9yID09IGtDR0xOb0Vycm9yKTsKKyAgICAgICAgTE9HKFdlYkdMLCAiUmVnaXN0cnlJRCAoJWxs
ZCkgbm90IG1hdGNoZWQ7IENvbnRleHQgKCVwKSBzZXQgdG8gdmlydHVhbCBzY3JlZW4gKCVkKS4i
LCBwcmVmZXJyZWRHUFVJRCwgY29udGV4dE9iaiwgZmlyc3RBY2NlbGVyYXRlZFNjcmVlbik7Cisg
ICAgfQorfQorCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNF
KEFOR0xFKSkKKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgR3JhcGhpY3NDb250ZXh0R0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dEdM
KGF0dHJzLCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZT4odGhpcykpCit7CisgICAgQVNT
RVJUKEFOR0xFV2ViS2l0QnJpZGdlOjphbmdsZUF2YWlsYWJsZSgpKTsKKyAgICBpZiAoIUFOR0xF
V2ViS2l0QnJpZGdlOjphbmdsZUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2lzRm9yV2ViR0wyID0gYXR0cnMuaXNXZWJHTDI7CisKKyNpZiBIQVZFKEFQUExFX0dSQVBISUNT
X0NPTlRST0wpCisgICAgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24gPSAoaGFzTG93
QW5kSGlnaFBvd2VyR1BVcygpICYmIGF0dHJzLnBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0Nv
bnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSA/IEdyYXBoaWNzQ29udGV4
dEdMUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UgOiBHcmFwaGljc0NvbnRleHRHTFBv
d2VyUHJlZmVyZW5jZTo6RGVmYXVsdDsKKyNlbHNlCisgICAgbV9wb3dlclByZWZlcmVuY2VVc2Vk
Rm9yQ3JlYXRpb24gPSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdDsK
KyNlbmRpZgorCisjaWYgIVVTRShBTkdMRSkKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIGlmICht
X2lzRm9yV2ViR0wyKQorICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hf
RVNTTF9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29tcGls
ZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCk7CisjZWxzZQorICAgIGlmICht
X2lzRm9yV2ViR0wyKQorICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hf
R0xTTF80MTBfQ09SRV9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKKyNlbmRpZiAvLyBVU0UoT1BF
TkdMX0VTKQorI2VuZGlmIC8vICFVU0UoQU5HTEUpCisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAg
IFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKKyAgICBFQUdMUmVuZGVyaW5nQVBJIGFwaSA9IG1f
aXNGb3JXZWJHTDIgPyBrRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMyA6IGtFQUdMUmVuZGVyaW5n
QVBJT3BlbkdMRVMyOworICAgIEVBR0xDb250ZXh0ICpjb250ZXh0T2JqOworICAgIGlmICghc2hh
cmVkQ29udGV4dCkKKyAgICAgICAgY29udGV4dE9iaiA9IFtbRUFHTENvbnRleHQgYWxsb2NdIGlu
aXRXaXRoQVBJOmFwaV07CisgICAgZWxzZQorICAgICAgICBjb250ZXh0T2JqID0gW1tFQUdMQ29u
dGV4dCBhbGxvY10gaW5pdFdpdGhBUEk6YXBpIHNoYXJlZ3JvdXA6c3RhdGljX2Nhc3Q8RUFHTENv
bnRleHQgKj4oc2hhcmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKS5zaGFyZWdyb3VwXTsKKworICAg
IG1fY29udGV4dE9iaiA9IHN0YXRpY19jYXN0PHZvaWQgKj4oY29udGV4dE9iaik7CisKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICA6
OmdsRW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRF
WCk7CisjZWxpZiBVU0UoT1BFTkdMKQorCisgICAgYm9vbCB1c2VNdWx0aXNhbXBsaW5nID0gYXR0
cnMuYW50aWFsaWFzOworCisgICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBhdHRy
aWJzOworICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKKyAgICBHTGlu
dCBudW1QaXhlbEZvcm1hdHMgPSAwOworCisgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFjY2Vs
ZXJhdGVkKTsKKyAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsKKyAgICBhdHRy
aWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpKTsKKyAg
ICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBRGVwdGhTaXplKTsKKyAgICBhdHRyaWJzLmFwcGVuZChz
dGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpKTsKKworICAgIC8vIFRoaXMg
YXR0cmlidXRlLCB3aGlsZSBtZW50aW9uaW5nIG9mZmxpbmUgcmVuZGVyZXJzLCBpcyBhY3R1YWxs
eQorICAgIC8vIGFsbG93aW5nIHVzIHRvIHJlcXVlc3QgdGhlIGludGVncmF0ZWQgZ3JhcGhpY3Mg
b24gYSBkdWFsIEdQVQorICAgIC8vIHN5c3RlbSwgYW5kIG5vdCBmb3JjZSB0aGUgZGlzY3JldGUg
R1BVLgorICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMv
dGVjaG5vdGVzL3RuMjIyOS9faW5kZXguaHRtbAorICAgIGlmIChhbGxvd09mZmxpbmVSZW5kZXJl
cnMoKSkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFsbG93T2ZmbGluZVJlbmRlcmVy
cyk7CisKKyAgICBpZiAodXNlTXVsdGlzYW1wbGluZykgeworICAgICAgICBhdHRyaWJzLmFwcGVu
ZChrQ0dMUEZBTXVsdGlzYW1wbGUpOworICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBU2Ft
cGxlQnVmZmVycyk7CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVs
Rm9ybWF0QXR0cmlidXRlPigxKSk7CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFTYW1w
bGVzKTsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRB
dHRyaWJ1dGU+KDQpKTsKKyAgICB9CisKKyAgICBpZiAobV9pc0ZvcldlYkdMMikgeworICAgICAg
ICAvLyBGSVhNRTogSW5zdGVhZCBvZiBiYWNraW5nIGEgV2ViR0wyIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMIHdpdGggYSBPcGVuR0wgNCBjb250ZXh0LCB3ZSBzaG91bGQgaW5zdGVhZCBiYWNrIGl0
IHdpdGggQU5HTEUuCisgICAgICAgIC8vIFVzZSBhbiBPcGVuR0wgNCBjb250ZXh0IGZvciBub3cg
dW50aWwgdGhlIEFOR0xFIGJhY2tlbmQgaXMgcmVhZHkuCisgICAgICAgIGF0dHJpYnMuYXBwZW5k
KGtDR0xQRkFPcGVuR0xQcm9maWxlKTsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nh
c3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGtDR0xPR0xQVmVyc2lvbl9HTDRfQ29yZSkpOwor
ICAgIH0KKworICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0
cmlidXRlPigwKSk7CisKKyAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwg
JnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKworICAgIGlmICghbnVtUGl4ZWxG
b3JtYXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQg
PSBudWxscHRyOworICAgIENHTENvbnRleHRPYmogc2hhcmVkQ0dMQ29udGV4dCA9IHNoYXJlZENv
bnRleHQgPyBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihzaGFyZWRDb250ZXh0LT5tX2NvbnRl
eHRPYmopIDogbnVsbHB0cjsKKworICAgIENHTEVycm9yIGVyciA9IENHTENyZWF0ZUNvbnRleHQo
cGl4ZWxGb3JtYXRPYmosIHNoYXJlZENHTENvbnRleHQsICZjZ2xDb250ZXh0KTsKKyAgICBHTGlu
dCBhYm9ydE9uQmxhY2tsaXN0ID0gMDsKKyAgICBDR0xTZXRQYXJhbWV0ZXIoY2dsQ29udGV4dCwg
a0NHTENQQWJvcnRPbkdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCwgJmFib3J0T25CbGFja2xp
c3QpOworCisjaWYgUExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQg
YmUgVVNFKE9QRU5HTCkgLSBzZWUgPHJkYXI6Ly81MzA2Mjc5ND4uCisKKyAgICBhdXRvIGdwdUlE
ID0gKGhvc3RXaW5kb3cgJiYgaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpID8gZ3B1SURGb3JEaXNw
bGF5KGhvc3RXaW5kb3ctPmRpc3BsYXlJRCgpKSA6IHByaW1hcnlHUFVJRCgpOworICAgIHNldEdQ
VUJ5UmVnaXN0cnlJRChjZ2xDb250ZXh0LCBwaXhlbEZvcm1hdE9iaiwgZ3B1SUQpOworCisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKKyNlbmRpZgorCisgICAgQ0dMRGVzdHJv
eVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqKTsKKworICAgIG1fY29udGV4dE9iaiA9IGNnbENv
bnRleHQ7CisKKyAgICBpZiAoZXJyICE9IGtDR0xOb0Vycm9yIHx8ICFtX2NvbnRleHRPYmopIHsK
KyAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gY3JlYXRlIHRoZSBjb250ZXh0LgorICAgICAg
ICBtX2NvbnRleHRPYmogPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250
ZXh0T2JqID0gY2dsQ29udGV4dDsKKworICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENvbnRl
eHQpOworCisgICAgLy8gV2ViR0wgMiBleHBlY3RzIEVTIDMtb25seSBQUklNSVRJVkVfUkVTVEFS
VF9GSVhFRF9JTkRFWCB0byBiZSBlbmFibGVkOyB3ZSBtdXN0IGVtdWxhdGUgdGhpcyBvbiBub24t
RVMgMyBzeXN0ZW1zLgorICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICA6OmdsRW5hYmxl
KEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVCk7CisKKyNlbGlmIFVTRShBTkdM
RSkKKworICAgIG1fZGlzcGxheU9iaiA9IEVHTF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BM
QVkpOworICAgIGlmIChtX2Rpc3BsYXlPYmogPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJl
dHVybjsKKyAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247CisgICAgaWYgKEVH
TF9Jbml0aWFsaXplKG1fZGlzcGxheU9iaiwgJm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lvbikg
PT0gRUdMX0ZBTFNFKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTERpc3BsYXkgSW5pdGlhbGl6
YXRpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIExPRyhXZWJHTCwg
IkFOR0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5vcjogJWQiLCBtYWpvclZlcnNpb24sIG1p
bm9yVmVyc2lvbik7CisgICAgY29uc3QgY2hhciAqZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVl
cnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7CisgICAgTE9HKFdlYkdMLCAi
RXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7CisKKyAgICBFR0xpbnQgY29uZmln
QXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdM
X0VTMl9CSVQsCisgICAgICAgIEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgRUdMX0dSRUVOX1NJ
WkUsIDgsCisgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCisgICAgICAgIEVHTF9BTFBIQV9TSVpF
LCA4LAorICAgICAgICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMaW50IG51bWJlckNvbmZpZ3NS
ZXR1cm5lZCA9IDA7CisgICAgRUdMX0Nob29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZpZ0F0
dHJpYnV0ZXMsICZtX2NvbmZpZ09iaiwgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7CisgICAg
aWYgKG51bWJlckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVH
TENvbmZpZyBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbmZpZyIpOworCisgICAgRUdMX0JpbmRBUEkoRUdM
X09QRU5HTF9FU19BUEkpOworICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykg
eworICAgICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8RUdMaW50PiBlZ2xDb250ZXh0
QXR0cmlidXRlczsKKyAgICBpZiAobV9pc0ZvcldlYkdMMikgeworICAgICAgICBlZ2xDb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOworICAgICAgICBl
Z2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZWds
Q29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKKyAg
ICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKDIpOworICAgICAgICAvLyBBTkdMRSB3
aWxsIHVwZ3JhZGUgdGhlIGNvbnRleHQgdG8gRVMzIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHRoaXMg
aXMgc3BlY2lmaWVkLgorICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NP
TlRFWFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFKTsKKyAgICAgICAgZWdsQ29u
dGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7CisgICAgfQorICAgIGVnbENvbnRleHRB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsK
KyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOworCisgICAgaWYgKHN0
cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsK
KyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNF
X0FOR0xFKTsKKyAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4g
Q2hhbmdlIHRvCisgICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQuCisg
ICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTE9XX1BPV0VSX0FOR0xFKTsK
KyAgICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKKworICAg
IG1fY29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb25maWdP
YmosIHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxFR0xDb250ZXh0PihzaGFyZWRDb250ZXh0
LT5tX2NvbnRleHRPYmopIDogRUdMX05PX0NPTlRFWFQsIGVnbENvbnRleHRBdHRyaWJ1dGVzLmRh
dGEoKSk7CisgICAgaWYgKG1fY29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkgeworICAgICAg
ICBMT0coV2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOworCisg
ICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19T
VVJGQUNFLCBtX2NvbnRleHRPYmopOworCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAgICAg
IGdsOjpFbmFibGUoR3JhcGhpY3NDb250ZXh0R0w6OlBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lO
REVYKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMg
PSBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHJl
cXVpcmVkRXh0ZW5zaW9uc1tdID0geworICAgICAgICAiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5n
bGUiLCAvLyBGb3IgSU9TdXJmYWNlLWJhY2tlZCB0ZXh0dXJlcy4KKyAgICAgICAgIkdMX0VYVF90
ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIsIC8vIEZvciBjcmVhdGluZyB0aGUgRUdMIHN1cmZhY2Ug
ZnJvbSBhbiBJT1N1cmZhY2UuCisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
V1RGX0FSUkFZX0xFTkdUSChyZXF1aXJlZEV4dGVuc2lvbnMpOyArK2kpIHsKKyAgICAgICAgaWYg
KCFleHRlbnNpb25zLnN1cHBvcnRzKHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSkpIHsKKyAgICAgICAg
ICAgIExPRyhXZWJHTCwgIk1pc3NpbmcgcmVxdWlyZWQgZXh0ZW5zaW9uLiAlcyIsIHJlcXVpcmVk
RXh0ZW5zaW9uc1tpXSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocmVxdWlyZWRFeHRlbnNpb25zW2ldKTsKKyAgICB9
CisKKyAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKKyAgICBFR0xfUXVlcnlEaXNw
bGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nh
c3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOworICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9
IG51bGxwdHI7CisgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQgPSBudWxscHRyOwor
ICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfQ09OVEVYVF9BTkdM
RSwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmY2dsQ29udGV4dCkpOworICAgIEVHTF9R
dWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FOR0xFLCBy
ZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOworICAgIGF1dG8gZ3B1
SUQgPSAoaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5kaXNwbGF5SUQoKSkgPyBncHVJREZvckRp
c3BsYXkoaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpIDogcHJpbWFyeUdQVUlEKCk7CisgICAgc2V0
R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRleHQsIHBpeGVsRm9ybWF0LCBncHVJRCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisK
KyNlbmRpZiAvLyAjZWxpZiBVU0UoQU5HTEUpCisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsK
KyAgICBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdl
ZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgorICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9w
dE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHRHTDp0aGlzXSk7
CisjaWZuZGVmIE5ERUJVRworICAgICAgICBbbV93ZWJHTExheWVyIHNldE5hbWU6QCJXZWJHTCBM
YXllciJdOworI2VuZGlmCisjaWYgVVNFKEFOR0xFKQorICAgICAgICBbbV93ZWJHTExheWVyIHNl
dEVHTERpc3BsYXk6bV9kaXNwbGF5T2JqIGNvbmZpZzptX2NvbmZpZ09ial07CisjZW5kaWYKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisKKyNpZiBVU0UoT1BFTkdMKQorICAgIGlmICh1
c2VNdWx0aXNhbXBsaW5nKQorICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJU0FNUExFKTsKKyNl
bmRpZgorCisgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0
aGUgZnJhbWVidWZmZXIuCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICA6OmdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV90ZXh0dXJlKTsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgOjpnbEdlblRleHR1
cmVzKDEsICZtX3RleHR1cmUpOworICAgIC8vIFdlIGJpbmQgdG8gR0xfVEVYVFVSRV9SRUNUQU5H
TEVfRVhUIHJhdGhlciB0aGFuIFRFWFRVUkVfMkQgYmVjYXVzZQorICAgIC8vIHRoYXQncyB3aGF0
IGlzIHJlcXVpcmVkIGZvciBhIHRleHR1cmUgYmFja2VkIGJ5IElPU3VyZmFjZS4KKyAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBtX3RleHR1cmUpOworICAgIDo6
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIDApOworCisjZWxpZiBVU0Uo
QU5HTEUpCisKKyAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dEdMOjpJ
T1N1cmZhY2VUZXh0dXJlVGFyZ2V0OworCisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOworICAg
IGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVy
ZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpU
ZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7CisjZWxzZQor
I2Vycm9yIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24KKyNlbmRpZgorCisjaWYgVVNFKE9QRU5H
TCkgfHwgVVNFKE9QRU5HTF9FUykKKyAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVj
dC4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKworICAgIG1fc3RhdGUu
Ym91bmRGQk8gPSBtX2ZibzsKKyAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3Rl
bmNpbCB8fCBhdHRycy5kZXB0aCkpCisgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEs
ICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisKKyAgICAvLyBJZiBuZWNlc3NhcnksIGNyZWF0ZSBh
bm90aGVyIGZyYW1lYnVmZmVyIGZvciB0aGUgbXVsdGlzYW1wbGUgcmVzdWx0cy4KKyAgICBpZiAo
YXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1f
bXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRGQk8g
PSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwg
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorI2VsaWYgVVNFKEFOR0xFKQor
ICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJv
OworCisgICAgaWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMu
ZGVwdGgpKQorICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOworCisgICAgLy8gSWYgbmVjZXNzYXJ5LCBjcmVhdGUgYW5vdGhlciBmcmFtZWJ1ZmZl
ciBmb3IgdGhlIG11bHRpc2FtcGxlIHJlc3VsdHMuCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykg
eworICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAg
ICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAg
ICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAg
ICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBnbDo6
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgfQorCisjZW5kaWYgLy8gVVNFKEFOR0xFKQorCisjaWYgIVVTRShBTkdMRSkKKyAgICAvLyBB
TkdMRSBzaGFkZXIgY29tcGlsZXIgaW5pdGlhbGl6YXRpb24uCisKKyAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdM
RVJlc291cmNlcyk7CisKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZF
UlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgZ2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAm
QU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIGdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMu
TWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpN
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1B
WF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdl
VW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cyk7CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJl
c291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgCisgICAgR0MzRGludCByYW5nZVsyXSwg
cHJlY2lzaW9uOworICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRH
TDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9GTE9BVCwgcmFuZ2Us
ICZwcmVjaXNpb24pOworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9
IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5z
ZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworI2VuZGlmIC8vICFVU0UoQU5HTEUpCisgICAg
CisjaWYgVVNFKE9QRU5HTCkKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5U
X1NJWkUpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICA6OmdsRW5hYmxl
KEdMX1BPSU5UX1NQUklURSk7CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0wpIHx8IFVTRShPUEVO
R0xfRVMpCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisjZWxpZiBVU0UoQU5HTEUp
CisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisjZW5kaWYKKworICAgIExPRyhXZWJH
TCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOworfQor
CitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKK3sK
KyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1v
dmVDb250ZXh0KHRoaXMpOworCisgICAgaWYgKG1fY29udGV4dE9iaikgeworICAgICAgICBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisj
aWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAg
IFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCAqPihtX2NvbnRleHRPYmopIHJlbmRlcmJ1ZmZlclN0
b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21EcmF3YWJsZTpuaWxdOworICAgICAgICA6OmdsRGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAg
ICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+
KG1fY29udGV4dE9iaik7CisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENvbnRleHQp
OworICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisjZWxpZiBVU0Uo
QU5HTEUpCisgICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJG
QUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworI2VuZGlmCisKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0Uo
T1BFTkdMX0VTKQorICAgICAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
KyAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQorICAgICAgICAg
ICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGF0
dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAg
ICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisjZWxpZiBVU0UoQU5H
TEUpCisgICAgICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsOjpEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAg
ICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2w6
OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBh
dHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAg
ICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOworICAgICAgICBbc3RhdGljX2Nh
c3Q8RUFHTENvbnRleHQgKj4obV9jb250ZXh0T2JqKSByZWxlYXNlXTsKKyNlbGlmIFVTRShPUEVO
R0wpCisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOworICAgICAgICBDR0xEZXN0cm95
Q29udGV4dChjZ2xDb250ZXh0KTsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICAgICAgRUdMX01ha2VD
dXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fQ09OVEVYVCk7CisgICAgICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rpc3BsYXlPYmosIG1f
Y29udGV4dE9iaik7CisjZW5kaWYKKyAgICAgICAgW21fd2ViR0xMYXllciBzZXRDb250ZXh0Om51
bGxwdHJdOworICAgIH0KKworICAgIExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMICglcCkuIiwgdGhpcyk7Cit9CisKKyNpZiBVU0UoT1BFTkdMX0VTKQordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3
YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgLy8gV2UgbmVl
ZCB0byBtYWtlIGEgY2FsbCB0byBzZXRCb3VuZHMgYmVsb3cgdG8gdXBkYXRlIHRoZSBiYWNraW5n
IHN0b3JlIHNpemUgYnV0IHdlIGFsc28KKyAgICAvLyBkbyBub3Qgd2FudCB0byBjbG9iYmVyIHRo
ZSBib3VuZHMgc2V0IGR1cmluZyBsYXlvdXQuCisgICAgQ0dSZWN0IHByZXZpb3VzQm91bmRzID0g
W21fd2ViR0xMYXllci5nZXQoKSBib3VuZHNdOworCisgICAgW21fd2ViR0xMYXllciBzZXRCb3Vu
ZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07CisgICAgW21fd2ViR0xMYXllciBz
ZXRPcGFxdWU6IWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOworCisgICAgW3N0YXRpY19jYXN0
PEVBR0xDb250ZXh0ICo+KG1fY29udGV4dE9iaikgcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5E
RVJCVUZGRVIgZnJvbURyYXdhYmxlOnN0YXRpY19jYXN0PGlkPEVBR0xEcmF3YWJsZT4+KG1fd2Vi
R0xMYXllci5nZXQoKSldOworCisgICAgW21fd2ViR0xMYXllciBzZXRCb3VuZHM6cHJldmlvdXNC
b3VuZHNdOworfQorI2VuZGlmCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VD
b250ZXh0Q3VycmVudCgpCit7CisgICAgaWYgKCFtX2NvbnRleHRPYmopCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYgKFtFQUdMQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xDb250ZXh0
IHNldEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2Jq
KV07CisjZWxpZiBVU0UoT1BFTkdMKQorICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQg
PSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOworICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2Nv
bnRleHRPYmopCisgICAgICAgIHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChzdGF0aWNfY2Fz
dDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopKSA9PSBrQ0dMTm9FcnJvcjsKKyNlbGlmIFVT
RShBTkdMRSkKKyAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2Jq
KQorICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NV
UkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOworI2VuZGlmCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVz
KCkKK3sKKyAgICBpZiAobV9mYWlsTmV4dFN0YXR1c0NoZWNrKSB7CisgICAgICAgIExPRyhXZWJH
TCwgIlByZXRlbmRpbmcgdGhlIEdQVSBoYXMgcmVzZXQgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4i
LCB0aGlzKTsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gZmFsc2U7CisgICAgICAg
IGZvcmNlQ29udGV4dExvc3QoKTsKKyNpZiBVU0UoT1BFTkdMKQorICAgICAgICBDR0xTZXRDdXJy
ZW50Q29udGV4dCgwKTsKKyNlbGlmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIFtFQUdMQ29udGV4
dCBzZXRDdXJyZW50Q29udGV4dDowXTsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICAgICAgRUdMX01h
a2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBF
R0xfTk9fQ09OVEVYVCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IE9ubHkgZG8gdGhlIGNoZWNrIGV2ZXJ5IHN0YXR1c0NoZWNrVGhyZXNob2xkIGNhbGxzLgorICAg
IGlmIChtX3N0YXR1c0NoZWNrQ291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdHVz
Q2hlY2tDb3VudCA9IChtX3N0YXR1c0NoZWNrQ291bnQgKyAxKSAlIHN0YXR1c0NoZWNrVGhyZXNo
b2xkOworCisgICAgR0xpbnQgcmVzdGFydFN0YXR1cyA9IDA7CisjaWYgVVNFKE9QRU5HTCkKKyAg
ICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpOworICAgIENHTEdldFBhcmFtZXRlcihjZ2xDb250
ZXh0LCBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzLCAmcmVzdGFydFN0YXR1cyk7CisgICAgaWYgKHJl
c3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlzdGVkKSB7CisgICAg
ICAgIExPRyhXZWJHTCwgIlRoZSBHUFUgaGFzIGJsYWNrbGlzdGVkIHVzICglcCkuIFRlcm1pbmF0
aW5nLiIsIHRoaXMpOworICAgICAgICBleGl0KEVYX09TRVJSKTsKKyAgICB9CisgICAgaWYgKHJl
c3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0NhdXNlZCkgeworICAgICAgICBM
T0coV2ViR0wsICJUaGUgR1BVIGhhcyByZXNldCB1cyAoJXApLiBMb3NlIHRoZSBjb250ZXh0LiIs
IHRoaXMpOworICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7CisgICAgICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KDApOworICAgIH0KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisgICAgRUFHTENvbnRl
eHQqIGN1cnJlbnRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMKCkpOworICAgIFtjdXJyZW50Q29udGV4dCBnZXRQYXJhbWV0ZXI6a0VB
R0xDUEdQVVJlc3RhcnRTdGF0dXMgdG86JnJlc3RhcnRTdGF0dXNdOworICAgIGlmIChyZXN0YXJ0
U3RhdHVzID09IGtFQUdMQ1BHUFVSZXN0YXJ0U3RhdHVzQ2F1c2VkIHx8IHJlc3RhcnRTdGF0dXMg
PT0ga0VBR0xDUEdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgeworICAgICAgICBMT0coV2Vi
R0wsICJUaGUgR1BVIGhhcyBlaXRoZXIgcmVzZXQgb3IgYmxhY2tsaXN0ZWQgdXMgKCVwKS4gTG9z
ZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKKyAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOworICAg
ICAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6MF07CisgICAgfQorI2VsaWYgVVNF
KEFOR0xFKQorICAgIC8vIEZJWE1FOiBjaGVjayB2aWEgS0hSX3JvYnVzdG5lc3MuCisgICAgcmVz
dGFydFN0YXR1cyA9IDA7CisjZW5kaWYKK30KKworI2lmIFVTRShPUEVOR0xfRVMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVzZW50UmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMp
CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKworICAgIDo6Z2xG
bHVzaCgpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0
dXJlKTsKKyAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihtX2NvbnRleHRPYmopIHByZXNl
bnRSZW5kZXJidWZmZXI6R0xfUkVOREVSQlVGRkVSXTsKKyAgICBbRUFHTENvbnRleHQgc2V0Q3Vy
cmVudENvbnRleHQ6bmlsXTsKK30KKyNlbmRpZgorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZUlPU3VyZmFjZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0MzRHVpbnQgcGxhbmUp
Cit7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0
aWNfY2FzdDxDR0xDb250ZXh0T2JqPihwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpOworICAg
IHJldHVybiBrQ0dMTm9FcnJvciA9PSBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKGNnbENvbnRleHQs
IHRhcmdldCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3Vy
ZmFjZSwgcGxhbmUpOworI2VsaWYgVVNFKE9QRU5HTF9FUykgJiYgIVBMQVRGT1JNKElPU19GQU1J
TFlfU0lNVUxBVE9SKQorICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4ocGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKSB0ZXhJbWFnZUlPU3VyZmFjZTpzdXJmYWNlIHRhcmdl
dDp0YXJnZXQgaW50ZXJuYWxGb3JtYXQ6aW50ZXJuYWxGb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0
OmhlaWdodCBmb3JtYXQ6Zm9ybWF0IHR5cGU6dHlwZSBwbGFuZTpwbGFuZV07CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7
CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAg
ICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5V
U0VEX1BBUkFNKHN1cmZhY2UpOworICAgIFVOVVNFRF9QQVJBTShwbGFuZSk7CisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKKyNpZiBVU0UoT1BFTkdMKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSBzaXplKQor
eworICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUlPU3Vy
ZmFjZUJhY2tpbmdTdG9yZSBhdCAlZCB4ICVkLiAoJXApIiwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpLCB0aGlzKTsKKyAgICBbbV93ZWJHTExheWVyIGFsbG9jYXRlSU9TdXJmYWNlQmFja2lu
Z1N0b3JlV2l0aFNpemU6c2l6ZSB1c2luZ0FscGhhOmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFd
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRl
eHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQoreworICAgIExPRyhXZWJHTCwgIkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9t
TGF5ZXIoKS4gKCVwKSIsIHRoaXMpOworICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVy
VG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVwZGF0ZUNHTENvbnRleHQoKQoreworICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgICAg
ICByZXR1cm47CisKKyAgICBMT0coV2ViR0wsICJEZXRlY3RlZCBhIG11eCBzd2l0Y2ggb3IgZGlz
cGxheSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dMVXBkYXRlQ29udGV4dC4gKCVwKSIsIHRoaXMp
OworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQ0dMVXBkYXRlQ29udGV4dChzdGF0
aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopKTsKKyAgICBtX2hhc1N3aXRjaGVk
VG9IaWdoUGVyZm9ybWFuY2VHUFUgPSB0cnVlOworfQorCisjZW5kaWYgLy8gVVNFKE9QRU5HTCkK
KworI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQoreworICAgIGlmICht
X3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiA9PSBHcmFwaGljc0NvbnRleHRHTFBvd2Vy
UHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7CisgICAgICAgIGlmIChpc1Zpc2libGUpCisg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIo
KS5hZGRDb250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS5yZW1vdmVDb250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMpOworICAgIH0K
K30KKyNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCisKKyNpZiBVU0UoQU5HTEUp
CisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRh
dGVDR0xDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJu
OworCisgICAgTE9HKFdlYkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3BsYXkgcmVj
b25maWd1cmF0aW9uLiBDYWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsKKworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBudWxscHRy
OworICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xfREVWSUNF
X0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7CisgICAgQ0dMQ29u
dGV4dE9iaiBjZ2xDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJF
WFQoZGV2aWNlLCBFR0xfQ0dMX0NPTlRFWFRfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0
cmliKj4oJmNnbENvbnRleHQpKTsKKworICAgIENHTFVwZGF0ZUNvbnRleHQoY2dsQ29udGV4dCk7
CisgICAgbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1ZTsKK30KKyNlbmRp
ZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tp
bmdTdG9yZShJbnRTaXplIHNpemUpCit7CisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgTE9HKFdl
YkdMLCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0
b3JlIGF0ICVkIHggJWQuICglcCkiLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHRoaXMp
OworICAgIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6
ZTpzaXplIHVzaW5nQWxwaGE6Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYV07CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzaXplKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQor
eworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4g
KCVwKSIsIHRoaXMpOworICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZh
aWxhYmxlU3VyZmFjZV07CisjZW5kaWYKK30KKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2lzRm9yV2ViR0wyOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250ZXh0cygpOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvd09mZmxpbmVSZW5kZXJlcnMoKSBjb25zdAor
eworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JM
T0NLSU5HKQorICAgIC8vIFdoZW4gV2luZG93U2VydmVyIGFjY2VzcyBpcyBibG9ja2VkIGluIHRo
ZSBXZWJQcm9jZXNzLCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyBmb3IgT3BlbkdMIHRvIGRlY2lk
ZSB3aGljaCBHUFUgaXMgY29ubmVjdGVkIHRvIGEgZGlzcGxheSAob25saW5lL29mZmxpbmUpLgor
ICAgIC8vIE9wZW5HTCB3aWxsIHRoZW4gY29uc2lkZXIgYWxsIEdQVXMsIG9yIHJlbmRlcmVycywg
YXMgb2ZmbGluZSwgd2hpY2ggbWVhbnMKKyAgICAvLyBhbGwgb2ZmbGluZSByZW5kZXJlcnMgbmVl
ZCB0byBiZSBjb25zaWRlcmVkIHdoZW4gZmluZGluZyBhIHBpeGVsIGZvcm1hdC4KKyAgICAvLyBJ
biBXZWJLaXQgbGVnYWN5LCB0aGVyZSB3aWxsIHN0aWxsIGJlIGEgV2luZG93U2VydmVyIGNvbm5l
Y3Rpb24sIGFuZAorICAgIC8vIG1fZGlzcGxheU1hc2sgd2lsbCBub3QgYmUgc2V0IGluIHRoaXMg
Y2FzZS4KKyAgICBpZiAocHJpbWFyeU9wZW5HTERpc3BsYXlNYXNrKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworI2VsaWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCisgICAgLy8gRklYTUU6IDxyZGFy
Oi8vNTMwNjI3OTQ+IFdlJ3JlIHZlcnkgaW5jb25zaXN0ZW50IGFib3V0IFdFQlBST0NFU1NfV0lO
RE9XU0VSVkVSX0JMT0NLSU5HCisgICAgLy8gYW5kIE1BQy9NQUNDQVRBTFlTVCBhbmQgT1BFTkdM
L09QRU5HTEVTLgorICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgICAgIAorI2lmIEhBVkUo
QVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKyAgICBpZiAoaGFzTG93QW5kSGlnaFBvd2VyR1BVcygp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybiBmYWxzZTsK
K30KKworI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNj
cmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCit7CisgICAgaWYgKCFt
X2NvbnRleHRPYmopCisgICAgICAgIHJldHVybjsKKyNpZiBVU0UoQU5HTEUpCisgICAgaWYgKCFt
X2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUpIHsKKyAgICAgICAgRUdMRGV2aWNlRVhU
IGRldmljZSA9IG51bGxwdHI7CisgICAgICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQobV9k
aXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigm
ZGV2aWNlKSk7CisgICAgICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxwdHI7Cisg
ICAgICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0ID0gbnVsbHB0cjsKKyAgICAgICAg
RUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9DT05URVhUX0FOR0xFLCBy
ZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZjZ2xDb250ZXh0KSk7CisgICAgICAgIEVHTF9R
dWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FOR0xFLCBy
ZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOworICAgICAgICBzZXRH
UFVCeVJlZ2lzdHJ5SUQoY2dsQ29udGV4dCwgcGl4ZWxGb3JtYXQsIGdwdUlERm9yRGlzcGxheShk
aXNwbGF5SUQpKTsKKyAgICB9CisjZWxzZQorI2lmIFVTRShPUEVOR0wpCisgICAgaWYgKCFtX2hh
c1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUpIHsKKyAgICAgICAgQ0dMQ29udGV4dE9iaiBj
Z2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250ZXh0T2JqKTsKKyAg
ICAgICAgc2V0R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRleHQsIENHTEdldFBpeGVsRm9ybWF0KGNn
bENvbnRleHQpLCBncHVJREZvckRpc3BsYXkoZGlzcGxheUlEKSk7CisgICAgfQorI2VuZGlmCisj
ZW5kaWYgLy8gVVNFKEFOR0xFKQorfQorI2VuZGlmIC8vICFQTEFURk9STShNQUMpCisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IGRhZTE4N2Rh
NjVkMjBiMjgwNmYyYmQzOWU4YzNiMDY5Mzk3YzRiYWIuLmMyMTI1YzNlZjE2MGMwODEwMTA5ODIz
YjRiOTAzNmRkZjZmYmNmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KQEAgLTI4LDggKzI4LDggQEAKIAogI2lmIEhBVkUo
SU9TVVJGQUNFKQogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2ltcG9ydCAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAj
aW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0
ICJJbWFnZUJ1ZmZlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvV2ViR0xMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViR0xMYXllci5oCmluZGV4IGU2YzQ1ZmI1NzA1ZDYyMDQ5ZTRiYjE5NzZlZGE4
ODMwNzliODcyMzMuLmY3Njc5MDk3NDdmZWZmNDg3MTRiMWJhZDA5ZjEzMmJkZWI4YmY2NWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExh
eWVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3Jh
cGhpY3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w7CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCkBA
IC00Niw3ICs0Niw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAjZXJy
b3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0KICNlbmRpZgogewotICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEKiBfY29udGV4dDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCogX2NvbnRleHQ7CiAgICAgZmxvYXQgX2RldmljZVBpeGVsUmF0aW87CiAjaWYgSEFWRShJT1NV
UkZBQ0UpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQogICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9jb250ZW50c0J1ZmZlcjsKQEAgLTY1LDkgKzY1LDkgQEAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICNlbmRpZgogfQogCi1AcHJvcGVy
dHkgKG5vbmF0b21pYykgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CitAcHJv
cGVydHkgKG5vbmF0b21pYykgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRl
eHQ7CiAKLS0gKGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEKiljb250ZXh0OworLSAoaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHRHTDooV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKWNvbnRleHQ7CiAKIC0gKENHSW1hZ2VSZWYp
Y29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3Bh
Y2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJHTExheWVyLm1tCmluZGV4IDc1ODhmOTExNWM1YzM4ZWI5ODYxMDUwYmViMjYzMmNlM2I0MGYw
ZDkuLjI5MjAxNmFjMTRlYWMyYWE4ZmU0ZDE1ZDI4Zjk0YjAyZTJkNjc1Y2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQpA
QCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJHTCkKICNpbXBvcnQgIldlYkdMTGF5ZXIu
aCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2ltcG9ydCAi
R3JhcGhpY3NMYXllci5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCkBAIC02MSw3ICs2MSw3IEBACiAKIEBzeW50aGVzaXpl
IGNvbnRleHQ9X2NvbnRleHQ7CiAKLS0oaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDooV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0QqKWNvbnRleHQKKy0oaWQpaW5pdFdpdGhHcmFwaGljc0Nv
bnRleHRHTDooV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKWNvbnRleHQKIHsKICAg
ICBfY29udGV4dCA9IGNvbnRleHQ7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKQEAgLTEwOCw3
ICsxMDgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEs
IHNpemVfdCAvKiBzaXplICovKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lmIFVTRShP
UEVOR0wpCi0gICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29u
dGV4dE9iaj4oX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgQ0dM
Q29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4oX2NvbnRl
eHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgQ0dMU2V0Q3VycmVudENvbnRl
eHQoY2dsQ29udGV4dCk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBpbWFnZUNv
bG9yU3BhY2UgPSBjb2xvclNwYWNlOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRpYyB2b2lkIGZy
ZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAg
ICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKIAogICAgICAgICAgICAgR0MzRGVudW0gdGV4dHVy
ZSA9IF9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAgICAgICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldCwgdGV4dHVyZSk7
CisgICAgICAgICAgICBnbDo6QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OklPU3VyZmFj
ZVRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwogICAgICAgICAgICAgaWYgKCFFR0xfUmVsZWFzZVRl
eEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVwb3J0IGVycm9yLgogICAgICAgICAgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgZnJlZURh
dGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICAgICAg
RUdMX1dJRFRILCBzaXplLndpZHRoKCksCiAgICAgICAgIEVHTF9IRUlHSFQsIHNpemUuaGVpZ2h0
KCksCiAgICAgICAgIEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUsIDAsCi0gICAgICAgIEVHTF9U
RVhUVVJFX1RBUkdFVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkVHTElPU3VyZmFjZVRleHR1cmVUYXJn
ZXQsCisgICAgICAgIEVHTF9URVhUVVJFX1RBUkdFVCwgR3JhcGhpY3NDb250ZXh0R0w6OkVHTElP
U3VyZmFjZVRleHR1cmVUYXJnZXQsCiAgICAgICAgIEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1B
VF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhUIDogR0xfUkdCLAogICAgICAgICBFR0xf
VEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEsCiAgICAgICAgIEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdGF0aWMg
dm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICov
KQogICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gX3VzaW5nQWxwaGEgPyBHTF9SR0JBIDog
R0xfUkdCOwogCiAgICAgLy8gTGluayB0aGUgSU9TdXJmYWNlIHRvIHRoZSB0ZXh0dXJlLgotICAg
IENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KF9j
b250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIENHTENvbnRleHRPYmog
Y2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KF9jb250ZXh0LT5wbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMKCkpOwogICAgIENHTEVycm9yIGVycm9yID0gQ0dMVGV4SW1hZ2VJ
T1N1cmZhY2UyRChjZ2xDb250ZXh0LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGludGVybmFs
Rm9ybWF0LCBfYnVmZmVyU2l6ZS53aWR0aCgpLCBfYnVmZmVyU2l6ZS5oZWlnaHQoKSwgR0xfQkdS
QSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBpb1N1cmZhY2UsIDApOwogICAgIEFTU0VS
VF9VTlVTRUQoZXJyb3IsIGVycm9yID09IGtDR0xOb0Vycm9yKTsKICNlbGlmIFVTRShBTkdMRSkK
ICAgICBHQzNEZW51bSB0ZXh0dXJlID0gX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOwogCi0g
ICAgZ2w6OkJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpJT1N1cmZhY2VUZXh0dXJlVGFy
Z2V0LCB0ZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OklP
U3VyZmFjZVRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwogCiAgICAgaWYgKF9sYXRjaGVkUGJ1ZmZl
cikgewogICAgICAgICBpZiAoIUVHTF9SZWxlYXNlVGV4SW1hZ2UoX2VnbERpc3BsYXksIF9sYXRj
aGVkUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHQzRE5FT04uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vR3JhcGhpY3NDb250ZXh0M0RO
RU9OLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDNmZWRkNGE5YTYyYmVlZTVj
YjhiNDUwZDg0OTc2ZTNkYzZkYTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFw
aGljc0NvbnRleHQzRE5FT04uaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdl
ZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRl
eHQzRE5FT05faAotI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRE5FT05faAotCi0jaWYgSEFWRShB
Uk1fTkVPTl9JTlRSSU5TSUNTKQotCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1uYW1lc3BhY2UgU0lNRCB7Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2tPbmVSb3dPZlJHQkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVp
bnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNp
Z25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0
YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAxNjsKLSAgICB1bnNpZ25lZCBjb21w
b25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLSAgICBjb25z
dCB1aW50OF90KiBzcmMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2Up
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDE2
KSB7Ci0gICAgICAgIHVpbnQ4eDE2eDJfdCBjb21wb25lbnRzID0gdmxkMnFfdTgoc3JjICsgaSAq
IDIpOwotICAgICAgICB2c3QxcV91OChkZXN0aW5hdGlvbiArIGksIGNvbXBvbmVudHMudmFsWzFd
KTsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7Ci0gICAgZGVzdGluYXRp
b24gKz0gY29tcG9uZW50c1NpemU7Ci0gICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMg
LyA0OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0IxNkxpdHRsZVRv
UkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0g
cGl4ZWxzUGVyUm93ICogMzsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVu
dHNQZXJSb3cgJSAyNDsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQ
ZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLQotICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdmR1
cF9uX3U4KDB4RkYpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6
ZTsgaSArPSAyNCkgewotICAgICAgICB1aW50MTZ4OHgzX3QgUkdCMTYgPSB2bGQzcV91MTYoc291
cmNlICsgaSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hy
cV9uX3UxNihSR0IxNi52YWxbMF0sIDgpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcg
PSB2cW1vdm5fdTE2KHZzaHJxX25fdTE2KFJHQjE2LnZhbFsxXSwgOCkpOwotICAgICAgICB1aW50
OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoUkdCMTYudmFsWzJdLCA4
KSk7Ci0gICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRH
LCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24s
IFJHQkE4KTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7Ci0gICAgfQotCi0gICAgc291cmNl
ICs9IGNvbXBvbmVudHNTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8g
MzsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mQVJHQjE2TGl0dGxlVG9S
R0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCYgcGl4ZWxzUGVyUm93KQotewotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBw
aXhlbHNQZXJSb3cgKiA0OwotICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50
c1BlclJvdyAlIDMyOwotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9uZW50c1Bl
clJvdyAtIHRhaWxDb21wb25lbnRzOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
bXBvbmVudHNTaXplOyBpICs9IDMyKSB7Ci0gICAgICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2
bGQ0cV91MTYoc291cmNlICsgaSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFt
b3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzBdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7
Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihB
UkdCMTYudmFsWzJdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3Zu
X3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzNdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDh4NF90
IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRB
fX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7Ci0gICAgfQotCi0g
ICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOwotICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVu
dHNTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxX
QVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mQkdSQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1
aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxz
UGVyUm93KQotewotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cg
KiA0OwotICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMy
OwotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxD
b21wb25lbnRzOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXpl
OyBpICs9IDMyKSB7Ci0gICAgICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291
cmNlICsgaSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hy
cV9uX3UxNihBUkdCMTYudmFsWzBdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRH
ID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7Ci0gICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJd
LCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hycV9u
X3UxNihBUkdCMTYudmFsWzNdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tj
b21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAg
IHZzdDRfdTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7Ci0gICAgfQotCi0gICAgc291cmNlICs9
IGNvbXBvbmVudHNTaXplOwotICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOwotICAg
IHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIHVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNl
LCB1aW50OF90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17Ci0gICAg
dW5zaWduZWQgdGFpbFBpeGVscyA9IHBpeGVsc1BlclJvdyAlIDg7Ci0gICAgdW5zaWduZWQgcGl4
ZWxTaXplID0gcGl4ZWxzUGVyUm93IC0gdGFpbFBpeGVsczsKLQotICAgIHVpbnQxNng4X3QgaW1t
ZWRpYXRlMHgwZiA9IHZkdXBxX25fdTE2KDB4MEYpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwaXhlbFNpemU7IGkgKz0gOCkgewotICAgICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxz
ID0gdmxkMXFfdTE2KHNvdXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRS
ID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMTIpKTsKLSAgICAgICAgdWlu
dDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdo
dFBpeGVscywgOCksIGltbWVkaWF0ZTB4MGYpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVu
dEIgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNCksIGlt
bWVkaWF0ZTB4MGYpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2
KHZhbmRxX3UxNihlaWdodFBpeGVscywgaW1tZWRpYXRlMHgwZikpOwotCi0gICAgICAgIGNvbXBv
bmVudFIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRSLCA0KSwgY29tcG9uZW50Uik7Ci0g
ICAgICAgIGNvbXBvbmVudEcgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRHLCA0KSwgY29t
cG9uZW50Ryk7Ci0gICAgICAgIGNvbXBvbmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25l
bnRCLCA0KSwgY29tcG9uZW50Qik7Ci0gICAgICAgIGNvbXBvbmVudEEgPSB2b3JyX3U4KHZzaGxf
bl91OChjb21wb25lbnRBLCA0KSwgY29tcG9uZW50QSk7Ci0KLSAgICAgICAgdWludDh4OHg0X3Qg
ZGVzdENvbXBvbmVudHMgPSB7e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNv
bXBvbmVudEF9fTsKLSAgICAgICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMp
OwotICAgICAgICBkZXN0aW5hdGlvbiArPSAzMjsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gcGl4
ZWxTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxQaXhlbHM7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDQoY29uc3QgdWludDhf
dComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJv
dykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsK
LSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKLSAg
ICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9u
ZW50czsKLQotICAgIHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRl
c3RpbmF0aW9uKTsKLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmMCA9IHZkdXBfbl91OCgweEYw
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIp
IHsKLSAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOwotCi0g
ICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVk
aWF0ZTB4ZjApOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZzaHJfbl91OCh2YW5k
X3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHhmMCksIDQpOwotICAgICAgICB1aW50OHg4X3Qg
Y29tcG9uZW50QiA9IHZhbmRfdTgoUkdCQTgudmFsWzJdLCBpbW1lZGlhdGUweGYwKTsKLSAgICAg
ICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbM10s
IGltbWVkaWF0ZTB4ZjApLCA0KTsKLQotICAgICAgICB1aW50OHg4eDJfdCBSR0JBNDsKLSAgICAg
ICAgUkdCQTQudmFsWzBdID0gdm9ycl91OChjb21wb25lbnRCLCBjb21wb25lbnRBKTsKLSAgICAg
ICAgUkdCQTQudmFsWzFdID0gdm9ycl91OChjb21wb25lbnRSLCBjb21wb25lbnRHKTsKLSAgICAg
ICAgdnN0Ml91OChkc3QsIFJHQkE0KTsKLSAgICAgICAgZHN0ICs9IDE2OwotICAgIH0KLQotICAg
IHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKLSAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRz
U2l6ZSAvIDQ7Ci0gICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgoY29uc3QgdWlu
dDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1Bl
clJvdykKLXsKLSAgICB1bnNpZ25lZCB0YWlsUGl4ZWxzID0gcGl4ZWxzUGVyUm93ICUgODsKLSAg
ICB1bnNpZ25lZCBwaXhlbFNpemUgPSBwaXhlbHNQZXJSb3cgLSB0YWlsUGl4ZWxzOwotCi0gICAg
dWludDh4OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcpOwotICAgIHVpbnQ4eDhfdCBp
bW1lZGlhdGUweGZmID0gdmR1cF9uX3U4KDB4RkYpOwotICAgIHVpbnQxNng4X3QgaW1tZWRpYXRl
MHgxZiA9IHZkdXBxX25fdTE2KDB4MUYpOwotICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxID0g
dmR1cHFfbl91MTYoMHgxKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNp
emU7IGkgKz0gOCkgewotICAgICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2
KHNvdXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3Ux
Nih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMTEpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBv
bmVudEcgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNiks
IGltbWVkaWF0ZTB4MWYpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5f
dTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMSksIGltbWVkaWF0ZTB4MWYp
KTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihl
aWdodFBpeGVscywgaW1tZWRpYXRlMHgxKSk7Ci0KLSAgICAgICAgY29tcG9uZW50UiA9IHZvcnJf
dTgodnNobF9uX3U4KGNvbXBvbmVudFIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudFIsIGltbWVkaWF0
ZTB4NykpOwotICAgICAgICBjb21wb25lbnRHID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50
RywgMyksIHZhbmRfdTgoY29tcG9uZW50RywgaW1tZWRpYXRlMHg3KSk7Ci0gICAgICAgIGNvbXBv
bmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCAzKSwgdmFuZF91OChjb21wb25l
bnRCLCBpbW1lZGlhdGUweDcpKTsKLSAgICAgICAgY29tcG9uZW50QSA9IHZtdWxfdTgoY29tcG9u
ZW50QSwgaW1tZWRpYXRlMHhmZik7Ci0KLSAgICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVu
dHMgPSB7e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsK
LSAgICAgICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOwotICAgICAgICBk
ZXN0aW5hdGlvbiArPSAzMjsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOwotICAg
IHBpeGVsc1BlclJvdyA9IHRhaWxQaXhlbHM7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
T25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTEoY29uc3QgdWludDhfdComIHNvdXJjZSwg
dWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1
bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25l
ZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKLSAgICB1bnNpZ25lZCBj
b21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLQotICAg
IHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsK
LQotICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweGY4ID0gdmR1cF9uX3U4KDB4RjgpOwotICAgIHVp
bnQ4eDhfdCBpbW1lZGlhdGUweDE4ID0gdmR1cF9uX3U4KDB4MTgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikgewotICAgICAgICB1aW50OHg4
eDRfdCBSR0JBOCA9IHZsZDRfdTgoc291cmNlICsgaSk7Ci0KLSAgICAgICAgdWludDh4OF90IGNv
bXBvbmVudFIgPSB2YW5kX3U4KFJHQkE4LnZhbFswXSwgaW1tZWRpYXRlMHhmOCk7Ci0gICAgICAg
IHVpbnQ4eDhfdCBjb21wb25lbnRHM2JpdCA9IHZzaHJfbl91OChSR0JBOC52YWxbMV0sIDUpOwot
Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHMmJpdCA9IHZzaGxfbl91OCh2YW5kX3U4KFJH
QkE4LnZhbFsxXSwgaW1tZWRpYXRlMHgxOCksIDMpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9u
ZW50QiA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhmOCksIDIp
OwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QSA9IHZzaHJfbl91OChSR0JBOC52YWxbM10s
IDcpOwotCi0gICAgICAgIHVpbnQ4eDh4Ml90IFJHQkE1NTUxOwotICAgICAgICBSR0JBNTU1MS52
YWxbMF0gPSB2b3JyX3U4KHZvcnJfdTgoY29tcG9uZW50RzJiaXQsIGNvbXBvbmVudEIpLCBjb21w
b25lbnRBKTsKLSAgICAgICAgUkdCQTU1NTEudmFsWzFdID0gdm9ycl91OChjb21wb25lbnRSLCBj
b21wb25lbnRHM2JpdCk7Ci0gICAgICAgIHZzdDJfdTgoZHN0LCBSR0JBNTU1MSk7Ci0gICAgICAg
IGRzdCArPSAxNjsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7Ci0gICAg
ZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemUgLyA0OwotICAgIHBpeGVsc1BlclJvdyA9IHRh
aWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09m
UkdCNTY1VG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQotewotICAgIHVuc2lnbmVkIHRhaWxQaXhlbHMg
PSBwaXhlbHNQZXJSb3cgJSA4OwotICAgIHVuc2lnbmVkIHBpeGVsU2l6ZSA9IHBpeGVsc1BlclJv
dyAtIHRhaWxQaXhlbHM7Ci0KLSAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4M2YgPSB2ZHVwcV9u
X3UxNigweDNGKTsKLSAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MWYgPSB2ZHVwcV9uX3UxNigw
eDFGKTsKLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgzID0gdmR1cF9uX3U4KDB4Myk7Ci0gICAg
dWludDh4OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcpOwotCi0gICAgdWludDh4OF90
IGNvbXBvbmVudEEgPSB2ZHVwX25fdTgoMHhGRik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGl4ZWxTaXplOyBpICs9IDgpIHsKLSAgICAgICAgdWludDE2eDhfdCBlaWdodFBpeGVs
cyA9IHZsZDFxX3UxNihzb3VyY2UgKyBpKTsKLQotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50
UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDExKSk7Ci0gICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2YW5kcV91MTYodnNocnFfbl91MTYoZWln
aHRQaXhlbHMsIDUpLCBpbW1lZGlhdGUweDNmKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25l
bnRCID0gdnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMsIGltbWVkaWF0ZTB4MWYpKTsK
LQotICAgICAgICBjb21wb25lbnRSID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50UiwgMyks
IHZhbmRfdTgoY29tcG9uZW50UiwgaW1tZWRpYXRlMHg3KSk7Ci0gICAgICAgIGNvbXBvbmVudEcg
PSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRHLCAyKSwgdmFuZF91OChjb21wb25lbnRHLCBp
bW1lZGlhdGUweDMpKTsKLSAgICAgICAgY29tcG9uZW50QiA9IHZvcnJfdTgodnNobF9uX3U4KGNv
bXBvbmVudEIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudEIsIGltbWVkaWF0ZTB4NykpOwotCi0gICAg
ICAgIHVpbnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRH
LCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24s
IGRlc3RDb21wb25lbnRzKTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7Ci0gICAgfQotCi0g
ICAgc291cmNlICs9IHBpeGVsU2l6ZTsKLSAgICBwaXhlbHNQZXJSb3cgPSB0YWlsUGl4ZWxzOwot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1
NjUoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4
ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQ
ZXJSb3cgJSAzMjsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJS
b3cgLSB0YWlsQ29tcG9uZW50czsKLSAgICB1aW50OF90KiBkc3QgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkZXN0aW5hdGlvbik7Ci0KLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmOCA9
IHZkdXBfbl91OCgweEY4KTsKLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgxYyA9IHZkdXBfbl91
OCgweDFDKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkg
Kz0gMzIpIHsKLSAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkp
OwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0s
IGltbWVkaWF0ZTB4ZjgpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50R0xlZnQgPSB2c2hy
X25fdTgoUkdCQTgudmFsWzFdLCA1KTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEdSaWdo
dCA9IHZzaGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHgxYyksIDMpOwot
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZh
bFsyXSwgaW1tZWRpYXRlMHhmOCksIDMpOwotCi0gICAgICAgIHVpbnQ4eDh4Ml90IFJHQjU2NTsK
LSAgICAgICAgUkdCNTY1LnZhbFswXSA9IHZvcnJfdTgoY29tcG9uZW50R1JpZ2h0LCBjb21wb25l
bnRCKTsKLSAgICAgICAgUkdCNTY1LnZhbFsxXSA9IHZvcnJfdTgoY29tcG9uZW50UiwgY29tcG9u
ZW50R0xlZnQpOwotICAgICAgICB2c3QyX3U4KGRzdCwgUkdCNTY1KTsKLSAgICAgICAgZHN0ICs9
IDE2OwotICAgIH0KLQotICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKLSAgICBkZXN0aW5h
dGlvbiArPSBjb21wb25lbnRzU2l6ZSAvIDQ7Ci0gICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBv
bmVudHMgLyA0OwotfQotCi19IC8vIG5hbWVzcGFjZSBTSU1ECi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8v
IEdyYXBoaWNzQ29udGV4dDNETkVPTl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL0dyYXBoaWNzQ29udGV4dEdMTkVPTi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHRHTE5FT04uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xOTlhYzQ0NGUxOWQ0MzZjZTJhYWE1NGNhYzlkYzAwN2M0OWU2YmU0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9H
cmFwaGljc0NvbnRleHRHTE5FT04uaApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUpLCBVbml2
ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQorCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgU0lNRCB7CisKK0FMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVS
b3dPZlJHQkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3Qq
JiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBj
b21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29t
cG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAxNjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRz
U2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKyAgICBjb25zdCB1aW50
OF90KiBzcmMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2UpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDE2KSB7Cisg
ICAgICAgIHVpbnQ4eDE2eDJfdCBjb21wb25lbnRzID0gdmxkMnFfdTgoc3JjICsgaSAqIDIpOwor
ICAgICAgICB2c3QxcV91OChkZXN0aW5hdGlvbiArIGksIGNvbXBvbmVudHMudmFsWzFdKTsKKyAg
ICB9CisKKyAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7CisgICAgZGVzdGluYXRpb24gKz0g
Y29tcG9uZW50c1NpemU7CisgICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0Owor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0IxNkxpdHRsZVRvUkdCQTgo
Y29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQm
IHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxz
UGVyUm93ICogMzsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJS
b3cgJSAyNDsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cg
LSB0YWlsQ29tcG9uZW50czsKKworICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdmR1cF9uX3U4
KDB4RkYpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSAr
PSAyNCkgeworICAgICAgICB1aW50MTZ4OHgzX3QgUkdCMTYgPSB2bGQzcV91MTYoc291cmNlICsg
aSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3Ux
NihSR0IxNi52YWxbMF0sIDgpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1v
dm5fdTE2KHZzaHJxX25fdTE2KFJHQjE2LnZhbFsxXSwgOCkpOworICAgICAgICB1aW50OHg4X3Qg
Y29tcG9uZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoUkdCMTYudmFsWzJdLCA4KSk7Cisg
ICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21w
b25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIFJHQkE4
KTsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7CisgICAgfQorCisgICAgc291cmNlICs9IGNv
bXBvbmVudHNTaXplOworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gMzsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mQVJHQjE2TGl0dGxlVG9SR0JBOChj
b25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYg
cGl4ZWxzUGVyUm93KQoreworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQ
ZXJSb3cgKiA0OworICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJv
dyAlIDMyOworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAt
IHRhaWxDb21wb25lbnRzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVu
dHNTaXplOyBpICs9IDMyKSB7CisgICAgICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91
MTYoc291cmNlICsgaSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3Ux
Nih2c2hycV9uX3UxNihBUkdCMTYudmFsWzBdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21w
b25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7CisgICAg
ICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYu
dmFsWzJdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2
c2hycV9uX3UxNihBUkdCMTYudmFsWzNdLCA4KSk7CisgICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4
ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Cisg
ICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7CisgICAgfQorCisgICAgc291
cmNlICs9IGNvbXBvbmVudHNTaXplOworICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXpl
OworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIHVucGFja09uZVJvd09mQkdSQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZf
dComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93
KQoreworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cgKiA0Owor
ICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMyOworICAg
IHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxDb21wb25l
bnRzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9
IDMyKSB7CisgICAgICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291cmNlICsg
aSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9uX3Ux
NihBUkdCMTYudmFsWzBdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFt
b3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJdLCA4KSk7
CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihB
UkdCMTYudmFsWzNdLCA4KSk7CisgICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25l
bnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRf
dTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7CisgICAgfQorCisgICAgc291cmNlICs9IGNvbXBv
bmVudHNTaXplOworICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOworICAgIHBpeGVs
c1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50
OF90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCit7CisgICAgdW5zaWdu
ZWQgdGFpbFBpeGVscyA9IHBpeGVsc1BlclJvdyAlIDg7CisgICAgdW5zaWduZWQgcGl4ZWxTaXpl
ID0gcGl4ZWxzUGVyUm93IC0gdGFpbFBpeGVsczsKKworICAgIHVpbnQxNng4X3QgaW1tZWRpYXRl
MHgwZiA9IHZkdXBxX25fdTE2KDB4MEYpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
aXhlbFNpemU7IGkgKz0gOCkgeworICAgICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxk
MXFfdTE2KHNvdXJjZSArIGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFt
b3ZuX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMTIpKTsKKyAgICAgICAgdWludDh4OF90
IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVs
cywgOCksIGltbWVkaWF0ZTB4MGYpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2
cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNCksIGltbWVkaWF0
ZTB4MGYpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRx
X3UxNihlaWdodFBpeGVscywgaW1tZWRpYXRlMHgwZikpOworCisgICAgICAgIGNvbXBvbmVudFIg
PSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRSLCA0KSwgY29tcG9uZW50Uik7CisgICAgICAg
IGNvbXBvbmVudEcgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRHLCA0KSwgY29tcG9uZW50
Ryk7CisgICAgICAgIGNvbXBvbmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCA0
KSwgY29tcG9uZW50Qik7CisgICAgICAgIGNvbXBvbmVudEEgPSB2b3JyX3U4KHZzaGxfbl91OChj
b21wb25lbnRBLCA0KSwgY29tcG9uZW50QSk7CisKKyAgICAgICAgdWludDh4OHg0X3QgZGVzdENv
bXBvbmVudHMgPSB7e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVu
dEF9fTsKKyAgICAgICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOworICAg
ICAgICBkZXN0aW5hdGlvbiArPSAzMjsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gcGl4ZWxTaXpl
OworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxQaXhlbHM7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDQoY29uc3QgdWludDhfdComIHNv
dXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sK
KyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1
bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1bnNp
Z25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsK
KworICAgIHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0
aW9uKTsKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmMCA9IHZkdXBfbl91OCgweEYwKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKKyAg
ICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOworCisgICAgICAg
IHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4
ZjApOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZzaHJfbl91OCh2YW5kX3U4KFJH
QkE4LnZhbFsxXSwgaW1tZWRpYXRlMHhmMCksIDQpOworICAgICAgICB1aW50OHg4X3QgY29tcG9u
ZW50QiA9IHZhbmRfdTgoUkdCQTgudmFsWzJdLCBpbW1lZGlhdGUweGYwKTsKKyAgICAgICAgdWlu
dDh4OF90IGNvbXBvbmVudEEgPSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbM10sIGltbWVk
aWF0ZTB4ZjApLCA0KTsKKworICAgICAgICB1aW50OHg4eDJfdCBSR0JBNDsKKyAgICAgICAgUkdC
QTQudmFsWzBdID0gdm9ycl91OChjb21wb25lbnRCLCBjb21wb25lbnRBKTsKKyAgICAgICAgUkdC
QTQudmFsWzFdID0gdm9ycl91OChjb21wb25lbnRSLCBjb21wb25lbnRHKTsKKyAgICAgICAgdnN0
Ml91OChkc3QsIFJHQkE0KTsKKyAgICAgICAgZHN0ICs9IDE2OworICAgIH0KKworICAgIHNvdXJj
ZSArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZSAv
IDQ7CisgICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgoY29uc3QgdWludDE2X3Qq
JiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykK
K3sKKyAgICB1bnNpZ25lZCB0YWlsUGl4ZWxzID0gcGl4ZWxzUGVyUm93ICUgODsKKyAgICB1bnNp
Z25lZCBwaXhlbFNpemUgPSBwaXhlbHNQZXJSb3cgLSB0YWlsUGl4ZWxzOworCisgICAgdWludDh4
OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcpOworICAgIHVpbnQ4eDhfdCBpbW1lZGlh
dGUweGZmID0gdmR1cF9uX3U4KDB4RkYpOworICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxZiA9
IHZkdXBxX25fdTE2KDB4MUYpOworICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxID0gdmR1cHFf
bl91MTYoMHgxKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkg
Kz0gOCkgeworICAgICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJj
ZSArIGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hy
cV9uX3UxNihlaWdodFBpeGVscywgMTEpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcg
PSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNiksIGltbWVk
aWF0ZTB4MWYpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2KHZh
bmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMSksIGltbWVkaWF0ZTB4MWYpKTsKKyAg
ICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihlaWdodFBp
eGVscywgaW1tZWRpYXRlMHgxKSk7CisKKyAgICAgICAgY29tcG9uZW50UiA9IHZvcnJfdTgodnNo
bF9uX3U4KGNvbXBvbmVudFIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudFIsIGltbWVkaWF0ZTB4Nykp
OworICAgICAgICBjb21wb25lbnRHID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50RywgMyks
IHZhbmRfdTgoY29tcG9uZW50RywgaW1tZWRpYXRlMHg3KSk7CisgICAgICAgIGNvbXBvbmVudEIg
PSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCAzKSwgdmFuZF91OChjb21wb25lbnRCLCBp
bW1lZGlhdGUweDcpKTsKKyAgICAgICAgY29tcG9uZW50QSA9IHZtdWxfdTgoY29tcG9uZW50QSwg
aW1tZWRpYXRlMHhmZik7CisKKyAgICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7
e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsKKyAgICAg
ICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOworICAgICAgICBkZXN0aW5h
dGlvbiArPSAzMjsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOworICAgIHBpeGVs
c1BlclJvdyA9IHRhaWxQaXhlbHM7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBwYWNrT25lUm93
T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTEoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2
X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25l
ZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWls
Q29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1bnNpZ25lZCBjb21wb25l
bnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKworICAgIHVpbnQ4
X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsKKworICAg
IHVpbnQ4eDhfdCBpbW1lZGlhdGUweGY4ID0gdmR1cF9uX3U4KDB4RjgpOworICAgIHVpbnQ4eDhf
dCBpbW1lZGlhdGUweDE4ID0gdmR1cF9uX3U4KDB4MTgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikgeworICAgICAgICB1aW50OHg4eDRfdCBS
R0JBOCA9IHZsZDRfdTgoc291cmNlICsgaSk7CisKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVu
dFIgPSB2YW5kX3U4KFJHQkE4LnZhbFswXSwgaW1tZWRpYXRlMHhmOCk7CisgICAgICAgIHVpbnQ4
eDhfdCBjb21wb25lbnRHM2JpdCA9IHZzaHJfbl91OChSR0JBOC52YWxbMV0sIDUpOworCisgICAg
ICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHMmJpdCA9IHZzaGxfbl91OCh2YW5kX3U4KFJHQkE4LnZh
bFsxXSwgaW1tZWRpYXRlMHgxOCksIDMpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9
IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhmOCksIDIpOworICAg
ICAgICB1aW50OHg4X3QgY29tcG9uZW50QSA9IHZzaHJfbl91OChSR0JBOC52YWxbM10sIDcpOwor
CisgICAgICAgIHVpbnQ4eDh4Ml90IFJHQkE1NTUxOworICAgICAgICBSR0JBNTU1MS52YWxbMF0g
PSB2b3JyX3U4KHZvcnJfdTgoY29tcG9uZW50RzJiaXQsIGNvbXBvbmVudEIpLCBjb21wb25lbnRB
KTsKKyAgICAgICAgUkdCQTU1NTEudmFsWzFdID0gdm9ycl91OChjb21wb25lbnRSLCBjb21wb25l
bnRHM2JpdCk7CisgICAgICAgIHZzdDJfdTgoZHN0LCBSR0JBNTU1MSk7CisgICAgICAgIGRzdCAr
PSAxNjsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7CisgICAgZGVzdGlu
YXRpb24gKz0gY29tcG9uZW50c1NpemUgLyA0OworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21w
b25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mUkdCNTY1
VG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQoreworICAgIHVuc2lnbmVkIHRhaWxQaXhlbHMgPSBwaXhl
bHNQZXJSb3cgJSA4OworICAgIHVuc2lnbmVkIHBpeGVsU2l6ZSA9IHBpeGVsc1BlclJvdyAtIHRh
aWxQaXhlbHM7CisKKyAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4M2YgPSB2ZHVwcV9uX3UxNigw
eDNGKTsKKyAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MWYgPSB2ZHVwcV9uX3UxNigweDFGKTsK
KyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgzID0gdmR1cF9uX3U4KDB4Myk7CisgICAgdWludDh4
OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcpOworCisgICAgdWludDh4OF90IGNvbXBv
bmVudEEgPSB2ZHVwX25fdTgoMHhGRik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxTaXplOyBpICs9IDgpIHsKKyAgICAgICAgdWludDE2eDhfdCBlaWdodFBpeGVscyA9IHZs
ZDFxX3UxNihzb3VyY2UgKyBpKTsKKworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZx
bW92bl91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDExKSk7CisgICAgICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2YW5kcV91MTYodnNocnFfbl91MTYoZWlnaHRQaXhl
bHMsIDUpLCBpbW1lZGlhdGUweDNmKSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0g
dnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMsIGltbWVkaWF0ZTB4MWYpKTsKKworICAg
ICAgICBjb21wb25lbnRSID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50UiwgMyksIHZhbmRf
dTgoY29tcG9uZW50UiwgaW1tZWRpYXRlMHg3KSk7CisgICAgICAgIGNvbXBvbmVudEcgPSB2b3Jy
X3U4KHZzaGxfbl91OChjb21wb25lbnRHLCAyKSwgdmFuZF91OChjb21wb25lbnRHLCBpbW1lZGlh
dGUweDMpKTsKKyAgICAgICAgY29tcG9uZW50QiA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVu
dEIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudEIsIGltbWVkaWF0ZTB4NykpOworCisgICAgICAgIHVp
bnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21w
b25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIGRlc3RD
b21wb25lbnRzKTsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7CisgICAgfQorCisgICAgc291
cmNlICs9IHBpeGVsU2l6ZTsKKyAgICBwaXhlbHNQZXJSb3cgPSB0YWlsUGl4ZWxzOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjUoY29u
c3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBp
eGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVy
Um93ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cg
JSAzMjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0
YWlsQ29tcG9uZW50czsKKyAgICB1aW50OF90KiBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihkZXN0aW5hdGlvbik7CisKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmOCA9IHZkdXBf
bl91OCgweEY4KTsKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgxYyA9IHZkdXBfbl91OCgweDFD
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIp
IHsKKyAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOworCisg
ICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVk
aWF0ZTB4ZjgpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50R0xlZnQgPSB2c2hyX25fdTgo
UkdCQTgudmFsWzFdLCA1KTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEdSaWdodCA9IHZz
aGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHgxYyksIDMpOworICAgICAg
ICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwg
aW1tZWRpYXRlMHhmOCksIDMpOworCisgICAgICAgIHVpbnQ4eDh4Ml90IFJHQjU2NTsKKyAgICAg
ICAgUkdCNTY1LnZhbFswXSA9IHZvcnJfdTgoY29tcG9uZW50R1JpZ2h0LCBjb21wb25lbnRCKTsK
KyAgICAgICAgUkdCNTY1LnZhbFsxXSA9IHZvcnJfdTgoY29tcG9uZW50UiwgY29tcG9uZW50R0xl
ZnQpOworICAgICAgICB2c3QyX3U4KGRzdCwgUkdCNTY1KTsKKyAgICAgICAgZHN0ICs9IDE2Owor
ICAgIH0KKworICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBkZXN0aW5hdGlvbiAr
PSBjb21wb25lbnRzU2l6ZSAvIDQ7CisgICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMg
LyA0OworfQorCit9IC8vIG5hbWVzcGFjZSBTSU1ECisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5oCmluZGV4IGM5ZmY0
MTlkNDNiZTQ1ZjQwNDQwMzA0MGFkZDhjNGQwNDQwMmJhMmYuLjQ2M2QwNjFkMjUzOWZmMjI2NzRj
NWI4MDc5ZmQxZGVjMGNhNmYyZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YuaApAQCAtNDEsMTIgKzQxLDEyIEBAIHR5cGVk
ZWYgc3RydWN0IF9fQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZSAqQ1ZPcGVuR0xFU1RleHR1cmVDYWNo
ZVJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogCiBjbGFzcyBUZXh0dXJlQ2FjaGVDViA6
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUZXh0dXJlQ2FjaGVDVj4gewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVy
ZUNhY2hlQ1Y+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCYpOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZUNhY2hlQ1Y+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYp
OwogCiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICB1c2luZyBUZXh0dXJlQ2FjaGVUeXBlID0gQ1ZP
cGVuR0xFU1RleHR1cmVDYWNoZVJlZjsKQEAgLTU2LDEzICs1NiwxMyBAQCBwdWJsaWM6CiAgICAg
dXNpbmcgVGV4dHVyZVR5cGUgPSBDVk9wZW5HTFRleHR1cmVSZWY7CiAjZW5kaWYKIAotICAgIFRl
eHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4dDNEJiwgUmV0YWluUHRyPFRleHR1cmVDYWNoZVR5
cGU+JiYpOworICAgIFRleHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgUmV0
YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYpOwogCiAgICAgUmV0YWluUHRyPFRleHR1cmVUeXBl
PiB0ZXh0dXJlRnJvbUltYWdlKENWUGl4ZWxCdWZmZXJSZWYsIEdDM0RlbnVtIG91dHB1dFRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQoKSB7IHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29u
dGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIFJlZjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFJlZjxHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTD4gbV9jb250ZXh0OwogICAgIFJldGFpblB0cjxUZXh0dXJlQ2FjaGVUeXBlPiBtX2NhY2hl
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
VGV4dHVyZUNhY2hlQ1YubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9U
ZXh0dXJlQ2FjaGVDVi5tbQppbmRleCBmNTJmZTNkYThlOWJlZjY3ZGJjNDk2MDVmY2E3OWNlNDY5
NDM0YzM2Li40OWNiNjVlN2UwZDE2ZjA2NmMxNjBkNTIxN2M5NzRiNjI3NGU5YTgyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVD
Vi5tbQpAQCAtMjgsMjAgKzI4LDIwIEBACiAKICNpZiBIQVZFKENPUkVfVklERU8pCiAKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgiCiAKICNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4gVGV4dHVyZUNhY2hlQ1Y6
OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKK3N0ZDo6dW5pcXVlX3B0cjxUZXh0
dXJlQ2FjaGVDVj4gVGV4dHVyZUNhY2hlQ1Y6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCYgY29udGV4dCkKIHsKICAgICBUZXh0dXJlQ2FjaGVUeXBlIGNhY2hlID0gbnVsbHB0cjsKICNp
ZiBVU0UoT1BFTkdMX0VTKQotICAgIENWRUFHTENvbnRleHQgZWFnbENvbnRleHQgPSBzdGF0aWNf
Y2FzdDxDVkVBR0xDb250ZXh0Pihjb250ZXh0LnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7
CisgICAgQ1ZFQUdMQ29udGV4dCBlYWdsQ29udGV4dCA9IHN0YXRpY19jYXN0PENWRUFHTENvbnRl
eHQ+KGNvbnRleHQucGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKTsKICAgICBDVlJldHVybiBl
cnJvciA9IENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
bnVsbHB0ciwgZWFnbENvbnRleHQsIG51bGxwdHIsICZjYWNoZSk7CiAjZWxpZiBVU0UoT1BFTkdM
KQotICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRP
Ymo+KGNvbnRleHQucGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBDR0xDb250ZXh0
T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihjb250ZXh0LnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgQ1ZSZXR1cm4gZXJyb3IgPSBDVk9wZW5HTFRl
eHR1cmVDYWNoZUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBjZ2xDb250ZXh0
LCBDR0xHZXRQaXhlbEZvcm1hdChjZ2xDb250ZXh0KSwgbnVsbHB0ciwgJmNhY2hlKTsKICNlbGlm
IFVTRShBTkdMRSkKICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gZG8gdGhpcyBpbnRl
Z3JhdGluZyB2aWEgQU5HTEUuCkBAIC01NSw3ICs1NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxUZXh0
dXJlQ2FjaGVDVj4gVGV4dHVyZUNhY2hlQ1Y6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCYgY29u
dGV4CiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VGV4dHVyZUNhY2hlQ1Y+KGNvbnRleHQsIFdURk1v
dmUoc3Ryb25nQ2FjaGUpKTsKIH0KIAotVGV4dHVyZUNhY2hlQ1Y6OlRleHR1cmVDYWNoZUNWKEdy
YXBoaWNzQ29udGV4dDNEJiBjb250ZXh0LCBSZXRhaW5QdHI8VGV4dHVyZUNhY2hlVHlwZT4mJiBj
YWNoZSkKK1RleHR1cmVDYWNoZUNWOjpUZXh0dXJlQ2FjaGVDVihHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYgY29udGV4dCwgUmV0YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYgY2FjaGUpCiAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fY2FjaGUoY2FjaGUpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJD
Vi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVD
b3BpZXJDVi5jcHAKaW5kZXggZGRkOGE4MmY5YTAyYmY5OTFhNmI4ZGM0ZWZmMGZlMjc0NDM3MmY1
MS4uZjk5ZmU4ZTA2ZmY3OGUwM2M2NzYzM2U5ODFiOTYyNzNmMWNlODMwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1Yu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVy
ZUNvcGllckNWLmNwcApAQCAtMzc2LDkgKzM3Niw5IEBAIHN0YXRpYyBjb25zdCBWZWN0b3I8R0xm
bG9hdD4gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihQaXhlbFJh
CiB9CiAjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCiAKLVZpZGVvVGV4dHVyZUNvcGllckNWOjpW
aWRlb1RleHR1cmVDb3BpZXJDVihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKK1ZpZGVvVGV4
dHVyZUNvcGllckNWOjpWaWRlb1RleHR1cmVDb3BpZXJDVihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCYgY29udGV4dCkKICAgICA6IG1fc2hhcmVkQ29udGV4dChjb250ZXh0KQotICAgICwgbV9jb250
ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFyZWQoY29udGV4dCkpCisgICAgLCBtX2Nv
bnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYXJlZChjb250ZXh0KSkKICAg
ICAsIG1fZnJhbWVidWZmZXIoY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcigpKQogewogfQpAQCAt
NDA0LDYyICs0MDQsNjIgQEAgc3RhdGljIFN0cmluZ01hcCYgZW51bVRvU3RyaW5nTWFwKCkKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nTWFwPiBtYXA7CiAgICAgaWYgKG1hcC5nZXQo
KS5lbXB0eSgpKSB7CiAgICAgICAgIFN0cmluZ01hcCBzdHJpbmdNYXA7Ci0gICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKTsKLSAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFKSk7Ci0gICAgICAg
IG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpBTFBI
QSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHQzRDo6UjgpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0M0Q6OlIxNkYpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkYpKTsKLSAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUkpKTsKLSAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlI4
SSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHQzRDo6UjE2VUkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJKSk7Ci0gICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJKSk7Ci0g
ICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNE
OjpSRzgpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHMTZGKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRikpOwotICAgICAgICBtYXAuZ2V0KCkuZW1w
bGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUkpKTsKLSAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEkp
KTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJHMTZVSSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJ
UihHcmFwaGljc0NvbnRleHQzRDo6UkcxNkkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSSkpOwotICAgICAgICBtYXAu
Z2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkczMkkpKTsK
LSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjgpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNSR0I4KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOCkpOwotICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4KSk7
Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBNCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTIpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2KSk7Ci0g
ICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQyNCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGKSk7Ci0gICAgICAg
IG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SDI0X1NURU5DSUw4KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMOCkpOwotICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkdCKSk7Ci0gICAg
ICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSkpOwotICAgICAgICBt
YXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6QUxQSEEp
KTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFRCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUikpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCkpOwotICAg
ICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJ
UihHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUpKTsKLSAgICAgICAgbWFw
LmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzRfNF80XzQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEpKTsKLSAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUp
KTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250
ZXh0M0Q6OkhBTEZfRkxPQVQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBs
YWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkpOwot
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQz
RDo6U0hPUlQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6SU5UKSk7Ci0gICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSk7Ci0gICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF8z
Ml9VTlNJR05FRF9JTlRfMjRfOF9SRVYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHQikpOworICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkdCQSkpOworICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6TFVN
SU5BTkNFX0FMUEhBKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0UpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBKSk7CisgICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSOCkpOwor
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRH
TDo6UjE2RikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHRHTDo6UjMyRikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjhVSSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1w
bGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjhJKSk7CisgICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSSkp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6UjE2SSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHRHTDo6UjMyVUkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlIzMkkpKTsKKyAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHOCkpOworICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6Ukcx
NkYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0R0w6OlJHMzJGKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9Q
QUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6Ukc4SSkpOworICAgICAgICBtYXAu
Z2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJKSk7
CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4
dEdMOjpSRzE2SSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHRHTDo6UkczMlVJKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNU
UklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSRzMySSkpOworICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkdCOCkpOworICAg
ICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6
U1JHQjgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkE4KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTgpKTsKKyAgICAgICAgbWFwLmdl
dCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0KSk7Cisg
ICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IxMF9BMikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTYpKTsKKyAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVO
VDI0KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDgpKTsK
KyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIMzJGX1NURU5DSUw4KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IpKTsKKyAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEpKTsKKyAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlO
QU5DRV9BTFBIQSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNl
KFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQSkpOworICAgICAgICBtYXAu
Z2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkVEKSk7Cisg
ICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdM
OjpSR19JTlRFR0VSKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMKSk7CisgICAgICAgIG1hcC5nZXQoKS5l
bXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSk7
CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCkp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6QllURSkpOworICAgICAgICBtYXAu
Z2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9B
VCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHRHTDo6RkxPQVQpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUKSk7CisgICAgICAgIG1hcC5nZXQo
KS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVCkpOworICAg
ICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfSU5UKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlQpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JF
VikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfSU5UXzI0XzgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8y
NF84X1JFVikpOwogCiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR0xfUkVEX0lOVEVHRVIpKTsKQEAgLTUxNCwxMiArNTE0LDEyIEBA
IGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0T2JqZWN0cygpCiAg
ICAgdmVydGV4U2hhZGVyU291cmNlLmFwcGVuZExpdGVyYWwoIiAgICBnbF9Qb3NpdGlvbiA9IGFf
cG9zaXRpb247XG4iKTsKICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UuYXBwZW5kTGl0ZXJhbCgifVxu
Iik7CiAKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3Jl
YXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNz
Q29udGV4dEdMOjpWRVJURVhfU0hBREVSKTsKICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2
ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZS50b1N0cmluZygpKTsKICAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXJEaXJlY3QodmVydGV4U2hhZGVyKTsKIAogICAgIEdDM0RpbnQgdmFs
dWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVydGV4U2hhZGVyLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7CisgICAgbV9jb250ZXh0LT5nZXRT
aGFkZXJpdih2ZXJ0ZXhTaGFkZXIsIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QSUxFX1NUQVRVUywg
JnZhbHVlKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4
dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVmVy
dGV4IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKICAgICAgICAgbV9jb250ZXh0
LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKQEAgLTU2MSwxMSArNTYxLDExIEBAIGJvb2wg
VmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0T2JqZWN0cygpCiAgICAgZnJh
Z21lbnRTaGFkZXJTb3VyY2UuYXBwZW5kTGl0ZXJhbCgiICAgIH1cbiIpOwogICAgIGZyYWdtZW50
U2hhZGVyU291cmNlLmFwcGVuZExpdGVyYWwoIn1cbiIpOwogCi0gICAgUGxhdGZvcm0zRE9iamVj
dCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFk
ZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRf
U0hBREVSKTsKICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJh
Z21lbnRTaGFkZXJTb3VyY2UudG9TdHJpbmcoKSk7CiAgICAgbV9jb250ZXh0LT5jb21waWxlU2hh
ZGVyRGlyZWN0KGZyYWdtZW50U2hhZGVyKTsKIAotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYo
ZnJhZ21lbnRTaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJnZhbHVl
KTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KGZyYWdtZW50U2hhZGVyLCBHcmFwaGljc0Nv
bnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAg
ICAgICBMT0coV2ViR0wsICJWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRv
UGxhdGZvcm1UZXh0dXJlKCVwKSAtIEZyYWdtZW50IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4i
LCB0aGlzKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsK
QEAgLTU3OCw3ICs1NzgsNyBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXpl
Q29udGV4dE9iamVjdHMoKQogICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1fcHJvZ3JhbSwg
ZnJhZ21lbnRTaGFkZXIpOwogICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV9wcm9ncmFtKTsK
IAotICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1fcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTktfU1RBVFVTLCAmdmFsdWUpOworICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1f
cHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTktfU1RBVFVTLCAmdmFsdWUpOwogICAgIGlm
ICghdmFsdWUpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNv
cHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBQcm9ncmFtIGZhaWxlZCB0byBs
aW5rLiIsIHRoaXMpOwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFk
ZXIpOwpAQCAtNjA2LDggKzYwNiw4IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRp
YWxpemVDb250ZXh0T2JqZWN0cygpCiAgICAgbV92ZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmNy
ZWF0ZUJ1ZmZlcigpOwogICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwg
MSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OwogCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QnVmZmVyKTsKLSAgICBt
X2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6
ZW9mKGZsb2F0KSAqIDEyLCB2ZXJ0aWNlcywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFX
KTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JV
RkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGlj
c0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBzaXplb2YoZmxvYXQpICogMTIsIHZlcnRpY2VzLCBH
cmFwaGljc0NvbnRleHRHTDo6U1RBVElDX0RSQVcpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBA
IC02MzksMTIgKzYzOSwxMiBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXpl
VVZDb250ZXh0T2JqZWN0cygpCiAgICAgICAgICJ9XG4iX3MKICAgICB9OwogCi0gICAgUGxhdGZv
cm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhT
aGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVY
X1NIQURFUik7CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0
ZXhTaGFkZXJTb3VyY2UpOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlckRpcmVjdCh2ZXJ0
ZXhTaGFkZXIpOwogCiAgICAgR0MzRGludCBzdGF0dXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0
U2hhZGVyaXYodmVydGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMs
ICZzdGF0dXMpOworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVydGV4U2hhZGVyLCBHcmFw
aGljc0NvbnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZzdGF0dXMpOwogICAgIGlmICghc3RhdHVz
KSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXpl
VVZDb250ZXh0T2JqZWN0cyglcCkgLSBWZXJ0ZXggc2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIs
IHRoaXMpOwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwpA
QCAtNjc4LDExICs2NzgsMTEgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6
ZVVWQ29udGV4dE9iamVjdHMoKQogICAgICAgICAifVxuIl9zCiAgICAgfTsKIAotICAgIFBsYXRm
b3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZy
YWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6
OkZSQUdNRU5UX1NIQURFUik7CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRT
aGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFk
ZXJEaXJlY3QoZnJhZ21lbnRTaGFkZXIpOwogCi0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihm
cmFnbWVudFNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmc3RhdHVz
KTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KGZyYWdtZW50U2hhZGVyLCBHcmFwaGljc0Nv
bnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZzdGF0dXMpOwogICAgIGlmICghc3RhdHVzKSB7CiAg
ICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250
ZXh0T2JqZWN0cyglcCkgLSBGcmFnbWVudCBzaGFkZXIgZmFpbGVkIHRvIGNvbXBpbGUuIiwgdGhp
cyk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CkBAIC02
OTUsNyArNjk1LDcgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29u
dGV4dE9iamVjdHMoKQogICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1feXV2UHJvZ3JhbSwg
ZnJhZ21lbnRTaGFkZXIpOwogICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV95dXZQcm9ncmFt
KTsKIAotICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1feXV2UHJvZ3JhbSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTktfU1RBVFVTLCAmc3RhdHVzKTsKKyAgICBtX2NvbnRleHQtPmdldFByb2dy
YW1pdihtX3l1dlByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5LX1NUQVRVUywgJnN0YXR1
cyk7CiAgICAgaWYgKCFzdGF0dXMpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVmlkZW9UZXh0dXJl
Q29waWVyQ1Y6OmluaXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCVwKSAtIFByb2dyYW0gZmFpbGVk
IHRvIGxpbmsuIiwgdGhpcyk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRl
eFNoYWRlcik7CkBAIC03MjEsMTAgKzcyMSwxMCBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNW
Ojppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpCiAgICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwogICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEs
IC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OwogCi0gICAgbV9jb250ZXh0
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1feXV2VmVydGV4
QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4
dEdMOjpBUlJBWV9CVUZGRVIsIG1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2Vz
KSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEFUSUNfRFJBVyk7CiAgICAgbV9jb250
ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRp
b24pOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0
cmlidXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDAp
OworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmli
dXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgZmFsc2UsIDAsIDApOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03MzUsMTUgKzczNSwxNSBAQCB2b2lkKiBWaWRlb1Rl
eHR1cmVDb3BpZXJDVjo6YXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gaQogICAgIGF1dG8gZGlzcGxheSA9IG1fY29udGV4dC0+cGxhdGZvcm1EaXNwbGF5
KCk7CiAgICAgRUdMaW50IGVnbFRleHR1cmVUYXJnZXQgPSAwOwogCi0gICAgaWYgKHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCKQorICAgIGlmICh0YXJn
ZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikKICAgICAgICAg
ZWdsVGV4dHVyZVRhcmdldCA9IEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRTsKLSAgICBlbHNl
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpCisgICAgZWxzZSBp
ZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKQogICAgICAgICBlZ2xU
ZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CiAgICAgZWxzZSB7CiAgICAgICAgIExPRyhX
ZWJHTCwgIlVua25vd24gdGV4dHVyZSB0YXJnZXQgJWQuIiwgc3RhdGljX2Nhc3Q8aW50Pih0YXJn
ZXQpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGlmIChlZ2xUZXh0dXJl
VGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KSB7
CisgICAgaWYgKGVnbFRleHR1cmVUYXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkVHTElPU3Vy
ZmFjZVRleHR1cmVUYXJnZXQpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiTWlzbWF0Y2ggaW4gRUdM
IHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTgzMSwxOSArODMxLDE5IEBAIGJvb2wgVmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJS
ZWYgaW1hZ2UsIHNpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwor
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mcmFtZWJ1ZmZlcik7CiAKICAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBv
dXRwdXQgdGV4dHVyZS4KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
Uik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVy
bmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOwotCi0g
ICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKLSAgICBHQzNEZW51
bSBzdGF0dXMgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOworICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7
CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfUywgR3Jh
cGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBs
ZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVs
bHB0cik7CisKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQw
LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSwgbGV2ZWwpOwor
ICAgIEdDM0RlbnVtIHN0YXR1cyA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIExPRyhXZWJHTCwg
IlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
JXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTg1OCw1MCArODU4LDUwIEBA
IGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENW
UGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIHNpCiAgICAgYXV0byB1dlBsYW5lSGVpZ2h0ID0gSU9TdXJm
YWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAxKTsKIAogI2lmIFVTRShPUEVOR0xfRVMpCi0g
ICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQ7CisgICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQ7CiAjZWxpZiBVU0UoT1BFTkdMKQotICAgIEdDM0RlbnVtIHZpZGVvVGV4
dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkI7Cisg
ICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfUkVDVEFOR0xFX0FSQjsKICNlbGlmIFVTRShBTkdMRSkKLSAgICBHQzNEZW51bSB2aWRlb1Rl
eHR1cmVUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQzRDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldDsK
KyAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBHcmFwaGljc0NvbnRleHRHTDo6SU9T
dXJmYWNlVGV4dHVyZVRhcmdldDsKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgY29uZmlndXJh
dGlvbgogI2VuZGlmCiAgICAgYXV0byB1dlRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1
cmUoKTsKLSAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUxKTsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkUxKTsKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdl
dCwgdXZUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0
dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
dmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdf
RklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKICNpZiBV
U0UoQU5HTEUpCi0gICAgYXV0byB1dkhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2
aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRywgdXZQbGFuZVdpZHRoLCB1
dlBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwg
MSk7CisgICAgYXV0byB1dkhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1Rl
eHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5l
SGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CiAg
ICAgaWYgKCF1dkhhbmRsZSkgewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodXZU
ZXh0dXJlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbHNlCi0gICAgaWYgKCFt
X2NvbnRleHQtPnRleEltYWdlSU9TdXJmYWNlMkQodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHQzRDo6UkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSkp
IHsKKyAgICBpZiAoIW1fY29udGV4dC0+dGV4SW1hZ2VJT1N1cmZhY2UyRCh2aWRlb1RleHR1cmVU
YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0
LCBHcmFwaGljc0NvbnRleHRHTDo6UkcsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRF
LCBzdXJmYWNlLCAxKSkgewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodXZUZXh0
dXJlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZiAvLyBVU0UoQU5HTEUp
CiAKICAgICBhdXRvIHlUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAg
bV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Cisg
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCk7
CiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHlUZXh0dXJl
KTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElO
RUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFw
aGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
dmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdy
YXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKICNpZiBVU0UoQU5HTEUpCi0g
ICAgYXV0byB5SGFuZGxlID0gYXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKHZpZGVvVGV4dHVyZVRh
cmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGF1dG8g
eUhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdy
YXBoaWNzQ29udGV4dEdMOjpSRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQsIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsKICAgICBpZiAoIXlIYW5kbGUp
IHsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHlUZXh0dXJlKTsKICAgICAgICAg
bV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAjZWxzZQotICAgIGlmICghbV9jb250ZXh0LT50ZXhJbWFnZUlPU3VyZmFjZTJE
KHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSwgeVBsYW5l
V2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApKSB7CisgICAgaWYgKCFtX2Nv
bnRleHQtPnRleEltYWdlSU9TdXJmYWNlMkQodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFLCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgc3Vy
ZmFjZSwgMCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHlUZXh0dXJlKTsK
ICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTkyMSw3ICs5MjEsNyBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNW
Ojpjb3B5SW1hZ2VUb1BsYXRmb3JtVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBzaQog
ICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0
aW9uLCAxLCBHTF9GQUxTRSwgY29sb3JNYXRyaXguZGF0YSgpKTsKIAogICAgIC8vIERvIHRoZSBh
Y3R1YWwgZHJhd2luZy4KLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0
M0Q6OlRSSUFOR0xFUywgMCwgNik7CisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNz
Q29udGV4dEdMOjpUUklBTkdMRVMsIDAsIDYpOwogCiAjaWYgVVNFKE9QRU5HTF9FUykgfHwgKFVT
RShBTkdMRSkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkpCiAgICAgLy8gZmx1c2goKSBtdXN0IGJl
IGNhbGxlZCBoZXJlIGluIG9yZGVyIHRvIHJlLXN5bmNocm9uaXplIHRoZSBvdXRwdXQgdGV4dHVy
ZSdzIGNvbnRlbnRzIGFjcm9zcyB0aGUKQEAgLTEwMTAsMTkgKzEwMTAsMTkgQEAgYm9vbCBWaWRl
b1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFBsYXRm
b3JtM0RPYmplY3QgdmkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7
CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX2ZyYW1lYnVmZmVyKTsKICAgICAKICAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9y
IHRoZSBvdXRwdXQgdGV4dHVyZS4KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbGV2ZWws
IGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIp
OwotCi0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKLSAgICBH
QzNEZW51bSBzdGF0dXMgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOworICAgIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJ
TkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGlj
c0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBf
UywgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7Cisg
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
XzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlw
ZSwgbnVsbHB0cik7CisKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFD
SE1FTlQwLCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSwgbGV2
ZWwpOworICAgIEdDM0RlbnVtIHN0YXR1cyA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0g
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIExPRyhX
ZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRl
eHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVy
ZS4iLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEwMzEsMTIgKzEw
MzEsMTIgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxh
dGZvcm1UZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdmkKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0
KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0
dXJlIGZvciB0aGUgdmlkZW8gc291cmNlLgotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB2aWRlb1RleHR1cmVOYW1lKTsKLSAgICBtX2NvbnRleHQt
PnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElO
RUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6
TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpD
TEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dEdMOjpDTEFNUF9UT19FREdFKTsKIAogICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJh
bWV0ZXJzLgogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlv
biwgMCk7CkBAIC0xMDUyLDkgKzEwNTIsOSBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB2aQogCiAg
ICAgLy8gRG8gdGhlIGFjdHVhbCBkcmF3aW5nLgogICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkobV9wb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKLSAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhCdWZm
ZXIpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uQXR0cmli
dXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwot
ICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAw
LCA2KTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZ
X0JVRkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9p
bnRlcihtX3Bvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dEdMOjpG
TE9BVCwgZmFsc2UsIDAsIDApOworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0Nv
bnRleHRHTDo6VFJJQU5HTEVTLCAwLCA2KTsKIAogI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgLy8g
Zmx1c2goKSBtdXN0IGJlIGNhbGxlZCBoZXJlIGluIG9yZGVyIHRvIHJlLXN5bmNocm9uaXplIHRo
ZSBvdXRwdXQgdGV4dHVyZSdzIGNvbnRlbnRzIGFjcm9zcyB0aGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5o
CmluZGV4IDM2YmRhOTFkZDU4ZmRiMzQ4ZjRmMmNiYWIzZWViNGFmODkyNWY0ZTEuLjExNWU5ODBj
OWU5OTk1M2NkNTg2M2ZjMjk5NjQ0NDZlMTIwMzgxNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuaApA
QCAtMjcsNyArMjcsNyBAQAogCiAjaWYgSEFWRShDT1JFX1ZJREVPKQogCi0jaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNp
bXBvcnQgPHd0Zi9VbnNhZmVQb2ludGVyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIq
IENWSW1hZ2VCdWZmZXJSZWY7CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFRleHR1cmVDYWNoZUNW
OwogY2xhc3MgVmlkZW9UZXh0dXJlQ29waWVyQ1YgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIFZpZGVvVGV4dHVyZUNvcGllckNWKEdyYXBoaWNzQ29udGV4dDNE
Jik7CisgICAgVmlkZW9UZXh0dXJlQ29waWVyQ1YoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsK
ICAgICB+VmlkZW9UZXh0dXJlQ29waWVyQ1YoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGNvcHlJbWFnZVRvUGxhdGZvcm1U
ZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgUGxh
dGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CiAgICAgYm9vbCBj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoVGV4dHVyZVR5cGUsIHNpemVfdCB3aWR0
aCwgc2l6ZV90IGhlaWdodCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51
bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSwgYm9vbCBzd2FwQ29sb3JDaGFubmVscyA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dDNEJiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0
ZToKICAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShQbGF0Zm9ybTNE
T2JqZWN0IGlucHV0VGV4dHVyZSwgR0MzRGVudW0gaW5wdXRUYXJnZXQsIHNpemVfdCB3aWR0aCwg
c2l6ZV90IGhlaWdodCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBv
dXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBm
bGlwWSwgYm9vbCBzd2FwQ29sb3JDaGFubmVscyk7CkBAIC04MSw4ICs4MSw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwogI2Vu
ZGlmCiAKLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+IG1fc2hhcmVkQ29udGV4dDsKLSAgICBS
ZWY8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWY8R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w+IG1fc2hhcmVkQ29udGV4dDsKKyAgICBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w+IG1fY29udGV4dDsKICNpZiAhVVNFKEFOR0xFKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0
dXJlQ2FjaGVDVj4gbV90ZXh0dXJlQ2FjaGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKaW5kZXggYThhODJk
NzA5N2FhNGIzMzJhNTRmOTA3MzRhM2VkOWJjOWVjZTk1ZS4uM2QzMmY4OGVlMmE1ZDAwYjg0OGVh
NGU4MzJkNGYzY2I0N2ExMmUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2lm
IFVTRShFR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5LmgiCiAK
ICNpZiBVU0UoTElCRVBPWFkpCkBAIC00ODcsOCArNDg3LDggQEAgY2Fpcm9fZGV2aWNlX3QqIEdM
Q29udGV4dEVHTDo6Y2Fpcm9EZXZpY2UoKQogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF8zRCkKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR0xDb250ZXh0RUdMOjpw
bGF0Zm9ybUNvbnRleHQoKQorI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCBHTENvbnRleHRFR0w6OnBsYXRmb3JtQ29udGV4dCgpCiB7CiAg
ICAgcmV0dXJuIG1fY29udGV4dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuaAppbmRleCAwYzdhODQ4ZTg2MjEyZTU3MTg5YWUx
ZmU3Mjg5Y2YwNTQ4ZDRhYzY1Li45ZGE2MzIyMDg2MWIzNjMzNjcwOWYyMWU5NWM0MTc1NmI4ODE3
YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xD
b250ZXh0RUdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dM
Q29udGV4dEVHTC5oCkBAIC02OCw4ICs2OCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29s
IGlzRUdMQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotI2lmIEVO
QUJMRShHUkFQSElDU19DT05URVhUXzNEKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1Db250ZXh0KCkgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBvdmVy
cmlkZTsKICNlbmRpZgogCiAgICAgZW51bSBFR0xTdXJmYWNlVHlwZSB7IFBidWZmZXJTdXJmYWNl
LCBXaW5kb3dTdXJmYWNlLCBQaXhtYXBTdXJmYWNlLCBTdXJmYWNlbGVzcyB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApp
bmRleCBhZGYzMjE5Y2Q5M2NiNWE4NmJkNmE2ZDY1MGUxYTAxMDIwMjIyZDVmLi44MTU1NzcxMGIy
Y2Y0NjNlZWZhZTA2YzczMjM0OTE1MTA3MmI3NTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtNDEzLDggKzQx
Myw4IEBAIGNhaXJvX2RldmljZV90KiBHTENvbnRleHRHTFg6OmNhaXJvRGV2aWNlKCkKICAgICBy
ZXR1cm4gbV9jYWlyb0RldmljZTsKIH0KIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNE
KQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHTENvbnRleHRHTFg6OnBsYXRmb3JtQ29udGV4
dCgpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCitQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMIEdMQ29udGV4dEdMWDo6cGxhdGZvcm1Db250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9j
b250ZXh0LmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ2x4L0dMQ29udGV4dEdMWC5oCmluZGV4IGNhMjQwMjRmNmNhNDJhMmQ4ODI1NmNjOTRiMjQ4
ZDBlM2QxOGRhYjguLjRjNzJhODM4YTczZWU0MDc3YzIzMGMyZjY5NzcyOTc5Njk2ODM4YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRH
TFguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0
R0xYLmgKQEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToKICAgICBjYWlyb19kZXZpY2VfdCogY2Fp
cm9EZXZpY2UoKSBvdmVycmlkZTsKICAgICBib29sIGlzRUdMQ29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkK
LSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpIG92ZXJyaWRl
OworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIEdMQ29u
dGV4dEdMWChQbGF0Zm9ybURpc3BsYXkmLCBYVW5pcXVlR0xYQ29udGV4dCYmLCBHTE5hdGl2ZVdp
bmRvd1R5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1RleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1Rl
eHR1cmUuY3BwCmluZGV4IDcxZmRhMGQ5MjRjZDI1NWRiM2VmMTA3N2Y5ZTEwNzgxNGUyNDNkZjQu
LmU1NGRmMjRkMmJmMmFlY2Y5YTliMGIzOGQ3ZDE4ZWNjNGFmNWQwOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKQEAgLTM0LDkgKzM0
LDkgQEAKIAogI2luY2x1ZGUgIlRleHR1cmUuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQ0LDcgKzQ0LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1UZXh0dXJlOjpUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHVuc2lnbmVkPj4gdGlsZVRleHR1cmVJZHMsIEZvcm1h
dCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1heFRleHR1cmVTaXplKQorVGV4
dHVyZTo6VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgc3RkOjp1bmlx
dWVfcHRyPFZlY3Rvcjx1bnNpZ25lZD4+IHRpbGVUZXh0dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fY29udGV4
dChjb250ZXh0KQogICAgICwgbV9mb3JtYXQoZm9ybWF0KQogICAgICwgbV90aWxlcyhJbnRTaXpl
KG1heFRleHR1cmVTaXplLCBtYXhUZXh0dXJlU2l6ZSksIEludFNpemUod2lkdGgsIGhlaWdodCks
IHRydWUpCkBAIC01NCwyNSArNTQsMjUgQEAgVGV4dHVyZTo6VGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjx1bnNpZ25lZD4+IHQKIAogVGV4
dHVyZTo6flRleHR1cmUoKQogewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV90
aWxlVGV4dHVyZUlkcy0+c2l6ZSgpOyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdGlsZVRleHR1cmVJZHMtPnNpemUoKTsgaSsrKQogICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVRleHR1cmUobV90aWxlVGV4dHVyZUlkcy0+YXQoaSkpOwogfQogCi1zdGF0aWMgdm9pZCBjb252
ZXJ0Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlOjpGb3JtYXQgZm9y
bWF0LCB1bnNpZ25lZCBpbnQqIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQqIGdsVHlwZSwgYm9vbCog
c3dpenpsZSkKK3N0YXRpYyB2b2lkIGNvbnZlcnRGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQsIFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkKiBnbEZvcm1hdCwg
dW5zaWduZWQqIGdsVHlwZSwgYm9vbCogc3dpenpsZSkKIHsKICAgICAqc3dpenpsZSA9IGZhbHNl
OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBUZXh0dXJlOjpSR0JBODoKLSAgICAg
ICAgKmdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgICAgICpnbFR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURTsKKyAgICAgICAgKmdsRm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkE7CisgICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0dXJlOjpC
R1JBODoKICAgICAgICAgaWYgKGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IikpIHsKLSAgICAgICAgICAgICpnbEZvcm1hdCA9
IEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQ7Ci0gICAgICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CisgICAgICAgICAgICAqZ2xGb3JtYXQgPSBFeHRlbnNp
b25zR0w6OkJHUkFfRVhUOworICAgICAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9CWVRFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKmdsRm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgICAgICAgICAqZ2xUeXBlID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CisgICAgICAgICAgICAqZ2xGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQTsKKyAgICAgICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURTsKICAgICAgICAgICAgICpzd2l6emxlID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKQEAgLTgyLDEwICs4MiwxMCBAQCBzdGF0aWMgdm9pZCBjb252
ZXJ0Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlOjpGb3JtYXQgZm9y
bWF0LCB1bgogICAgIH0KIH0KIAotUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQorUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewog
ICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IDA7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhUZXh0dXJlU2l6ZSk7CisgICAg
Y29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX1NJWkUs
ICZtYXhUZXh0dXJlU2l6ZSk7CiAgICAgVGlsaW5nRGF0YSB0aWxpbmcoSW50U2l6ZShtYXhUZXh0
dXJlU2l6ZSwgbWF4VGV4dHVyZVNpemUpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCB0cnVlKTsK
IAogICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KQEAgLTExNSw4ICsxMTUsOCBAQCBSZWZQdHI8
VGV4dHVyZT4gVGV4dHVyZTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGb3Jt
YXQgZm9ybWF0LCBpbnQgdwogICAgICAgICB1bnNpZ25lZCBpbnQgZ2xUeXBlID0gMDsKICAgICAg
ICAgYm9vbCBzd2l6emxlOwogICAgICAgICBjb252ZXJ0Rm9ybWF0KGNvbnRleHQsIGZvcm1hdCwg
JmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7Ci0gICAgICAgIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgICAgICBj
b250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBnbEZvcm1hdCwKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCk7CisgICAgICAgIGNvbnRleHQtPnRleElt
YWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIGdsRm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVCb3VuZHNX
aXRoQm9yZGVyLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgZ2xGb3JtYXQsIGdsVHlwZSk7CkBAIC0xNjUsNyArMTY1LDcg
QEAgdm9pZCBUZXh0dXJlOjp1cGRhdGVTdWJSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVj
dCYgdXBkYXRlUmVjdCkKICAgICBib29sIHN3aXp6bGU7CiAgICAgY29udmVydEZvcm1hdChtX2Nv
bnRleHQsIG1fZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKICAgICBpZiAo
c3dpenpsZSkgewotICAgICAgICBBU1NFUlQoZ2xGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEgJiYgZ2xUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAg
ICAgICAgQVNTRVJUKGdsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIGdsVHlw
ZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSk7CiAgICAgICAgIC8vIEZJWE1F
OiAgVGhpcyBjb3VsZCB1c2UgUEJPJ3MgdG8gc2F2ZSBkb2luZyBhbiBleHRyYSBjb3B5IGhlcmUu
CiAgICAgfQogICAgIGludCB0ZW1wQnVmZlNpemUgPSAvLyBUZW1wb3JhcnkgYnVmZmVyIHNpemUg
aXMgdGhlIHNtYWxsZXIgb2YgdGhlIG1heCB0ZXh0dXJlIHNpemUgb3IgdGhlIHVwZGF0ZVJlY3RT
YW5pdGl6ZWQKQEAgLTIwMSw4ICsyMDEsOCBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qo
dm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQogICAgICAgICAgICAgdGVt
cEJ1ZmYuZ2V0KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCB1cGRhdGVSZWN0SW50
ZXJzZWN0ZWQuaGVpZ2h0KCksIG1fdGlsZXMudG90YWxTaXplKCkud2lkdGgoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX3RpbGVUZXh0dXJlSWRzLT5hdCh0aWxlKSk7Ci0gICAgICAgIG1fY29udGV4
dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCAvKiBsZXZl
bCAqLywKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkcy0+YXQodGlsZSkpOworICAgICAgICBtX2NvbnRl
eHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAgLyogbGV2
ZWwgKi8sCiAgICAgICAgICAgICBkc3RSZWN0LngoKSwKICAgICAgICAgICAgIGRzdFJlY3QueSgp
LAogICAgICAgICAgICAgdXBkYXRlUmVjdEludGVyc2VjdGVkLndpZHRoKCksCkBAIC0yMTIsMTEg
KzIxMiwxMSBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0KQogCiB2b2lkIFRleHR1cmU6OmJpbmRUaWxlKGludCB0aWxl
KQogewotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUpKTsKLSAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dS
QVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJ
ZHMtPmF0KHRpbGUpKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01JTl9GSUxURVIs
IEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdF
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0
R0w6OkNMQU1QX1RPX0VER0UpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1RleHR1cmUuaAppbmRleCA1N2E2ODMyN2JkY2YyYjVmZDAwZGEzYjk2YWEz
ZTk0M2QyNTc0NDE5Li40MmMwMmMzODg5OTYwMzIwYzgxY2I4ODk5MDhlYzUzYmE5Y2RmMzVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmgKQEAg
LTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w7CiAKIGNsYXNzIEludFJlY3Q7CiAKQEAgLTQ1LDE1ICs0NSwxNSBAQCBjbGFzcyBUZXh0
dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZT4gewogcHVibGljOgogICAgIH5UZXh0dXJl
KCk7CiAgICAgZW51bSBGb3JtYXQgeyBSR0JBOCwgQkdSQTggfTsKLSAgICBzdGF0aWMgUmVmUHRy
PFRleHR1cmU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFRleHR1cmU+IGNyZWF0ZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCosIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICB2b2lk
IGJpbmRUaWxlKGludCB0aWxlKTsKICAgICB2b2lkIGxvYWQodm9pZCogcGl4ZWxzKTsKICAgICB2
b2lkIHVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgRm9y
bWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CiAgICAgY29uc3QgVGlsaW5n
RGF0YSYgdGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGVzOyB9CiBwcml2YXRlOgotICAgIFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHVuc2lnbmVk
Pj4gdGlsZVRleHR1cmVJZHMsIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWF4
VGV4dHVyZVNpemUpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8dW5z
aWduZWQ+PiB0aWxlVGV4dHVyZUlkcywgRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGlu
dCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4
dDsKICAgICBGb3JtYXQgbV9mb3JtYXQ7CiAgICAgVGlsaW5nRGF0YSBtX3RpbGVzOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxWZWN0b3I8dW5zaWduZWQ+PiBtX3RpbGVUZXh0dXJlSWRzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggMzJhYTg1OTIzMmIzN2IxODFmYTFj
YzA1YWIwYjBmMTg3MmUyNmMyZi4uY2M1OTBiODM5MmUxMmQ3YzUzNWNlNGUzYThhZDNkYTU2ZDA4
MGRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0yMDcsNyAr
MjA3LDcgQEAgc3RhdGljIGJvb2wgZW5zdXJlR3N0R0xDb250ZXh0KFdlYktpdEdMVmlkZW9TaW5r
KiBzaW5rKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAKLSAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRIYW5kbGUg
PSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHRIYW5k
bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA5ODAwNzhiZmRlYTQyY2JkMjNlNzViYTU0OWEx
Njc5NDViZTFhNTI0Li5iNWZhYjE3OWE0ZGZiY2Q2MGFlNTE3MTgzMWZiNTQxYmVkODk0N2YwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MzI5NCw3ICszMjk0LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWMKIH0KIAogI2lmIFVTRShH
U1RSRUFNRVJfR0wpCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0
Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRU
ZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBmZDA0
NzU0NzljNzQ4ZTQ0ODI0YWZiZGEwZWMyMWNlYjgzMDliOWQyLi5lMjM5Zjk2YzRjYzA5ODlhMzkx
NmExOWMxMjU5OTQ1NGY2ZWVlMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCkBAIC04Niw3ICs4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEJpdG1hcFRleHR1cmVHTDsKIGNsYXNzIEdMQ29udGV4dDsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w7CiBjbGFzcyBJbnRTaXplOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFZpZGVvVGV4dHVy
ZUNvcGllckdTdHJlYW1lcjsKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwg
R0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0Mz
RGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFw
aGljc0NvbnRleHQzRElPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9z
L0dyYXBoaWNzQ29udGV4dDNESU9TLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4
ZWUxMDMxODZjODA5ZDI2YTExMGQyZWY4YzA4MDY3MDMzNmMzYjUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgVVNFKE9QRU5HTF9FUykKLQotI2RlZmluZSBnbEJpbmRGcmFtZWJ1
ZmZlckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgotI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQg
Z2xCaW5kUmVuZGVyYnVmZmVyCi0jZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXMKLSNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQg
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMKLSNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGds
RGVsZXRlUmVuZGVyYnVmZmVycwotI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
IGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKLSNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUy
REVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECi0jZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQg
Z2xHZW5lcmF0ZU1pcG1hcAotI2RlZmluZSBnbEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1l
YnVmZmVycwotI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJz
Ci0jZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgotI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKLSNkZWZpbmUgZ2xJ
c0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgotI2RlZmluZSBnbElzUmVuZGVyYnVmZmVy
RVhUIGdsSXNSZW5kZXJidWZmZXIKLSNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUIGds
UmVuZGVyYnVmZmVyU3RvcmFnZQotI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFQUExFCi0KLSNkZWZpbmUg
Z2xEcmF3QXJyYXlzSW5zdGFuY2VkQVJCIGdsRHJhd0FycmF5c0luc3RhbmNlZEVYVAotI2RlZmlu
ZSBnbERyYXdFbGVtZW50c0luc3RhbmNlZEFSQiBnbERyYXdFbGVtZW50c0luc3RhbmNlZEVYVAot
I2RlZmluZSBnbFZlcnRleEF0dHJpYkRpdmlzb3JBUkIgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yRVhU
Ci0KLSNkZWZpbmUgZ2xCaW5kVmVydGV4QXJyYXkgZ2xCaW5kVmVydGV4QXJyYXlPRVMKLSNkZWZp
bmUgZ2xEZWxldGVWZXJ0ZXhBcnJheXMgZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMKLSNkZWZpbmUg
Z2xHZW5WZXJ0ZXhBcnJheXMgZ2xHZW5WZXJ0ZXhBcnJheXNPRVMKLSNkZWZpbmUgZ2xJc1ZlcnRl
eEFycmF5IGdsSXNWZXJ0ZXhBcnJheU9FUwotCi0jZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAotI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VY
VCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUwotI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VY
VCAgR0xfREVQVEhfQVRUQUNITUVOVAotI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCBH
TF9EUkFXX0ZSQU1FQlVGRkVSX0FQUExFCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
X0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQg
R0xfRlJBTUVCVUZGRVIKLSNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIEdMX01BWF9TQU1QTEVT
X0FQUExFCi0jZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfRVhUIEdMX1JFQURfRlJBTUVCVUZG
RVJfQVBQTEUKLSNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKLSNp
Zm5kZWYgR0xfUkdCOAotI2RlZmluZSBHTF9SR0I4IEdMX1JHQgotI2VuZGlmCi0jaWZuZGVmIEdM
X1JHQkE4Ci0jZGVmaW5lIEdMX1JHQkE4IEdMX1JHQkEKLSNlbmRpZgotI2RlZmluZSBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NURU5DSUxfQVRUQUNITUVOVAotI2RlZmluZSBHTF9VTlNJ
R05FRF9JTlRfOF84XzhfOF9SRVYgR0xfVU5TSUdORURfQllURQotCi0jZW5kaWYgLy8gVVNFKE9Q
RU5HTF9FUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lv
cy9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY4ZWUxMDMxODZjODA5ZDI2YTExMGQyZWY4YzA4MDY3MDMzNmMzYjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xFU0lPUy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoT1BFTkdMX0VT
KQorCisjZGVmaW5lIGdsQmluZEZyYW1lYnVmZmVyRVhUIGdsQmluZEZyYW1lYnVmZmVyCisjZGVm
aW5lIGdsQmluZFJlbmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xD
aGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmlu
ZSBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcgorI2Rl
ZmluZSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQKKyNk
ZWZpbmUgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBnbEdlbmVyYXRlTWlwbWFwCisjZGVmaW5lIGdsR2Vu
RnJhbWVidWZmZXJzRVhUIGdsR2VuRnJhbWVidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVuZGVyYnVm
ZmVyc0VYVCBnbEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdkVYVCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
CisjZGVmaW5lIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdgorI2RlZmluZSBnbElzRnJhbWVidWZmZXJFWFQgZ2xJc0ZyYW1lYnVmZmVy
CisjZGVmaW5lIGdsSXNSZW5kZXJidWZmZXJFWFQgZ2xJc1JlbmRlcmJ1ZmZlcgorI2RlZmluZSBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisjZGVmaW5lIGds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlQVBQTEUKKworI2RlZmluZSBnbERyYXdBcnJheXNJbnN0YW5jZWRBUkIgZ2xEcmF3
QXJyYXlzSW5zdGFuY2VkRVhUCisjZGVmaW5lIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQVJCIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkRVhUCisjZGVmaW5lIGdsVmVydGV4QXR0cmliRGl2aXNvckFS
QiBnbFZlcnRleEF0dHJpYkRpdmlzb3JFWFQKKworI2RlZmluZSBnbEJpbmRWZXJ0ZXhBcnJheSBn
bEJpbmRWZXJ0ZXhBcnJheU9FUworI2RlZmluZSBnbERlbGV0ZVZlcnRleEFycmF5cyBnbERlbGV0
ZVZlcnRleEFycmF5c09FUworI2RlZmluZSBnbEdlblZlcnRleEFycmF5cyBnbEdlblZlcnRleEFy
cmF5c09FUworI2RlZmluZSBnbElzVmVydGV4QXJyYXkgZ2xJc1ZlcnRleEFycmF5T0VTCisKKyNk
ZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVm
aW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTCisjZGVm
aW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUICBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5l
IEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhUIEdMX0RSQVdfRlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZp
bmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisj
ZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9NQVhf
U0FNUExFU19FWFQgR0xfTUFYX1NBTVBMRVNfQVBQTEUKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJV
RkZFUl9FWFQgR0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBMRQorI2RlZmluZSBHTF9SRU5ERVJCVUZG
RVJfRVhUIEdMX1JFTkRFUkJVRkZFUgorI2lmbmRlZiBHTF9SR0I4CisjZGVmaW5lIEdMX1JHQjgg
R0xfUkdCCisjZW5kaWYKKyNpZm5kZWYgR0xfUkdCQTgKKyNkZWZpbmUgR0xfUkdCQTggR0xfUkdC
QQorI2VuZGlmCisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9B
VFRBQ0hNRU5UCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViBHTF9VTlNJR05F
RF9CWVRFCisKKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFw
L05pY29zaWFHQzNEQU5HTEVMYXllci5jcHAKaW5kZXggYWEzZGVhMGE5Mjg1MmVmOWYzOGNkZTY0
NmI2MDgwMWFkMmZmNzhhZC4uZDg3ZDMyZmQ2MzczZThiYjc4YTU5MjU1YTY0NzYyNmYzYmMzNGVk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzREFOR0xFTGF5ZXIuY3BwCkBA
IC0xNzQsMTkgKzE3NCwxOSBAQCBib29sIEdDM0RBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6Om1h
a2VDb250ZXh0Q3VycmVudCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR0MzREFOR0xFTGF5ZXI6OkFOR0xF
Q29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZXh0
OwogfQogCi1HQzNEQU5HTEVMYXllcjo6R0MzREFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0M0Qm
IGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK0dD
M0RBTkdMRUxheWVyOjpHQzNEQU5HTEVMYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29u
dGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQog
ICAgIDogR0MzRExheWVyKGNvbnRleHQpCiB7CiAgICAgc3dpdGNoIChkZXN0aW5hdGlvbikgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246Ok9mZnNjcmVlbjoKICAg
ICAgICAgbV9hbmdsZUNvbnRleHQgPSBBTkdMRUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246OkRp
cmVjdGx5VG9Ib3N0V2luZG93OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRl
c3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTIwMyw3ICsyMDMsNyBAQCBib29sIEdD
M0RBTkdMRUxheWVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQogCiB9CiAKLVBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgR0MzREFOR0xFTGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMIEdDM0RBTkdMRUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAogewogICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7CiAgICAgcmV0dXJuIG1fYW5nbGVD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
M0RBTkdMRUxheWVyLmgKaW5kZXggZWM0N2VhZGYyZTkxNjUwYTJlZWJkZjY2N2I4NWRiYzMwMDcz
NGEzYi4uMjExZjFlNTdiZTg0N2VkNDBiNmNlYjdhOGZhZTNkNzhlNGQ1NWFkYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDM0RBTkdMRUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmgKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpZiBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiAjaW5jbHVkZSAiR0xD
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIk5pY29zaWFHQzNETGF5ZXIuaCIKICNp
bmNsdWRlIDxtZW1vcnk+CiAKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIH5BTkdMRUNvbnRleHQoKTsKIAogICAgICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotICAgICAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworI2lmIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKQorICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpAQCAtNzMsMTEgKzczLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRyIH07CiAg
ICAgfTsKIAotICAgIEdDM0RBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEJiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uKTsKKyAgICBHQzNEQU5HTEVM
YXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7CiAgICAgdmlydHVhbCB+R0MzREFOR0xFTGF5
ZXIoKTsKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgb3ZlcnJpZGU7Ci0gICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+IG1f
YW5nbGVDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAppbmRl
eCAxNmExNDUzYzJiOWNjMWQxNjEyZWQzYTFlNGM2M2I2YTFkZWM1MDRkLi40YzRjNDI2OTYxMjcx
YzdiN2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lh
R0MzRExheWVyLmNwcApAQCAtNDcsMjEgKzQ3LDIxIEBAIG5hbWVzcGFjZSBOaWNvc2lhIHsKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUdDM0RMYXllcjo6R0MzRExheWVyKEdyYXBoaWNz
Q29udGV4dDNEJiBjb250ZXh0KQorR0MzRExheWVyOjpHQzNETGF5ZXIoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fY29u
dGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCiB7CiB9CiAKLUdD
M0RMYXllcjo6R0MzRExheWVyKEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0LCBHcmFwaGljc0Nv
bnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCitHQzNETGF5ZXI6OkdDM0RMYXllcihH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAg
LCBtX2NvbnRlbnRMYXllcihOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpD
b250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQogewog
ICAgIHN3aXRjaCAoZGVzdGluYXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
ZXN0aW5hdGlvbjo6T2Zmc2NyZWVuOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CiAgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0
OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlG
b3JDb21wb3NpdGluZygpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc4
LDcgKzc4LDcgQEAgYm9vbCBHQzNETGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCgpCiAgICAgcmV0
dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAotUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCBHQzNETGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIEdDM0RMYXllcjo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9nbENvbnRleHQpOwogICAgIHJldHVybiBtX2dsQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmgKaW5kZXggZTg1
NzIxNzdkYWZjYWFjYWIzZWEyMzA5ZDQ4NGJjMzkwNDI3OGFlMy4uMjNlNGQ4YzdiZmE2ODU3OWFh
ZjYzYjYwYTZlNzYzZDY5NmYwMTU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5
ZXIuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJF
X01BUFBFUikKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGwuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAKQEAgLTQzLDE5ICs0MywxOSBA
QCBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQzNETGF5ZXIgOiBwdWJsaWMgQ29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEJik7Ci0gICAgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEJiwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uKTsKKyAgICBleHBsaWNpdCBHQzNE
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBHQzNETGF5ZXIo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6RGVzdGluYXRpb24pOwogCiAgICAgdmlydHVhbCB+R0MzRExheWVyKCk7CiAK
ICAgICBDb250ZW50TGF5ZXImIGNvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dExheWVyOyB9CiAgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHZp
cnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkg
Y29uc3Q7CiAKICAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKIAogcHJp
dmF0ZToKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCYgbV9jb250ZXh0OworICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICAgICBSZWY8Q29udGVu
dExheWVyPiBtX2NvbnRlbnRMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYzBjNmU0ODdkMjI2NDcwN2Q2YWU3YjkyZjA3ZWEw
ZTljMWNiM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5H
TCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkpCi0KLSNpbmNsdWRlICJF
eHRlbnNpb25zM0RPcGVuR0wuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0K
LSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxPcGVuR0xFUy9FUzIvZ2xleHQu
aD4KLSNlbGlmIFVTRShPUEVOR0wpCi0jaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1Mu
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTDo6
RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBib29sIHVzZUlu
ZGV4ZWRHZXRTdHJpbmcpCi0gICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCwg
dXNlSW5kZXhlZEdldFN0cmluZykKLXsKLX0KLQotRXh0ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5z
aW9uczNET3BlbkdMKCkgPSBkZWZhdWx0OwotCi0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpi
bGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBz
cmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5z
aWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKLXsKLSNpZiBQTEFURk9STShD
T0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICBVTlVTRURfUEFSQU0oc3JjWDApOwotICAgIFVO
VVNFRF9QQVJBTShzcmNZMCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKLSAgICBVTlVTRURf
UEFSQU0oc3JjWTEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGRzdFkwKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WDEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RZ
MSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc2spOwotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwot
ICAgIDo6Z2xSZXNvbHZlTXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFQUExFKCk7Ci0jZWxzZQotICAg
IDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgw
LCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQg
RXh0ZW5zaW9uczNET3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRl
cm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCi17
Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCh0YXJnZXQsIHNhbXBs
ZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotUGxhdGZvcm0zRE9iamVj
dCBFeHRlbnNpb25zM0RPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKLXsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBhcnJheSA9IDA7Ci0jaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNF
KE9QRU5HTF9FUykpCi0gICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKLSAg
ICAgICAgZ2xHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKLSNlbGlmIGRlZmluZWQoR0xfQVBQ
TEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAot
ICAgIGdsR2VuVmVydGV4QXJyYXlzQVBQTEUoMSwgJmFycmF5KTsKLSNlbmRpZgotICAgIHJldHVy
biBhcnJheTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BF
TkdMX0VTKSkKLSAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQotICAgICAg
ICBnbERlbGV0ZVZlcnRleEFycmF5cygxLCAmYXJyYXkpOwotI2VsaWYgZGVmaW5lZChHTF9BUFBM
RV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0g
ICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXNBUFBMRSgxLCAmYXJyYXkpOwotI2VuZGlmCi19Ci0KLUdD
M0Rib29sZWFuIEV4dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9F
UykpCi0gICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKLSAgICAgICAgcmV0
dXJuIGdsSXNWZXJ0ZXhBcnJheShhcnJheSk7Ci0jZWxpZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRl
eF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICByZXR1
cm4gZ2xJc1ZlcnRleEFycmF5QVBQTEUoYXJyYXkpOwotI2VuZGlmCi0gICAgcmV0dXJuIEdMX0ZB
TFNFOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKFBs
YXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLSAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBv
cnRlZCgpKQotICAgICAgICBnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7Ci0jZWxpZiBkZWZpbmVk
KEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9v
YmplY3QKLSAgICBnbEJpbmRWZXJ0ZXhBcnJheUFQUExFKGFycmF5KTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGFycmF5KTsKLSNlbmRpZgotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6
aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVidWdfbWFya2VyIGluIHN1cHBv
cnRzKCkuCi0gICAgcmV0dXJuOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6cHVzaEdy
b3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0
aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgot
ICAgIHJldHVybjsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnBvcEdyb3VwTWFya2Vy
RVhUKHZvaWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBh
ZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgotICAgIHJldHVybjsKLX0KLQot
Ym9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1
c2luZyBvdGhlcgotICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1l
YnVmZmVyX2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZS9HTF9BUFBMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZS4KLSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfYmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFp
bnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xF
X2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUFBMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0j
ZW5kaWYKLQotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikgewot
ICAgICAgICByZXR1cm4gKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2lu
c3RhbmNlZF9hcnJheXMiKSB8fCBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VY
VF9pbnN0YW5jZWRfYXJyYXlzIikpCi0gICAgICAgICAgICAmJiAobV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9BUkJfZHJhd19pbnN0YW5jZWQiKSB8fCBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMoIkdMX0VYVF9kcmF3X2luc3RhbmNlZCIpKTsKLSAgICB9Ci0KLSAgICBp
ZiAobmFtZSA9PSAiR0xfRVhUX3NSR0IiKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
ICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9zUkdCIik7
Ci0jZWxzZQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJH
TF9FWFRfdGV4dHVyZV9zUkdCIikgJiYgKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfRVhUX2ZyYW1lYnVmZmVyX3NSR0IiKSB8fCBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFp
bnMoIkdMX0FSQl9mcmFtZWJ1ZmZlcl9zUkdCIikpOwotI2VuZGlmCi0KLSAgICBpZiAobmFtZSA9
PSAiR0xfRVhUX2ZyYWdfZGVwdGgiKQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0jZWxzZQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9FWFRfZnJhZ19kZXB0aCIpOwotI2VuZGlmCi0KLSAgICAvLyBEZXNrdG9wIEdMIGFs
d2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3JnYjhfcmdiYTgiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90
ZXh0dXJlX2Zsb2F0IG9yIEdMX09FU190ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdl
IHJlcG9ydAotICAgIC8vIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQsIEdMX09FU190ZXh0dXJl
X2Zsb2F0X2xpbmVhciBhbmQgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIgYXMgYXZh
aWxhYmxlLgotICAgIGlmIChuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9
PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVf
ZmxvYXRfbGluZWFyIiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVh
ciIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FS
Ql90ZXh0dXJlX2Zsb2F0IikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9P
RVNfdGV4dHVyZV9mbG9hdCIpOwotCi0gICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QK
LSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSB7Ci0jaWYgKFBM
QVRGT1JNKEdUSykpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFp
bnMoIkdMX0FSQl92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0jZWxpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9P
RVNfdmVydGV4X2FycmF5X29iamVjdCIpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCIpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0
YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRGVza3Rv
cCBHTCBhbHdheXMgc3VwcG9ydHMgVU5TSUdORURfSU5UIGluZGljZXMKLSAgICBpZiAobmFtZSA9
PSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IAotICAgIGlmIChuYW1lID09ICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3NoYWRlcl90ZXh0
dXJlX2xvZCIpOwotICAgIAotICAgIGlmIChuYW1lID09ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKLQotICAgIGlmIChuYW1l
ID09ICJHTF9FWFRfZHJhd19idWZmZXJzIikgewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Ci0jZWxp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2RyYXdfYnVmZmVycyIpOwotI2Vsc2UKLSAg
ICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9ybXMuCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpIHx8IFBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQotICAgIGlmIChuYW1lID09
ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQot
ICAgIGlmIChuYW1lID09ICJHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZSIKLSAg
ICAgICAgfHwgbmFtZSA9PSAiR0xfQU5HTEVfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpIHsKLSAg
ICAgICAgLy8gSW1wbGljaXRseSBlbmFibGVkIHdpdGggRVMgMy4wIGNvbnRleHRzLgotICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LT5tX2lzRm9yV2ViR0wyOwotICAgIH0KLSNlbmRpZgotCi0gICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKLX0KLQotdm9pZCBF
eHRlbnNpb25zM0RPcGVuR0w6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNE
ZW51bSogYnVmcykKLXsKLSAgICAvLyAgRklYTUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhl
ciBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIDo6Z2xEcmF3QnVmZmVyc0FSQihu
LCBidWZzKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICA6OmdsRHJhd0J1ZmZlcnMobiwgYnVm
cyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShuKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmcyk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KQotewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0j
aWYgUExBVEZPUk0oR1RLKQotICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0
LCBjb3VudCwgcHJpbWNvdW50KTsKLSNlbGlmIFBMQVRGT1JNKENPQ09BKQotICAgIDo6Z2xEcmF3
QXJyYXlzSW5zdGFuY2VkQVJCKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIFVOVVNFRF9QQVJBTShmaXJzdCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWNvdW50KTsKLSNlbmRp
ZgotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19j
YXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKLSNlbGlmIFBMQVRGT1JNKENPQ09B
KQotICAgIDo6Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBUkIobW9kZSwgY291bnQsIHR5cGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBw
cmltY291bnQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByaW1jb3VudCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBF
eHRlbnNpb25zM0RPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdD
M0R1aW50IGRpdmlzb3IpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSNpZiBQTEFURk9STShHVEspCi0gICAgOjpnbFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRp
dmlzb3IpOwotI2VsaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgOjpnbFZlcnRleEF0dHJpYkRpdmlz
b3JBUkIoaW5kZXgsIGRpdmlzb3IpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwot
ICAgIFVOVVNFRF9QQVJBTShkaXZpc29yKTsKLSNlbmRpZgotfQotCi1TdHJpbmcgRXh0ZW5zaW9u
czNET3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fdXNlSW5kZXhlZEdl
dFN0cmluZyk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
Pig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Ci19Ci0KLSNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkK
LWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjppc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkK
LXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzdXBwb3J0c1ZlcnRleEFycmF5T2JqZWN0ID0gc3Vw
cG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0gICAgcmV0dXJuIHN1cHBvcnRz
VmVydGV4QXJyYXlPYmplY3Q7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIChVU0UoT1BFTkdMKSB8
fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyNTA4YTUzMWRhYTIwZDhhZDlk
OTkxZmJhOTQ4NWJjOTk0M2VjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCIKLQotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTCA6
IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0
YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgotICAgIEV4dGVu
c2lvbnMzRE9wZW5HTChHcmFwaGljc0NvbnRleHQzRCosIGJvb2wgdXNlSW5kZXhlZEdldFN0cmlu
Zyk7Ci0gICAgdmlydHVhbCB+RXh0ZW5zaW9uczNET3BlbkdMKCk7Ci0KLSAgICAvLyBFeHRlbnNp
b25zM0QgbWV0aG9kcy4KLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25n
IHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBs
b25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcg
ZmlsdGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkgb3ZlcnJpZGU7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5
T0VTKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3Qg
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0q
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92
ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVp
IHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1
aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAg
IGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVO
R0xfRVMpKQotICAgIGJvb2wgaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpOwotI2VuZGlm
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTNlZjU4Zjc0NTRi
NWZmZTI1ZjkwMzY2YzFjNDRlZjFkMjk3NWI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xf
RVMpKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgotCi0jaW5jbHVkZSAi
QU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0j
aWYgUExBVEZPUk0oQ09DT0EpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPE9wZW5H
TEVTL0VTMi9nbGV4dC5oPgotI2luY2x1ZGUgPE9wZW5HTEVTL0VTMy9nbC5oPgotI2Vsc2UKLSNk
ZWZpbmUgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVE
Ci0jaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jaW5jbHVkZSA8T3BlbkdML2dsMy5oPgotI3VuZGVm
IEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAotI2Vu
ZGlmCi0KLSNlbHNlCi0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlTaGltcy5o
IgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCi0jaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZWxpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2Vu
ZGlmCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZykKLSAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zKGZhbHNlKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lz
TlZJRElBKGZhbHNlKQotICAgICwgbV9pc0FNRChmYWxzZSkKLSAgICAsIG1faXNJbnRlbChmYWxz
ZSkKLSAgICAsIG1faXNJbWFnaW5hdGlvbihmYWxzZSkKLSAgICAsIG1fcmVxdWlyZXNCdWlsdElu
RnVuY3Rpb25FbXVsYXRpb24oZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGlt
dW1UZXh0dXJlU2l6ZShmYWxzZSkKLSAgICAsIG1fdXNlSW5kZXhlZEdldFN0cmluZyh1c2VJbmRl
eGVkR2V0U3RyaW5nKQotewotICAgIG1fdmVuZG9yID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSkpOwotICAgIG1fcmVuZGVyZXIg
PSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9S
RU5ERVJFUikpKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHZlbmRvckNvbXBvbmVudHMgPSBtX3Zl
bmRvci5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcgJyk7Ci0gICAgaWYgKHZlbmRv
ckNvbXBvbmVudHMuY29udGFpbnMoIm52aWRpYSIpKQotICAgICAgICBtX2lzTlZJRElBID0gdHJ1
ZTsKLSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiYXRpIikgfHwgdmVuZG9yQ29t
cG9uZW50cy5jb250YWlucygiYW1kIikpCi0gICAgICAgIG1faXNBTUQgPSB0cnVlOwotICAgIGlm
ICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbnRlbCIpKQotICAgICAgICBtX2lzSW50ZWwg
PSB0cnVlOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbWFnaW5hdGlvbiIp
KQotICAgICAgICBtX2lzSW1hZ2luYXRpb24gPSB0cnVlOwotCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIGlmIChtX2lzQU1EIHx8IG1faXNJbnRlbCkKLSAgICAgICAgbV9yZXF1aXJlc0J1aWx0SW5G
dW5jdGlvbkVtdWxhdGlvbiA9IHRydWU7Ci0KLSAgICAvLyBJbnRlbCBIRCAzMDAwIGRldmljZXMg
aGF2ZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHRleHR1cmVzLiA8cmRhcjovL3Byb2JsZW0vMTY2NDkx
NDA+Ci0gICAgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUgPSBtX3JlbmRl
cmVyLnN0YXJ0c1dpdGgoIkludGVsIEhEIEdyYXBoaWNzIDMwMDAiKTsKLSNlbmRpZgotfQotCi1F
eHRlbnNpb25zM0RPcGVuR0xDb21tb246On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKSA9IGRl
ZmF1bHQ7Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyhjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cykKLSAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQotICAgIC8vIFdl
IGV4cGxpY2l0bHkgZG8gbm90IHN1cHBvcnQgdGhpcyBleHRlbnNpb24gdW50aWwKLSAgICAvLyB3
ZSBmaXggdGhlIGZvbGxvd2luZyBidWc6Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0OTczNAotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
c3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZSA9
PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAgICAgICAvLyBFbmFibGUgc3Vw
cG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJL
aXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1
aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsK
LSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsK
LSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7
Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChuYW1lID09ICJHTF9FWFRfZHJhd19idWZmZXJzIikgewot
ICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFk
eSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2Nv
bXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21w
aWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5FWFRfZHJh
d19idWZmZXJzKSB7Ci0gICAgICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJz
ID0gMTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpN
QVhfRFJBV19CVUZGRVJTX0VYVCwgJkFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKLSAg
ICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7
Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJl
YWR5KQotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1f
Y29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNv
bXBpbGVyLmdldFJlc291cmNlcygpOwotICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9z
aGFkZXJfdGV4dHVyZV9sb2QpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QgPSAxOwotICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFO
R0xFUmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhU
X2ZyYWdfZGVwdGgiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBu
b3QgZW5hYmxlZCBhbHJlYWR5KQotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIg
PSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdM
RVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAgICAgICBpZiAoIUFOR0xF
UmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKSB7Ci0gICAgICAgICAgICBBTkdMRVJlc291cmNlcy5F
WFRfZnJhZ19kZXB0aCA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5H
TEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFt
ZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAgICAgICBBTkdMRVdlYktp
dEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIHJldHVy
biBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7Ci0gICAg
fQotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLX0KLQotU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIGludCBHTHNoYWRlclR5cGU7Ci0gICAg
QU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7Ci0KLSAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29t
cGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0KLSAgICBtX2NvbnRleHQtPmdldFNoYWRl
cml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBl
KTsKLQotICAgIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9T
SEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxz
ZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIp
Ci0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8
UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJT
b3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0gICAgdWludDY0X3Qg
ZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyB8IFNI
X1VORk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTIHwgU0hfRU5G
T1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUyB8IFNIX0xJTUlUX0VYUFJFU1NJT05fQ09NUExFWElU
WSB8IFNIX0xJTUlUX0NBTExfU1RBQ0tfREVQVEggfCBTSF9JTklUSUFMSVpFX1VOSU5JVElBTEla
RURfTE9DQUxTOwotCi0gICAgaWYgKG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24p
Ci0gICAgICAgIGV4dHJhQ29tcGlsZU9wdGlvbnMgfD0gU0hfRU1VTEFURV9BQlNfSU5UX0ZVTkNU
SU9OOwotCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxBTkdMRVNoYWRlclN5bWJvbFR5cGUsIHNoOjpT
aGFkZXJWYXJpYWJsZT4+IHN5bWJvbHM7Ci0gICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIuY29t
cGlsZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwg
dHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZywgc3ltYm9scywgZXh0cmFDb21w
aWxlT3B0aW9ucyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAgIGVudHJ5
LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgZm9yIChjb25zdCBzdGQ6OnBhaXI8QU5HTEVTaGFk
ZXJTeW1ib2xUeXBlLCBzaDo6U2hhZGVyVmFyaWFibGU+JiBwYWlyIDogc3ltYm9scykgewotICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSA9IHBhaXIuc2Vjb25kLm5hbWU7Ci0gICAgICAg
IGVudHJ5LnN5bWJvbE1hcChwYWlyLmZpcnN0KS5zZXQoU3RyaW5nKG5hbWUuY19zdHIoKSwgbmFt
ZS5sZW5ndGgoKSksIHBhaXIuc2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0g
ICAgICAgIHJldHVybiAiIjsKLQotICAgIHJldHVybiB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwot
fQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4
dGVuc2lvbnMoKQotewotI2lmIChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTCkpIHx8IChQ
TEFURk9STShHVEspICYmICFVU0UoT1BFTkdMX0VTKSkKLSAgICBpZiAobV91c2VJbmRleGVkR2V0
U3RyaW5nKSB7Ci0gICAgICAgIEdMaW50IG51bUV4dGVuc2lvbnMgPSAwOwotICAgICAgICA6Omds
R2V0SW50ZWdlcnYoR0xfTlVNX0VYVEVOU0lPTlMsICZudW1FeHRlbnNpb25zKTsKLSAgICAgICAg
Zm9yIChHTGludCBpID0gMDsgaSA8IG51bUV4dGVuc2lvbnM7ICsraSkKLSAgICAgICAgICAgIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoZ2xHZXRTdHJpbmdpKEdMX0VYVEVOU0lPTlMsIGkpKTsK
LQotICAgICAgICBpZiAoIW1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX3Rl
eHR1cmVfc3RvcmFnZSJfcykpIHsKLSAgICAgICAgICAgIEdMaW50IG1ham9yVmVyc2lvbjsKLSAg
ICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUFKT1JfVkVSU0lPTiwgJm1ham9yVmVyc2lvbik7
Ci0gICAgICAgICAgICBHTGludCBtaW5vclZlcnNpb247Ci0gICAgICAgICAgICBnbEdldEludGVn
ZXJ2KEdMX01JTk9SX1ZFUlNJT04sICZtaW5vclZlcnNpb24pOwotICAgICAgICAgICAgaWYgKG1h
am9yVmVyc2lvbiA+IDQgfHwgKG1ham9yVmVyc2lvbiA9PSA0ICYmIG1pbm9yVmVyc2lvbiA+PSAy
KSkKLSAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKCJHTF9BUkJfdGV4
dHVyZV9zdG9yYWdlIl9zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlmCi0gICAgewot
ICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBleHRlbnNpb24gOiBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCcgJykpCi0g
ICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGV4dGVuc2lvbik7Ci0gICAgfQot
ICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLX0KLQotdm9pZCBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb246OnJlYWRuUGl4ZWxzRVhUKGludCwgaW50LCBHQzNEc2l6
ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIHZvaWQgKikKLXsK
LSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldG5Vbmlmb3JtZnZFWFQoR0Mz
RHVpbnQsIGludCwgR0MzRHNpemVpLCBmbG9hdCAqKQotewotICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbjo6Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWks
IGludCAqKQotewotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxNDcyMTc5MDc3MjdjYWVlYTI3ZWY2OGEwNjljYzA1MzEwODIwZDM5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAorKysg
L2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24oKTsKLQotICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgotICAgIGJvb2wgc3VwcG9ydHMo
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJy
aWRlOwotICAgIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgb3ZlcnJpZGU7Ci0KLSAg
ICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJpZGUgPSAwOwot
ICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGUg
PSAwOwotICAgIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGUgPSAwOwotICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmpl
Y3QpIG92ZXJyaWRlID0gMDsKLQotICAgIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpLCBj
b25zdCBHQzNEZW51bSopIG92ZXJyaWRlID0gMDsKLQotICAgIFN0cmluZyBnZXRUcmFuc2xhdGVk
U2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBF
WFQgUm9idXN0bmVzcyAtIHVzZXMgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi0gICAgdm9p
ZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6
ZSwgdm9pZCAqZGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1
aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJh
bXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFt
LCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIGlzTlZJRElBKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc05WSURJQTsgfQot
ICAgIGJvb2wgaXNBTUQoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzQU1EOyB9Ci0gICAgYm9vbCBp
c0ludGVsKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0ludGVsOyB9Ci0gICAgYm9vbCBpc0ltYWdp
bmF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0ltYWdpbmF0aW9uOyB9Ci0gICAgU3RyaW5n
IHZlbmRvcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVuZG9yOyB9Ci0KLSAgICBib29sIHJlcXVp
cmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJl
c0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbjsgfQotICAgIGJvb2wgcmVxdWlyZXNSZXN0cmljdGVk
TWF4aW11bVRleHR1cmVTaXplKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc1Jlc3RyaWN0
ZWRNYXhpbXVtVGV4dHVyZVNpemU7IH0KLQotcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBF
eHRlbnNpb25zM0RPcGVuR0xFUzsKLSAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhp
Y3NDb250ZXh0M0QqLCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcpOwotCi0gICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBnZXRFeHRlbnNpb25zKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVB
dmFpbGFibGVFeHRlbnNpb25zKCk7Ci0gICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0
ZW5zaW9uczsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwotCi0g
ICAgLy8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0M0QKLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogbV9jb250ZXh0OwotCi0gICAgYm9vbCBtX2lzTlZJRElBOwotICAgIGJvb2wg
bV9pc0FNRDsKLSAgICBib29sIG1faXNJbnRlbDsKLSAgICBib29sIG1faXNJbWFnaW5hdGlvbjsK
LSAgICBib29sIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247Ci0gICAgYm9vbCBt
X3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZTsKLQotICAgIGJvb2wgbV91c2VJ
bmRleGVkR2V0U3RyaW5nIHsgZmFsc2UgfTsKLQotICAgIFN0cmluZyBtX3ZlbmRvcjsKLSAgICBT
dHJpbmcgbV9yZW5kZXJlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMRVMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDk0
MWY2NDFlMTUxZjM4YmM2ZWE1NjljYjhkYWYyMThjMTZkOTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
MTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxh
Ym9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgot
Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaWYgVVNFKExJQkVQT1hZ
KQotI2luY2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTEVTOjpFeHRl
bnNpb25zM0RPcGVuR0xFUyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgYm9vbCB1c2VJbmRl
eGVkR2V0U3RyaW5nKQotICAgIDogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKGNvbnRleHQsIHVz
ZUluZGV4ZWRHZXRTdHJpbmcpCi0gICAgLCBtX2NvbnRleHRSZXNldFN0YXR1cyhHTF9OT19FUlJP
UikKLSAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKLSAgICAsIG1f
c3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCi0gICAgLCBtX3N1
cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJheXMoZmFsc2UpCi0gICAgLCBtX2dsRnJhbWVidWZmZXJU
ZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQotICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUlNRygwKQotICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQotICAgICwg
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQotICAgICwgbV9nbEdlblZlcnRleEFycmF5c09F
UygwKQotICAgICwgbV9nbElzVmVydGV4QXJyYXlPRVMoMCkKLSAgICAsIG1fZ2xHZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzRVhUKDApCi0gICAgLCBtX2dsUmVhZG5QaXhlbHNFWFQoMCkKLSAgICAsIG1f
Z2xHZXRuVW5pZm9ybWZ2RVhUKDApCi0gICAgLCBtX2dsR2V0blVuaWZvcm1pdkVYVCgwKQotICAg
ICwgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShudWxscHRyKQotICAgICwgbV9nbERyYXdB
cnJheXNJbnN0YW5jZWRBTkdMRShudWxscHRyKQotICAgICwgbV9nbERyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKG51bGxwdHIpCi17Ci19Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTEVTOjp+RXh0ZW5z
aW9uczNET3BlbkdMRVMoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6
OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlt
bWVkaWF0ZWx5IGlmIHRoZSBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVy
cy4KLSAgICBib29sIGVuYWJsZWQgPSBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmlzRW5hYmxl
ZChuYW1lKTsKLSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIEZvciBHTF9FWFRfcm9idXN0bmVzcywgY2hlY2sgdGhhdCB0aGUgY29udGV4dCBzdXBwb3J0
cyByb2J1c3QgYWNjZXNzLgotICAgIGlmIChuYW1lID09ICJHTF9FWFRfcm9idXN0bmVzcyIpIHsK
LSAgICAgICAgR0xpbnQgcm9idXN0QWNjZXNzID0gR0xfRkFMU0U7Ci0gICAgICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpDT05URVhUX1JPQlVTVF9BQ0NFU1MsICZyb2J1
c3RBY2Nlc3MpOwotICAgICAgICByZXR1cm4gcm9idXN0QWNjZXNzID09IEdMX1RSVUU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmZy
YW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVk
IGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKLXsKLSAgICBp
ZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCi0gICAgICAgIG1fZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4
dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7Ci0gICAgZWxzZQotICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9p
ZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1H
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQotewotICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQot
ICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2Ft
cGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19Ci0K
LXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIC8qIHNyY1gw
ICovLCBsb25nIC8qIHNyY1kwICovLCBsb25nIC8qIHNyY1gxICovLCBsb25nIC8qIHNyY1kxICov
LCBsb25nIC8qIGRzdFgwICovLCBsb25nIC8qIGRzdFkwICovLCBsb25nIC8qIGRzdFgxICovLCBs
b25nIC8qIGRzdFkxICovLCB1bnNpZ25lZCBsb25nIC8qIG1hc2sgKi8sIHVuc2lnbmVkIGxvbmcg
LyogZmlsdGVyICovKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRXh0ZW5z
aW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsKLSAg
ICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKLSAgICAgICAgcmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aW5zZXJ0RXZlbnRNYXJrZXJFWFQo
Y29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpwb3BH
cm91cE1hcmtlckVYVCh2b2lkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRm
b3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkK
LXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsR2Vu
VmVydGV4QXJyYXlzT0VTKSB7Ci0gICAgICAgIEdMdWludCBhcnJheSA9IDA7Ci0gICAgICAgIG1f
Z2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKLSAgICAgICAgcmV0dXJuIGFycmF5Owot
ICAgIH0KLQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICgh
YXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCi0gICAgICAgIG1fZ2xE
ZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi1HQzNE
Ym9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJ
c1ZlcnRleEFycmF5T0VTKQotICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJy
YXkpOwotCi0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVT
OjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5
T0VTKQotICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6
ZWkgLyogbiAqLywgY29uc3QgR0MzRGVudW0qIC8qIGJ1ZnMgKi8pCi17Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudCB0aGUgc3VwcG9ydC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1pbnQg
RXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotewotICAg
IC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGNhbGwgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiwg
YnV0IGluc3RlYWQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVC4KLSAgICAvLyBUaGUgcmV0dXJu
IGNvZGVzIGZyb20gdGhlIHR3byBleHRlbnNpb25zIGFyZSBpZGVudGljYWwgYW5kIHRoZWlyIHB1
cnBvc2UgaXMgdGhlIHNhbWUsIHNvIGl0Ci0gICAgLy8gbWF5IGJlIGJlc3QgdG8gcmVuYW1lIGdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSB0byBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzKCkuCi0g
ICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVzICE9IEdMX05PX0VSUk9SKQotICAgICAgICByZXR1
cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7Ci0gICAgaWYgKG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
ICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7
Ci0gICAgICAgIGlmIChyZWFzb25Gb3JSZXNldCAhPSBHTF9OT19FUlJPUikKLSAgICAgICAgICAg
IG1fY29udGV4dFJlc2V0U3RhdHVzID0gcmVhc29uRm9yUmVzZXQ7Ci0gICAgICAgIHJldHVybiBy
ZWFzb25Gb3JSZXNldDsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRXh0
ZW5zaW9uczNET3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKQotewotICAgIGlmIChtX2dsUmVhZG5QaXhl
bHNFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVy
IGJ1ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBj
YWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgICAgIDo6Z2xG
bHVzaCgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiBub24tQmxhY2tCZXJyeSBwbGF0Zm9ybXMg
dXNlIHRoaXMsIHRoZXkgd2lsbCBuZWVkIHRvIGltcGxlbWVudAotICAgICAgICAvLyB0aGVpciBh
bnRpLWFsaWFzaW5nIGNvZGUgaGVyZS4KLSAgICAgICAgbV9nbFJlYWRuUGl4ZWxzRVhUKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgZGF0YSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Z2V0blVuaWZv
cm1mdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXpl
LCBmbG9hdCAqcGFyYW1zKQotewotICAgIGlmIChtX2dsR2V0blVuaWZvcm1mdkVYVCkgewotICAg
ICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2dsR2V0blVu
aWZvcm1mdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpnZXRuVW5p
Zm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNp
emUsIGludCAqcGFyYW1zKQotewotICAgIGlmIChtX2dsR2V0blVuaWZvcm1pdkVYVCkgewotICAg
ICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2dsR2V0blVu
aWZvcm1pdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkcmF3QXJy
YXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBpZiAoIW1fZ2xEcmF3QXJyYXlzSW5zdGFu
Y2VkQU5HTEUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUo
bW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9w
ZW5HTEVTOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNv
dW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50
KQotewotICAgIGlmICghbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkp
LCBwcmltY291bnQpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjp2ZXJ0ZXhBdHRy
aWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQotewotICAgIGlmICgh
bV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9nbFZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0KLWJvb2wgRXh0ZW5zaW9u
czNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIGlm
ICghbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0ICYmIG5hbWUgPT0gIkdMX09FU192ZXJ0
ZXhfYXJyYXlfb2JqZWN0IikgewotICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7Ci0gICAgICAgICAgICBtX2dsR2VuVmVy
dGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BS
T0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKLSAgICAgICAg
ICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVM
RVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVydGV4
QXJyYXlzT0VTIikpOwotICAgICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWludGVy
cHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJn
bElzVmVydGV4QXJyYXlPRVMiKSk7Ci0gICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4QXJy
YXlPYmplY3QgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFtX3N1cHBvcnRzSU1HTXVsdGlz
YW1wbGVkUmVuZGVyVG9UZXh0dXJlICYmIG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVu
ZGVyX3RvX3RleHR1cmUiKSB7Ci0gICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRN
dWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUy
RE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0
dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKLSAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RP
UkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOwotICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRp
c2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fZ2xH
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUICYmIG5hbWUgPT0gIkdMX0VYVF9yb2J1c3RuZXNzIikg
ewotICAgICAgICAgICAgbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQgPSByZWludGVycHJl
dF9jYXN0PFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0M+KGVnbEdldFByb2NBZGRy
ZXNzKCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQiKSk7Ci0gICAgICAgICAgICBtX2dsUmVh
ZG5QaXhlbHNFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVBRE5QSVhFTFNFWFRQUk9DPihl
Z2xHZXRQcm9jQWRkcmVzcygiZ2xSZWFkblBpeGVsc0VYVCIpKTsKLSAgICAgICAgICAgIG1fZ2xH
ZXRuVW5pZm9ybWZ2RVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVE5VTklGT1JNRlZFWFRQ
Uk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZXRuVW5pZm9ybWZ2RVhUIikpOwotICAgICAgICAg
ICAgbV9nbEdldG5Vbmlmb3JtaXZFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUTlVOSUZP
Uk1JVkVYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdldG5Vbmlmb3JtaXZFWFQiKSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoIW1fc3VwcG9ydHNBTkdMRWluc3RhbmNlZEFycmF5cyAmJiBuYW1l
ID09ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikgewotICAgICAgICAgICAgbV9nbFZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xWRVJURVhBVFRSSUJE
SVZJU09SQU5HTEVQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEUiKSk7Ci0gICAgICAgICAgICBtX2dsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFID0gcmVp
bnRlcnByZXRfY2FzdDxQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MgPihlZ2xHZXRQ
cm9jQWRkcmVzcygiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiKSk7Ci0gICAgICAgICAgICBt
X2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUgPSByZWludGVycHJldF9jYXN0PFBGTkdMRFJB
V0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DID4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkQU5HTEUiKSk7Ci0gICAgICAgICAgICBtX3N1cHBvcnRzQU5HTEVpbnN0
YW5jZWRBcnJheXMgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9k
cmF3X2J1ZmZlcnMiKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoZSBzdXBw
b3J0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIEV4dGVuc2lv
bnMzRE9wZW5HTEVTOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNT
X0NPTlRFWFRfM0QpCi0KLSNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVT
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3MmZjNmRlMzdiOTgx
NjlmY2IzZDVkYmZjZWRkYTFmNjE2NDQ2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMRVMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uaCIKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0KLSNpZiBVU0UoTElCRVBP
WFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbHNlCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBHTF9FWFRfcm9i
dXN0bmVzcwotLyogcmV1c2UgR0xfTk9fRVJST1IgKi8KLSNkZWZpbmUgR0xfR1VJTFRZX0NPTlRF
WFRfUkVTRVRfRVhUIDB4ODI1MwotI2RlZmluZSBHTF9JTk5PQ0VOVF9DT05URVhUX1JFU0VUX0VY
VCAweDgyNTQKLSNkZWZpbmUgR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VYVCAweDgyNTUKLSNk
ZWZpbmUgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVCAweDkwRjMKLSNkZWZpbmUgR0xfUkVT
RVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVCAweDgyNTYKLSNkZWZpbmUgR0xfTE9TRV9DT05U
RVhUX09OX1JFU0VUX0VYVCAweDgyNTIKLSNkZWZpbmUgR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9O
X0VYVCAweDgyNjEKLSNlbmRpZgotCi0jaWZuZGVmIEdMX0VYVF9yb2J1c3RuZXNzCi0jZGVmaW5l
IEdMX0VYVF9yb2J1c3RuZXNzIDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElD
QUxMIEdDM0RlbnVtIEdMX0FQSUVOVFJZIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCh2b2lk
KTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRuUGl4ZWxzRVhUKEdMaW50IHgs
IEdMaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSk7Ci1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRuVW5pZm9ybWZ2RVhUKEdMdWludCBwcm9ncmFt
LCBHTGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpOwotR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0blVuaWZvcm1pdkVYVChHTHVpbnQgcHJvZ3Jh
bSwgR0xpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLSNl
bmRpZgotdHlwZWRlZiBHQzNEZW51bSAoR0xfQVBJRU5UUllQIFBGTkdMR0VUR1JBUEhJQ1NSRVNF
VFNUQVRVU0VYVFBST0MpICh2b2lkKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
UkVBRE5QSVhFTFNFWFRQUk9DKSAoR0xpbnQgeCwgR0xpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXpl
aSBidWZTaXplLCB2b2lkICpkYXRhKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
R0VUTlVOSUZPUk1GVkVYVFBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMR0VUTlVOSUZPUk1JVkVYVFBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTIDogcHVibGljIEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5
IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRh
dGlvbnMuCi0gICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqLCBib29s
IHVzZUluZGV4ZWRHZXRTdHJpbmcpOwotICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTEVT
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlN
Ryh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWdu
ZWQgbG9uZyBzYW1wbGVzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMs
IHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0KTsKLQotICAgIC8vIEV4dGVuc2lvbjNEIG1ldGhvZHMKLSAgICBib29s
IGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGJsaXRGcmFtZWJ1
ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25n
IGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25n
IG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNlcnRFdmVu
dE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hHcm91cE1h
cmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHBvcEdyb3VwTWFya2Vy
RVhUKHZvaWQpIG92ZXJyaWRlOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhB
cnJheU9FUygpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0Rz
aXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0FycmF5c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBs
b25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0
ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlk
ZTsKLQotICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gcmVzZXQKLSAgICBpbnQgZ2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQigpIG92ZXJyaWRlOwotCi0gICAgLy8gRVhUIFJvYnVzdG5lc3MgLSBldGMK
LSAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXpl
aSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldG5Vbmlmb3JtZnZF
WFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxv
YXQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50
IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBv
dmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3Qg
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGdldEV4dGVuc2lvbnMoKSBvdmVycmlkZTsK
LQotICAgIEdDM0RlbnVtIG1fY29udGV4dFJlc2V0U3RhdHVzOwotCi0gICAgYm9vbCBtX3N1cHBv
cnRzT0VTdmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgYm9vbCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1w
bGVkUmVuZGVyVG9UZXh0dXJlOwotICAgIGJvb2wgbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJy
YXlzOwotCi0gICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQyBt
X2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKLSAgICBQRk5HTFJFTkRFUkJV
RkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUlNRzsKLSAgICBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0
ZXhBcnJheU9FUzsKLSAgICBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0MgbV9nbERlbGV0
ZVZlcnRleEFycmF5c09FUzsKLSAgICBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MgbV9nbEdl
blZlcnRleEFycmF5c09FUzsKLSAgICBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1Zl
cnRleEFycmF5T0VTOwotICAgIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0MgbV9n
bEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQ7Ci0gICAgUEZOR0xSRUFETlBJWEVMU0VYVFBST0Mg
bV9nbFJlYWRuUGl4ZWxzRVhUOwotICAgIFBGTkdMR0VUTlVOSUZPUk1GVkVYVFBST0MgbV9nbEdl
dG5Vbmlmb3JtZnZFWFQ7Ci0gICAgUEZOR0xHRVROVU5JRk9STUlWRVhUUFJPQyBtX2dsR2V0blVu
aWZvcm1pdkVYVDsKLSAgICBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MgbV9nbFZl
cnRleEF0dHJpYkRpdmlzb3JBTkdMRTsKLSAgICBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdM
RVBST0MgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRTsKLSAgICBQRk5HTERSQVdFTEVNRU5U
U0lOU1RBTkNFREFOR0xFUFJPQyBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnNHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uc0dMT3BlbkdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGNiM2Q2OGQ3ODk3ODI3NGNhMjlk
MjJhMmY5NDg5YjI4NGYyMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAKQEAgLTAsMCArMSwz
MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dM
T3BlbkdMLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVO
R0wpIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpKQorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV0lOKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQor
I2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2VsaWYgVVNFKE9QRU5HTCkKKyNpbmNs
dWRlIDxPcGVuR0wvZ2wuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zR0xPcGVuR0w6OkV4dGVuc2lvbnNHTE9wZW5HTChH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5n
KQorICAgIDogRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uKGNvbnRleHQsIHVzZUluZGV4ZWRHZXRT
dHJpbmcpCit7Cit9CisKK0V4dGVuc2lvbnNHTE9wZW5HTDo6fkV4dGVuc2lvbnNHTE9wZW5HTCgp
ID0gZGVmYXVsdDsKKworCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVy
KGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0
WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFz
aywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShP
UEVOR0xfRVMpCisgICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKKyAgICBVTlVTRURfUEFSQU0oc3Jj
WTApOworICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsK
KyAgICBVTlVTRURfUEFSQU0oZHN0WDApOworICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7CisgICAg
VU5VU0VEX1BBUkFNKGRzdFgxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTEpOworICAgIFVOVVNF
RF9QQVJBTShtYXNrKTsKKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKKyAgICA6OmdsUmVzb2x2
ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOworI2Vsc2UKKyAgICA6OmdsQmxpdEZyYW1l
YnVmZmVyRVhUKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgx
LCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKKyNlbmRpZgorfQorCit2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIDo6Z2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uc0dM
T3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgYXJyYXkgPSAwOworI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQor
ICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCisgICAgICAgIGdsR2VuVmVy
dGV4QXJyYXlzKDEsICZhcnJheSk7CisjZWxpZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJh
eV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBnbEdlblZlcnRl
eEFycmF5c0FQUExFKDEsICZhcnJheSk7CisjZW5kaWYKKyAgICByZXR1cm4gYXJyYXk7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCisgICAg
aWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKKyAgICAgICAgZ2xEZWxldGVWZXJ0
ZXhBcnJheXMoMSwgJmFycmF5KTsKKyNlbGlmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5
X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAorICAgIGdsRGVsZXRlVmVy
dGV4QXJyYXlzQVBQTEUoMSwgJmFycmF5KTsKKyNlbmRpZgorfQorCitHQzNEYm9vbGVhbiBFeHRl
bnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkK
K3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAgIGlmIChp
c1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCisgICAgICAgIHJldHVybiBnbElzVmVydGV4
QXJyYXkoYXJyYXkpOworI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0
KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgcmV0dXJuIGdsSXNWZXJ0ZXhB
cnJheUFQUExFKGFycmF5KTsKKyNlbmRpZgorICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9p
ZCBFeHRlbnNpb25zR0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9Q
RU5HTF9FUykpCisgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKKyAgICAg
ICAgZ2xCaW5kVmVydGV4QXJyYXkoYXJyYXkpOworI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0
ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgZ2xC
aW5kVmVydGV4QXJyYXlBUFBMRShhcnJheSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhcnJh
eSk7CisjZW5kaWYKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6Omluc2VydEV2ZW50TWFy
a2VyRVhUKGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1
bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgorICAgIHJl
dHVybjsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnB1c2hHcm91cE1hcmtlckVYVChj
b25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBh
bmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KKyAgICByZXR1cm47Cit9
CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1
Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KKyAgICByZXR1cm47Cit9CisKK2Jvb2wgRXh0ZW5zaW9u
c0dMT3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
Ly8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAg
ICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFu
ZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUvR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUuCisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQor
ICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJh
bWVidWZmZXJfYmxpdCIpOworICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSIpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUiKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29u
dGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworI2VuZGlmCisKKyAgICBp
ZiAobmFtZSA9PSAiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpIHsKKyAgICAgICAgcmV0dXJu
IChtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl9pbnN0YW5jZWRfYXJyYXlz
IikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfaW5zdGFuY2VkX2Fy
cmF5cyIpKQorICAgICAgICAgICAgJiYgKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfQVJCX2RyYXdfaW5zdGFuY2VkIikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KCJHTF9FWFRfZHJhd19pbnN0YW5jZWQiKSk7CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0gIkdM
X0VYVF9zUkdCIikKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICByZXR1cm4gbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfc1JHQiIpOworI2Vsc2UKKyAgICAg
ICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVf
c1JHQiIpICYmIChtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1
ZmZlcl9zUkdCIikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfZnJh
bWVidWZmZXJfc1JHQiIpKTsKKyNlbmRpZgorCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9mcmFn
X2RlcHRoIikKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UK
KyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2Zy
YWdfZGVwdGgiKTsKKyNlbmRpZgorCisgICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMg
R0xfT0VTX3JnYjhfcmdiYTguCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3JnYmE4IikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9mbG9hdCBv
ciBHTF9PRVNfdGV4dHVyZV9mbG9hdCBpcyBhdmFpbGFibGUgdGhlbiB3ZSByZXBvcnQKKyAgICAv
LyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0LCBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIg
YW5kIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIGFzIGF2YWlsYWJsZS4KKyAgICBp
ZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIg
fHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKQorICAgICAgICBy
ZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9h
dCIpIHx8IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3RleHR1cmVfZmxv
YXQiKTsKKworICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgaWYgKG5hbWUg
PT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgeworI2lmIChQTEFURk9STShHVEspKQor
ICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdmVy
dGV4X2FycmF5X29iamVjdCIpOworI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3QiKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
Y29udGFpbnMoIkdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyNlbmRpZgorICAgIH0K
KworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBkZXJpdmF0
aXZlIGZ1bmN0aW9ucworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1
cHBvcnRzIFVOU0lHTkVEX0lOVCBpbmRpY2VzCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19lbGVt
ZW50X2luZGV4X3VpbnQiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobmFt
ZSA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpCisgICAgICAgIHJldHVybiBtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAg
ICAKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikK
KyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3Rl
eHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX2Ry
YXdfYnVmZmVycyIpIHsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICByZXR1cm4g
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOworI2VsaWYgUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShHVEspCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
Y29udGFpbnMoIkdMX0FSQl9kcmF3X2J1ZmZlcnMiKTsKKyNlbHNlCisgICAgICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zLgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFU
Rk9STShJT1NfRkFNSUxZX1NJTVVMQVRPUikKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5j
b250YWlucygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICBpZiAobmFtZSA9
PSAiR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiCisgICAgICAgIHx8IG5hbWUg
PT0gIkdMX0FOR0xFX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKSB7CisgICAgICAgIC8vIEltcGxp
Y2l0bHkgZW5hYmxlZCB3aXRoIEVTIDMuMCBjb250ZXh0cy4KKyAgICAgICAgcmV0dXJuIG1fY29u
dGV4dC0+bV9pc0ZvcldlYkdMMjsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgbiwgY29uc3QgR0MzRGVudW0qIGJ1ZnMpCit7
CisgICAgLy8gIEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zLgor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICA6OmdsRHJhd0J1ZmZlcnNBUkIobiwgYnVmcyk7CisjZWxp
ZiBQTEFURk9STShHVEspCisgICAgOjpnbERyYXdCdWZmZXJzKG4sIGJ1ZnMpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0obik7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOworI2VuZGlmCit9CisK
K3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkK
K3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICA6OmdsRHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCk7CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAgICA6OmdsRHJhd0FycmF5c0luc3RhbmNl
ZEFSQihtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShtb2RlKTsKKyAgICBVTlVTRURfUEFSQU0oZmlyc3QpOworICAgIFVOVVNFRF9QQVJBTShj
b3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHByaW1jb3VudCk7CisjZW5kaWYKK30KKwordm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXpl
aSBwcmltY291bnQpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNp
ZiBQTEFURk9STShHVEspCisgICAgOjpnbERyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3Vu
dCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
b2Zmc2V0KSksIHByaW1jb3VudCk7CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAgICA6OmdsRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQVJCKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0
PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIFVO
VVNFRF9QQVJBTShwcmltY291bnQpOworI2VuZGlmCit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29y
KQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0o
R1RLKQorICAgIDo6Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyNlbGlm
IFBMQVRGT1JNKENPQ09BKQorICAgIDo6Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQVJCKGluZGV4LCBk
aXZpc29yKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFS
QU0oZGl2aXNvcik7CisjZW5kaWYKK30KKworU3RyaW5nIEV4dGVuc2lvbnNHTE9wZW5HTDo6Z2V0
RXh0ZW5zaW9ucygpCit7CisgICAgQVNTRVJUKCFtX3VzZUluZGV4ZWRHZXRTdHJpbmcpOworICAg
IHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhHTF9FWFRFTlNJT05TKSkpOworfQorCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCitib29sIEV4dGVuc2lv
bnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpCit7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgc3VwcG9ydHNWZXJ0ZXhBcnJheU9iamVjdCA9IHN1cHBvcnRzKCJHTF9PRVNf
dmVydGV4X2FycmF5X29iamVjdCIpOworICAgIHJldHVybiBzdXBwb3J0c1ZlcnRleEFycmF5T2Jq
ZWN0OworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoT1BFTkdMX0VTKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTYzZTljOTQwZDI0ZDQ0MzhkYjE4MGE2ZTZlYTM1ZDc0ZjZlN2Y3NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
R0xPcGVuR0wuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTCA6IHB1YmxpYyBFeHRl
bnNpb25zR0xPcGVuR0xDb21tb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgaW1wbGVtZW50YXRpb25zLgorICAgIEV4dGVuc2lvbnNH
TE9wZW5HTChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIGJvb2wgdXNlSW5kZXhlZEdldFN0cmlu
Zyk7CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dMT3BlbkdMKCk7CisKKyAgICAvLyBFeHRlbnNp
b25zR0wgbWV0aG9kcy4KKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25n
IHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBs
b25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcg
ZmlsdGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkgb3ZlcnJpZGU7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5
T0VTKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3Qg
U3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0q
KSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVp
IHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1
aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAg
IGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpIG92ZXJyaWRlOworCitwcml2YXRlOgorI2lmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVO
R0xfRVMpKQorICAgIGJvb2wgaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpOworI2VuZGlm
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVu
R0xDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmNDk1YWNlOGVkZWU5NjYyYzlmNGNjNjM1NzI0OGFk
ODMyMWZmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcApAQCAtMCwwICsxLDI1OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShHUkFQSElDU19DT05URVhUX0dMKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykp
CisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgiCisKKyNpbmNsdWRlICJBTkdM
RVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisK
KyNpZiBQTEFURk9STShDT0NPQSkKKworI2lmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSA8T3Bl
bkdMRVMvRVMyL2dsZXh0Lmg+CisjaW5jbHVkZSA8T3BlbkdMRVMvRVMzL2dsLmg+CisjZWxzZQor
I2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVE
RUQKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+CisjdW5k
ZWYgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECisj
ZW5kaWYKKworI2Vsc2UKKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eVNoaW1z
LmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisj
ZW5kaWYKKworI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zR0xPcGVu
R0xDb21tb246OkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDogbV9pbml0aWFsaXpl
ZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAg
ICAsIG1faXNOVklESUEoZmFsc2UpCisgICAgLCBtX2lzQU1EKGZhbHNlKQorICAgICwgbV9pc0lu
dGVsKGZhbHNlKQorICAgICwgbV9pc0ltYWdpbmF0aW9uKGZhbHNlKQorICAgICwgbV9yZXF1aXJl
c0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbihmYWxzZSkKKyAgICAsIG1fcmVxdWlyZXNSZXN0cmlj
dGVkTWF4aW11bVRleHR1cmVTaXplKGZhbHNlKQorICAgICwgbV91c2VJbmRleGVkR2V0U3RyaW5n
KHVzZUluZGV4ZWRHZXRTdHJpbmcpCit7CisgICAgbV92ZW5kb3IgPSBTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKSk7CisgICAgbV9y
ZW5kZXJlciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3Ry
aW5nKEdMX1JFTkRFUkVSKSkpOworCisgICAgVmVjdG9yPFN0cmluZz4gdmVuZG9yQ29tcG9uZW50
cyA9IG1fdmVuZG9yLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3BsaXQoJyAnKTsKKyAgICBp
ZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygibnZpZGlhIikpCisgICAgICAgIG1faXNOVklE
SUEgPSB0cnVlOworICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJhdGkiKSB8fCB2
ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJhbWQiKSkKKyAgICAgICAgbV9pc0FNRCA9IHRydWU7
CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImludGVsIikpCisgICAgICAgIG1f
aXNJbnRlbCA9IHRydWU7CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImltYWdp
bmF0aW9uIikpCisgICAgICAgIG1faXNJbWFnaW5hdGlvbiA9IHRydWU7CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgaWYgKG1faXNBTUQgfHwgbV9pc0ludGVsKQorICAgICAgICBtX3JlcXVpcmVz
QnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uID0gdHJ1ZTsKKworICAgIC8vIEludGVsIEhEIDMwMDAg
ZGV2aWNlcyBoYXZlIHByb2JsZW1zIHdpdGggbGFyZ2UgdGV4dHVyZXMuIDxyZGFyOi8vcHJvYmxl
bS8xNjY0OTE0MD4KKyAgICBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSA9
IG1fcmVuZGVyZXIuc3RhcnRzV2l0aCgiSW50ZWwgSEQgR3JhcGhpY3MgMzAwMCIpOworI2VuZGlm
Cit9CisKK0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6fkV4dGVuc2lvbnNHTE9wZW5HTENvbW1v
bigpID0gZGVmYXVsdDsKKworYm9vbCBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OnN1cHBvcnRz
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zKQorICAgICAgICBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworCisg
ICAgLy8gV2UgZXhwbGljaXRseSBkbyBub3Qgc3VwcG9ydCB0aGlzIGV4dGVuc2lvbiB1bnRpbAor
ICAgIC8vIHdlIGZpeCB0aGUgZm9sbG93aW5nIGJ1ZzoKKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NzM0CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xF
X3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBzdXBwb3J0c0V4dGVuc2lvbihuYW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xP
cGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlm
IChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIC8vIEVu
YWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQorICAgICAgICBB
TkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAg
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291
cmNlcygpOworICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcykgeworICAgICAgICAgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzID0gMTsKKyAgICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNl
cyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9kcmF3X2J1ZmZl
cnMiKSB7CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxl
ZCBhbHJlYWR5KQorICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRl
eHQtPm1fY29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNl
cyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2Vz
LkVYVF9kcmF3X2J1ZmZlcnMpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9kcmF3
X2J1ZmZlcnMgPSAxOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zR0w6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZl
cnMpOworICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCIpIHsKKyAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFi
bGVkIGFscmVhZHkpCisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29u
dGV4dC0+bV9jb21waWxlcjsKKyAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3Vy
Y2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGlmICghQU5HTEVSZXNvdXJj
ZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkgeworICAgICAgICAgICAgQU5HTEVSZXNvdXJjZXMu
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA9IDE7CisgICAgICAgICAgICBjb21waWxlci5zZXRSZXNv
dXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChuYW1lID09
ICJHTF9FWFRfZnJhZ19kZXB0aCIpIHsKKyAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5H
TEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpCisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBj
b21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKyAgICAgICAgU2hCdWlsdEluUmVzb3Vy
Y2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGlm
ICghQU5HTEVSZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGgpIHsKKyAgICAgICAgICAgIEFOR0xFUmVz
b3VyY2VzLkVYVF9mcmFnX2RlcHRoID0gMTsKKyAgICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291
cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRXh0ZW5z
aW9uc0dMT3BlbkdMQ29tbW9uOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIEFO
R0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKyAgICAg
ICAgcmV0dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
czsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUpOworfQorCitpbnQgRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKK3sKKyAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOworfQorCitTdHJpbmcgRXh0ZW5zaW9uc0dM
T3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaW50IEdMc2hhZGVyVHlw
ZTsKKyAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAgIEFOR0xFV2ViS2l0QnJp
ZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKworICAgIG1fY29udGV4dC0+
Z2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6U0hBREVSX1RZUEUsICZHTHNo
YWRlclR5cGUpOworCisgICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6
VkVSVEVYX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsK
KyAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5U
X1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuICIiOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgorCisgICAg
SGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6U2hhZGVy
U291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisK
KyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBTdHJpbmcgc2hhZGVySW5m
b0xvZzsKKyAgICB1aW50NjRfdCBleHRyYUNvbXBpbGVPcHRpb25zID0gU0hfQ0xBTVBfSU5ESVJF
Q1RfQVJSQVlfQk9VTkRTIHwgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9JTklUX09VVFBV
VF9WQVJJQUJMRVMgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TIHwgU0hfTElNSVRf
RVhQUkVTU0lPTl9DT01QTEVYSVRZIHwgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCB8IFNIX0lO
SVRJQUxJWkVfVU5JTklUSUFMSVpFRF9MT0NBTFM7CisKKyAgICBpZiAobV9yZXF1aXJlc0J1aWx0
SW5GdW5jdGlvbkVtdWxhdGlvbikKKyAgICAgICAgZXh0cmFDb21waWxlT3B0aW9ucyB8PSBTSF9F
TVVMQVRFX0FCU19JTlRfRlVOQ1RJT047CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSwgc2g6OlNoYWRlclZhcmlhYmxlPj4gc3ltYm9sczsKKyAgICBib29sIGlz
VmFsaWQgPSBjb21waWxlci5jb21waWxlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCku
ZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9n
LCBzeW1ib2xzLCBleHRyYUNvbXBpbGVPcHRpb25zKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRl
ckluZm9Mb2c7CisgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBmb3IgKGNvbnN0
IHN0ZDo6cGFpcjxBTkdMRVNoYWRlclN5bWJvbFR5cGUsIHNoOjpTaGFkZXJWYXJpYWJsZT4mIHBh
aXIgOiBzeW1ib2xzKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lID0gcGFpci5z
ZWNvbmQubmFtZTsKKyAgICAgICAgZW50cnkuc3ltYm9sTWFwKHBhaXIuZmlyc3QpLnNldChTdHJp
bmcobmFtZS5jX3N0cigpLCBuYW1lLmxlbmd0aCgpKSwgcGFpci5zZWNvbmQpOworICAgIH0KKwor
ICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIHRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpp
bml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisjaWYgKFBMQVRGT1JNKENPQ09BKSAm
JiBVU0UoT1BFTkdMKSkgfHwgKFBMQVRGT1JNKEdUSykgJiYgIVVTRShPUEVOR0xfRVMpKQorICAg
IGlmIChtX3VzZUluZGV4ZWRHZXRTdHJpbmcpIHsKKyAgICAgICAgR0xpbnQgbnVtRXh0ZW5zaW9u
cyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9OVU1fRVhURU5TSU9OUywgJm51bUV4
dGVuc2lvbnMpOworICAgICAgICBmb3IgKEdMaW50IGkgPSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsg
KytpKQorICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChnbEdldFN0cmluZ2ko
R0xfRVhURU5TSU9OUywgaSkpOworCisgICAgICAgIGlmICghbV9hdmFpbGFibGVFeHRlbnNpb25z
LmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9zdG9yYWdlIl9zKSkgeworICAgICAgICAgICAgR0xp
bnQgbWFqb3JWZXJzaW9uOworICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9NQUpPUl9WRVJT
SU9OLCAmbWFqb3JWZXJzaW9uKTsKKyAgICAgICAgICAgIEdMaW50IG1pbm9yVmVyc2lvbjsKKyAg
ICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUlOT1JfVkVSU0lPTiwgJm1pbm9yVmVyc2lvbik7
CisgICAgICAgICAgICBpZiAobWFqb3JWZXJzaW9uID4gNCB8fCAobWFqb3JWZXJzaW9uID09IDQg
JiYgbWlub3JWZXJzaW9uID49IDIpKQorICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5hZGQoIkdMX0FSQl90ZXh0dXJlX3N0b3JhZ2UiX3MpOworICAgICAgICB9CisgICAgfSBl
bHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gZ2V0
RXh0ZW5zaW9ucygpOworICAgICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNT
dHJpbmcuc3BsaXQoJyAnKSkKKyAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQo
ZXh0ZW5zaW9uKTsKKyAgICB9CisgICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMg
PSB0cnVlOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6cmVhZG5QaXhlbHNF
WFQoaW50LCBpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRGVudW0sIEdD
M0RzaXplaSwgdm9pZCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6
Z2V0blVuaWZvcm1mdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGZsb2F0ICopCit7Cisg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9
CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpnZXRuVW5pZm9ybWl2RVhUKEdDM0R1
aW50LCBpbnQsIEdDM0RzaXplaSwgaW50ICopCit7CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAoVVNFKE9QRU5H
TCkgfHwgVVNFKE9QRU5HTF9FUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDA2YjE1YjFhNzEwOTQwNjc4NWNjZGRiZWE3OWQ2MjgzNWZiM2M5ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uIDogcHVibGljIEV4dGVuc2lvbnNH
TCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uKCk7CisKKyAgICAvLyBFeHRlbnNpb25zR0wgbWV0aG9k
cy4KKyAgICBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQg
ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBib29sIGlzRW5hYmxl
ZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQigpIG92ZXJyaWRlOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpIG92ZXJyaWRlID0gMDsKKyAgICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKKyAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKKyAgICB2b2lkIGJpbmRWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9IDA7CisKKyAgICB2b2lkIGRyYXdC
dWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZSA9IDA7CisKKyAg
ICBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOworCisgICAgLy8gRVhUIFJvYnVzdG5lc3MgLSB1c2VzIGdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKQorICAgIHZvaWQgcmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpIG92ZXJyaWRlOworICAgIHZvaWQg
Z2V0blVuaWZvcm1mdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldG5Vbmlmb3Jt
aXZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwg
aW50ICpwYXJhbXMpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc05WSURJQSgpIG92ZXJyaWRlIHsg
cmV0dXJuIG1faXNOVklESUE7IH0KKyAgICBib29sIGlzQU1EKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9pc0FNRDsgfQorICAgIGJvb2wgaXNJbnRlbCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNJbnRl
bDsgfQorICAgIGJvb2wgaXNJbWFnaW5hdGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNJbWFn
aW5hdGlvbjsgfQorICAgIFN0cmluZyB2ZW5kb3IoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZlbmRv
cjsgfQorCisgICAgYm9vbCByZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbigpIG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247IH0KKyAgICBi
b29sIHJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CisgICAgRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgYm9vbCB1c2VJbmRleGVk
R2V0U3RyaW5nKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBT
dHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAgIGJv
b2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+
IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKKworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29u
dGV4dDsKKworICAgIGJvb2wgbV9pc05WSURJQTsKKyAgICBib29sIG1faXNBTUQ7CisgICAgYm9v
bCBtX2lzSW50ZWw7CisgICAgYm9vbCBtX2lzSW1hZ2luYXRpb247CisgICAgYm9vbCBtX3JlcXVp
cmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uOworICAgIGJvb2wgbV9yZXF1aXJlc1Jlc3RyaWN0
ZWRNYXhpbXVtVGV4dHVyZVNpemU7CisKKyAgICBib29sIG1fdXNlSW5kZXhlZEdldFN0cmluZyB7
IGZhbHNlIH07CisKKyAgICBTdHJpbmcgbV92ZW5kb3I7CisgICAgU3RyaW5nIG1fcmVuZGVyZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVT
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYjFkMGQxOTdlYzQ5MDdiOGEyYzEzNzQxZjhjZjAyYWIyNDdhZDlh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcApAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKE9QRU5HTF9FUykK
KyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNT
X0NPTlRFWFRfR0wpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgIkVw
b3h5RUdMLmgiCisjZWxzZQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnNHTE9wZW5HTEVTOjpFeHRlbnNpb25zR0xPcGVuR0xF
UyhHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3Ry
aW5nKQorICAgIDogRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uKGNvbnRleHQsIHVzZUluZGV4ZWRH
ZXRTdHJpbmcpCisgICAgLCBtX2NvbnRleHRSZXNldFN0YXR1cyhHTF9OT19FUlJPUikKKyAgICAs
IG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJ
TUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCisgICAgLCBtX3N1cHBvcnRzQU5H
TEVpbnN0YW5jZWRBcnJheXMoZmFsc2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRN
dWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRygwKQorICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0
ZVZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAg
ICwgbV9nbElzVmVydGV4QXJyYXlPRVMoMCkKKyAgICAsIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzRVhUKDApCisgICAgLCBtX2dsUmVhZG5QaXhlbHNFWFQoMCkKKyAgICAsIG1fZ2xHZXRuVW5p
Zm9ybWZ2RVhUKDApCisgICAgLCBtX2dsR2V0blVuaWZvcm1pdkVYVCgwKQorICAgICwgbV9nbFZl
cnRleEF0dHJpYkRpdmlzb3JBTkdMRShudWxscHRyKQorICAgICwgbV9nbERyYXdBcnJheXNJbnN0
YW5jZWRBTkdMRShudWxscHRyKQorICAgICwgbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xF
KG51bGxwdHIpCit7Cit9CisKK0V4dGVuc2lvbnNHTE9wZW5HTEVTOjp+RXh0ZW5zaW9uc0dMT3Bl
bkdMRVMoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzRW5hYmxl
ZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gUmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5
IGlmIHRoZSBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVycy4KKyAgICBi
b29sIGVuYWJsZWQgPSBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OmlzRW5hYmxlZChuYW1lKTsK
KyAgICBpZiAoIWVuYWJsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZvciBH
TF9FWFRfcm9idXN0bmVzcywgY2hlY2sgdGhhdCB0aGUgY29udGV4dCBzdXBwb3J0cyByb2J1c3Qg
YWNjZXNzLgorICAgIGlmIChuYW1lID09ICJHTF9FWFRfcm9idXN0bmVzcyIpIHsKKyAgICAgICAg
R0xpbnQgcm9idXN0QWNjZXNzID0gR0xfRkFMU0U7CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoRXh0ZW5zaW9uc0dMOjpDT05URVhUX1JPQlVTVF9BQ0NFU1MsICZyb2J1c3RBY2Nlc3Mp
OworICAgICAgICByZXR1cm4gcm9idXN0QWNjZXNzID09IEdMX1RSVUU7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVy
VGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUs
IGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQoreworICAgIGlmIChtX2dsRnJhbWVi
dWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykKKyAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4
dHVyZTJETXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1
cmUsIGxldmVsLCBzYW1wbGVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNH
TE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAg
aWYgKG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNp
b25zR0xPcGVuR0xFUzo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgLyogc3JjWDAgKi8sIGxvbmcgLyog
c3JjWTAgKi8sIGxvbmcgLyogc3JjWDEgKi8sIGxvbmcgLyogc3JjWTEgKi8sIGxvbmcgLyogZHN0
WDAgKi8sIGxvbmcgLyogZHN0WTAgKi8sIGxvbmcgLyogZHN0WDEgKi8sIGxvbmcgLyogZHN0WTEg
Ki8sIHVuc2lnbmVkIGxvbmcgLyogbWFzayAqLywgdW5zaWduZWQgbG9uZyAvKiBmaWx0ZXIgKi8p
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xF
Uzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICByZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnBvcEdyb3VwTWFya2VyRVhU
KHZvaWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBF
eHRlbnNpb25zR0xPcGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQoreworICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXNP
RVMpIHsKKyAgICAgICAgR0x1aW50IGFycmF5ID0gMDsKKyAgICAgICAgbV9nbEdlblZlcnRleEFy
cmF5c09FUygxLCAmYXJyYXkpOworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAobV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFy
cmF5c09FUygxLCAmYXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVu
c2lvbnNHTE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkp
Cit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbElzVmVydGV4QXJyYXlP
RVMpCisgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CisKKyAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMpCisgICAgICAg
IG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQg
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSAvKiBuICovLCBj
b25zdCBHQzNEZW51bSogLyogYnVmcyAqLykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRo
ZSBzdXBwb3J0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2ludCBFeHRlbnNpb25zR0xP
cGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgLy8gRklYTUU6IFRo
aXMgZG9lcyBub3QgY2FsbCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCLCBidXQgaW5zdGVhZCBn
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhULgorICAgIC8vIFRoZSByZXR1cm4gY29kZXMgZnJvbSB0
aGUgdHdvIGV4dGVuc2lvbnMgYXJlIGlkZW50aWNhbCBhbmQgdGhlaXIgcHVycG9zZSBpcyB0aGUg
c2FtZSwgc28gaXQKKyAgICAvLyBtYXkgYmUgYmVzdCB0byByZW5hbWUgZ2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpIHRvIGdldEdyYXBoaWNzUmVzZXRTdGF0dXMoKS4KKyAgICBpZiAobV9jb250
ZXh0UmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBtX2NvbnRleHRS
ZXNldFN0YXR1czsKKyAgICBpZiAobV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgaW50IHJlYXNv
bkZvclJlc2V0ID0gbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQoKTsKKyAgICAgICAgaWYg
KHJlYXNvbkZvclJlc2V0ICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgbV9jb250ZXh0UmVz
ZXRTdGF0dXMgPSByZWFzb25Gb3JSZXNldDsKKyAgICAgICAgcmV0dXJuIHJlYXNvbkZvclJlc2V0
OworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVu
R0xFUzo6cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1
ZlNpemUsIHZvaWQgKmRhdGEpCit7CisgICAgaWYgKG1fZ2xSZWFkblBpeGVsc0VYVCkgeworICAg
ICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVk
LCBpLmUuLAorICAgICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBi
ZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KKyAgICAgICAgOjpnbEZsdXNoKCk7CisKKyAg
ICAgICAgLy8gRklYTUU6IElmIG5vbi1CbGFja0JlcnJ5IHBsYXRmb3JtcyB1c2UgdGhpcywgdGhl
eSB3aWxsIG5lZWQgdG8gaW1wbGVtZW50CisgICAgICAgIC8vIHRoZWlyIGFudGktYWxpYXNpbmcg
Y29kZSBoZXJlLgorICAgICAgICBtX2dsUmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBidWZTaXplLCBkYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1
aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJh
bXMpCit7CisgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKSB7CisgICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKHBy
b2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQoR0Mz
RHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJh
bXMpCit7CisgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWl2RVhUKSB7CisgICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWl2RVhUKHBy
b2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJheXNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkg
cHJpbWNvdW50KQoreworICAgIGlmICghbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSkgewor
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdF
bGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgaWYg
KCFtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fZ2xE
cmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7
Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0Mz
RHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7CisgICAgaWYgKCFtX2dsVmVydGV4QXR0
cmliRGl2aXNvckFOR0xFKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2dsVmVydGV4QXR0cmliRGl2aXNv
ckFOR0xFKGluZGV4LCBkaXZpc29yKTsKK30KKworYm9vbCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgaWYgKCFtX3N1cHBvcnRz
T0VTdmVydGV4QXJyYXlPYmplY3QgJiYgbmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKSB7CisgICAgICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRf
Y2FzdDxQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJp
bmRWZXJ0ZXhBcnJheU9FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMg
PSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsR2VuVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbERlbGV0
ZVZlcnRleEFycmF5c09FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJB
WVNPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7
CisgICAgICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xJU1ZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJh
eU9FUyIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJU
b1RleHR1cmUgJiYgbmFtZSA9PSAiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVy
ZSIpIHsKKyAgICAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1H
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJ
TUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2Ft
cGxlSU1HIikpOworICAgICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1Q
TEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVJTUciKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVy
VG9UZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9nbEdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNFWFQgJiYgbmFtZSA9PSAiR0xfRVhUX3JvYnVzdG5lc3MiKSB7CisgICAgICAgICAg
ICBtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xH
RVRHUkFQSElDU1JFU0VUU1RBVFVTRVhUUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0VYVCIpKTsKKyAgICAgICAgICAgIG1fZ2xSZWFkblBpeGVsc0VYVCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRUFETlBJWEVMU0VYVFBST0M+KGVnbEdldFByb2NBZGRy
ZXNzKCJnbFJlYWRuUGl4ZWxzRVhUIikpOworICAgICAgICAgICAgbV9nbEdldG5Vbmlmb3JtZnZF
WFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUTlVOSUZPUk1GVkVYVFBST0M+KGVnbEdldFBy
b2NBZGRyZXNzKCJnbEdldG5Vbmlmb3JtZnZFWFQiKSk7CisgICAgICAgICAgICBtX2dsR2V0blVu
aWZvcm1pdkVYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVROVU5JRk9STUlWRVhUUFJPQz4o
ZWdsR2V0UHJvY0FkZHJlc3MoImdsR2V0blVuaWZvcm1pdkVYVCIpKTsKKyAgICAgICAgfSBlbHNl
IGlmICghbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzICYmIG5hbWUgPT0gIkdMX0FOR0xF
X2luc3RhbmNlZF9hcnJheXMiKSB7CisgICAgICAgICAgICBtX2dsVmVydGV4QXR0cmliRGl2aXNv
ckFOR0xFID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBS
T0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSIpKTsKKyAg
ICAgICAgICAgIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUgPSByZWludGVycHJldF9jYXN0
PFBGTkdMRFJBV0FSUkFZU0lOU1RBTkNFREFOR0xFUFJPQyA+KGVnbEdldFByb2NBZGRyZXNzKCJn
bERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIpKTsKKyAgICAgICAgICAgIG1fZ2xEcmF3RWxlbWVu
dHNJbnN0YW5jZWRBTkdMRSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xEUkFXRUxFTUVOVFNJTlNU
QU5DRURBTkdMRVBST0MgPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRSIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNBTkdMRWluc3RhbmNlZEFycmF5cyA9
IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhUX2RyYXdfYnVmZmVycyIp
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhlIHN1cHBvcnQuCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkK
KworI2VuZGlmIC8vIFVTRShPUEVOR0xfRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFkMWM2YzBhODA2YzMxOWFiNjE5NjU4ZmQwNmY0ZWU1NDRiZWI0YmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMRVMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgi
CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVw
b3h5L2dsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMy
L2dsMmV4dC5oPgorI2VuZGlmCisKKyNpZm5kZWYgR0xfRVhUX3JvYnVzdG5lc3MKKy8qIHJldXNl
IEdMX05PX0VSUk9SICovCisjZGVmaW5lIEdMX0dVSUxUWV9DT05URVhUX1JFU0VUX0VYVCAweDgy
NTMKKyNkZWZpbmUgR0xfSU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9FWFQgMHg4MjU0CisjZGVmaW5l
IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVF9FWFQgMHg4MjU1CisjZGVmaW5lIEdMX0NPTlRFWFRf
Uk9CVVNUX0FDQ0VTU19FWFQgMHg5MEYzCisjZGVmaW5lIEdMX1JFU0VUX05PVElGSUNBVElPTl9T
VFJBVEVHWV9FWFQgMHg4MjU2CisjZGVmaW5lIEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQg
MHg4MjUyCisjZGVmaW5lIEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQgMHg4MjYxCisjZW5k
aWYKKworI2lmbmRlZiBHTF9FWFRfcm9idXN0bmVzcworI2RlZmluZSBHTF9FWFRfcm9idXN0bmVz
cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCBHQzNEZW51bSBHTF9B
UElFTlRSWSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQodm9pZCk7CitHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xSZWFkblBpeGVsc0VYVChHTGludCB4LCBHTGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisjZW5kaWYKK3R5cGVkZWYgR0Mz
RGVudW0gKEdMX0FQSUVOVFJZUCBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DKSAo
dm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQUROUElYRUxTRVhUUFJP
QykgKEdMaW50IHgsIEdMaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAq
ZGF0YSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklGT1JNRlZFWFRQ
Uk9DKSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwg
ZmxvYXQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklG
T1JNSVZFWFRQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUyA6IHB1YmxpYyBFeHRlbnNpb25zR0xPcGVuR0xD
b21tb24geworcHVibGljOgorICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0
YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgaW1wbGVtZW50YXRpb25zLgorICAg
IEV4dGVuc2lvbnNHTE9wZW5HTEVTKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgYm9vbCB1c2VJ
bmRleGVkR2V0U3RyaW5nKTsKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0xPcGVuR0xFUygpOwor
CisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9u
ZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBz
YW1wbGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
SU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVk
IGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KTsKKworICAgIC8vIEV4dGVuc2lvbjNEIG1ldGhvZHMKKyAgICBib29sIGlzRW5hYmxl
ZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25n
IHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBs
b25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVu
c2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVY
VChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQp
IG92ZXJyaWRlOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygp
IG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29u
c3QgR0MzRGVudW0qKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBw
cmltY291bnQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNl
dCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJE
aXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKworICAg
IC8vIEVYVCBSb2J1c3RuZXNzIC0gcmVzZXQKKyAgICBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQigpIG92ZXJyaWRlOworCisgICAgLy8gRVhUIFJvYnVzdG5lc3MgLSBldGMKKyAgICB2b2lk
IHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXpl
LCB2b2lkICpkYXRhKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVp
bnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFt
cykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0s
IGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsK
KworcHJvdGVjdGVkOgorICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIGdldEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKKworICAgIEdD
M0RlbnVtIG1fY29udGV4dFJlc2V0U3RhdHVzOworCisgICAgYm9vbCBtX3N1cHBvcnRzT0VTdmVy
dGV4QXJyYXlPYmplY3Q7CisgICAgYm9vbCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVy
VG9UZXh0dXJlOworICAgIGJvb2wgbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzOworCisg
ICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQyBtX2dsRnJhbWVi
dWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JB
R0VNVUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlN
RzsKKyAgICBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheU9F
UzsKKyAgICBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0MgbV9nbERlbGV0ZVZlcnRleEFy
cmF5c09FUzsKKyAgICBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MgbV9nbEdlblZlcnRleEFy
cmF5c09FUzsKKyAgICBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5
T0VTOworICAgIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0MgbV9nbEdldEdyYXBo
aWNzUmVzZXRTdGF0dXNFWFQ7CisgICAgUEZOR0xSRUFETlBJWEVMU0VYVFBST0MgbV9nbFJlYWRu
UGl4ZWxzRVhUOworICAgIFBGTkdMR0VUTlVOSUZPUk1GVkVYVFBST0MgbV9nbEdldG5Vbmlmb3Jt
ZnZFWFQ7CisgICAgUEZOR0xHRVROVU5JRk9STUlWRVhUUFJPQyBtX2dsR2V0blVuaWZvcm1pdkVY
VDsKKyAgICBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MgbV9nbFZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRTsKKyAgICBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MgbV9n
bERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRTsKKyAgICBQRk5HTERSQVdFTEVNRU5UU0lOU1RBTkNF
REFOR0xFUFJPQyBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNk
NDdlMjQ3MzNhMTZlMGZlMjAwYWUzNDM5YWM3ZmNiODAzNmNhYWUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDUxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NP
TlRFWFRfM0QpICYmIChVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVO
R0xfRVMpKSkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCi0jZW5kaWYK
LSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNs
dWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZWxpZiBVU0UoT1BFTkdMX0VTKQot
I2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+Ci0vLyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5o
PgotI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAweDg4MTQKLSNk
ZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE1Ci0jZWxpZiBV
U0UoT1BFTkdMKQotI2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hF
QURFUlNfSU5DTFVERUQKLSNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KLSNpbmNsdWRlIDxPcGVuR0wv
Z2wzLmg+Ci0jdW5kZWYgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJT
X0lOQ0xVREVECi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi1z
dGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbnQgd2lkdGgsIGludCBoZWln
aHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKLXsKLSAgICAvLyBXZSBjYW4gYXNzdW1lIHRoaXMg
ZG9lc24ndCBvdmVyZmxvdyBiZWNhdXNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucwotICAgIC8vIHVz
ZSBjaGVja2VkIGFyaXRobWV0aWMuCi0gICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdo
dCAqIDQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAg
ICAgIHBpeGVsc1tpICsgM10gPSAyNTU7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIGF1
dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgLy8gTlZJRElBIGRyaXZlcnMg
aGF2ZSBhIGJ1ZyB3aGVyZSBjYWxsaW5nIHJlYWRQaXhlbHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRo
ZSB3cm9uZyB2YWx1ZXMgZm9yIHRoZSBhbHBoYSBjaGFubmVsIHdoZW4gdGhlIGFscGhhIGlzIG9m
ZiBmb3IgdGhlIGNvbnRleHQuCi0gICAgaWYgKCFhdHRycy5hbHBoYSAmJiBnZXRFeHRlbnNpb25z
KCkuaXNOVklESUEoKSkgewotICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhl
aWdodDsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9
IHdpZHRoICogNDsKLSAgICAgICAgc3JjLmRhdGEgPSBwaXhlbHM7Ci0KLSAgICAgICAgdkltYWdl
X0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVz
dC53aWR0aCA9IHdpZHRoOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAg
ICAgICBkZXN0LmRhdGEgPSBwaXhlbHM7Ci0KLSAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVs
cyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKLSAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMs
ICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgICAgIGludCB0b3RhbEJ5
dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRv
dGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOwotI2VuZGlmCi0gICAgfSBlbHNlCi0gICAgICAgIDo6Z2xSZWFkUGl4ZWxzKHgs
IHksIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwg
cGl4ZWxzKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWF0dHJzLmFscGhhKQotICAg
ICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwot
I2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygp
Ci17Ci0gICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNp
bCIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRT
aXplJiBzaXplKQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotICAg
IGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gMDsKLSAgICBpZiAoYXR0cnMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5h
bENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsK
LSAgICB9IGVsc2UgewotICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4Owot
ICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5j
aWwgfHwgYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2lj
IHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAgICAgLy8g
U2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCi0KLSAgICAgICAgRXh0
ZW5zaW9uczNEJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgICAvLyBVc2Ug
YSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAg
aWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKQot
ICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5D
SUw4X0VYVDsKLSAgICAgICAgZWxzZQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdM
X0VTKQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9D
T01QT05FTlQxNjsKLSNlbHNlCi0gICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFJlc2l6ZSBt
dWx0aXNhbXBsZSBGQk8uCi0gICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewotICAgICAgICBHTGlu
dCBtYXhTYW1wbGVDb3VudDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVT
X0VYVCwgJm1heFNhbXBsZUNvdW50KTsKLSAgICAgICAgLy8gVXNpbmcgbW9yZSB0aGFuIDQgc2Ft
cGxlcyBpcyBzbG93IG9uIHNvbWUgaGFyZHdhcmUgYW5kIGlzIHVubGlrZWx5IHRvCi0gICAgICAg
IC8vIHByb2R1Y2UgYSBzaWduaWZpY2FudGx5IGJldHRlciByZXN1bHQuCi0gICAgICAgIEdMaW50
IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291bnQpOwotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7
Ci0gICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0jaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVO
R0xfRVMpCi0gICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIEdMX1JHQkE4X09FUywgd2lkdGgsIGhlaWdo
dCk7Ci0jZWxzZQotICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOwotI2VuZGlmCi0gICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYg
KGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwp
Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0
cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwot
ICAgICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogY2xlYW51cC4KLSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyByZXNpemUgcmVndWxhciBGQk8KLSAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIEFTU0VSVChtX3RleHR1cmUpOwot
I2lmIFBMQVRGT1JNKENPQ09BKQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEJpbmRSZW5k
ZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOwotICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1JF
TkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKLSAgICBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURy
YXdhYmxlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwotI2Vsc2UKLSAgICBhbGxv
Y2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLSAgICB1
cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsKLSAgICA6Omds
RnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV90ZXh0dXJlLCAwKTsKLSNl
bmRpZiAvLyAhVVNFKE9QRU5HTF9FUykpCi0jZWxzZQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlLCAwKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBp
ZiAobV9jb21wb3NpdG9yVGV4dHVyZSkgewotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwg
Y29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICA6OmdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNv
bG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOwotICAgIH0KLSNlbmRpZgotI2VuZGlmCi0KLSAgICBhdHRhY2hE
ZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgaWYgKG1fc3RhdGUu
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJP
ID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0g
bV9mYm8pCi0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiBtdXN0UmVzdG9yZUZCTzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0
YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgYXV0byBhdHRycyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMu
c3RlbmNpbCB8fCBhdHRycy5kZXB0aCkpIHsKLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6
OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERl
cHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGlmIChhdHRycy5zdGVu
Y2lsKQotICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cnMuZGVwdGgpCi0gICAg
ICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCAwKTsKLSAgICB9Ci0KLSAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBv
cmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotICAg
IFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGVwdGgoR0xfREVQVEhfVEVTVCwgR0xfRkFM
U0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU3RlbmNpbChHTF9TVEVOQ0lM
X1RFU1QsIEdMX0ZBTFNFKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VT
KQotICAgIEdMaW50IGJvdW5kRnJhbWVCdWZmZXI7Ci0gICAgOjpnbEdldEludGVnZXJ2KEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkcsICZib3VuZEZyYW1lQnVmZmVyKTsKLSNlbmRpZgotCi0gICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VY
VCwgbV9mYm8pOwotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIFVO
VVNFRF9QQVJBTShyZWN0KTsKLSAgICA6OmdsRmx1c2goKTsKLSAgICA6OmdsUmVzb2x2ZU11bHRp
c2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOwotICAgIGNvbnN0IEdMZW51bSBkaXNjYXJkc1tdID0g
eyBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfREVQVEhfQVRUQUNITUVOVCB9OwotICAgIDo6Z2xE
aXNjYXJkRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBMRSwgMiwgZGlzY2Fy
ZHMpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVC
dWZmZXIpOwotI2Vsc2UKLSAgICBJbnRSZWN0IHJlc29sdmVSZWN0ID0gcmVjdDsKLSAgICBpZiAo
cmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc29sdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLQotICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJF
WFQocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwg
cmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVz
b2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQs
IEdMX0xJTkVBUik7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVy
YnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0g
ICAgY2FzZSBERVBUSF9TVEVOQ0lMOgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRI
MjRfU1RFTkNJTDhfRVhUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERFUFRIX0NPTVBPTkVO
VDE2OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBSR0JBNDoKLSAgICBjYXNlIFJHQjVfQTE6Ci0gICAgICAgIGlu
dGVybmFsZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0I1NjU6
Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0jZW5kaWYKLSAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIC8vIE5lZWQg
dG8gZW11bGF0ZSBNQVhfRlJBR01FTlQvVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyBhbmQgTUFYX1ZB
UllJTkdfVkVDVE9SUwotICAgIC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcg
cXVlcmllcyByZXR1cm4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzCi0gICAgLy8gd2hlcmVhcyBH
TEVTMiByZXR1cm4gdGhlIG51bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21w
b25lbnRzKS4KLSAgICAvLyBUaGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9w
IEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBjYXNlIE1BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7Ci0gICAgICAgICp2YWx1ZSAvPSA0Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMsIHZh
bHVlKTsKLSAgICAgICAgKnZhbHVlIC89IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUFY
X1ZBUllJTkdfVkVDVE9SUzoKLSAgICAgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgewotICAg
ICAgICAgICAgQVNTRVJUKDo6Z2xHZXRFcnJvcigpID09IEdMX05PX0VSUk9SKTsKLSAgICAgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBpZiAoOjpnbEdldEVycm9yKCkgPT0gR0xfSU5WQUxJRF9FTlVNKSB7Ci0gICAgICAg
ICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0NPTVBPTkVOVFMsIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAqdmFsdWUgLz0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9B
VFMsIHZhbHVlKTsKLSAgICAgICAgICAgICp2YWx1ZSAvPSA0OwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBNQVhfVEVYVFVSRV9TSVpFOgotICAgICAgICA6Omds
R2V0SW50ZWdlcnYoTUFYX1RFWFRVUkVfU0laRSwgdmFsdWUpOwotICAgICAgICBpZiAoZ2V0RXh0
ZW5zaW9ucygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQotICAgICAg
ICAgICAgKnZhbHVlID0gc3RkOjptaW4oNDA5NiwgKnZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAgICA6OmdsR2V0SW50ZWdl
cnYoTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgdmFsdWUpOwotICAgICAgICBpZiAoZ2V0RXh0
ZW5zaW9ucygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQotICAgICAg
ICAgICAgKnZhbHVlID0gc3RkOjptaW4oMTAyNCwgKnZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0j
aWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFNvbWUgb2xkZXIgaGFyZHdhcmUgYWR2ZXJ0aXNlcyBh
IGxhcmdlciBtYXhpbXVtIHRoYW4gdGhleQotICAgIC8vIGNhbiBhY3R1YWxseSBoYW5kbGUuIFJh
dGhlciB0aGFuIGRldGVjdGluZyBzdWNoIGRldmljZXMsIHNpbXBseQotICAgIC8vIGNsYW1wIHRo
ZSBtYXhpbXVtIHRvIDgxOTIsIHdoaWNoIGlzIGJpZyBlbm91Z2ggZm9yIGEgNUsgZGlzcGxheS4K
LSAgICBjYXNlIE1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgOjpnbEdldEludGVnZXJ2
KE1BWF9SRU5ERVJCVUZGRVJfU0laRSwgdmFsdWUpOwotICAgICAgICAqdmFsdWUgPSBzdGQ6Om1p
big4MTkyLCAqdmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1BWF9WSUVXUE9SVF9E
SU1TOgotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZJRVdQT1JUX0RJTVMsIHZhbHVlKTsK
LSAgICAgICAgdmFsdWVbMF0gPSBzdGQ6Om1pbig4MTkyLCB2YWx1ZVswXSk7Ci0gICAgICAgIHZh
bHVlWzFdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMV0pOwotICAgICAgICBicmVhazsKLSNlbmRp
ZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQq
IHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5
cGUpOwotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgQVNTRVJUKHByZWNpc2lvbik7Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUVESVVNX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0lOVDoK
LSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYSAzMi1iaXQgdHdvcy1jb21wbGVtZW50
IGludGVnZXIgZm9ybWF0LgotICAgICAgICByYW5nZVswXSA9IDMxOwotICAgICAgICByYW5nZVsx
XSA9IDMwOwotICAgICAgICBwcmVjaXNpb25bMF0gPSAwOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxP
QVQ6Ci0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGFuIElFRUUgc2luZ2xlLXByZWNp
c2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuCi0gICAgICAgIHJhbmdlWzBdID0gMTI3OwotICAg
ICAgICByYW5nZVsxXSA9IDEyNzsKLSAgICAgICAgcHJlY2lzaW9uWzBdID0gMjM7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAg
aWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
R0MzRGVudW0gb3BlbkdMRm9ybWF0ID0gZm9ybWF0OwotICAgIEdDM0RlbnVtIG9wZW5HTEludGVy
bmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBpZiAodHlw
ZSA9PSBHTF9GTE9BVCkgewotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCi0gICAgICAg
ICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkEzMkZfQVJCOwotICAgICAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfUkdCKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQg
PSBHTF9SR0IzMkZfQVJCOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykg
ewotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCi0gICAgICAgICAgICBvcGVuR0xJbnRl
cm5hbEZvcm1hdCA9IEdMX1JHQkExNkZfQVJCOwotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0g
R0xfUkdCKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IxNkZfQVJC
OwotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFKQotICAgICAgICAgICAg
b3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9MVU1JTkFOQ0UxNkZfQVJCOwotICAgICAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfQUxQSEEpCi0gICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1h
dCA9IEdMX0FMUEhBMTZGX0FSQjsKLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlO
QU5DRV9BTFBIQSkKLSAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0FSQjsKLSAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOwotICAg
IH0KLQotICAgIEFTU0VSVChmb3JtYXQgIT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhU
KTsKLSAgICBpZiAoZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpCi0gICAg
ICAgIG9wZW5HTEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEV4dGVu
c2lvbnMzRDo6U1JHQl9FWFQpCi0gICAgICAgIG9wZW5HTEZvcm1hdCA9IEdMX1JHQjsKLSNlbmRp
ZgotCi0gICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgewotICAgICAgICAvLyBUaGVyZSBhcmUg
c29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVu
IHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIGFkYXB0IHRo
ZW0uCi0gICAgICAgIHN3aXRjaCAob3BlbkdMSW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgY2Fz
ZSBBTFBIQToKLSAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBzaW1wbGUgY29tcG9uZW50
IGNvbnRhaW5pbmcgYW4gYWxwaGEgdmFsdWUuIEl0IG5lZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEg
R0xfUkVEIHBsYW5lLgotICAgICAgICAgICAgLy8gV2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdM
X1JFRCAoYm90aCBuZWVkIHRvIGJlIEdMX0FMUEhBIGluIFdlYkdMKSBhbmQgaW5zdHJ1Y3QgdGhl
IHRleHR1cmUgdG8gc3dpenpsZQotICAgICAgICAgICAgLy8gdGhlIHJlZCBjb21wb25lbnQgdmFs
dWVzIHdpdGggdGhlIGFscGhhIGNvbXBvbmVudCB2YWx1ZXMuCi0gICAgICAgICAgICBvcGVuR0xJ
bnRlcm5hbEZvcm1hdCA9IG9wZW5HTEZvcm1hdCA9IFJFRDsKLSAgICAgICAgICAgIHRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfQSwgUkVEKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIC8vIFRoZSBmb3Jt
YXQgaGFzIDIgY29tcG9uZW50cywgYW4gYWxwaGEgb25lIGFuZCBhIGx1bWluYW5jZSBvbmUgKHNh
bWUgdmFsdWUgZm9yIHJlZCwgZ3JlZW4gYW5kIGJsdWUpLgotICAgICAgICAgICAgLy8gSXQgbmVl
ZHMgdG8gYmUgYmFja2VkIHdpdGggYSBHTF9SRyBwbGFuZSwgdXNpbmcgdGhlIHJlZCBjb21wb25l
bnQgZm9yIHRoZSBjb2xvcnMgYW5kIHRoZSBncmVlbiBjb21wb25lbnQKLSAgICAgICAgICAgIC8v
IGZvciBhbHBoYS4gV2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdMX1JHIGFuZCBzd2l6emxlIHRo
ZSBjb21wb25lbnRzLgotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xG
b3JtYXQgPSBSRzsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NX
SVpaTEVfUiwgUkVEKTsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJF
X1NXSVpaTEVfRywgUkVEKTsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhU
VVJFX1NXSVpaTEVfQiwgUkVEKTsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBU
RVhUVVJFX1NXSVpaTEVfQSwgR1JFRU4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRleElt
YWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgb3BlbkdMRm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYg
ek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNp
ZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsRGVwdGhSYW5nZWYo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKLSNl
bHNlCi0gICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotI2VuZGlmCi19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9F
UykKLSAgICA6OmdsQ2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7Ci0jZWxz
ZQotICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKLSNlbmRpZgotfQotCi0jaWYgIVBMQVRGT1JN
KEdUSykKLUV4dGVuc2lvbnMzRCYgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQot
ewotICAgIGlmICghbV9leHRlbnNpb25zKQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BF
TkdMX0VTKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnMzRE9w
ZW5HTD4odGhpcywgZmFsc2UpOwotI2Vsc2UKLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVu
aXF1ZTxFeHRlbnNpb25zM0RPcGVuR0w+KHRoaXMsIGlzR0xFUzJDb21wbGlhbnQoKSk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9p
ZCogZGF0YSkKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBi
dWcgaXMgZml4ZWQsIGkuZS4sCi0gICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBz
aG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbEZsdXNoKCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0
YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKLSAgICAgICAgOjpnbEZsdXNoKCk7Ci0gICAgfQotICAgIDo6Z2xSZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgaWYgKGF0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX211bHRpc2FtcGxlRkJPKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWF0dHJz
LmFscGhhICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBKSAmJiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX2ZibyB8
fCAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykpKQotICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkpOwotI2VuZGlmCi19Ci0KLX0KLQotI2Vu
ZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjZkZGUwMTU3ZTEwMzk5MGU4ZmI3MzczOTUwMGExM2UxMWE2N2I0MC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjA4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENo
YW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNF
KE9QRU5HTF9FUykpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKLSNlbmRp
ZgotCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTEVTLmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIK
LSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1
ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+Ci0j
aW1wb3J0IDxPcGVuR0xFUy9FUzMvZ2wuaD4KLS8vIEZyb20gPE9wZW5HTEVTL2dsZXh0Lmg+Ci0j
ZGVmaW5lIEdMX1JHQkEzMkZfQVJCICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNAotI2RlZmlu
ZSBHTF9SR0IzMkZfQVJCICAgICAgICAgICAgICAgICAgICAgICAweDg4MTUKLSNlbHNlCi0jZGVm
aW5lIEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAot
I2luY2x1ZGUgPE9wZW5HTC9nbC5oPgotI2luY2x1ZGUgPE9wZW5HTC9nbDMuaD4KLSNpbmNsdWRl
IDxPcGVuR0wvZ2wzZXh0Lmg+Ci0jdW5kZWYgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVS
U0lPTl9IRUFERVJTX0lOQ0xVREVECi0jZW5kaWYKLQotI2Vsc2UKLQotI2lmIFVTRShMSUJFUE9Y
WSkKLSNpbmNsdWRlICJFcG94eVNoaW1zLmgiCi0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1
ZGUgIk9wZW5HTEVTU2hpbXMuaCIKLSNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lO
KQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2VuZGlmCi0KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiYg
Z2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNo
Kj4qIHNoYXJlZE5hbWVIYXNoOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0g
ICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNo
Kj47Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOwotfQotCi1zdGF0aWMg
dm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNoYWRl
ck5hbWVIYXNoKQotewotICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9IHNo
YWRlck5hbWVIYXNoOwotfQotCi0vLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xFIHRy
YW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KLS8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5jZSB0
aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCi0vLyBjYWxsaW5nIGNvbXBpbGVTaGFkZXIg
d2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcgotLy8gdG8gcG9pbnQgdG8gdGhlIG1h
cCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dDNELgotCi1z
dGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90
IGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBD
U3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOwotCi0gICAgLy8gTG9vayB1cCBu
YW1lIGluIG91ciBsb2NhbCBtYXAuCi0gICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJyZW50TmFtZUhh
c2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCk7Ci0gICAg
U2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFtZUhhc2hNYXBG
b3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgIT0gY3Vy
cmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpbmRSZXN1
bHQtPnZhbHVlOwotCi0gICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0cmluZy5oYXNo
KCk7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJpbmc6Omhhc2gg
aW50byBhIDY0LWJpdCByZXN1bHQKLSAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFkZGluZyB0aGUg
c2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxkCi0gICAgLy8gb25seSBiZSBhIHByb2Js
ZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChhbmQKLSAgICAv
LyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCB3ZQot
ICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgotCi0gICAgdWludDY0X3QgcmVz
dWx0ID0gaGFzaFZhbHVlOwotICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsgKGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7Ci0KLSAgICBjdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNv
bnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKLXsKLSAgICBhdXRvIGF0dHJz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEV4dGVuc2lvbnMzRCYgZXh0ZW5zaW9ucyA9
IGdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBpZiAo
ZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7Ci0gICAg
ICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KLSAg
ICAgICAgICAgIGF0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBhdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0
dHJzKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9pc0ZvcldlYkdMMikg
ewotICAgICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIikpIHsKLSAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
ICAgICAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsK
LSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHJvd0J5dGVzID0gQ2hlY2tlZDxpbnQs
IFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRXaWR0aCkgKiA0OwotICAgIGlmIChyb3dCeXRlcy5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENoZWNrZWQ8aW50LCBSZWNv
cmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdo
dDsKLSAgICBpZiAodG90YWxCeXRlc0NoZWNrZWQuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVHZXQo
KTsKLQotICAgIGF1dG8gcGl4ZWxzID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHRv
dGFsQnl0ZXMpOwotICAgIGlmICghcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWFk
UmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFsQnl0ZXMpOwotCi0gICAgaWYgKCFj
b250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkgewotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkgewotICAgICAgICAgICAgLy8gUHJlbXVs
dGlwbHkgYWxwaGEuCi0gICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBw
aXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgICAgICBwaXhlbHNb
aSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1
NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSAr
IDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYWlu
dFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIHByZXNl
bnRSZW5kZXJidWZmZXIoKTsKLSNlbmRpZgotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKQotewotICAgIC8vIE5v
dCBuZWVkZWQgYXQgdGhlIG1vbWVudCwgc28gcmV0dXJuIHRoYXQgbm90aGluZyB3YXMgZG9uZS4K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17Ci0gICAgLy8gUmVhZGlu
ZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hp
Y2ggaXMKLSAgICAvLyBsb3NzeS4KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0
aXBsaWVkQWxwaGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNr
ZWQgPSA0ICogQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRXaWR0aCkgKiBD
aGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudEhlaWdodCk7Ci0gICAgaWYgKHRv
dGFsQnl0ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0
YTsKLSAgICBpbnQgdG90YWxCeXRlcyA9IHRvdGFsQnl0ZXNDaGVja2VkLnVuc2FmZUdldCgpOwot
Ci0gICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKLQotICAgIC8v
IENvbnZlcnQgdG8gUkdCQS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7Ci0KLSAg
ICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJl
VGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotI2lmICFVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNT
T1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0
aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udGV4dEF0dHJp
YnV0ZXMoKS5hbnRpYWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6OnN3YXAobV90
ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBt
X2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG1fZmJvKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotCi0gICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0g
bV9mYm8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJF
MCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJn
ZXQoR0xfVEVYVFVSRTApID09IEdMX1RFWFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShH
TF9URVhUVVJFMCkgOiAwKTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRl
eHR1cmVVbml0KTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
c3RhdGUuYm91bmRGQk8pOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBw
aXhlbHNTaXplKQotewotICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1
cnJlbnRIZWlnaHQgKiA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLQotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAoY29udGV4
dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8p
IHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKLSAgICBi
b29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwotICAgIGlmIChwYWNrQWxpZ25t
ZW50ID4gNCkgewotICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQp
OwotICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwotICAgIH0KLQotICAg
IHJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoMCwgMCwgbV9jdXJyZW50V2lk
dGgsIG1fY3VycmVudEhlaWdodCwgcGl4ZWxzKTsKLQotICAgIGlmIChtdXN0UmVzdG9yZVBhY2tB
bGlnbm1lbnQpCi0gICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFj
a0FsaWdubWVudCk7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJv
dW5kRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWln
aHQgPT0gbV9jdXJyZW50SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lk
dGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1f
Y3VycmVudFdpZHRoID0gd2lkdGg7Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0KLSAg
ICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBH
TF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElU
SEVSLCBHTF9GQUxTRSk7Ci0gICAgCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVG
Qk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJi
dWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwgMCwgMH0sIGNs
ZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAgR0xib29sZWFu
IGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0
aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmYsIHN0
ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBH
TF9DT0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFM
VUUsIGNsZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIDo6
Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0gICAgOjpnbENv
bG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLQotICAgIGF1dG8g
YXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0g
ICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoMSk7Ci0gICAgICAgIDo6Z2xH
ZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwotICAgICAgICA6Omds
RGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVS
X0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAgICAgICA6
OmdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9X
UklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKLSAgICAg
ICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1BU0ssIHJlaW50ZXJwcmV0
X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFz
a1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAgOjpnbENsZWFyKGNsZWFyTWFzayk7Ci0K
LSAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNv
bG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwg
Y29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7Ci0gICAgaWYgKGF0dHJz
LmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKGNsZWFyRGVw
dGgpOwotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgfQotICAgIGlmIChh
dHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsK
LSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsK
LSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgc3RlbmNpbE1hc2tCYWNr
KTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5k
RkJPKTsKLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpj
aGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZv
cm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFkZXJT
b3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291
cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVydGV4
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwotICAg
IGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdt
ZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlh
YmxlPiBjb21iaW5lZFZhcnlpbmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9s
IDogdmVydGV4RW50cnkudmFyeWluZ01hcCkgewotICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJv
bE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5OwotICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5j
bHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgotICAg
ICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBh
cnJheS4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgot
ICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09
ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9
IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5maW5kKHN5bWJvbE5hbWUpOwotICAgICAgICBpZiAo
ZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQotICAgICAg
ICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZh
bHVlKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdz
LnNpemUoKTsKLSAgICBpZiAoIW51bVZhcnlpbmdzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOwotICAgIHZhcmlh
Ymxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQotICAgICAgICB2
YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdTeW1ib2wpOwotCi0gICAgR0MzRGludCBtYXhWYXJ5
aW5nVmVjdG9ycyA9IDA7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsR2V0SW50ZWdlcnYo
TUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3JzKTsKLSNlbHNlCi0gICAgaWYg
KG1faXNGb3JXZWJHTDIpCi0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19W
RUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIGVsc2UgewotICAgICAgICBHQzNEaW50
IG1heFZhcnlpbmdGbG9hdHMgPSAwOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZB
UllJTkdfRkxPQVRTLCAmbWF4VmFyeWluZ0Zsb2F0cyk7Ci0gICAgICAgIG1heFZhcnlpbmdWZWN0
b3JzID0gbWF4VmFyeWluZ0Zsb2F0cyAvIDQ7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHNo
OjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZh
cmlhYmxlcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnByZWNpc2lvbnNNYXRjaChQ
bGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNo
YWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVy
dGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdt
ZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0K
LSAgICBIYXNoTWFwPFN0cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFw
OwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXAp
IHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5t
YXBwZWROYW1lOwotICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyht
YXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5wcmVj
aXNpb24pOwotICAgIH0KLQotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVu
dHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUg
PSBlbnRyeS52YWx1ZS5tYXBwZWROYW1lOwotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1i
b2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0
cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0g
dmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0g
ZW50cnkudmFsdWUucHJlY2lzaW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKLSAgICA6
OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFw
LnJlbW92ZShwcm9ncmFtKTsKLSAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAg
U3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1C
T0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxv
Y2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5h
bWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBp
bmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdl
dCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAg
ICBmYm8gPSBidWZmZXI7Ci0gICAgZWxzZQotICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0
ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwotICAgIGlmIChmYm8g
IT0gbV9zdGF0ZS5ib3VuZEZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRh
cmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7
Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5p
dCwgdGV4dHVyZSwgdGFyZ2V0KTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJl
ZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVh
dGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJh
dGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
bGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwot
fSAgICAgICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0Mz
RGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51
bSBkc3RBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRG
dW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6
ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlw
dHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1
c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZv
aWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlclN1
YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi0jaWYgUExBVEZPUk0oQ09D
T0EpIHx8IFBMQVRGT1JNKFdQRSkKLXZvaWQqIEdyYXBoaWNzQ29udGV4dDNEOjptYXBCdWZmZXJS
YW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVu
Z3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiA6OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNj
ZXNzKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OnVubWFwQnVmZmVyKEdD
M0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
OjpnbFVubWFwQnVmZmVyKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNv
cHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0
LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXpl
aXB0ciBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDb3B5QnVm
ZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZz
ZXQsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1h
dGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKQotewotI2lmIFVTRShPUEVO
R0xfRVMpCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEludGVybmFsZm9y
bWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5h
bGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0oYnVm
U2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4U3RvcmFnZTJEKHRhcmdl
dCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbV9zdGF0ZS50
ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNv
bnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQzNEZW51bSBwbmFtZSwgVmVj
dG9yPEdDM0RpbnQ+JiBwYXJhbXMpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotCi0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwg
dW5pZm9ybUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCBwYXJh
bXMuZGF0YSgpKTsKLX0KLSNlbmRpZgotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdl
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiBy
LCBHQzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXIobWFzayk7Ci0gICAgY2hlY2tHUFVT
dGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0Rp
bnQgcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJTdGVuY2ls
KHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4g
cmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxw
aGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbG9yTWFzayhyZWQs
IGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBp
bGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGlu
Zy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQotICAgIC8vIHBv
aW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCi0g
ICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNv
dXJjZXMoKTsKLSAgICBTaEhhc2hGdW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5H
TEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlv
biA9IG5hbWVIYXNoRm9yU2hhZGVyOwotCi0gICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMp
Ci0gICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhh
c2g+KCk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9y
U2hhZGVycy5nZXQoKSk7Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJj
ZXMpOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMt
PmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOwotCi0gICAgQU5HTEVSZXNv
dXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rpb247Ci0gICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1h
cEZvclNoYWRlcihudWxscHRyKTsKLQotICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5s
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRl
ZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKLSAgICBjb25z
dCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0
YSgpOwotICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNT
dHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hh
ZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4i
LCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgpKTsKLSAgICBMT0coV2ViR0ws
ICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJh
bnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOwotCi0gICAg
OjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNs
YXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsK
LSAgICAKLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLSAgICAKLSAgICA6OmdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwotCi0gICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3Vs
dC0+dmFsdWU7Ci0KLSAgICAvLyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZwotICAgIEdMaW50IGxl
bmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RI
LCAmbGVuZ3RoKTsKLQotICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgR0xzaXplaSBzaXplID0g
MDsKLSAgICAgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgICAgICA6OmdsR2V0
U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAg
ICAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OwotICAgICAg
ICBlbnRyeS5sb2cgPSBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZv
LmRhdGEoKSwgc2l6ZSkpOwotICAgIH0KLQotICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RS
VUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBMT0coV2ViR0ws
ICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wg
d291bGQgbm90IGNvbXBpbGUuIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFT
U0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgSGFzaE1hcDxQ
bGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYWRlclNvdXJjZUVu
dHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJT
b3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBzaGFk
ZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgc2hhZGVy
U291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhX
ZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRp
cmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKLQotICAgIDo6Z2xT
aGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVu
Z3RoKTsKLQotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0KLSAgICBpbnQgY29tcGls
ZVN0YXR1czsKLQotICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAm
Y29tcGlsZVN0YXR1cyk7Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7Ci0g
ICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOwotICAgICAgICBMT0coV2ViR0wsICJEaXJlY3Qg
Y29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJl
Y3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygp
OwotCi0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJ
bnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAg
OjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0
ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwot
ICAgIH0KLSAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAm
JiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0g
bW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ3VsbEZhY2UobW9k
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5j
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFn
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9n
cmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgOjpn
bERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsRGlzYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGlu
dCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0
dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERyYXdFbGVtZW50cyhtb2Rl
LCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSkpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Zmx1c2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGbHVzaCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNo
bWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBH
QzNEaW50IGxldmVsKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGcmFt
ZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZSwgbGV2ZWwpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJy
ZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZh
Y2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
RnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1p
cG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbWF4QXR0cmlidXRl
U2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKLSAgICBWZWN0b3I8R0xjaGFyPiBu
YW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgg
aW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwot
ICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0
aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwg
JnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFs
U3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmco
bmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU3Ry
aW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0ws
ICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8g
JyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5h
bE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIGluZm8ubmFtZSA9IG9yaWdpbmFs
TmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJp
YihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQotewotICAgIEdDM0RpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9u
QnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfQVRUUklCVVRFUywgJnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQ
cm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAg
IEdDM0R1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1
YWxBdHRyaWJ1dGVJbmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1
YWxBdHRyaWJ1dGVJbmRleE1hcFtpbmRleF0gOiAtMTsKLQotICAgIHJldHVybiBnZXRBY3RpdmVB
dHRyaWJJbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBt
YXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJ
VkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotCi0gICAgVmVjdG9yPEdM
Y2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAw
OwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0
QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3Ro
LCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2lu
YWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBTdHJpbmco
bmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU3Ry
aW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0ws
ICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAnJXMnIHRvICcl
cyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxO
YW1lLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAgCi0gICAgaW5mby5uYW1lID0gb3JpZ2lu
YWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5p
Zm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQotewotICAgIEdDM0RpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0
Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpB
Q1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVy
UHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAg
ICBHQzNEdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0
dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVh
bFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKLSAgICAKLSAgICByZXR1cm4gZ2V0QWN0aXZl
VW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNo
YWRlcnMpCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKLX0KLQotc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUo
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG5hbWU7Ci0gICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFt
ZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ3ZWJnbF8iKTsKLSAgICBhcHBlbmRVbnNp
Z25lZEFzSGV4KG51bWJlciwgYnVpbGRlciwgTG93ZXJjYXNlKTsKLSAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwotfQotCi1PcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dDNEOjpt
YXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5H
TEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1i
b2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5k
KG5hbWUpOwotICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50
cnktPnZhbHVlLm1hcHBlZE5hbWU7Ci0gICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3Ry
KCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5
bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEdDM0RzaXpl
aSBjb3VudCA9IDA7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdID0geyB9OwotICAg
IGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAg
Zm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGF1dG8gbWFw
cGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJv
bFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRh
Y2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byByZXN1
bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0g
bV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0g
cmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5T
aGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0g
ICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFs
dWUoKTsKLSAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1h
cHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgIH0K
LQotICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYg
IW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBj
YXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBj
b21waWxlZCwKLSAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQg
aW4gYW55IHNoYWRlciBwcm9ncmFtLgotICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVy
cykKLSAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVy
TmFtZUhhc2g+KCk7Ci0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1l
SGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotCi0gICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9
IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKLQotICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobnVsbHB0cik7Ci0KLSAgICAgICAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0
ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7Ci0KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRl
ZE5hbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLU9wdGlvbmFsPFN0cmluZz4g
R3JhcGhpY3NDb250ZXh0M0Q6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1h
cCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAgIGZvciAoY29uc3Qg
YXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gc3lt
Ym9sRW50cnkudmFsdWUubWFwcGVkTmFtZS5jX3N0cigpKQotICAgICAgICAgICAgcmV0dXJuIHN5
bWJvbEVudHJ5LmtleTsKLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIEdDM0RzaXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hh
ZGVycyk7Ci0gICAgCi0gICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJj
ZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFs
TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICB9Ci0K
LSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0
ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJv
Z3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewotICAg
ICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOwotICAgICAgICBhdXRvIG9y
aWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVy
cy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0g
ICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgICAgIG9yaWdpbmFs
TmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNv
bmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAg
ICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChzeW1i
b2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBi
ZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKLSAgICAg
ICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBw
cm9ncmFtLgotCi0gICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVzZWRB
dHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKLSAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3NpYmx5
VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+dmFs
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRl
eHQzRDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIHNpemVf
dCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAoc2l6ZV90IHN5bWJvbFR5
cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJPTF9U
WVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9y
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBTaGFkZXJTeW1ib2xN
YXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19jYXN0PGVudW0g
QU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7Ci0gICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUubWFwcGVkTmFtZS5jX3N0cigpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBuYW1lOwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7Ci0g
ICAgTE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0
dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRh
KCkpOwotfQotCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlm
ICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0KLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRm
OCgpLmRhdGEoKSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1vdmVFcnJvcnNUb1N5
bnRoZXRpY0Vycm9yTGlzdCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYm9v
bCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQg
b2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCi0gICAgLy8gYSBwcm9ibGVt
IGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9y
LgotICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19F
UlJPUi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAg
R0MzRGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciA9PSBOT19F
UlJPUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQo
ZXJyb3IpOwotICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVy
biBtb3ZlZEFuRXJyb3I7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJv
cigpCi17Ci0gICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Ly8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9y
IGxpc3QgaW4gY2FzZQotICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUsIHNp
bmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCi0gICAgICAgIC8vIGdsR2V0RXJyb3Ig
YW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgotICAg
ICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICAgICAgcmV0dXJuIG1f
c3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGlu
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAg
IGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Ci19
Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0g
ICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQot
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
OjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAg
ICBpZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1
cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdp
ZHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xMaW5lV2lkdGgod2lk
dGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotCi0gICAgR0MzRHNpemVpIGNvdW50ID0gMDsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIs
ICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBpZiAoY291bnQgPT0gMikKLSAgICAgICAgbV9saW5r
ZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0sIHNoYWRl
cnNbMV0pKTsKLQotICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0p
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1l
LCBwYXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0Mz
RGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFNhbXBs
ZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
Y2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFNjaXNzb3IoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNv
dXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0g
ICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIFNo
YWRlclNvdXJjZUVudHJ5IGVudHJ5OwotCi0gICAgZW50cnkuc291cmNlID0gc3RyaW5nOwotCi0g
ICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNp
bEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJl
ZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
dWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZh
aWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJh
dGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVt
IHpwYXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsT3BT
ZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RmbG9hdCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4
UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBj
b25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xV
bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25z
dCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiAzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlm
b3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2
MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYw
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRp
b24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUs
IGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0Rp
bnQgdjEsIEdDM0RpbnQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0
IEdDM0RpbnQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3Jt
M2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNE
aW50IHYyLCBHQzNEaW50IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwg
Y29uc3QgR0MzRGludCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVu
aWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
QzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAxNi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0
dHJpYjFmKGluZGV4LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJh
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgY29u
c3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZs
b2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4
QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwg
R0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29u
c3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwg
R0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwg
R0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlk
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVmVydGV4QXJy
YXkoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBhcnJheSA9IDA7
Ci0jaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4p
KSkgfHwgUExBVEZPUk0oQ09DT0EpCi0gICAgOjpnbEdlblZlcnRleEFycmF5cygxLCAmYXJyYXkp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGFycmF5OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICgh
YXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikp
KSB8fCBQTEFURk9STShDT0NPQSkKLSAgICA6OmdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJh
eSk7Ci0jZW5kaWYKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4
QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5KQotICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYg
KCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwg
UExBVEZPUk0oQ09DT0EpCi0gICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFycmF5KGFycmF5KTsKLSNl
bmRpZgotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0jaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCi0gICAgOjpnbEJpbmRWZXJ0ZXhBcnJh
eShhcnJheSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhcnJheSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Ri
b29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0
Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEJ1ZmZl
clBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVl
KTsKLX0KLSAgICAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXI2NHYoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAqdmFsdWUgPSAwOwotICAgIC8vIEZJWE1F
IDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0
byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250
ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUs
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAg
ICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hN
RU5ULCBlaXRoZXIgd29ya3MuCi0gICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIEFTU0VSVChBQ1RJVkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9S
TVMgPT0gcG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgewotICAgICAgICAqdmFsdWUgPSByZXN1
bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzKCkpOwotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFs
dWU7Ci0KLSAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmls
dGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKLSAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmli
dXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdM
LgotICAgIEdDM0RpbnQgYXR0cmlidXRlQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7Ci0gICAgZm9yIChH
QzNEaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJ
bmZvIGluZm87Ci0gICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7
Ci0gICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0
ZUluZGV4TWFwLmFwcGVuZChpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRG8gdGhlIHNhbWUgZm9y
IHVuaWZvcm1zLgotICAgIEdDM0RpbnQgdW5pZm9ybUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Ci0gICAgZm9y
IChHQzNEaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKLSAgICAgICAgQWN0aXZl
SW5mbyBpbmZvOwotICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZv
KTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1
YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAqdmFsdWUgPSBz
eW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwg
R0MzRHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKLXsKLSAgICBMT0coV2ViR0wsICJP
cmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBK
U0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3ODlhYmNk
ZWZBQkNERUZdKyIpOwotCi0gICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7Ci0gICAgCi0g
ICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNoYWRlciBz
b3VyY2UgdGhhdAotICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxlcnMuIFRo
ZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKLSAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhlIHVzZXIg
c2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAotICAgIC8vIGlzIGNhdXNpbmcg
aXQuCi0gICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVXYXJuaW5n
IHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlzIG5vdCBz
dXBwb3J0ZWRcbiJfcyB9OwotICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0aChhbmds
ZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKLSAgICBpbnQgbWF0
Y2hlZExlbmd0aCA9IDA7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGludCBzdGFydCA9IHJlZ0V4cC5t
YXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOwotICAgICAgICBpZiAoc3RhcnQg
PT0gLTEpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5k
KGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOwotICAgICAgICBz
dGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7Ci0KLSAgICAgICAgY29uc3QgU3RyaW5n
JiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0aCk7Ci0g
ICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFtZShzaGFk
ZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7Ci0gICAgICAgIExPRyhXZWJHTCwgIkRlbWFuZ2xp
bmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRTeW1ib2wu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVkU3ltYm9s
KTsKLSAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5sZW5ndGgo
KSkpOwotCi0gICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwg
bG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7Ci0KLSAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQg
U2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hh
cj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5n
dGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICBHQzNEc2l6ZWkgY291bnQ7Ci0gICAgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFt
LCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2co
c2hhZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0g
ICAgCi0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKLSAgICBj
YXNlIFNIQURFUl9UWVBFOgotICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwg
dmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAgICAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAq
dmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUu
aXNWYWxpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgotICAg
ICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAg
ICAqdmFsdWUgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICp2
YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAgKnZhbHVlID0gZ2V0U2hh
ZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7Ci0gICAgfQotfQotCi1T
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgY29uc3QgU2hhZGVyU291cmNlRW50cnkmIGVu
dHJ5ID0gcmVzdWx0LT52YWx1ZTsKLSAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCi0gICAgICAgIHJl
dHVybiBlbnRyeS5sb2c7Ci0KLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRTaGFk
ZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5n
dGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBHTHNpemVpIHNpemUgPSAwOwot
ICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICA6OmdsR2V0U2hhZGVySW5mb0xv
ZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07Ci0gICAgcmV0dXJuIGdldFVubWFuZ2xl
ZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0KLVN0
cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0KLSAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNo
YWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRVbmlmb3JtZnYo
cHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdl
dFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi1HQzNEaW50IEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwotICAgIExP
RyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIDo6
Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZh
bHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1l
LCB2YWx1ZSk7Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMdm9pZCogcG9pbnRlciA9IDA7Ci0gICAgOjpnbEdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBv
aW50ZXIpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotCi0jaWYgIVVTRShPUEVOR0xfRVMpCi0gICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMp
Ci0gICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKLSNlbmRpZgotCi0gICAgaWYgKG1f
dXNpbmdDb3JlUHJvZmlsZSkgIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZh
bHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUg
cHJvZmlsZSwgc28gd2UgbmVlZAotICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBkbyBp
biBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCgpLgotICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkgewotICAgICAgICBjYXNlIEFMUEhBOgotICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdM
X1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCi0gICAgICAgICAg
ICBmb3JtYXQgPSBSRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMVU1JTkFO
Q0VfQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8gYmFjayBHTF9M
VU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1h
dCA9IFJHOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQg
dG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1
ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KLSAgICA6OmdsVGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdl
U2l6ZSwgZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBk
YXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLVBsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Ci0g
ICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVp
bnQgbyA9IDA7Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBv
OwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFt
KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVQcm9n
cmFtKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8g
PSAwOwotICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19
Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNE
ZW51bSB0eXBlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENy
ZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVS
IDogR0xfVkVSVEVYX1NIQURFUik7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IEdMdWludCBvID0gMDsKLSAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKLSAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG8pOwotICAgIHJldHVybiBvOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlm
IChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAg
ICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRG
cmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotICAgIGdsRGVsZXRlRnJhbWVidWZm
ZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9n
cmFtKTsKLSAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZl
cikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1v
dmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBrZXlWYWx1
ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOwotICAgIH0pOwotICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJnRleHR1cmUpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4
dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdD
M0RlbnVtIGVycm9yKQotewotICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMg
dG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIG9yZGVy
IG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKLSAgICAvLyBhbnkg
ZXJyb3JzIGZyb20gZ2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcu
Ci0gICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9zeW50aGV0aWNF
cnJvcnMuYWRkKGVycm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFya0NvbnRl
eHRDaGFuZ2VkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBtX2xheWVy
Q29tcG9zaXRlZCA9IHRydWU7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3Rv
cihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmRpZENvbXBvc2l0ZSgpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2xheWVyQ29tcG9zaXRlZDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zm9yY2VD
b250ZXh0TG9zdCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9j
bGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlY3ljbGVDb250ZXh0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPnJlY3ljbGVD
b250ZXh0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24oKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVj
dG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5v
dGlmaWNhdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGly
ZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0
YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVz
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50c0luc3RhbmNlZChH
QzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIg
b2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3
RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsK
LSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQotewotICAg
IGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKLX0K
LQotI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Ci19
Ci0jZW5kaWYKLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYm
IChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTEVTLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2ODIxY2E2
ZmQ4MzM4MTViM2I4M2FjMmRmNzUzODAyNjE0ODYzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlk
b3dAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfM0QpICYmIFVTRShPUEVOR0xfRVMpICYmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRE9wZW5HTEVTLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaW5jbHVkZSA8QU5HTEUvU2hhZGVy
TGFuZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0
YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xG
bHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAotICAgIC8vIGFs
bCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcg
cGl4ZWxzLgotICAgIDo6Z2xGbHVzaCgpOwotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcyAm
JiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgIHJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICAgICAgOjpnbEZsdXNoKCk7Ci0gICAgfQotCi0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlm
TmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBj
aGFyKiBwaXhlbHMpCi17Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKLSAgICBpbnQgdG90YWxCeXRlcyA9
IHdpZHRoICogaGVpZ2h0ICogNDsKLSAgICBpZiAoaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQotICAgICAgICAgICAg
c3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdSQS4K
LSAgICB9Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IElu
dFNpemUmIHNpemUpCi17Ci0gICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAg
IGNvbnN0IGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIEdMdWludCBjb2xvckZvcm1h
dCA9IDA7Ci0gICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAg
IGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9
IEdMX1JHQkE7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGNvbG9yRm9y
bWF0ID0gR0xfUkdCOwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3
aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCi0gICAgLy8gU2VlIEdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCi0gICAgYm9vbCBzdXBwb3J0UGFj
a2VkRGVwdGhTdGVuY2lsQnVmZmVyID0gKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKSAmJiBnZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhf
c3RlbmNpbCIpOwotCi0gICAgLy8gUmVzaXplIHJlZ3VsYXIgRkJPLgotICAgIGJvb2wgbXVzdFJl
c3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2Zibykgewot
ICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV90ZXh0dXJl
KTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6
OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICA6
OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICAgICAg
OjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAg
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICB9Ci0KLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICA6
OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0jZW5kaWYKLQotICAgIEV4dGVuc2lv
bnMzRE9wZW5HTEVTJiBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNET3BlbkdM
RVMmPihnZXRFeHRlbnNpb25zKCkpOwotICAgIGlmIChleHRlbnNpb25zLmlzSW1hZ2luYXRpb24o
KSAmJiBhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBHTGludCBtYXhTYW1wbGVDb3Vu
dDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVNfSU1H
LCAmbWF4U2FtcGxlQ291bnQpOyAKLSAgICAgICAgR0xpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1p
big4LCBtYXhTYW1wbGVDb3VudCk7Ci0KLSAgICAgICAgZXh0ZW5zaW9ucy5mcmFtZWJ1ZmZlclRl
eHR1cmUyRE11bHRpc2FtcGxlSU1HKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwLCBzYW1wbGVDb3VudCk7Ci0KLSAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgICAg
ICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4K
LSAgICAgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5yZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVMsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJC
VUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmli
dXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkgewotICAgICAgICAgICAgICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAg
ICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwg
bV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICAg
ICAgZXh0ZW5zaW9ucy5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZl
cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkg
ewotICAgICAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3ZSBrbm93
IHdlIGhhdmUgaXQuCi0gICAgICAgICAgICBpZiAoc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1
ZmZlcikgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJi
dWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMsIHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCi0g
ICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKLSAgICAg
ICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCkgewotICAgICAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihH
TF9SRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgIDo6
Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgs
IHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVS
QlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICAgICAgICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAg
ICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJCVUZGRVIsIEdMX0RF
UFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgOjpn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hN
RU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHTF9GUkFNRUJVRkZFUikgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAg
ICAgICAgLy8gRklYTUU6IGNsZWFudXAKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYpCi17Ci0g
ICAgLy8gRklYTUU6IFdlIGRvbid0IHN1cHBvcnQgYW50aWFsaWFzaW5nIHlldC4KLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJT
dG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwg
R0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0MzRGludCogcmFuZ2UsIEdDM0RpbnQqIHByZWNpc2lv
bikKLXsKLSAgICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVChwcmVjaXNpb24pOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChz
aGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9uKTsKLX0KLQotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFs
aWRhdGVBdHRyaWJ1dGVzKCkKLXsKLSAgICB2YWxpZGF0ZURlcHRoU3RlbmNpbCgiR0xfT0VTX3Bh
Y2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0
cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzICYmICFnZXRFeHRlbnNp
b25zKCkuc3VwcG9ydHMoIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSkg
ewotICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICBzZXRDb250
ZXh0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZh
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBk
ZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJEZXB0aGYo
ZGVwdGgpOwotfQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLUV4dGVuc2lvbnMzRCYgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25zKQotICAg
ICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnMzRE9wZW5HTEVTPih0aGlz
LCBpc0dMRVMyQ29tcGxpYW50KCkpOwotICAgIHJldHVybiAqbV9leHRlbnNpb25zOwotfQotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkKLVJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0
ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6
OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQotewotICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24g
ZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RX
aW5kb3cuCi0gICAgaWYgKGRlc3RpbmF0aW9uID09IERlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9z
dFdpbmRvdykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAg
ICBpZiAoIWluaXRpYWxpemVkKSB7Ci0jaWYgIVVTRShPUEVOR0xfRVMpCi0gICAgICAgIHN1Y2Nl
c3MgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKLSNlbmRpZgotICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgfQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRy
aWJ1dGVzLCBob3N0V2luZG93LCByZW5kZXJTdHlsZSkpOwotfQotCi1HcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRp
b24sIEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRDb250ZXh0KQotICAgIDogR3JhcGhpY3NDb250
ZXh0M0RCYXNlKGF0dHJpYnV0ZXMsIGRlc3RpbmF0aW9uLCBzaGFyZWRDb250ZXh0KQotICAgICwg
bV9jb21waWxlcihpc0dMRVMyQ29tcGxpYW50KCkgPyBTSF9FU1NMX09VVFBVVCA6IFNIX0dMU0xf
Q09NUEFUSUJJTElUWV9PVVRQVVQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU+KHRoaXMsIGRlc3RpbmF0aW9uKSkKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKHNoYXJlZENvbnRleHQsICFzaGFyZWRDb250ZXh0KTsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAKLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxp
ZGF0aW9uLgotCi0gICAgaWYgKGRlc3RpbmF0aW9uID09IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4p
IHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50by4KLSAgICAgICAg
OjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgICAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBDcmVhdGUgYW4gRkJPLgotICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZt
X2Zibyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgCi0gICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKLSAgICAgICAg
aWYgKCFhdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJp
YnV0ZXMuZGVwdGgpKQotICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgCi0gICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2Ft
cGxlIEZCTy4KLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgICAg
ICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwot
ICAgICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAg
ICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkK
LSAgICAgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gQU5HTEUg
aW5pdGlhbGl6YXRpb24uCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwot
ICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVzb3VyY2VzKTsKLSAgICAKLSAgICBn
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVy
dGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwot
ICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lN
QUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7
Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7Ci0gICAgCi0gICAgLy8gQWx3
YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1
ZmZlcnMgPSAxOwotICAgIAotICAgIEdDM0RpbnQgcmFuZ2VbMl0sIHByZWNpc2lvbjsKLSAgICBn
ZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFu
Z2VbMV0gfHwgcHJlY2lzaW9uKTsKLSAgICAKLSAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7Ci0gICAgCi0jaWYgIVVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEVuYWJs
ZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKLSAgICA6OmdsRW5hYmxlKEdMX1BPSU5U
X1NQUklURSk7Ci0jZW5kaWYKLSAgICAKLSAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotCi0gICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlm
IChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6
OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0g
ICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgIH0KLSAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soc3RkOjp1bmlx
dWVfcHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8RXJyb3JNZXNzYWdl
Q2FsbGJhY2s+KQotewotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1
cnJlbnQoKQotewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKCkKLXsKLX0KLQotUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhdGZvcm1Db250ZXh0KCk7Ci19Ci0KLVBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fdGV4dHVyZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4g
dHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV93ZWJHTExheWVyLT5wbGF0Zm9ybUxheWVyKCk7Ci19Ci0jZW5kaWYKLQotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShPUEVOR0xfRVMpICYmICFQ
TEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWIzMzYxMTgwYjFiMmJhNmU5MTJlNDBkZDIxNTNiNGZkMzRiNDA1NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5jcHAKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYg
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
KyNpbmNsdWRlICJGb3JtYXRDb252ZXJ0ZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugewor
CitHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBnZXREYXRhRm9ybWF0KEdDM0RlbnVtIGRl
c3RpbmF0aW9uRm9ybWF0LCBHQzNEZW51bSBkZXN0aW5hdGlvblR5cGUpCit7CisgICAgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE4OworICAgIHN3aXRjaCAoZGVzdGluYXRpb25UeXBlKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChkZXN0
aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
ODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCODsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FMUEhB
OgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkE4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBNTU1MTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Cisg
ICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFO
Q0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkExNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6U1JHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
TE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZv
cm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpBTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpBMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgorICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FM
UEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBy
ZXR1cm4gZHN0Rm9ybWF0OworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgdW5wYWNrQWxpZ25tZW50KQoreworICAgIEFTU0VSVCh1
bnBhY2tBbGlnbm1lbnQgPT0gMSB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gMiB8fCB1bnBhY2tBbGln
bm1lbnQgPT0gNCB8fCB1bnBhY2tBbGlnbm1lbnQgPT0gOCk7CisgICAgVW5pcXVlQXJyYXk8dW5z
aWduZWQgY2hhcj4gemVybzsKKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKKyAg
ICAgICAgdW5zaWduZWQgc2l6ZTsKKyAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBjb21wdXRlSW1h
Z2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIHVucGFja0FsaWdubWVu
dCwgJnNpemUsIG51bGxwdHIpOworICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0
R0w6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgemVybyA9IG1ha2VV
bmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPihzaXplKTsKKyAgICAgICAgaWYgKCF6ZXJvKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbWVt
c2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgIH0KKyAgICByZXR1cm4gdGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHplcm8uZ2V0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCB1bnNpZ25lZCogY29tcG9uZW50c1BlclBpeGVsLCB1bnNpZ25lZCogYnl0ZXNQZXJD
b21wb25lbnQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRUQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBP
TkVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgICAg
ICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Ukc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAg
ICpjb21wb25lbnRzUGVyUGl4ZWwgPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVH
RVI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUOgorICAgICAgICAqY29tcG9uZW50
c1BlclBpeGVsID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkJHUkFfRVhUOiAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdS
QTg4ODgKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgICAgICpj
b21wb25lbnRzUGVyUGl4ZWwgPSA0OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKKyAgICAgICAgKmJ5dGVzUGVyQ29t
cG9uZW50ID0gc2l6ZW9mKEdDM0R1Ynl0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkJZVEU6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVv
ZihHQzNEYnl0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0Mz
RHVzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNI
T1JUOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHNob3J0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRf
NV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRf
NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgor
ICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9u
ZW50ID0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgICAgICpjb21wb25lbnRzUGVy
UGl4ZWwgPSAxOworICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVpbnQp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9J
TlQ6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdWludCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKKyAgICAgICAgKmJ5
dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RpbnQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICAg
ICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQK
KyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RoYWxmZmxvYXQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF8zMl9VTlNJR05F
RF9JTlRfMjRfOF9SRVY6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNE
ZmxvYXQpICsgc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJu
YWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtJiBmb3JtYXQsIEdDM0Rl
bnVtJiB0eXBlKQoreworI2RlZmluZSBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKGludGVybmFs
Rm9ybWF0TWFjcm8sIGZvcm1hdE1hY3JvLCB0eXBlTWFjcm8pIGNhc2UgaW50ZXJuYWxGb3JtYXRN
YWNybzogXAorICAgICAgICBmb3JtYXQgPSBmb3JtYXRNYWNybzsgXAorICAgICAgICB0eXBlID0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnR5cGVNYWNybzsgXAorICAgICAgICBicmVhazsKKwor
ICAgIHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Cisg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQSAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkxV
TUlOQU5DRV9BTFBIQSwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0UgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0UgICAgICAsIFVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6QUxQSEEgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEEgICAg
ICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4ICAgICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJFRCAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSOF9TTk9STSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAgICAs
IEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjE2RiAgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkVEICAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAp
OworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIzMkYg
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRCAgICAgICAgICAgICwgRkxPQVQg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhJICAgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBCWVRFICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlIxNlVJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9J
TlRFR0VSICAgICwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJICAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIFNIT1JUICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UjMyVUkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIg
ICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIzMkkgICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
RzggICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRyAgICAgICAgICAgICAsIFVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4X1NOT1JNICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkcgICAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZGICAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwgSEFMRl9GTE9B
VCAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpSRzMyRiAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
RyAgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUkgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHOEkgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVH
RVIgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUkgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAg
ICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6UkcxNkkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAg
LCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJVSSAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAg
KTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzMy
SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIElOVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UkdCOCAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4ICAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpSR0I1NjUgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ig
ICAgICAgICAgICAsIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICk7CisgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCOF9TTk9STSAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OlIxMUZfRzExRl9CMTBGICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAg
ICAgICwgVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAgKTsKKyAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I5X0U1ICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF81XzlfOV85X1JFViAg
ICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UkdCMTZGICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBI
QUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyRiAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQiAgICAgICAgICAgICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4VUkg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIFVOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6UkdCOEkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkdCX0lOVEVHRVIgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2VUkgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgVU5TSUdORURfU0hPUlQg
ICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IxNkkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5U
RUdFUiAgICAsIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJVSSAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAg
ICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjMySSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAg
ICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOCAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6U1JH
QjhfQUxQSEE4ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4X1NOT1JNICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkEgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1X0ExICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX1NI
T1JUXzVfNV81XzEgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UkdCQTQgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QSAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICApOworICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBMTZGICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAg
ICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyRiAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkE4VUkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwg
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOEkgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBf
QTJVSSAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKKyAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZJICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFNIT1JUICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQTMySSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9J
TlRFR0VSICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMlVJICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURfSU5UICAgICAgICAg
ICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQxNiAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05F
TlQsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAg
ICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0NPTVBPTkVOVDI0ICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgVU5T
SUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkYsIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RF
TkNJTCAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCAgLCBVTlNJR05FRF9J
TlRfMjRfOCAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDggICwgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX1NURU5DSUwgICwgVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKTsKKyAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lM
OCAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAsIEZMT0FUXzMyX1VOU0lHTkVE
X0lOVF8yNF84X1JFVik7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShFeHRlbnNpb25z
R0w6OlNSR0JfRVhUICAgICAgICAgICAgICAgLCBFeHRlbnNpb25zR0w6OlNSR0JfRVhUICAgICAg
ICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVCAgICAgICAgICwgRXh0
ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVCAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI3Vu
ZGVmIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UKKworICAgIHJldHVybiB0cnVlOworfQorCitH
QzNEZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYWxpZ25tZW50LCB1bnNpZ25lZCogaW1hZ2VTaXplSW5CeXRlcywg
dW5zaWduZWQqIHBhZGRpbmdJbkJ5dGVzKQoreworICAgIEFTU0VSVChpbWFnZVNpemVJbkJ5dGVz
KTsKKyAgICBBU1NFUlQoYWxpZ25tZW50ID09IDEgfHwgYWxpZ25tZW50ID09IDIgfHwgYWxpZ25t
ZW50ID09IDQgfHwgYWxpZ25tZW50ID09IDgpOworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOwor
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50OworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQ
ZXJQaXhlbDsKKyAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQs
IHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpCisgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNOworICAgIGlmICghd2lkdGgg
fHwgIWhlaWdodCkgeworICAgICAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IDA7CisgICAgICAgIGlm
IChwYWRkaW5nSW5CeXRlcykKKyAgICAgICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IDA7CisgICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7CisgICAgfQorICAgIENoZWNr
ZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkVmFsdWUgPSBieXRlc1BlckNvbXBv
bmVudCAqIGNvbXBvbmVudHNQZXJQaXhlbDsKKyAgICBjaGVja2VkVmFsdWUgKj0gIHdpZHRoOwor
ICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgdW5zaWduZWQgdmFsaWRSb3dTaXpl
ID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOworICAgIHVuc2lnbmVkIHBhZGRpbmcgPSAwOwor
ICAgIHVuc2lnbmVkIHJlc2lkdWFsID0gdmFsaWRSb3dTaXplICUgYWxpZ25tZW50OworICAgIGlm
IChyZXNpZHVhbCkgeworICAgICAgICBwYWRkaW5nID0gYWxpZ25tZW50IC0gcmVzaWR1YWw7Cisg
ICAgICAgIGNoZWNrZWRWYWx1ZSArPSBwYWRkaW5nOworICAgIH0KKyAgICAvLyBMYXN0IHJvdyBu
ZWVkcyBubyBwYWRkaW5nLgorICAgIGNoZWNrZWRWYWx1ZSAqPSAoaGVpZ2h0IC0gMSk7CisgICAg
Y2hlY2tlZFZhbHVlICs9IHZhbGlkUm93U2l6ZTsKKyAgICBpZiAoY2hlY2tlZFZhbHVlLmhhc092
ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFOworICAgICppbWFnZVNpemVJbkJ5dGVzID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOwor
ICAgIGlmIChwYWRkaW5nSW5CeXRlcykKKyAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFkZGlu
ZzsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOworfQorCitHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6OkltYWdlRXh0cmFjdG9yKEltYWdlKiBp
bWFnZSwgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQoreworICAgIG1faW1hZ2UgPSBpbWFn
ZTsKKyAgICBtX2ltYWdlSHRtbERvbVNvdXJjZSA9IGltYWdlSHRtbERvbVNvdXJjZTsKKyAgICBt
X2V4dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0SW1hZ2UocHJlbXVsdGlwbHlBbHBoYSwgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwYWNrSW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AgYWxwaGFPcCwgRGF0
YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorewor
ICAgIGlmICghaW1hZ2UgfHwgIXBpeGVscykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
dW5zaWduZWQgcGFja2VkU2l6ZTsKKyAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tl
ZCAoYWxpZ25tZW50ID09IDEpLgorICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3Jt
YXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCBudWxscHRyKSAhPSBHcmFw
aGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRh
LnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAgIGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZVVucGFja0FsaWdubWVudCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBkYXRhLmRhdGEo
KSwgZmxpcFkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyID0gaW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgb2JzZXJ2ZXItPmRp
ZERyYXcoKmltYWdlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEqIGltYWdlRGF0YSwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGludCB3aWR0aCA9IGltYWdlRGF0YS0+d2lkdGgoKTsKKyAg
ICBpbnQgaGVpZ2h0ID0gaW1hZ2VEYXRhLT5oZWlnaHQoKTsKKworICAgIHVuc2lnbmVkIHBhY2tl
ZFNpemU7CisgICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9
PSAxKS4KKyAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCAxLCAmcGFja2VkU2l6ZSwgbnVsbHB0cikgIT0gR3JhcGhpY3NDb250ZXh0R0w6
Ok5PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS5yZXNpemUocGFja2Vk
U2l6ZSk7CisKKyAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBm
b3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDog
QWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdW5zaWduZWQgdW5wYWNrQWxpZ25tZW50
LCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGNvbnN0IHZvaWQqIHBpeGVscywg
VmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQoreworICAgIC8vIEFzc3VtZXMgZm9ybWF0LCB0eXBlLCBl
dGMuIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KKyAgICBEYXRhRm9ybWF0IHNvdXJjZURh
dGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwgdHlwZSk7CisKKyAgICAvLyBSZXNpemUg
dGhlIG91dHB1dCBidWZmZXIuCisgICAgdW5zaWduZWQgY29tcG9uZW50c1BlclBpeGVsLCBieXRl
c1BlckNvbXBvbmVudDsKKyAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhm
b3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gY29tcG9u
ZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgZGF0YS5yZXNpemUod2lkdGgg
KiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKKworICAgIGlmICghcGFja1BpeGVscyhzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgdW5wYWNrQWxpZ25tZW50LCBmb3JtYXQsIHR5cGUsIChwcmVtdWx0aXBseUFscGhhID8g
QWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZyksIGRhdGEuZGF0YSgp
LCBmbGlwWSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CitBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIFRleGVsQnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6Ujg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpBUjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTU1NTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCQTQ0NDQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
NTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RjoKKyAgICAgICAgcmV0dXJu
IDI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCODoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4OgorICAgICAgICByZXR1cm4g
MzsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBQkdSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpCR1JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEz
MkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkY6CisgICAg
ICAgIHJldHVybiA0OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
QjE2RjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQTE2RjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCMzJGOgorICAgICAgICByZXR1cm4gMTI7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjoKKyAgICAgICAgcmV0dXJuIDE2OworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBEYXRh
Rm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3Jt
YXQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCBhbHBoYU9wLCB2b2lkKiBkZXN0
aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpCit7CisgICAgaW50IHZhbGlkU3JjID0gd2lkdGggKiBU
ZXhlbEJ5dGVzRm9yRm9ybWF0KHNvdXJjZURhdGFGb3JtYXQpOworICAgIGludCByZW1haW5kZXIg
PSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgPyAodmFsaWRTcmMgJSBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQpIDogMDsKKyAgICBpbnQgc3JjU3RyaWRlID0gcmVtYWluZGVyID8gKHZhbGlkU3JjICsgc291
cmNlVW5wYWNrQWxpZ25tZW50IC0gcmVtYWluZGVyKSA6IHZhbGlkU3JjOworCisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBwYWNraW5nIHBpeGVscyB0byBXZWJHTCAyIGZvcm1hdHMKKyAgICBzd2l0
Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVE
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVH
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9T
VEVOQ0lMOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN3aXRjaCAoZGVzdGlu
YXRpb25UeXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBf
UkVWOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzEx
Rl9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85Xzlf
UkVWOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgRGF0YUZvcm1hdCBkc3REYXRhRm9ybWF0
ID0gZ2V0RGF0YUZvcm1hdChkZXN0aW5hdGlvbkZvcm1hdCwgZGVzdGluYXRpb25UeXBlKTsKKyAg
ICBpbnQgZHN0U3RyaWRlID0gd2lkdGggKiBUZXhlbEJ5dGVzRm9yRm9ybWF0KGRzdERhdGFGb3Jt
YXQpOworICAgIGlmIChmbGlwWSkgeworICAgICAgICBkZXN0aW5hdGlvbkRhdGEgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKSArIGRzdFN0cmlkZSooaGVpZ2h0IC0gMSk7
CisgICAgICAgIGRzdFN0cmlkZSA9IC1kc3RTdHJpZGU7CisgICAgfQorICAgIGlmICghaGFzQWxw
aGEoc291cmNlRGF0YUZvcm1hdCkgfHwgIWhhc0NvbG9yKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFo
YXNDb2xvcihkc3REYXRhRm9ybWF0KSkKKyAgICAgICAgYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90
aGluZzsKKworICAgIGlmIChzb3VyY2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxw
aGFPcCA9PSBBbHBoYU9wOjpEb05vdGhpbmcpIHsKKyAgICAgICAgY29uc3QgdWludDhfdCogcHRy
ID0gc291cmNlRGF0YTsKKyAgICAgICAgY29uc3QgdWludDhfdCogcHRyRW5kID0gc291cmNlRGF0
YSArIHNyY1N0cmlkZSAqIGhlaWdodDsKKyAgICAgICAgdW5zaWduZWQgcm93U2l6ZSA9IChkc3RT
dHJpZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRzdFN0cmlkZTsKKyAgICAgICAgdWludDhfdCogZHN0
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uRGF0YSk7CisgICAgICAgIHdoaWxl
IChwdHIgPCBwdHJFbmQpIHsKKyAgICAgICAgICAgIG1lbWNweShkc3QsIHB0ciwgcm93U2l6ZSk7
CisgICAgICAgICAgICBwdHIgKz0gc3JjU3RyaWRlOworICAgICAgICAgICAgZHN0ICs9IGRzdFN0
cmlkZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBGb3Jt
YXRDb252ZXJ0ZXIgY29udmVydGVyKHdpZHRoLCBoZWlnaHQsIHNvdXJjZURhdGEsIGRlc3RpbmF0
aW9uRGF0YSwgc3JjU3RyaWRlLCBkc3RTdHJpZGUpOworICAgIGNvbnZlcnRlci5jb252ZXJ0KHNv
dXJjZURhdGFGb3JtYXQsIGRzdERhdGFGb3JtYXQsIGFscGhhT3ApOworICAgIGlmICghY29udmVy
dGVyLnN1Y2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCisjaWYgIShQTEFURk9STShDT0NPQSkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkp
KQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9v
bCkKK3sKK30KKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKENPQ09BKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpCit7Cit9CisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1YWQz
ZWIzOTYzM2IwYjNjNWY2YTNjY2I2ZmUwNDFhMjc2NjFmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuaApAQCAtMCwwICsxLDc0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
NC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
R0wpCisKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRl
ZFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVB
cnJheS5oPgorCisjaWYgVVNFKENBKQorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgorI2Vu
ZGlmCisKKy8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBhdm9pZCB0aGUgbmFtZSBjb25m
bGljdGlvbiBmb3IgTk9fRVJST1IuCisjaWYgUExBVEZPUk0oV0lOKQorI3VuZGVmIE5PX0VSUk9S
CisjZWxpZiBQTEFURk9STShHVEspCisvLyBUaGlzIGRlZmluZSBpcyBmcm9tIHRoZSBYMTEgaGVh
ZGVycywgYnV0IGl0J3MgdXNlZCBiZWxvdywgc28gd2UgbXVzdCB1bmRlZmluZSBpdC4KKyN1bmRl
ZiBWRVJTSU9OCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShPUEVOR0xf
RVMpCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsLmg+CisjaWZkZWYgX19PQkpDX18KKyNpbXBv
cnQgPE9wZW5HTEVTL0VBR0wuaD4KKyNlbmRpZiAvLyBfX09CSkNfXworI2VuZGlmIC8vIFVTRShP
UEVOR0xfRVMpCitPQkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNTIFdlYkdMTGF5ZXI7Cit0
eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSogSU9TdXJmYWNlUmVmOworI2VuZGlmIC8vIFBMQVRG
T1JNKENPQ09BKQorCisjaWYgVVNFKE5JQ09TSUEpCituYW1lc3BhY2UgTmljb3NpYSB7CitjbGFz
cyBHQzNETGF5ZXI7Cit9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRXh0
ZW5zaW9uc0dMOworI2lmIFVTRShBTkdMRSkKK2NsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOworI2Vs
aWYgIVBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorY2xhc3MgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM7CisjZWxpZiBVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShP
UEVOR0xfRVMpKQorY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOworI2VuZGlmCitjbGFzcyBIb3N0
V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbWFnZURhdGE7CisjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOworI2Vu
ZGlmCisKK3R5cGVkZWYgV1RGOjpIYXNoTWFwPENTdHJpbmcsIHVpbnQ2NF90PiBTaGFkZXJOYW1l
SGFzaDsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlOworCitjbGFzcyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRHTCB7CitwdWJs
aWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNs
aWVudCgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcG9zaXRlKCkgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VDb250ZXh0TG9zdCgpID0gMDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlY3ljbGVDb250ZXh0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpID0gMDsKKyAgICB9OworCisgICAgc3RhdGlj
IFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNj
cmVlbik7CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKTsKKworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNy
ZWF0ZVNoYXJlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgc2hhcmVkQ29udGV4dCk7CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wg
cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29u
dGV4dE9iajsgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV90ZXh0dXJlOyB9CisgICAgQ0FMYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0FMYXllcio+KG1f
d2ViR0xMYXllci5nZXQoKSk7IH0KKyNpZiBVU0UoQU5HTEUpCisgICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXkgcGxhdGZvcm1EaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNw
bGF5T2JqOyB9CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTENvbmZpZyBwbGF0Zm9ybUNv
bmZpZygpIGNvbnN0IHsgcmV0dXJuIG1fY29uZmlnT2JqOyB9CisjZW5kaWYgLy8gVVNFKEFOR0xF
KQorI2Vsc2UKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0woKSBjb25zdCBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3Jt
VGV4dHVyZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKworICAgIHZvaWQgYWRkQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50cy5h
ZGQoJmNsaWVudCk7IH0KKyAgICB2b2lkIHJlbW92ZUNsaWVudChDbGllbnQmIGNsaWVudCkgeyBt
X2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOyB9CisKKyAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcg
b24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KKyAgICB2b2lkIHBy
ZXBhcmVUZXh0dXJlKCk7CisKKyAgICAvLyBFcXVpdmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCku
IEFsbG93cyBwaXhlbHM9PTAgd2l0aCBubyBhbGxvY2F0aW9uLgorICAgIHZvaWQgdGV4SW1hZ2Uy
RERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7CisK
KyAgICAvLyBHZXQgYW4gYXR0cmlidXRlIGxvY2F0aW9uIHdpdGhvdXQgY2hlY2tpbmcgdGhlIG5h
bWUgLT4gbWFuZ2xlZG5hbWUgbWFwcGluZy4KKyAgICBpbnQgZ2V0QXR0cmliTG9jYXRpb25EaXJl
Y3QoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAg
Ly8gQ29tcGlsZSBhIHNoYWRlciB3aXRob3V0IGdvaW5nIHRocm91Z2ggQU5HTEUuCisgICAgdm9p
ZCBjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3QpOworCisgICAgLy8gSGVscGVy
IHRvIHRleEltYWdlMkQgd2l0aCBwaXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVk
IHRvIDAuCisgICAgLy8gUmV0dXJuIHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQu
CisgICAgLy8gQnkgZGVmYXVsdCwgYWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBz
ZXR0aW5nLgorICAgIGJvb2wgdGV4SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnQgYWxpZ25tZW50ID0gNCk7CisKKyAgICBib29sIGlzR0xFUzJDb21w
bGlhbnQoKSBjb25zdDsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMgZm9y
IHRleHR1cmUgdXBsb2FkaW5nIGFuZCBwaXhlbCByZWFkYmFjay4KKyAgICAvLworCisgICAgLy8g
Q29tcHV0ZXMgdGhlIGNvbXBvbmVudHMgcGVyIHBpeGVsIGFuZCBieXRlcyBwZXIgY29tcG9uZW50
CisgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uIFJldHVy
bnMgZmFsc2UgaWYKKyAgICAvLyBlaXRoZXIgd2FzIGFuIGludmFsaWQgZW51bS4KKyAgICBzdGF0
aWMgYm9vbCBjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoR0MzRGVudW0gZm9ybWF0LAor
ICAgICAgICBHQzNEZW51bSB0eXBlLAorICAgICAgICB1bnNpZ25lZCogY29tcG9uZW50c1BlclBp
eGVsLAorICAgICAgICB1bnNpZ25lZCogYnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgLy8gQ29t
cHV0ZXMgdGhlIGltYWdlIHNpemUgaW4gYnl0ZXMuIElmIHBhZGRpbmdJbkJ5dGVzIGlzIG5vdCBu
dWxsLCBwYWRkaW5nCisgICAgLy8gaXMgYWxzbyBjYWxjdWxhdGVkIGluIHJldHVybi4gUmV0dXJu
cyBOT19FUlJPUiBpZiBzdWNjZWVkLCBvdGhlcndpc2UKKyAgICAvLyByZXR1cm4gdGhlIHN1Z2dl
c3RlZCBHTCBlcnJvciBpbmRpY2F0aW5nIHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZToKKyAgICAv
LyAgIElOVkFMSURfVkFMVUUgaWYgd2lkdGgvaGVpZ2h0IGlzIG5lZ2F0aXZlIG9yIG92ZXJmbG93
IGhhcHBlbnMuCisgICAgLy8gICBJTlZBTElEX0VOVU0gaWYgZm9ybWF0L3R5cGUgaXMgaWxsZWdh
bC4KKyAgICBzdGF0aWMgR0MzRGVudW0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVudW0g
Zm9ybWF0LAorICAgICAgICBHQzNEZW51bSB0eXBlLAorICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
CisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgIEdDM0RpbnQgYWxpZ25tZW50LAor
ICAgICAgICB1bnNpZ25lZCogaW1hZ2VTaXplSW5CeXRlcywKKyAgICAgICAgdW5zaWduZWQqIHBh
ZGRpbmdJbkJ5dGVzKTsKKworICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9ybWF0QW5kVHlwZUZv
ckludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSYgZm9ybWF0
LCBHQzNEZW51bSYgdHlwZSk7CisKKyAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhl
IGdpdmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIHBhY2tpbmcg
dGhlIHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCisg
ICAgLy8gYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLiBS
ZXR1cm5zIHRydWUKKyAgICAvLyB1cG9uIHN1Y2Nlc3MuCisgICAgc3RhdGljIGJvb2wgZXh0cmFj
dEltYWdlRGF0YShJbWFnZURhdGEqLAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsCisgICAgICAg
IEdDM0RlbnVtIHR5cGUsCisgICAgICAgIGJvb2wgZmxpcFksCisgICAgICAgIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUgdXNlci1zdXBwbGllZCB0ZXh0dXJlCisg
ICAgLy8gZGF0YSwgYXBwbHlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIHBhcmFt
ZXRlcnMuCisgICAgLy8gSWYgdGhlIGRhdGEgaXMgbm90IHRpZ2h0bHkgcGFja2VkIGFjY29yZGlu
ZyB0byB0aGUgcGFzc2VkCisgICAgLy8gdW5wYWNrQWxpZ25tZW50LCB0aGUgb3V0cHV0IGRhdGEg
d2lsbCBiZSB0aWdodGx5IHBhY2tlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1
bCwgZmFsc2UgaWYgYW55IGVycm9yIG9jY3VycmVkLgorICAgIHN0YXRpYyBib29sIGV4dHJhY3RU
ZXh0dXJlRGF0YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAorICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAgICAgIHVuc2lnbmVkIHVucGFja0FsaWdu
bWVudCwKKyAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAg
ICBjb25zdCB2b2lkKiBwaXhlbHMsCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgorICAg
IC8vCisKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24o
UGxhdGZvcm0zRE9iamVjdCwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJp
bmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNE
Y2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpIG92ZXJyaWRlOworICAgIHZvaWQgYmxlbmRF
cXVhdGlvbihHQzNEZW51bSBtb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpIG92ZXJyaWRlOwor
ICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpIG92
ZXJyaWRlOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNE
ZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIg
c2l6ZSwgR0MzRGVudW0gdXNhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51
bSB1c2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
KSBvdmVycmlkZTsKKworICAgIHZvaWQqIG1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nl
c3MpIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIHVubWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51bSByZWFkVGFy
Z2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciByZWFkT2Zmc2V0LCBHQzNEaW50
cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIpIG92ZXJyaWRlOworCisgICAgdm9pZCBnZXRJ
bnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKKworICAgIHZvaWQgdGV4U3Rv
cmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB0ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEc2l6ZWkgZGVwdGgpIG92ZXJyaWRlOworCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3Jt
cyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZv
cm1JbmRpY2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+JiBwYXJhbXMpIG92ZXJy
aWRlOworCisgICAgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJn
ZXQpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spIG92ZXJyaWRl
OworICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwg
R0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKSBvdmVycmlkZTsKKyAgICB2b2lkIGNs
ZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhclN0ZW5j
aWwoR0MzRGludCBzKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiBy
ZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBo
YSkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOworCisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZvaWQgY3VsbEZh
Y2UoR0MzRGVudW0gbW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0g
ZnVuYykgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykgb3Zl
cnJpZGU7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYg
ekZhcikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCwg
UGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNh
cCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQg
aW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNE
aW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0VsZW1l
bnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQpIG92ZXJyaWRlOworCisgICAgdm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKSBv
dmVycmlkZTsKKyAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4
KSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbmlzaCgpIG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2go
KSBvdmVycmlkZTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50IGxldmVsKSBvdmVycmlkZTsKKyAgICB2b2lkIGZy
b250RmFjZShHQzNEZW51bSBtb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFw
KEdDM0RlbnVtIHRhcmdldCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGdldEFjdGl2ZUF0dHJpYihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgb3Zl
cnJpZGU7CisgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKKyAgICBib29sIGdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5m
byYpIG92ZXJyaWRlOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIHZvaWQgZ2V0
QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENv
dW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKSBvdmVycmlk
ZTsKKyAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBw
bmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJ1ZmZlclBh
cmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KSBvdmVycmlkZTsKKyAgICBHQzNEZW51bSBnZXRFcnJvcigpIG92ZXJyaWRlOworICAgIHZvaWQg
Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBv
dmVycmlkZTsKKyAgICB2b2lkIGdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRJbnRlZ2VyNjR2KEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50NjQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJp
ZGU7CisjaWYgIVVTRShBTkdMRSkKKyAgICB2b2lkIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xD
b3VudChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSk7CisjZW5kaWYgLy8gIVVTRShBTkdMRSkKKyAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9M
b2coUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGdldFVubWFuZ2xlZElu
Zm9Mb2coUGxhdGZvcm0zRE9iamVjdFsyXSwgR0MzRHNpemVpLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFNoYWRlcml2
KFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJp
ZGU7CisgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlw
ZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0MzRGludCogcmFuZ2UsIEdDM0RpbnQqIHByZWNp
c2lvbikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2Jq
ZWN0KSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpIG92ZXJy
aWRlOworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRUZXhQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lk
IGdldFVuaWZvcm1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICBHQzNEaW50IGdldFVuaWZvcm1Mb2NhdGlv
bihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOworICAgIHZv
aWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYml2KEdDM0R1
aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworICAg
IEdDM0RzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBuYW1lKSBvdmVycmlkZTsKKworICAgIHZvaWQgaGludChHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIG1vZGUpIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIGlzQnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBj
YXApIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RPYmpl
Y3QpIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QpIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3QpIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIGlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
KSBvdmVycmlkZTsKKyAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpIG92ZXJyaWRlOworICAg
IHZvaWQgbGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBw
aXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCB2b2lkKiBkYXRhKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBp
bGVyKCk7CisKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdD
M0Rib29sZWFuIGludmVydCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzY2lzc29yKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50
IG1hc2spIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykgb3Zl
cnJpZGU7CisgICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1
aW50IG1hc2spIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdD
M0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGVuY2ls
T3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwg
R0MzRGVudW0genBhc3MpIG92ZXJyaWRlOworCisgICAgYm9vbCB0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSBvdmVycmlkZTsKKyAgICB2b2lk
IHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
IHBhcmFtKSBvdmVycmlkZTsKKyAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpIG92ZXJyaWRl
OworCisgICAgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpIG92
ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IGNvbnN0IEdDM0RmbG9hdCogdikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMWkoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCB4KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0xaXYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKKyAg
ICB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHkpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMmko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpIG92ZXJyaWRlOworICAgIHZv
aWQgdW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQq
IHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopIG92ZXJyaWRlOworICAgIHZvaWQgdW5p
Zm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikg
b3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RpbnQgeikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtM2l2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9y
bTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgb3Zl
cnJpZGU7CisgICAgdm9pZCB1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZv
cm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJy
aWRlOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyNpZiAh
VVNFKEFOR0xFKQorICAgIGJvb2wgY2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxhdGZvcm0zRE9iamVj
dCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Owor
ICAgIGJvb2wgcHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQ
bGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKKyNlbmRpZgorCisgICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQq
IHZhbHVlcykgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRl
OworICAgIHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBH
QzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopIG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpIG92ZXJyaWRlOworICAgIHZvaWQgdmVy
dGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3Zl
cnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNE
aW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXpl
aSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSBvdmVycmlkZTsKKworICAgIHZvaWQgdmlld3Bv
cnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOworICAg
IHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQp
IG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcikgb3ZlcnJpZGU7CisKKyAgICAvLyBWZXJ0ZXhBcnJheU9qZWN0IGNh
bGxzCisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheSgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Cisg
ICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywg
Y29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFw
aGljc0NvbnRleHQmKTsKKworICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgdm9p
ZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25z
dDsKKyAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKTsKKyAgICB2b2lkIHJlY3ljbGVDb250ZXh0
KCk7CisKKyAgICB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKKyAg
ICB2b2lkIHNpbXVsYXRlQ29udGV4dENoYW5nZWQoKTsKKworICAgIHZvaWQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgIGJvb2wgcGFpbnRDb21wb3Np
dGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7CisKKyNpZiBVU0UoT1BFTkdMKSAmJiBF
TkFCTEUoV0VCR0wyKQorICAgIHZvaWQgcHJpbWl0aXZlUmVzdGFydEluZGV4KEdDM0R1aW50KSBv
dmVycmlkZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYm9vbCB0ZXhJbWFn
ZUlPU3VyZmFjZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBJT1N1cmZhY2VSZWYsIEdDM0R1aW50IHBsYW5lKTsKKworI2lmIFVTRShPUEVOR0xf
RVMpCisgICAgdm9pZCBwcmVzZW50UmVuZGVyYnVmZmVyKCk7CisjZW5kaWYKKworI2lmIFVTRShP
UEVOR0wpIHx8IFVTRShBTkdMRSkKKyAgICB2b2lkIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0
b3JlKEludFNpemUpOworICAgIHZvaWQgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0
b3JlRnJvbUxheWVyKCk7CisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShNQUNDQVRBTFlT
VCkKKyAgICB2b2lkIHVwZGF0ZUNHTENvbnRleHQoKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYg
Ly8gUExBVEZPUk0oQ09DT0EpCisKKyAgICB2b2lkIHNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wp
OworCisgICAgR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNl
VXNlZEZvckNyZWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3dlclByZWZlcmVuY2VVc2VkRm9y
Q3JlYXRpb247IH0KKworICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVs
ZXRpb24KKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUJ1ZmZlcigpIG92ZXJyaWRlOworICAg
IFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIoKSBvdmVycmlkZTsKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IGNyZWF0ZVByb2dyYW0oKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpIG92ZXJyaWRlOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
Y3JlYXRlU2hhZGVyKEdDM0RlbnVtKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNy
ZWF0ZVRleHR1cmUoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmpl
Y3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKKworICAgIC8vIFN5bnRoZXNpemVzIGFuIE9wZW5HTCBlcnJvciB3aGljaCB3aWxsIGJlIHJl
dHVybmVkIGZyb20gYQorICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRoaXMgaXMgdXNl
ZCB0byBlbXVsYXRlIE9wZW5HTCBFUworICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0aGUgZGVza3Rv
cCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCisgICAgLy8gY2hlY2tpbmcgbWFuZGF0
ZWQgYnkgV2ViR0wuCisgICAgLy8KKyAgICAvLyBQZXIgdGhlIGJlaGF2aW9yIG9mIGdsR2V0RXJy
b3IsIHRoaXMgc3RvcmVzIGF0IG1vc3Qgb25lCisgICAgLy8gaW5zdGFuY2Ugb2YgYW55IGdpdmVu
IGVycm9yLCBhbmQgcmV0dXJucyB0aGVtIGZyb20gY2FsbHMgdG8KKyAgICAvLyBnZXRFcnJvciBp
biB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkLgorICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3Io
R0MzRGVudW0gZXJyb3IpOworCisgICAgLy8gUmVhZCByZWFsIE9wZW5HTCBlcnJvcnMsIGFuZCBt
b3ZlIHRoZW0gdG8gdGhlIHN5bnRoZXRpYworICAgIC8vIGVycm9yIGxpc3QuIFJldHVybiB0cnVl
IGlmIGF0IGxlYXN0IG9uZSBlcnJvciBpcyBtb3ZlZC4KKyAgICBib29sIG1vdmVFcnJvcnNUb1N5
bnRoZXRpY0Vycm9yTGlzdCgpOworCisgICAgLy8gU3VwcG9ydCBmb3IgZXh0ZW5zaW9ucy4gUmV0
dXJucyBhIG5vbi1udWxsIG9iamVjdCwgdGhvdWdoIG5vdAorICAgIC8vIGFsbCBtZXRob2RzIGl0
IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCisgICAgLy8gY3Vy
cmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNHTDo6c3VwcG9ydHMoKSB0bworICAg
IC8vIGRldGVybWluZSB0aGlzLgorICAgIEV4dGVuc2lvbnNHTCYgZ2V0RXh0ZW5zaW9ucygpIG92
ZXJyaWRlOworCisgICAgSW50U2l6ZSBnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0
OworCisgICAgLy8gUGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSB3aGljaCBp
cyBwYXNzZWQgaW4gfHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZlY3RvcgorICAgIC8vIGFjY29y
ZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQgb2JleWluZyB0aGUgZmxpcFkg
YW5kIEFscGhhT3AgZmxhZ3MuCisgICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KKyAg
ICBzdGF0aWMgYm9vbCBwYWNrSW1hZ2VEYXRhKEltYWdlKiwgY29uc3Qgdm9pZCogcGl4ZWxzLCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIERhdGFG
b3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNp
Z25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAg
ICBjbGFzcyBJbWFnZUV4dHJhY3RvciB7CisgICAgcHVibGljOgorICAgICAgICBJbWFnZUV4dHJh
Y3RvcihJbWFnZSosIERPTVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKKworICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3Qg
cHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9y
IHJlbGVhc2UgcmVzb3VyY2VzCisgICAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2Ug
aWYgbmVlZGVkLgorICAgICAgICB+SW1hZ2VFeHRyYWN0b3IoKTsKKworICAgICAgICBib29sIGV4
dHJhY3RTdWNjZWVkZWQoKSB7IHJldHVybiBtX2V4dHJhY3RTdWNjZWVkZWQ7IH0KKyAgICAgICAg
Y29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEoKSB7IHJldHVybiBtX2ltYWdlUGl4ZWxEYXRhOyB9
CisgICAgICAgIHVuc2lnbmVkIGltYWdlV2lkdGgoKSB7IHJldHVybiBtX2ltYWdlV2lkdGg7IH0K
KyAgICAgICAgdW5zaWduZWQgaW1hZ2VIZWlnaHQoKSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9
CisgICAgICAgIERhdGFGb3JtYXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7IHJldHVybiBtX2ltYWdl
U291cmNlRm9ybWF0OyB9CisgICAgICAgIEFscGhhT3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4g
bV9hbHBoYU9wOyB9CisgICAgICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50
KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsgfQorICAgICAgICBET01T
b3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlKCkgeyByZXR1cm4gbV9pbWFnZUh0bWxEb21Tb3VyY2U7
IH0KKyAgICBwcml2YXRlOgorICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBh
biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KKyAgICAgICAgLy8gRXh0cmFjdHMgdGhl
IGltYWdlIGFuZCBrZWVwcyB0cmFjayBvZiBpdHMgc3RhdHVzLCBzdWNoIGFzIHdpZHRoLCBoZWln
aHQsIFNvdXJjZSBBbGlnbm1lbnQsIGZvcm1hdCBhbmQgQWxwaGFPcCBldGMsCisgICAgICAgIC8v
IG5lZWRzIHRvIGxvY2sgdGhlIHJlc291cmNlcyBvciByZWxldmFudCBkYXRhIGlmIG5lZWRlZCBh
bmQgcmV0dXJucyB0cnVlIHVwb24gc3VjY2VzcworICAgICAgICBib29sIGV4dHJhY3RJbWFnZShi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwor
CisjaWYgVVNFKENBSVJPKQorICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdl
U3VyZmFjZTsKKyNlbGlmIFVTRShDRykKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1f
Y2dJbWFnZTsKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fZGVjb2RlZEltYWdlOwor
ICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBtX3BpeGVsRGF0YTsKKyAgICAgICAgVW5pcXVl
QXJyYXk8dWludDhfdD4gbV9mb3JtYWxpemVkUkdCQThEYXRhOworI2VuZGlmCisgICAgICAgIElt
YWdlKiBtX2ltYWdlOworICAgICAgICBET01Tb3VyY2UgbV9pbWFnZUh0bWxEb21Tb3VyY2U7Cisg
ICAgICAgIGJvb2wgbV9leHRyYWN0U3VjY2VlZGVkOworICAgICAgICBjb25zdCB2b2lkKiBtX2lt
YWdlUGl4ZWxEYXRhOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7CisgICAgICAgIHVu
c2lnbmVkIG1faW1hZ2VIZWlnaHQ7CisgICAgICAgIERhdGFGb3JtYXQgbV9pbWFnZVNvdXJjZUZv
cm1hdDsKKyAgICAgICAgQWxwaGFPcCBtX2FscGhhT3A7CisgICAgICAgIHVuc2lnbmVkIG1faW1h
Z2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7CisgICAgfTsKKworICAgIHZvaWQgc2V0RmFpbE5leHRH
UFVTdGF0dXNDaGVjaygpIHsgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gdHJ1ZTsgfQorCisgICAg
R0MzRGVudW0gYWN0aXZlVGV4dHVyZVVuaXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFjdGl2
ZVRleHR1cmVVbml0OyB9CisgICAgR0MzRGVudW0gY3VycmVudEJvdW5kVGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpOyB9CisgICAgR0MzRGVudW0g
Y3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jdXJyZW50Qm91bmRU
YXJnZXQoKTsgfQorICAgIHVuc2lnbmVkIHRleHR1cmVTZWVkKEdDM0R1aW50IHRleHR1cmUpIHsg
cmV0dXJuIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5jb3VudCh0ZXh0dXJlKTsgfQorCisjaWYg
UExBVEZPUk0oTUFDKQorICAgIHVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7Cisg
ICAgdm9pZCBzY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQpOworI2VuZGlmCisKK3By
aXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzLCBIb3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVu
LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOworCisg
ICAgLy8gSGVscGVyIGZvciBwYWNrSW1hZ2VEYXRhL2V4dHJhY3RJbWFnZURhdGEvZXh0cmFjdFRl
eHR1cmVEYXRhIHdoaWNoIGltcGxlbWVudCBwYWNraW5nIG9mIHBpeGVsCisgICAgLy8gZGF0YSBp
bnRvIHRoZSBzcGVjaWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgdHlwZS4KKyAg
ICAvLyBBIHNvdXJjZVVucGFja0FsaWdubWVudCBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBz
b3VyY2UKKyAgICAvLyBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkLiBOb24temVybyB2YWx1ZXMgbWF5
IHRha2UgYSBzbG93IHBhdGguCisgICAgLy8gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8g
Z2FwcyBiZXR3ZWVuIHJvd3MuCisgICAgc3RhdGljIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50
OF90KiBzb3VyY2VEYXRhLCBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5z
aWduZWQgZGVzdGluYXRpb25Gb3JtYXQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFP
cCwgdm9pZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZKTsKKworICAgIC8vIFRha2UgaW50
byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRl
cywKKyAgICAvLyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVy
bWluZSB3aGljaCBjb3VsZCBvcgorICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9u
IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9uLgor
ICAgIHZvaWQgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uKTsKKyAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIAorICAg
IC8vIERpZCB0aGUgbW9zdCByZWNlbnQgZHJhd2luZyBvcGVyYXRpb24gbGVhdmUgdGhlIEdQVSBp
biBhbiBhY2NlcHRhYmxlIHN0YXRlPworICAgIHZvaWQgY2hlY2tHUFVTdGF0dXMoKTsKKworICAg
IC8vIFJlYWQgcmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNh
bWUgZm9ybWF0IGFzIHRoZQorICAgIC8vIGJhY2tidWZmZXIuCisgICAgdm9pZCByZWFkUmVuZGVy
aW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhlbHNTaXplKTsKKyAgICB2
b2lkIHJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscyk7CisKKyNpZiBVU0Uo
T1BFTkdMX0VTKQorICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworI2VuZGlmCisKKyAgICBib29sIHJl
c2hhcGVGQk9zKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgPSBJbnRSZWN0KCkpOworICAgIHZvaWQgYXR0YWNo
RGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgYm9vbCBhbGxvd09mZmxpbmVSZW5kZXJlcnMoKSBjb25zdDsKKyNlbmRpZgorCisgICAgaW50
IG1fY3VycmVudFdpZHRoIHsgMCB9OworICAgIGludCBtX2N1cnJlbnRIZWlnaHQgeyAwIH07CisK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV93ZWJHTExh
eWVyOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgbV9jb250ZXh0T2JqIHsgbnVsbHB0
ciB9OworI2lmIFVTRShBTkdMRSkKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxh
eSBtX2Rpc3BsYXlPYmogeyBudWxscHRyIH07CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TENvbmZpZyBtX2NvbmZpZ09iaiB7IG51bGxwdHIgfTsKKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisj
ZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCisKKyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDQSkK
KyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3dlYkdMTGF5ZXI7CisjZW5kaWYKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gU2hhZGVyU3ltYm9s
TWFwOworCisgICAgc3RydWN0IFNoYWRlclNvdXJjZUVudHJ5IHsKKyAgICAgICAgR0MzRGVudW0g
dHlwZTsKKyAgICAgICAgU3RyaW5nIHNvdXJjZTsKKyAgICAgICAgU3RyaW5nIHRyYW5zbGF0ZWRT
b3VyY2U7CisgICAgICAgIFN0cmluZyBsb2c7CisgICAgICAgIGJvb2wgaXNWYWxpZDsKKyAgICAg
ICAgU2hhZGVyU3ltYm9sTWFwIGF0dHJpYnV0ZU1hcDsKKyAgICAgICAgU2hhZGVyU3ltYm9sTWFw
IHVuaWZvcm1NYXA7CisgICAgICAgIFNoYWRlclN5bWJvbE1hcCB2YXJ5aW5nTWFwOworICAgICAg
ICBTaGFkZXJTb3VyY2VFbnRyeSgpCisgICAgICAgICAgICA6IHR5cGUoVkVSVEVYX1NIQURFUikK
KyAgICAgICAgICAgICwgaXNWYWxpZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcChlbnVtIEFOR0xFU2hhZGVy
U3ltYm9sVHlwZSBzeW1ib2xUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFIHx8IHN5bWJvbFR5cGUgPT0g
U0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0gfHwgc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9M
X1RZUEVfVkFSWUlORyk7CisgICAgICAgICAgICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lN
Qk9MX1RZUEVfQVRUUklCVVRFKQorICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVNYXA7
CisgICAgICAgICAgICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlO
RykKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyeWluZ01hcDsKKyAgICAgICAgICAgIHJldHVy
biB1bmlmb3JtTWFwOworICAgICAgICB9CisgICAgfTsKKworI2lmICFVU0UoQU5HTEUpCisgICAg
Ly8gRklYTUU6IFNoYWRlcnMgYXJlIG5ldmVyIHJlbW92ZWQgZnJvbSB0aGlzIG1hcCwgZXZlbiBp
ZiB0aGV5IGFuZCB0aGVpciBwcm9ncmFtIGFyZSBkZWxldGVkLgorICAgIC8vIFRoaXMgaXMgYmFk
LCBhbmQgaXQgYWxzbyByZWxpZXMgb24gdGhlIGZhY3Qgd2UgbmV2ZXIgcmV1c2UgUGxhdGZvcm0z
RE9iamVjdCBudW1iZXJzLgorICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBT
aGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVyU291cmNlTWFwOworICAgIFNoYWRlclNvdXJjZU1hcCBt
X3NoYWRlclNvdXJjZU1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0
LCBzdGQ6OnBhaXI8UGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdD4+IExpbmtlZFNo
YWRlck1hcDsKKyAgICBMaW5rZWRTaGFkZXJNYXAgbV9saW5rZWRTaGFkZXJNYXA7CisKKyAgICBz
dHJ1Y3QgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzIHsKKyAgICAgICAgVmVjdG9yPEdDM0RpbnQ+
IGZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcDsKKyAgICAgICAgVmVjdG9yPEdDM0Rp
bnQ+IGZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXA7CisKKyAgICAgICAgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgR0MzRGlu
dCBjb3VudEZvclR5cGUoR0MzRGVudW0gYWN0aXZlVHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGFjdGl2ZVR5cGUgPT0gQUNUSVZFX0FUVFJJQlVURVMgfHwgYWN0aXZlVHlwZSA9
PSBBQ1RJVkVfVU5JRk9STVMpOworICAgICAgICAgICAgaWYgKGFjdGl2ZVR5cGUgPT0gQUNUSVZF
X0FUVFJJQlVURVMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkVG9BY3R1YWxBdHRy
aWJ1dGVJbmRleE1hcC5zaXplKCk7CisKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFRvQWN0
dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdHlwZWRl
ZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cz4gU2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwOworICAgIFNoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cCBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gSGFzaGVkU3ltYm9sTWFwOworICAgIEhhc2hlZFN5bWJvbE1hcCBtX3Bv
c3NpYmx5VW51c2VkQXR0cmlidXRlTWFwOworCisgICAgU3RyaW5nIG1hcHBlZFN5bWJvbE5hbWUo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSk7CisgICAgU3RyaW5nIG1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgU3Ry
aW5nIG9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBPcHRpb25hbDxTdHJpbmc+
IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBB
TkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgT3B0aW9uYWw8
U3RyaW5nPiBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZGVyTmFtZUhhc2g+IG5hbWVIYXNoTWFwRm9yU2hhZGVyczsK
KyNlbmRpZiAvLyAhVVNFKEFOR0xFKQorCisjaWYgVVNFKEFOR0xFKQorICAgIGZyaWVuZCBjbGFz
cyBFeHRlbnNpb25zR0xBTkdMRTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMQU5H
TEU+IG1fZXh0ZW5zaW9uczsKKyNlbGlmICFQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9F
UykKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CisgICAgZnJpZW5kIGNs
YXNzIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5z
aW9uc0dMT3BlbkdMRVM+IG1fZXh0ZW5zaW9uczsKKyNlbGlmIFVTRShPUEVOR0wpIHx8IChQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lv
bnNHTE9wZW5HTDsKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xPcGVuR0w+IG1fZXh0ZW5zaW9uczsKKyNl
bmRpZgorCisgICAgR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgbV9wb3dlclByZWZl
cmVuY2VVc2VkRm9yQ3JlYXRpb24geyBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6
RGVmYXVsdCB9OworICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+PiBtX3ZlcnRleEFycmF5OworCisj
aWYgIVVTRShBTkdMRSkKKyAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOworI2VuZGlm
CisKKyAgICBHQzNEdWludCBtX3RleHR1cmUgeyAwIH07CisgICAgR0MzRHVpbnQgbV9mYm8geyAw
IH07CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIEdDM0R1aW50IG1fY29tcG9z
aXRvclRleHR1cmUgeyAwIH07CisgICAgR0MzRHVpbnQgbV9pbnRlcm1lZGlhdGVUZXh0dXJlIHsg
MCB9OworI2VuZGlmCisKKyAgICBHQzNEdWludCBtX2RlcHRoQnVmZmVyIHsgMCB9OworICAgIEdD
M0R1aW50IG1fc3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBHQzNEdWludCBtX2RlcHRoU3RlbmNp
bEJ1ZmZlciB7IDAgfTsKKworICAgIGJvb2wgbV9sYXllckNvbXBvc2l0ZWQgeyBmYWxzZSB9Owor
ICAgIEdDM0R1aW50IG1faW50ZXJuYWxDb2xvckZvcm1hdCB7IDAgfTsKKworI2lmIFVTRShBTkdM
RSkgJiYgUExBVEZPUk0oQ09DT0EpCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTFN1cmZh
Y2UgbV9wYnVmZmVyOworI2VuZGlmCisKKyAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0R0xTdGF0
ZSB7CisgICAgICAgIEdDM0R1aW50IGJvdW5kRkJPIHsgMCB9OworICAgICAgICBHQzNEZW51bSBh
Y3RpdmVUZXh0dXJlVW5pdCB7IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCB9OworCisgICAg
ICAgIHVzaW5nIEJvdW5kVGV4dHVyZU1hcCA9IEhhc2hNYXA8R0MzRGVudW0sCisgICAgICAgICAg
ICBzdGQ6OnBhaXI8R0MzRHVpbnQsIEdDM0RlbnVtPiwKKyAgICAgICAgICAgIFdURjo6SW50SGFz
aDxHQzNEZW51bT4sIAorICAgICAgICAgICAgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRy
YWl0czxHQzNEdWludD4sCisgICAgICAgICAgICBXVEY6OlBhaXJIYXNoVHJhaXRzPFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50Pj4KKyAgICAgICAgPjsKKyAgICAgICAgQm91bmRUZXh0
dXJlTWFwIGJvdW5kVGV4dHVyZU1hcDsKKyAgICAgICAgR0MzRHVpbnQgY3VycmVudEJvdW5kVGV4
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGV4dHVyZShhY3RpdmVUZXh0dXJlVW5pdCk7IH0K
KyAgICAgICAgR0MzRHVpbnQgYm91bmRUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmVVbml0KSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFw
LmZpbmQodGV4dHVyZVVuaXQpOworICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4
dHVyZU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmZp
cnN0OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBHQzNEdWlu
dCBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBib3VuZFRhcmdldChhY3RpdmVU
ZXh0dXJlVW5pdCk7IH0KKyAgICAgICAgR0MzRGVudW0gYm91bmRUYXJnZXQoR0MzRGVudW0gdGV4
dHVyZVVuaXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBi
b3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWUuc2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHNldEJvdW5kVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlVW5pdCwgR0MzRHVp
bnQgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICBib3Vu
ZFRleHR1cmVNYXAuc2V0KHRleHR1cmVVbml0LCBzdGQ6Om1ha2VfcGFpcih0ZXh0dXJlLCB0YXJn
ZXQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHVzaW5nIFRleHR1cmVTZWVkQ291bnQgPSBIYXNo
Q291bnRlZFNldDxHQzNEdWludCwgV1RGOjpJbnRIYXNoPEdDM0R1aW50PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWludD4+OworICAgICAgICBUZXh0dXJlU2VlZENv
dW50IHRleHR1cmVTZWVkQ291bnQ7CisgICAgfTsKKworICAgIEdyYXBoaWNzQ29udGV4dEdMU3Rh
dGUgbV9zdGF0ZTsKKworICAgIC8vIEZvciBtdWx0aXNhbXBsaW5nCisgICAgR0MzRHVpbnQgbV9t
dWx0aXNhbXBsZUZCTyB7IDAgfTsKKyAgICBHQzNEdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyIHsgMCB9OworICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciB7
IDAgfTsKKworICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KKyAg
ICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7CisKKyNpZiBVU0UoTklD
T1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGZyaWVuZCBjbGFzcyBOaWNvc2lhOjpH
QzNETGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5pY29zaWE6OkdDM0RMYXllcj4gbV9uaWNv
c2lhTGF5ZXI7CisjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZnJpZW5kIGNsYXNzIFRl
eHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPiBtX3RleG1hcExheWVyOworI2Vsc2UKKyAgICBmcmll
bmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU+IG1fcHJpdmF0ZTsKKyNlbmRpZgor
CisgICAgSGFzaFNldDxDbGllbnQqPiBtX2NsaWVudHM7CisKKyAgICBib29sIG1faXNGb3JXZWJH
TDIgeyBmYWxzZSB9OworICAgIGJvb2wgbV91c2luZ0NvcmVQcm9maWxlIHsgZmFsc2UgfTsKKwor
ICAgIHVuc2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3VudCB7IDAgfTsKKyAgICBib29sIG1fZmFpbE5l
eHRTdGF0dXNDaGVjayB7IGZhbHNlIH07CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX3ZhbyB7IDAgfTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIChV
U0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQorICAgIGJvb2wgbV9oYXNTd2l0Y2hlZFRvSGlnaFBl
cmZvcm1hbmNlR1BVIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmIwODZkMGM1MWZjZDE1Yjg1OTdlMmJjMDM5MDk4ZGExZjEyOTg3Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCkBAIC0wLDAgKzEsNTE2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShD
T0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpKQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKyNpbmNsdWRl
ICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGVtcG9y
YXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3Ry
aW5nPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2Nl
bGVyYXRlLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQor
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2ltcG9ydCA8
T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisvLyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgorI2RlZmlu
ZSBHTF9SR0JBMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAweDg4MTQKKyNkZWZpbmUgR0xf
UkdCMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE1CisjZWxpZiBVU0UoT1BFTkdM
KQorI2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5D
TFVERUQKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+Cisj
dW5kZWYgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVE
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCitzdGF0
aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbnQgd2lkdGgsIGludCBoZWlnaHQs
IHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICAvLyBXZSBjYW4gYXNzdW1lIHRoaXMgZG9l
c24ndCBvdmVyZmxvdyBiZWNhdXNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucworICAgIC8vIHVzZSBj
aGVja2VkIGFyaXRobWV0aWMuCisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAq
IDQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAg
IHBpeGVsc1tpICsgM10gPSAyNTU7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQoreworICAg
IGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgLy8gTlZJRElBIGRyaXZl
cnMgaGF2ZSBhIGJ1ZyB3aGVyZSBjYWxsaW5nIHJlYWRQaXhlbHMgaW4gQkdSQSBjYW4gcmV0dXJu
IHRoZSB3cm9uZyB2YWx1ZXMgZm9yIHRoZSBhbHBoYSBjaGFubmVsIHdoZW4gdGhlIGFscGhhIGlz
IG9mZiBmb3IgdGhlIGNvbnRleHQuCisgICAgaWYgKCFhdHRycy5hbHBoYSAmJiBnZXRFeHRlbnNp
b25zKCkuaXNOVklESUEoKSkgeworICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworI2lmIFVTRShBQ0NF
TEVSQVRFKQorICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICAgICAgc3JjLmhlaWdodCA9
IGhlaWdodDsKKyAgICAgICAgc3JjLndpZHRoID0gd2lkdGg7CisgICAgICAgIHNyYy5yb3dCeXRl
cyA9IHdpZHRoICogNDsKKyAgICAgICAgc3JjLmRhdGEgPSBwaXhlbHM7CisKKyAgICAgICAgdklt
YWdlX0J1ZmZlciBkZXN0OworICAgICAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAg
ZGVzdC53aWR0aCA9IHdpZHRoOworICAgICAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0Owor
ICAgICAgICBkZXN0LmRhdGEgPSBwaXhlbHM7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFu
bmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7
IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZz
cmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgICAgIGludCB0b3Rh
bEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBp
eGVsc1tpICsgMl0pOworI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIDo6Z2xSZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JF
ViwgcGl4ZWxzKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIWF0dHJzLmFscGhhKQor
ICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMp
OworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0
cmlidXRlcygpCit7CisgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdMX0VYVF9wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBl
RkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0
cmlidXRlcygpOworICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBjb25z
dCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGlu
dGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICBpZiAoYXR0cnMuYWxwaGEpIHsKKyAg
ICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9y
bWF0ID0gR0xfUkdCQTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3Jt
YXQgPSBHTF9SR0I4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisgICAg
aWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qg
YWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5v
dC4KKyAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJp
YnV0ZXMuCisKKyAgICAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9u
cygpOworICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cg
d2UgaGF2ZSBpdC4KKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0VYVF9wYWNr
ZWRfZGVwdGhfc3RlbmNpbCIpKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorI2lmIFBMQVRGT1JN
KENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyNlbHNlCisgICAgICAgICAgICBpbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyNlbmRpZgorICAg
IH0KKworICAgIC8vIFJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8uCisgICAgaWYgKGF0dHJzLmFudGlh
bGlhcykgeworICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgLy8g
VXNpbmcgbW9yZSB0aGFuIDQgc2FtcGxlcyBpcyBzbG93IG9uIHNvbWUgaGFyZHdhcmUgYW5kIGlz
IHVubGlrZWx5IHRvCisgICAgICAgIC8vIHByb2R1Y2UgYSBzaWduaWZpY2FudGx5IGJldHRlciBy
ZXN1bHQuCisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxl
Q291bnQpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisjaWYgUExBVEZP
Uk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIEdMX1JH
QkE4X09FUywgd2lkdGgsIGhlaWdodCk7CisjZWxzZQorICAgICAgICA6OmdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBt
X2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCisgICAgICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKKyAg
ICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3Vu
dCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgaWYgKGF0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VY
VCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgICAgICBpZiAoYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNI
TUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICB9CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyByZXNpemUgcmVndWxhciBGQk8KKyAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAg
IEFTU0VSVChtX3RleHR1cmUpOworI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShPUEVOR0xf
RVMpCisgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUp
OworICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfQ09M
T1JfQVRUQUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICBzZXRSZW5k
ZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWln
aHQpOworI2Vsc2UKKyAgICBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKKyAgICB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVG
cm9tTGF5ZXIoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FS
QiwgbV90ZXh0dXJlLCAwKTsKKyNlbmRpZiAvLyAhVVNFKE9QRU5HTF9FUykpCisjZWxzZQorICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFt
ZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkgeworICAgICAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAg
ICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwor
ICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgICAg
ICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAg
ICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKyNlbmRpZgor
I2VuZGlmCisKKyAgICBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBib29sIG11c3RSZXN0
b3JlRkJPID0gdHJ1ZTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsK
KyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAg
ICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8pCisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVk
ZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAo
IWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkpIHsKKyAg
ICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9S
RU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAg
ICAgICBpZiAoYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICB9CisKKyAgICBp
ZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xf
RlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1ND
SVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVk
RGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcg
c2NvcGVkRGVwdGgoR0xfREVQVEhfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5H
TFNldHRpbmcgc2NvcGVkU3RlbmNpbChHTF9TVEVOQ0lMX1RFU1QsIEdMX0ZBTFNFKTsKKworI2lm
IFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgIEdMaW50IGJvdW5kRnJhbWVC
dWZmZXI7CisgICAgOjpnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZib3Vu
ZEZyYW1lQnVmZmVyKTsKKyNlbmRpZgorCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9S
RUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworI2lmIFBMQVRGT1JN
KENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKKyAgICA6
OmdsRmx1c2goKTsKKyAgICA6OmdsUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgp
OworICAgIGNvbnN0IEdMZW51bSBkaXNjYXJkc1tdID0geyBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwg
R0xfREVQVEhfQVRUQUNITUVOVCB9OworICAgIDo6Z2xEaXNjYXJkRnJhbWVidWZmZXJFWFQoR0xf
UkVBRF9GUkFNRUJVRkZFUl9BUFBMRSwgMiwgZGlzY2FyZHMpOworICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZmZXIpOworI2Vsc2UKKyAgICBJbnRS
ZWN0IHJlc29sdmVSZWN0ID0gcmVjdDsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJlc29sdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KTsKKworICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVzb2x2ZVJlY3QueCgpLCByZXNv
bHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNv
bHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZl
UmVjdC5tYXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisjZW5kaWYKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgVVNFKE9Q
RU5HTCkKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAgY2FzZSBERVBUSF9TVEVO
Q0lMOgorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIERFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICBpbnRl
cm5hbGZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBSR0JBNDoKKyAgICBjYXNlIFJHQjVfQTE6CisgICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xf
UkdCQTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSR0I1NjU6CisgICAgICAgIGludGVybmFs
Zm9ybWF0ID0gR0xfUkdCOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIC8vIE5lZWQgdG8gZW11bGF0ZSBN
QVhfRlJBR01FTlQvVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyBhbmQgTUFYX1ZBUllJTkdfVkVDVE9S
UworICAgIC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyByZXR1
cm4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzCisgICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1cm4g
dGhlIG51bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4KKyAg
ICAvLyBUaGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRv
IGJlIGRpdmlkZWQgYnkgNC4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBzd2l0Y2gg
KHBuYW1lKSB7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlM6CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9S
TV9DT01QT05FTlRTLCB2YWx1ZSk7CisgICAgICAgICp2YWx1ZSAvPSA0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgorICAgICAgICA6OmdsR2V0
SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMsIHZhbHVlKTsKKyAgICAg
ICAgKnZhbHVlIC89IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTUFYX1ZBUllJTkdfVkVD
VE9SUzoKKyAgICAgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICAgICAgQVNT
RVJUKDo6Z2xHZXRFcnJvcigpID09IEdMX05PX0VSUk9SKTsKKyAgICAgICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAo
OjpnbEdldEVycm9yKCkgPT0gR0xfSU5WQUxJRF9FTlVNKSB7CisgICAgICAgICAgICAgICAgOjpn
bEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0NPTVBPTkVOVFMsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAqdmFsdWUgLz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsIHZhbHVlKTsK
KyAgICAgICAgICAgICp2YWx1ZSAvPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2Vu
ZGlmCisgICAgY2FzZSBNQVhfVEVYVFVSRV9TSVpFOgorICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
TUFYX1RFWFRVUkVfU0laRSwgdmFsdWUpOworICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJl
cXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQorICAgICAgICAgICAgKnZhbHVl
ID0gc3RkOjptaW4oNDA5NiwgKnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFOgorICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSwgdmFsdWUpOworICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJl
cXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQorICAgICAgICAgICAgKnZhbHVl
ID0gc3RkOjptaW4oMTAyNCwgKnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIC8vIFNvbWUgb2xkZXIgaGFyZHdhcmUgYWR2ZXJ0aXNlcyBhIGxhcmdlciBtYXhp
bXVtIHRoYW4gdGhleQorICAgIC8vIGNhbiBhY3R1YWxseSBoYW5kbGUuIFJhdGhlciB0aGFuIGRl
dGVjdGluZyBzdWNoIGRldmljZXMsIHNpbXBseQorICAgIC8vIGNsYW1wIHRoZSBtYXhpbXVtIHRv
IDgxOTIsIHdoaWNoIGlzIGJpZyBlbm91Z2ggZm9yIGEgNUsgZGlzcGxheS4KKyAgICBjYXNlIE1B
WF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9SRU5ERVJC
VUZGRVJfU0laRSwgdmFsdWUpOworICAgICAgICAqdmFsdWUgPSBzdGQ6Om1pbig4MTkyLCAqdmFs
dWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1BWF9WSUVXUE9SVF9ESU1TOgorICAgICAg
ICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZJRVdQT1JUX0RJTVMsIHZhbHVlKTsKKyAgICAgICAgdmFs
dWVbMF0gPSBzdGQ6Om1pbig4MTkyLCB2YWx1ZVswXSk7CisgICAgICAgIHZhbHVlWzFdID0gc3Rk
OjptaW4oODE5MiwgdmFsdWVbMV0pOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1
bHQ6CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdD
M0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdl
LCBHQzNEaW50KiBwcmVjaXNpb24pCit7CisgICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5cGUpOwor
ICAgIEFTU0VSVChyYW5nZSk7CisgICAgQVNTRVJUKHByZWNpc2lvbik7CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkxPV19JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TUVESVVNX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0lOVDoKKyAgICAg
ICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYSAzMi1iaXQgdHdvcy1jb21wbGVtZW50IGludGVn
ZXIgZm9ybWF0LgorICAgICAgICByYW5nZVswXSA9IDMxOworICAgICAgICByYW5nZVsxXSA9IDMw
OworICAgICAgICBwcmVjaXNpb25bMF0gPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TUVESVVNX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhJR0hfRkxPQVQ6Cisg
ICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGFuIElFRUUgc2luZ2xlLXByZWNpc2lvbiBm
bG9hdGluZy1wb2ludCBmb3JtYXQuCisgICAgICAgIHJhbmdlWzBdID0gMTI3OworICAgICAgICBy
YW5nZVsxXSA9IDEyNzsKKyAgICAgICAgcHJlY2lzaW9uWzBdID0gMjM7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAg
aWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
R0MzRGVudW0gb3BlbkdMRm9ybWF0ID0gZm9ybWF0OworICAgIEdDM0RlbnVtIG9wZW5HTEludGVy
bmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBpZiAodHlw
ZSA9PSBHTF9GTE9BVCkgeworICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCisgICAgICAg
ICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkEzMkZfQVJCOworICAgICAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfUkdCKQorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQg
PSBHTF9SR0IzMkZfQVJCOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykg
eworICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCisgICAgICAgICAgICBvcGVuR0xJbnRl
cm5hbEZvcm1hdCA9IEdMX1JHQkExNkZfQVJCOworICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0g
R0xfUkdCKQorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IxNkZfQVJC
OworICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFKQorICAgICAgICAgICAg
b3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9MVU1JTkFOQ0UxNkZfQVJCOworICAgICAgICBlbHNl
IGlmIChmb3JtYXQgPT0gR0xfQUxQSEEpCisgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1h
dCA9IEdMX0FMUEhBMTZGX0FSQjsKKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlO
QU5DRV9BTFBIQSkKKyAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0FSQjsKKyAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOworICAg
IH0KKworICAgIEFTU0VSVChmb3JtYXQgIT0gRXh0ZW5zaW9uc0dMOjpTUkdCOF9BTFBIQThfRVhU
KTsKKyAgICBpZiAoZm9ybWF0ID09IEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQpCisgICAg
ICAgIG9wZW5HTEZvcm1hdCA9IEdMX1JHQkE7CisgICAgZWxzZSBpZiAoZm9ybWF0ID09IEV4dGVu
c2lvbnNHTDo6U1JHQl9FWFQpCisgICAgICAgIG9wZW5HTEZvcm1hdCA9IEdMX1JHQjsKKyNlbmRp
ZgorCisgICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgeworICAgICAgICAvLyBUaGVyZSBhcmUg
c29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVu
IHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGFkYXB0IHRo
ZW0uCisgICAgICAgIHN3aXRjaCAob3BlbkdMSW50ZXJuYWxGb3JtYXQpIHsKKyAgICAgICAgY2Fz
ZSBBTFBIQToKKyAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBzaW1wbGUgY29tcG9uZW50
IGNvbnRhaW5pbmcgYW4gYWxwaGEgdmFsdWUuIEl0IG5lZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEg
R0xfUkVEIHBsYW5lLgorICAgICAgICAgICAgLy8gV2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdM
X1JFRCAoYm90aCBuZWVkIHRvIGJlIEdMX0FMUEhBIGluIFdlYkdMKSBhbmQgaW5zdHJ1Y3QgdGhl
IHRleHR1cmUgdG8gc3dpenpsZQorICAgICAgICAgICAgLy8gdGhlIHJlZCBjb21wb25lbnQgdmFs
dWVzIHdpdGggdGhlIGFscGhhIGNvbXBvbmVudCB2YWx1ZXMuCisgICAgICAgICAgICBvcGVuR0xJ
bnRlcm5hbEZvcm1hdCA9IG9wZW5HTEZvcm1hdCA9IFJFRDsKKyAgICAgICAgICAgIHRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfQSwgUkVEKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIC8vIFRoZSBmb3Jt
YXQgaGFzIDIgY29tcG9uZW50cywgYW4gYWxwaGEgb25lIGFuZCBhIGx1bWluYW5jZSBvbmUgKHNh
bWUgdmFsdWUgZm9yIHJlZCwgZ3JlZW4gYW5kIGJsdWUpLgorICAgICAgICAgICAgLy8gSXQgbmVl
ZHMgdG8gYmUgYmFja2VkIHdpdGggYSBHTF9SRyBwbGFuZSwgdXNpbmcgdGhlIHJlZCBjb21wb25l
bnQgZm9yIHRoZSBjb2xvcnMgYW5kIHRoZSBncmVlbiBjb21wb25lbnQKKyAgICAgICAgICAgIC8v
IGZvciBhbHBoYS4gV2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdMX1JHIGFuZCBzd2l6emxlIHRo
ZSBjb21wb25lbnRzLgorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xG
b3JtYXQgPSBSRzsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NX
SVpaTEVfUiwgUkVEKTsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJF
X1NXSVpaTEVfRywgUkVEKTsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhU
VVJFX1NXSVpaTEVfQiwgUkVEKTsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBU
RVhUVVJFX1NXSVpaTEVfQSwgR1JFRU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRleElt
YWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgb3BlbkdMRm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDM0Rj
bGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICA6OmdsRGVwdGhS
YW5nZWYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIp
KTsKKyNlbHNlCisgICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworI2VuZGlmCit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0
aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShDT0NPQSkgJiYg
VVNFKE9QRU5HTF9FUykKKyAgICA6OmdsQ2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRl
cHRoKSk7CisjZWxzZQorICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKKyNlbmRpZgorfQorCisj
aWYgIVBMQVRGT1JNKEdUSykKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorI2lmIFBMQVRGT1JN
KENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5p
cXVlPEV4dGVuc2lvbnNHTE9wZW5HTD4odGhpcywgZmFsc2UpOworI2Vsc2UKKyAgICAgICAgbV9l
eHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIGlzR0xFUzJD
b21wbGlhbnQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKK30KKyNlbmRp
ZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBhdXRvIGF0dHJzID0gY29u
dGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNo
IGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCisgICAgLy8gYWxsIHBy
ZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhl
bHMuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgOjpnbEZsdXNoKCk7Cisg
ICAgfQorICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgZGF0YSk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICBpZiAoIWF0dHJzLmFscGhhICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkEgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpCR1JBKSAmJiAobV9z
dGF0ZS5ib3VuZEZCTyA9PSBtX2ZibyB8fCAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykpKQorICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJv
bVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkp
OworI2VuZGlmCit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dM
KSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zMTgxMjg0MWY2YmJkODA0M2U2Mzc4NzExZjQwNmIxNjYzMTcyZGM1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtMCwwICsxLDIwODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
CisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IFVT
RShPUEVOR0xfRVMpKQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKworI2lmICFQTEFURk9STShDT0NP
QSkgJiYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgor
I2Vsc2UKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKKyNlbmRpZgorI2luY2x1ZGUg
IkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNz
aW9uLmg+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMu
aD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaWYgVVNFKE9QRU5HTF9FUykK
KyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRVMzL2ds
Lmg+CisvLyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgorI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAg
ICAgICAgICAgICAgICAgICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODE1CisjZWxzZQorI2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9N
VUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4K
KyNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+CisjaW5jbHVkZSA8T3BlbkdML2dsM2V4dC5oPgorI3Vu
ZGVmIEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAor
I2VuZGlmCisKKyNlbHNlCisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGlt
cy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisj
ZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgorI2VuZGlmCisKKyNlbmRpZgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcigpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0
YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFzaDsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBzaGFyZWROYW1lSGFzaCA9
IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OworICAgIH0pOworCisgICAgcmV0
dXJuICpzaGFyZWROYW1lSGFzaDsKK30KKworc3RhdGljIHZvaWQgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKK3sKKyAgICAqZ2V0
Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKK30KKworLy8g
SGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVyIHRvIGRv
CisvLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBtZXRob2Qs
IGJlZm9yZQorLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIKKy8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3VycmVudCBp
bnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKworc3RhdGljIHVpbnQ2NF90IG5h
bWVIYXNoRm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCit7CisgICAg
aWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyBuYW1lQXNDU3Ry
aW5nID0gQ1N0cmluZyhuYW1lKTsKKworICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIgbG9jYWwg
bWFwLgorICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyID0g
KmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOworICAgIFNoYWRlck5hbWVIYXNoOjpp
dGVyYXRvciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5maW5kKG5h
bWVBc0NTdHJpbmcpOworICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlci0+ZW5kKCkpCisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsKKworICAg
IHVuc2lnbmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOworCisgICAgLy8gQ29u
dmVydCB0aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1iaXQgcmVz
dWx0CisgICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3VyIHRhYmxl
LiBPdmVyZmxvdyB3b3VsZAorICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3JlIGFscmVh
ZHkgaGFzaGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAgLy8gd2UncmUgaG9waW5nIHRo
YXQgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKKyAgICAvLyBkb24ndCBoYXZl
IHRoYXQgbWFueSBzeW1ib2xzKS4KKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hWYWx1ZTsK
KyAgICByZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXItPnNpemUoKSArIDEpOworCisgICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zZXQo
bmFtZUFzQ1N0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBw
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7CisKKyAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNp
b25zKCk7CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMu
c3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0
ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAg
ICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBh
dHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXR0cnMuc3Rl
bmNpbCA9IGZhbHNlOworICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAg
fQorICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAg
aWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSIpKSB7CisgICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgICAg
IHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2Ft
cGxlIik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCit7CisgICAg
Q2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiByb3dCeXRlcyA9IENoZWNrZWQ8aW50LCBSZWNv
cmRPdmVyZmxvdz4obV9jdXJyZW50V2lkdGgpICogNDsKKyAgICBpZiAocm93Qnl0ZXMuaGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3Zl
cmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7Cisg
ICAgaWYgKHRvdGFsQnl0ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGludCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7CisK
KyAgICBhdXRvIHBpeGVscyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPih0b3RhbEJ5
dGVzKTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRl
cmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgIGlmICghY29udGV4
dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAgIC8vIFByZW11bHRpcGx5
IGFscGhhLgorICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxz
W2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAx
XSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwor
ICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAq
IHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAgfQorCisgICAgcGFpbnRUb0Nh
bnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCksIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7
CisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICBwcmVzZW50UmVu
ZGVyYnVmZmVyKCk7CisjZW5kaWYKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKikKK3sKKyAgICAvLyBO
b3QgbmVlZGVkIGF0IHRoZSBtb21lbnQsIHNvIHJldHVybiB0aGF0IG5vdGhpbmcgd2FzIGRvbmUu
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIC8v
IFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlp
bmcsIHdoaWNoIGlzCisgICAgLy8gbG9zc3kuCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCku
cHJlbXVsdGlwbGllZEFscGhhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
aW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5k
YXRhKCktPmRhdGEoKTsKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0
ZXNDaGVja2VkID0gNCAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50V2lk
dGgpICogQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRIZWlnaHQpOworICAg
IGlmICh0b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBp
bWFnZURhdGE7CisgICAgaW50IHRvdGFsQnl0ZXMgPSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVH
ZXQoKTsKKworICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7CisK
KyAgICAvLyBDb252ZXJ0IHRvIFJHQkEuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5
dGVzOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0p
OworCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZiAhVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Np
c3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0
aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKKyNlbmRpZgorCisgICAgaWYg
KGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1w
bGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAg
c3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgc3RkOjpzd2Fw
KG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhU
VVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIGdsRmx1c2goKTsKKworICAgIGlmIChtX3N0YXRl
LmJvdW5kRkJPICE9IG1fZmJvKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7CisgICAgZWxzZQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgOjpnbEFjdGl2ZVRleHR1
cmUoR0xfVEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0
YXRlLmJvdW5kVGFyZ2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5i
b3VuZFRleHR1cmUoR0xfVEVYVFVSRTApIDogMCk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9z
dGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCk7CisgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9m
Ym8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQg
Y2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBpZiAocGl4ZWxzU2l6ZSA8IG1f
Y3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFs
c2U7CisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CisgICAgICAgIHJl
c29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAg
bXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0YXRl
LmJvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7
CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpbnQgcGFja0Fs
aWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsK
KyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsK
KyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdM
X1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICByZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5
KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIHBpeGVscyk7CisKKyAgICBp
ZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQorICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xf
UEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJP
KQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghcGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGgg
PT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOworICAgIGlm
ICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFya0Nv
bnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3Vy
cmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHZh
bGlkYXRlQXR0cmlidXRlcygpOworCisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRT
Y2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKwor
ICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJD
b2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBjbGVhclN0
ZW5jaWwgPSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3Rl
bmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOworICAg
IEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0
RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJD
b2xvcigwLCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNL
LCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSk7CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKwor
ICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NM
RUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVN
QVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAg
ICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChhdHRy
cy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAg
ICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0
PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVO
Q0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNr
QmFjaykpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZm
ZmZmZik7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZm
ZmYpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0K
KworICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOworCisgICAgOjpnbENsZWFyQ29sb3IoY2xlYXJD
b2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7Cisg
ICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJd
LCBjb2xvck1hc2tbM10pOworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbERl
cHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAg
ICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7CisgICAgfQorCisgICAgaWYg
KG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7CisKKyAgICA6OmdsRmx1
c2goKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1Bh
Y2tpbmcoUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJh
Z21lbnRTaGFkZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRh
aW5zKHZlcnRleFNoYWRlcikpOworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlu
cyhmcmFnbWVudFNoYWRlcikpOworICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKKyAgICBjb25zdCBhdXRvJiBm
cmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZh
bHVlOworCisgICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRW
YXJ5aW5nczsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5
LnZhcnlpbmdNYXApIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4
U3ltYm9sLmtleTsKKyAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxl
cyBmb3IgZWFjaCBpbmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KKyAgICAgICAgLy8gV2Ugb25s
eSB3YW50IGEgc2luZ2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCisgICAgICAg
IGlmIChzeW1ib2xOYW1lLmVuZHNXaXRoKCJdIikpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAvLyBEb24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KKyAgICAgICAgaWYgKHN5
bWJvbE5hbWUgPT0gImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNp
bmciIHx8IHN5bWJvbE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5
LnZhcnlpbmdNYXAuZmluZChzeW1ib2xOYW1lKTsKKyAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9s
ICE9IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5lbmQoKSkKKyAgICAgICAgICAgIGNvbWJpbmVk
VmFyeWluZ3MuYWRkKHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7CisgICAgfQor
CisgICAgc2l6ZV90IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7CisgICAg
aWYgKCFudW1WYXJ5aW5ncykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzdGQ6OnZlY3Rv
cjxzaDo6U2hhZGVyVmFyaWFibGU+IHZhcmlhYmxlczsKKyAgICB2YXJpYWJsZXMucmVzZXJ2ZShj
b21iaW5lZFZhcnlpbmdzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3lt
Ym9sIDogY29tYmluZWRWYXJ5aW5ncy52YWx1ZXMoKSkKKyAgICAgICAgdmFyaWFibGVzLnB1c2hf
YmFjayh2YXJ5aW5nU3ltYm9sKTsKKworICAgIEdDM0RpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAw
OworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZF
Q1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7CisjZWxzZQorICAgIGlmIChtX2lzRm9yV2ViR0wy
KQorICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZh
cnlpbmdWZWN0b3JzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgR0MzRGludCBtYXhWYXJ5aW5nRmxv
YXRzID0gMDsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywg
Jm1heFZhcnlpbmdGbG9hdHMpOworICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlp
bmdGbG9hdHMgLyA0OworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJs
ZXNXaXRoaW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOworfQor
Citib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm0z
RE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRl
cikpOworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRl
cikpOworICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKKyAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOworCisgICAgSGFz
aE1hcDxTdHJpbmcsIHNoOjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKKworICAg
IGZvciAoY29uc3QgYXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7CisgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUubWFwcGVkTmFt
ZTsKKyAgICAgICAgdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFt
ZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUucHJlY2lzaW9uKTsK
KyAgICB9CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRyeS51bmlm
b3JtTWFwKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnku
dmFsdWUubWFwcGVkTmFtZTsKKyAgICAgICAgY29uc3QgYXV0byYgdmVydGV4U3ltYm9sID0gdmVy
dGV4U3ltYm9sUHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFw
cGVkTmFtZS5sZW5ndGgoKSkpOworICAgICAgICBpZiAodmVydGV4U3ltYm9sICE9IHZlcnRleFN5
bWJvbFByZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVlICE9IGVudHJ5LnZh
bHVlLnByZWNpc2lvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworSW50U2l6ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7Cisg
ICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hh
ZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmli
TG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9n
cmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0ws
ICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCku
ZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIDo6Z2xCaW5kQXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBm
Ym87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAg
ICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBs
ZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmRGQk8pIHsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fc3RhdGUu
Ym91bmRGQk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5k
ZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRSZW5k
ZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fc3RhdGUu
c2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdl
dCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFt
cGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24o
R0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxl
bmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymxl
bmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFy
YXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFj
dG9yKTsKK30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVu
Y1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNB
bHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxw
aGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwg
dXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0Rl
bnVtIHVzYWdlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJE
YXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZz
ZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXpl
LCBkYXRhKTsKK30KKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXUEUpCit2b2lk
KiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFj
Y2VzcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbE1hcEJ1
ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7Cit9CisKK0dDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bm1hcEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xVbm1hcEJ1ZmZl
cih0YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVy
U3ViRGF0YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0MzRGlu
dHB0ciByZWFkT2Zmc2V0LCBHQzNEaW50cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29weUJ1ZmZlclN1YkRh
dGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXpl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRp
dihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRHNpemVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykKK3sKKyNpZiBVU0UoT1BFTkdM
X0VTKQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRJbnRlcm5hbGZvcm1h
dGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxm
b3JtYXQpOworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZlNp
emUpOworICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1w
bGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBs
ZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFN0b3Jh
Z2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJl
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxl
dmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNl
cywgR0MzRGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKQoreworICAgIEFTU0VS
VChwcm9ncmFtKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIDo6Z2xHZXRBY3Rp
dmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGlj
ZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7Cit9CisjZW5kaWYKKworR0MzRGVudW0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0g
dGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xh
bXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbENsZWFyKG1hc2spOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyU3RlbmNpbChzKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwg
R0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
aWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBp
bmcuIER1ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBw
b2ludCBhIGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0Lgor
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVz
b3VyY2VzKCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFO
R0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rp
b24gPSBuYW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJz
KQorICAgICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVI
YXNoPigpOworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25z
LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGls
ZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29u
c3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRh
dGEoKTsKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJD
U3RyaW5nLmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNo
YWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxu
IiwgZ2V0U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdM
LCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRy
YW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAg
IDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7
CisgICAgCisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2
KHNoYWRlciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNv
dXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAv
LyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAg
IGlmIChsZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9y
PEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRV
bm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwor
ICAgIH0KKworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50
cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRy
YW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUu
Iik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+dmFsdWU7CisKKyAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5n
ID0gZW50cnkuc291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIg
PSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKKyAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3Ro
ID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKKworICAgIExPRyhXZWJHTCwgIi0tLSBi
ZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIg
c291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKKworICAgIDo6Z2xTaGFkZXJTb3VyY2Uo
c2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKKworICAg
IDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKwor
ICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1
cyk7CisKKyAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5
LmlzVmFsaWQgPSB0cnVlOworICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24g
b2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbnRyeS5pc1Zh
bGlkID0gZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRp
b24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisg
ICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwor
ICAgIH0KKyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAm
JiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhH
QzNEZW51bSBmdW5jKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0
aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFz
ayhHQzNEYm9vbGVhbiBmbGFnKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xEZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5y
ZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
R0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3QXJy
YXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwg
dHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zm
c2V0KSkpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJn
ZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdlbmVyYXRlTWlwbWFw
KHRhcmdldCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0
dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZl
SW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Cisg
ICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5H
VEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJp
YnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVs
bCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNp
emUgPSAwOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHBy
b2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBl
LCBuYW1lLmRhdGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShw
cm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCks
IG5hbWVMZW5ndGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1O
YW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVk
IGlzIG1hcHBpbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dy
YW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgp
LmRhdGEoKSk7CisjZW5kaWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBp
bmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQor
eworICAgIEdDM0RpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9z
aGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJ
bkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRU
UklCVVRFUywgJnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFt
U3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDM0R1
aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRy
aWJ1dGVJbmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRy
aWJ1dGVJbmRleE1hcFtpbmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJ
bXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBt
YXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJ
VkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOworCisgICAgVmVjdG9yPEdM
Y2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAw
OworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0
QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3Ro
LCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2lu
YWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBTdHJpbmco
bmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3Ry
aW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0ws
ICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAnJXMnIHRvICcl
cyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxO
YW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisgICAgaW5mby5uYW1lID0gb3JpZ2lu
YWxOYW1lOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQoreworICAgIEdDM0RpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1
bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlm
IChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAg
ICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4
dEdMOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7CisgICAgICAgIHJlc3VsdCA9IG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgfQorICAgIAor
ICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1
ZTsKKyAgICBHQzNEdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJl
ZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRU
b0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKKyAgICAKKyAgICByZXR1cm4gZ2V0
QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3Jt
M0RPYmplY3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3Jh
bSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0
ZUhhc2hlZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hG
b3JTaGFkZXIobmFtZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ3ZWJnbF8iKTsKKyAg
ICBhcHBlbmRVbnNpZ25lZEFzSGV4KG51bWJlciwgYnVpbGRlciwgTG93ZXJjYXNlKTsKKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0g
cmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0byBzeW1ib2xFbnRy
eSA9IHN5bWJvbE1hcC5maW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xN
YXAuZW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBw
ZWROYW1lID0gc3ltYm9sRW50cnktPnZhbHVlLm1hcHBlZE5hbWU7CisgICAgcmV0dXJuIFN0cmlu
ZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOworfQorCitTdHJpbmcg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIEdDM0RzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXJzWzJdID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAm
Y291bnQsIHNoYWRlcnMpOworCisgICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291
cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVk
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisg
ICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVy
IGxpbmtpbmcuCisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dy
YW0pOworICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAg
ICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBtYXBw
ZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJz
dCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBl
LCBuYW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFw
cGVkTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9T
WU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0
dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3Jl
IGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBl
dmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorICAgICAgICBp
ZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hh
ZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgICAgIHNldEN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworCisgICAg
ICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKKworICAg
ICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICAgICAg
bV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7CisK
KyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7
Cit9CisKK09wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFs
U3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0
byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFw
KHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xN
YXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUubWFwcGVkTmFtZS5j
X3N0cigpKQorICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKKyAgICB9CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRl
clN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDM0Rz
aXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0
YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisgICAgCisgICAgZm9y
IChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gb3JpZ2lu
YWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1i
b2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJl
dHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBoYXZl
IGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KKyAgICBhdXRv
IHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3Vs
dCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgeworICAgICAgICBhdXRvIGxpbmtlZFNoYWRl
cnMgPSByZXN1bHQtPnZhbHVlOworICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFs
U3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwg
bmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3Jp
Z2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAgIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUp
OworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFs
TmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1C
T0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJp
YnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFu
eSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVu
IHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorCisgICAgICAgIGNv
bnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1l
KTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+dmFsdWU7CisgICAgfQorCisgICAgcmV0
dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3lt
Ym9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoc2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xU
eXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyAr
K3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1i
b2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJv
bEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9s
RW50cnkudmFsdWUubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3ltYm9sRW50cnkua2V5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBuYW1lOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUo
cHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9HKFdl
YkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0
ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xH
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
CitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICgh
cHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgp
LmRhdGEoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Ym9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGlt
aXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8gYSBwcm9i
bGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVy
cm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBO
T19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAg
ICAgR0MzRGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBO
T19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5h
ZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkg
dGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAgIC8vIGds
R2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBv
bmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAg
cmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsK
K30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElz
QnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZm
ZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVy
RVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9n
cmFtKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qg
cmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElz
UmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitHQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNUZXh0dXJl
KHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgo
R0MzRGZsb2F0IHdpZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xM
aW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5r
UHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0p
OworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgR0MzRHNpemVpIGNvdW50ID0gMDsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0g
MikKKyAgICAgICAgbV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWly
KHNoYWRlcnNbMF0sIHNoYWRlcnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFt
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVu
aXRzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0
KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1w
bGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZl
cnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJU
KHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRlclNvdXJj
ZUVudHJ5IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFk
ZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1
bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50
IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZh
aWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFp
bCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBh
c3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRl
cmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2YWx1ZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0x
ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
djAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwg
djAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiA0LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDIuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdD
M0RpbnQgdjEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIGNvbnN0IEdDM0RpbnQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBH
QzNEaW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
QzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA0LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3Jt
TWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiA5LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQor
eworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0
dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4
LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2
MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihH
QzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYx
LCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNm
dihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxv
YXQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJp
YjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBh
cnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0g
dHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0
ciBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0
dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRl
cnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30K
KworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4
QXJyYXkoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBhcnJheSA9
IDA7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisgICAgOjpnbEdlblZlcnRleEFycmF5cygxLCAmYXJy
YXkpOworI2VuZGlmCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQorewor
ICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKKyAgICA6OmdsRGVsZXRlVmVydGV4QXJyYXlz
KDEsICZhcnJheSk7CisjZW5kaWYKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAo
IWFycmF5KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisgICAgCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFy
cmF5KGFycmF5KTsKKyNlbmRpZgorICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJy
YXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAm
JiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisg
ICAgOjpnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShh
cnJheSk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9v
bGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5h
bWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2
KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKyAgICAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQ2NCogdmFsdWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICAqdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVm
b3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMu
aCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9w
ZW5HTCBFUyAzLjAuCisgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBh
dHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBl
aXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENv
dW50KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKQoreworICAgIEFTU0VSVChBQ1RJVkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVf
VU5JRk9STVMgPT0gcG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUg
PSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0
aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYg
c3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KS0+dmFsdWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxk
IGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwg
YXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUg
T3BlbkdMLgorICAgIEdDM0RpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAg
Zm9yIChHQzNEaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwg
aW5mbyk7CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0
dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNh
bWUgZm9yIHVuaWZvcm1zLgorICAgIEdDM0RpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6Omds
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7Cisg
ICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBp
LCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVk
VG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFs
dWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyc1syXSwgR0MzRHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBM
T0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAx
MjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRM
b2c7CisgICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8g
dGhlIHNoYWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBj
b21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcg
dG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8v
IGlzIGNhdXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
YW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRl
cjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3Rh
cnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsK
KyAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFy
dCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNz
ZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkp
OworICAgICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hl
ZExlbmd0aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3lt
Ym9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJH
TCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBt
YXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQo
bWFwcGVkU3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+
KGxvZy5sZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5n
KHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0ws
ICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQor
CitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9n
cmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7
CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5m
b0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQzNEc2l6
ZWkgY291bnQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdl
dFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6
ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgewor
ICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9UWVBFOgorICAgICAgICA6
OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZh
bHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAqdmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAqdmFsdWUgPSAwOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgICp2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hh
ZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xF
TkdUSDoKKyAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KElOVkFMSURfRU5VTSk7CisgICAgfQorfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNT
RVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGNvbnN0IGF1
dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
IAorCisgICAgY29uc3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsK
KyAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAg
ICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9f
TE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGlu
Zm8obGVuZ3RoKTsKKyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNp
emUsIGluZm8uZGF0YSgpKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsg
c2hhZGVyLCAwIH07CisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwg
U3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAg
IEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBjb25z
dCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOyAKKworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3Jt
ZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQq
IHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlmb3Jt
ZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitHQzNE
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dy
YW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFt
ZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0s
IG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcg
JXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7
CisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVy
dGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZh
bHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0
VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK0dDM0RzaXplaXB0ciBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGlu
ZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlw
dHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisjaWYgIVVTRShPUEVO
R0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpCisgICAgICAgIHR5cGUgPSBH
TF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisgICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkg
IHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdM
IHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVl
ZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAg
ICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNr
IEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCisgICAgICAgICAgICBmb3JtYXQgPSBS
RUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQ
SEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgICAgIGZvcm1hdCA9IFJHOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRo
IFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBk
aWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KKyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3Vu
ZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwg
ZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBk
YXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK1BsYXRmb3JtM0RPYmpl
Y3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVmZmVycygxLCAm
byk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBy
ZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgx
LCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7Cit9CisK
K1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUo
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBn
bEdlblRleHR1cmVzKDEsICZvKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8p
OworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxl
dGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChmcmFtZWJ1
ZmZlciA9PSBtX3N0YXRlLmJvdW5kRkJPKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJh
bWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKKyAgICAgICAgLy8g
b3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCisgICAgICAgIGJpbmRGcmFtZWJ1ZmZl
cihGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEs
ICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFt
KTsKKyAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1
ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qg
dGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3N0YXRlLmJvdW5k
VGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CisgICAgICAg
IHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOworICAgIH0pOworICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5yZW1vdmVBbGwodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIC8vIE5lZWQgdG8gbW92
ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCisgICAg
Ly8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Ig
d2lsbCBnZXQKKyAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2xFcnJvciBiZWZvcmUgdGhlIGVycm9y
IHdlIGFyZSBzeW50aGVzaXppbmcuCisgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBtX2xheWVyQ29t
cG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXJr
TGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CisKKyAg
ICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBj
bGllbnQtPmRpZENvbXBvc2l0ZSgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRl
ZDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCgp
Cit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAg
ICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENo
YW5nZWROb3RpZmljYXRpb24oKQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVj
dG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5v
dGlmaWNhdGlvbigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFn
ZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3Vy
cmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRy
YXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdF
bGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdl
dEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIG9m
ZnNldCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBH
QzNEdWludCBkaXZpc29yKQoreworICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZp
c29yKGluZGV4LCBkaXZpc29yKTsKK30KKworI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJH
TDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgo
R0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBy
aW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdM
X0VTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hZGRiNjc4ZGFiNjU2YjE1ZWJkYThkOTkzM2MxMTVlNmQzMThkNGM2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMRVMuY3BwCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lmIEVOQUJM
RShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKworI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCisjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VTaGFkZXJDb21waWxl
cigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFkZXJD
b21waWxlcigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxz
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVu
IHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFsbCBwcmV2aW91cyByZW5k
ZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgorICAgIDo6
Z2xGbHVzaCgpOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5k
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICA6OmdsRmx1c2go
KTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIGRhdGEpOworCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fc3Rh
dGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3Nhcnko
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVs
cykKK3sKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBo
ZWlnaHQgKiA0OworICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgICAgICBzdGQ6OnN3YXAo
cGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBCR1JBLgorICAgIH0KK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgY29u
c3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgR0x1aW50IGNvbG9yRm9ybWF0ID0g
MDsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYg
KGF0dHJpYnV0ZXMuYWxwaGEpIHsKKyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xf
UkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICAgICAgY29sb3JGb3JtYXQg
PSBHTF9SR0I7CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJl
IHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAvLyBTZWUgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcy4KKyAgICBib29sIHN1cHBvcnRQ
YWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIgPSAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpICYmIGdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIik7CisKKyAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCisgICAgYm9vbCBtdXN0
UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7
CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIH0KKworICAgIEFTU0VSVChtX3RleHR1
cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAg
IDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAg
IDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgICAg
ICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAg
ICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAg
IDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyNlbmRpZgorCisgICAgRXh0ZW5z
aW9uc0dMT3BlbkdMRVMmIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zR0xPcGVu
R0xFUyY+KGdldEV4dGVuc2lvbnMoKSk7CisgICAgaWYgKGV4dGVuc2lvbnMuaXNJbWFnaW5hdGlv
bigpICYmIGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNv
dW50OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfU0FNUExFU19J
TUcsICZtYXhTYW1wbGVDb3VudCk7IAorICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6
bWluKDgsIG1heFNhbXBsZUNvdW50KTsKKworICAgICAgICBleHRlbnNpb25zLmZyYW1lYnVmZmVy
VGV4dHVyZTJETXVsdGlzYW1wbGVJTUcoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDAsIHNhbXBsZUNvdW50KTsKKworICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAg
ICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0
LgorICAgICAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAg
ICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgaWYgKGF0
dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRF
UkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZF
UiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVS
LCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgICAg
ICAgICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJC
VUZGRVIsIHNhbXBsZUNvdW50LCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KSB7CisgICAgICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtu
b3cgd2UgaGF2ZSBpdC4KKyAgICAgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2ls
QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVS
QlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkK
KyAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQorICAg
ICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
KEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAg
OjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVY
OCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5E
RVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xf
REVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFD
SE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgewor
ICAgICAgICAvLyBGSVhNRTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IH0KKworICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0
JikKK3sKKyAgICAvLyBGSVhNRTogV2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0Lgor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZv
cm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50
KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQoreworICAgIEFTU0VSVChyYW5nZSk7CisgICAg
QVNTRVJUKHByZWNpc2lvbik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdl
LCBwcmVjaXNpb24pOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAg
IGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQor
eworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
KTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBp
ZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgIWdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xf
SU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpKSB7CisgICAgICAgIGF0dHJpYnV0
ZXMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhS
YW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7
Cit9CisKKyNpZiAhUExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMJiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMs
IGlzR0xFUzJDb21wbGlhbnQoKSk7CisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENBKQorUmVmUHRyPEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCit7CisgICAgLy8gVGhp
cyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJl
Y3RseSB0byB0aGUgSG9zdFdpbmRvdy4KKyAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRp
b246OkRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1
Y2Nlc3MgPSB0cnVlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyNpZiAhVVNFKE9QRU5HTF9F
UykKKyAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworI2VuZGlmCisg
ICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNjZXNzKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7
Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRy
aWJ1dGVzLCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKKyAgICAsIG1fY29tcGlsZXIoaXNH
TEVTMkNvbXBsaWFudCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNMX0NPTVBBVElCSUxJVFlf
T1VUUFVUKQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xQcml2YXRlPih0aGlzLCBkZXN0aW5hdGlvbikpCit7CisgICAgQVNTRVJUX1VOVVNFRChzaGFy
ZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisgICAgYXR0cmlidXRlcyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4K
KworICAgIGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKSB7CisgICAg
ICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgICAgIDo6Z2xHZW5U
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1fdGV4dHVyZSk7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
OworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgICAgICAKKyAgICAgICAgLy8g
Q3JlYXRlIGFuIEZCTy4KKyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAg
ICAgIAorICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9mYm87CisgICAgICAgIGlmICghYXR0
cmlidXRlcy5hbnRpYWxpYXMgJiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKSkKKyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8u
CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICAgICAgOjpnbEdl
bkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
ICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAg
ICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEFOR0xFIGluaXRpYWxp
emF0aW9uLgorICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaElu
aXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisgICAgCisgICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdW
ZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpN
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1
cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMpOworICAgIAorICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdM
IEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICAKKyAgICBH
QzNEaW50IHJhbmdlWzJdLCBwcmVjaXNpb247CisgICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpISUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7CisgICAgQU5HTEVSZXNv
dXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHBy
ZWNpc2lvbik7CisgICAgCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJj
ZXMpOworICAgIAorI2lmICFVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVY
X1BST0dSQU1fUE9JTlRfU0laRSk7CisgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwor
I2VuZGlmCisgICAgCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9CisKK0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJl
KTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBp
ZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAg
OjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQor
ICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0
ZDo6dW5pcXVlX3B0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soc3RkOjp1bmlxdWVfcHRy
PEVycm9yTWVzc2FnZUNhbGxiYWNrPikKK3sKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygp
Cit7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKQoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PnBsYXRmb3JtQ29udGV4dCgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1
cmU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQo
KSBjb25zdAoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2Vi
R0xMYXllci0+cGxhdGZvcm1MYXllcigpOworfQorI2VuZGlmCisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWIwMjdjYTc0OGRiNWM4MjA0MzFiN2Y5NDgxODFiOTk5ZDBiMzlh
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMjc5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNT
X0NPTlRFWFRfR0wpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgi
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKworI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKyNpbmNsdWRlIDxzeXMv
c3lzY3RsLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8
IFVTRShBTkdMRSkpCisjaW5jbHVkZSAiU3dpdGNoaW5nR1BVQ2xpZW50LmgiCisjaW5jbHVkZSA8
T3BlbkdML09wZW5HTC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEhB
VkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKworZW51bSB7CisgICAga0FHQ09wZW4sCisgICAg
a0FHQ0Nsb3NlCit9OworCitzdGF0aWMgaW9fY29ubmVjdF90IGF0dGFjaFRvQXBwbGVHcmFwaGlj
c0NvbnRyb2woKQoreworICAgIG1hY2hfcG9ydF90IG1hc3RlclBvcnQgPSBNQUNIX1BPUlRfTlVM
TDsKKyAgICAKKyAgICBpZiAoSU9NYXN0ZXJQb3J0KE1BQ0hfUE9SVF9OVUxMLCAmbWFzdGVyUG9y
dCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAg
CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGNsYXNzVG9NYXRjaCA9IElPU2VydmljZU1hdGNoaW5nKCJB
cHBsZUdyYXBoaWNzQ29udHJvbCIpOworICAgIGlmICghY2xhc3NUb01hdGNoKQorICAgICAgICBy
ZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0
OworICAgIGlvX2l0ZXJhdG9yX3QgaXRlcmF0b3I7CisgICAgaWYgKChrZXJuUmVzdWx0ID0gSU9T
ZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlcyhtYXN0ZXJQb3J0LCBjbGFzc1RvTWF0Y2gsICZpdGVy
YXRvcikpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwor
ICAgIAorICAgIGlvX3NlcnZpY2VfdCBzZXJ2aWNlT2JqZWN0ID0gSU9JdGVyYXRvck5leHQoaXRl
cmF0b3IpOworICAgIElPT2JqZWN0UmVsZWFzZShpdGVyYXRvcik7CisgICAgaWYgKCFzZXJ2aWNl
T2JqZWN0KQorICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAgaW9fY29u
bmVjdF90IGRhdGFQb3J0OworICAgIElPT2JqZWN0UmV0YWluKHNlcnZpY2VPYmplY3QpOworICAg
IGtlcm5SZXN1bHQgPSBJT1NlcnZpY2VPcGVuKHNlcnZpY2VPYmplY3QsIG1hY2hfdGFza19zZWxm
KCksIDAsICZkYXRhUG9ydCk7CisgICAgSU9PYmplY3RSZWxlYXNlKHNlcnZpY2VPYmplY3QpOwor
ICAgIAorICAgIHJldHVybiAoa2VyblJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpID8gZGF0YVBvcnQg
OiBNQUNIX1BPUlRfTlVMTDsKK30KKworc3RhdGljIGJvb2wgaGFzTXV4Q2FwYWJpbGl0eSgpCit7
CisgICAgaW9fY29ubmVjdF90IGRhdGFQb3J0ID0gYXR0YWNoVG9BcHBsZUdyYXBoaWNzQ29udHJv
bCgpOworICAgIAorICAgIGlmIChkYXRhUG9ydCA9PSBNQUNIX1BPUlRfTlVMTCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChJT0Nvbm5lY3RD
YWxsU2NhbGFyTWV0aG9kKGRhdGFQb3J0LCBrQUdDT3BlbiwgbnVsbHB0ciwgMCwgbnVsbHB0ciwg
bnVsbHB0cikgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIElPQ29ubmVjdENhbGxTY2FsYXJN
ZXRob2QoZGF0YVBvcnQsIGtBR0NDbG9zZSwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cik7
CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGZh
bHNlOworICAgIAorICAgIElPU2VydmljZUNsb3NlKGRhdGFQb3J0KTsKKyAgICAKKyAgICBpZiAo
cmVzdWx0KSB7CisgICAgICAgIC8vIFRoaXMgaXMgZGV0ZWN0aW5nIE1hYyBoYXJkd2FyZSB3aXRo
IGFuIEludGVsIGc1NzUgR1BVLCB3aGljaAorICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIG1h
a2UgYXZhaWxhYmxlIHRvIG11eGluZy4KKyAgICAgICAgLy8gQmFzZWQgb24gaW5mb3JtYXRpb24g
ZnJvbSBBcHBsZSdzIE9wZW5HTCB0ZWFtLCBzdWNoIGRldmljZXMKKyAgICAgICAgLy8gaGF2ZSBm
b3VyIG9yIGZld2VyIHByb2Nlc3NvcnMuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zMDA2
MDM3OD4KKyAgICAgICAgaW50IG5hbWVzWzJdID0geyBDVExfSFcsIEhXX05DUFUgfTsKKyAgICAg
ICAgaW50IGNwdUNvdW50OworICAgICAgICBzaXplX3QgY3B1Q291bnRMZW5ndGggPSBzaXplb2Yo
Y3B1Q291bnQpOworICAgICAgICBzeXNjdGwobmFtZXMsIDIsICZjcHVDb3VudCwgJmNwdUNvdW50
TGVuZ3RoLCBudWxscHRyLCAwKTsKKyAgICAgICAgcmVzdWx0ID0gY3B1Q291bnQgPiA0OworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGhhc0xvd0FuZEhpZ2hQb3dl
ckdQVXMoKQoreworICAgIHN0YXRpYyBib29sIGNhbk11eCA9IGhhc011eENhcGFiaWxpdHkoKTsK
KyAgICByZXR1cm4gY2FuTXV4OworfQorI2VuZGlmIC8vIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09O
VFJPTCkKKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI+IHNfbWFuYWdlcjsKKyAgICByZXR1
cm4gc19tYW5hZ2VyOworfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5
SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9pZCopCit7CisgICAgTE9H
KFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25m
aWd1cmVkIik7CisgICAgaWYgKGZsYWdzICYga0NHRGlzcGxheVNldE1vZGVGbGFnKQorICAgICAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVB
bGxDb250ZXh0cygpOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyOjp1cGRhdGVBbGxDb250ZXh0cygpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAoVVNF
KE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHQgOiBt
X2NvbnRleHRzKSB7CisgICAgICAgIGNvbnRleHQtPnVwZGF0ZUNHTENvbnRleHQoKTsKKyAgICAg
ICAgY29udGV4dC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIH0K
KyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQs
IGNvbnN0IEhvc3RXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRl
eHRBbmRXaW5kb3cgOiBtX2NvbnRleHRXaW5kb3dNYXApIHsKKyAgICAgICAgaWYgKGNvbnRleHRB
bmRXaW5kb3cudmFsdWUgPT0gd2luZG93KSB7CisgICAgICAgICAgICBjb250ZXh0QW5kV2luZG93
LmtleS0+c2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCk7CisgICAgICAgICAgICBMT0coV2ViR0ws
ICJDaGFuZ2luZyBjb250ZXh0ICglcCkgdG8gZGlzcGxheSAoJWQpLiIsIGNvbnRleHRBbmRXaW5k
b3cua2V5LCBkaXNwbGF5SUQpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiBjb250ZXh0LCBIb3N0V2luZG93KiB3aW5kb3cpCit7CisgICAgQVNTRVJUKGNv
bnRleHQpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhRU5BQkxFKFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQorICAg
IGlmICghbV9jb250ZXh0cy5zaXplKCkpCisgICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25m
aWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29uZmlndXJlZCwgbnVsbHB0cik7CisjZW5k
aWYKKworICAgIEFTU0VSVCghbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSk7CisgICAgbV9j
b250ZXh0cy5hcHBlbmQoY29udGV4dCk7CisgICAgbV9jb250ZXh0V2luZG93TWFwLnNldChjb250
ZXh0LCB3aW5kb3cpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6
cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3sKKyAgICBp
ZiAoIW1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2NvbnRleHRzLnJlbW92ZUZpcnN0KGNvbnRleHQpOworICAgIG1fY29udGV4dFdpbmRvd01hcC5y
ZW1vdmUoY29udGV4dCk7CisgICAgcmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5j
ZShjb250ZXh0KTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpICYmICFFTkFCTEUoV0VCUFJPQ0VT
U19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCisgICAgaWYgKCFtX2NvbnRleHRzLnNpemUoKSkKKyAg
ICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVdhc1Jl
Y29uZmlndXJlZCwgbnVsbHB0cik7CisjZW5kaWYKK30KKworSG9zdFdpbmRvdyogR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpob3N0V2luZG93Rm9yQ29udGV4dChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY29udGV4dCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0V2luZG93
TWFwLmNvbnRhaW5zKGNvbnRleHQpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0V2luZG93TWFwLmdl
dChjb250ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFk
ZENvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVChtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRl
eHQpKTsKKyAgICBBU1NFUlQoIW1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29u
dGFpbnMoY29udGV4dCkpOworICAgIAorICAgIExPRyhXZWJHTCwgIlRoaXMgY29udGV4dCAoJXAp
IHJlcXVpcmVzIHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iLCBjb250ZXh0KTsKKyAgICBtX2Nv
bnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLmFkZChjb250ZXh0KTsKKyAgICAKKyAgICB1
cGRhdGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5j
ZS5jb250YWlucyhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIExPRyhXZWJH
TCwgIlRoaXMgY29udGV4dCAoJXApIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgaGlnaC1wZXJmb3Jt
YW5jZSBHUFUuIiwgY29udGV4dCk7CisgICAgbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3Jt
YW5jZS5yZW1vdmUoY29udGV4dCk7CisgICAgCisgICAgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3Rh
dGUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnVwZGF0ZUhp
Z2hQZXJmb3JtYW5jZVN0YXRlKCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdM
KSB8fCBVU0UoQU5HTEUpKQorICAgIGlmICghaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9y
bWFuY2Uuc2l6ZSgpKSB7CisgICAgICAgIAorICAgICAgICBpZiAobV9kaXNhYmxlSGlnaFBlcmZv
cm1hbmNlR1BVVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgTE9HKFdlYkdMLCAiQ2Fu
Y2VsIHBlbmRpbmcgdGltZXIgZm9yIHR1cm5pbmcgb2ZmIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIp
OworICAgICAgICAgICAgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuc3RvcCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3JlcXVlc3RpbmdIaWdoUGVyZm9ybWFuY2UpIHsK
KyAgICAgICAgICAgIExPRyhXZWJHTCwgIlJlcXVlc3QgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BV
LiIpOworICAgICAgICAgICAgbV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNlID0gdHJ1ZTsKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBTd2l0Y2hpbmdHUFVDbGllbnQ6OnNpbmdsZXRv
bigpLnJlcXVlc3RIaWdoUGVyZm9ybWFuY2VHUFUoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBEb24ndCBpbW1lZGlhdGVseSB0dXJuIG9mZiB0aGUgaGln
aC1wZXJmb3JtYW5jZSBHUFUuIFRoZSB1c2VyIG1pZ2h0IGJlCisgICAgICAgIC8vIHN3YXBwaW5n
IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGFicyBvciB3aW5kb3dzLCBhbmQgd2UgZG9uJ3Qgd2Fu
dCB0byBjYXVzZQorICAgICAgICAvLyBjaHVybiBpZiB3ZSBjYW4gYXZvaWQgaXQuCisgICAgICAg
IGlmICghbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuaXNBY3RpdmUoKSkgeworICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiU2V0IGEgdGltZXIgdG8gcmVsZWFzZSB0aGUgaGlnaC1wZXJm
b3JtYW5jZSBHUFUuIik7CisgICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NlIHRoaXMgdmFsdWUg
YXMgYSBTZXR0aW5nLCB3aGljaCB3b3VsZCByZXF1aXJlIHRoaXMgY2xhc3MKKyAgICAgICAgICAg
IC8vIHRvIHJlZmVyZW5jZSBhIGZyYW1lLCBwYWdlIG9yIGRvY3VtZW50LgorICAgICAgICAgICAg
c3RhdGljIGNvbnN0IFNlY29uZHMgdGltZVRvS2VlcEhpZ2hQZXJmb3JtYW5jZUdQVUFsaXZlIHsg
MTBfcyB9OworICAgICAgICAgICAgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuc3Rh
cnRPbmVTaG90KHRpbWVUb0tlZXBIaWdoUGVyZm9ybWFuY2VHUFVBbGl2ZSk7CisgICAgICAgIH0K
KyAgICB9CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6
OmRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKCkKK3sKKyAgICBpZiAobV9jb250
ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fcmVxdWVzdGluZ0hpZ2hQZXJmb3JtYW5jZSA9IGZhbHNlOworI2lmIFBMQVRGT1JNKE1B
QykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCisgICAgU3dpdGNoaW5nR1BVQ2xpZW50
OjpzaW5nbGV0b24oKS5yZWxlYXNlSGlnaFBlcmZvcm1hbmNlR1BVKCk7CisjZW5kaWYKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlY3ljbGVDb250ZXh0SWZOZWNl
c3NhcnkoKQoreworICAgIGlmIChoYXNUb29NYW55Q29udGV4dHMoKSkgeworICAgICAgICBMT0co
V2ViR0wsICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIgcmVjeWNsZWQgY29udGV4dCAo
JXApLiIsIG1fY29udGV4dHNbMF0pOworICAgICAgICBtX2NvbnRleHRzWzBdLT5yZWN5Y2xlQ29u
dGV4dCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMzOWE3MzBkZDMwYWIwYzdiMThkM2RmOWJj
NWRiY2U2MzQ2ODYzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaApAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwor
I2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmln
dXJhdGlvbi5oPgorI2luY2x1ZGUgPE9wZW5HTC9DR0xUeXBlcy5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CitjbGFzcyBIb3N0V2luZG93OworCit1c2luZyBQ
bGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OworCisjaWYgSEFWRShBUFBMRV9HUkFQSElDU19D
T05UUk9MKQorV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNMb3dBbmRIaWdoUG93ZXJHUFVzKCk7Cisj
ZW5kaWYKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKKyAgICBmcmll
bmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyJiBzaGFyZWRNYW5h
Z2VyKCk7CisgICAgCisgICAgdm9pZCBhZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiwgSG9zdFdpbmRvdyopOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCopOworCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvd0ZvckNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGFkZENvbnRleHRSZXF1
aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lk
IHJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqKTsKKyAgICAKKyAgICB2b2lkIHJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKKyAg
ICBib29sIGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dHMuc2l6
ZSgpID49IE1heENvbnRleHRzOyB9CisgICAgCisgICAgdm9pZCB1cGRhdGVBbGxDb250ZXh0cygp
OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgc2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3Jt
RGlzcGxheUlELCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5
Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKik7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyKCkKKyAgICAgICAgOiBtX2Rpc2FibGVIaWdo
UGVyZm9ybWFuY2VHUFVUaW1lcigqdGhpcywgJkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6ZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyRmlyZWQpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKKyAgICB2b2lkIGRpc2FibGVI
aWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKCk7CisKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRzOworICAgIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqLCBIb3N0V2luZG93Kj4gbV9jb250ZXh0V2luZG93TWFwOworICAgIEhhc2hTZXQ8R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNl
OworICAgIAorICAgIFRpbWVyIG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyOworICAg
IGJvb2wgbV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNlIHsgZmFsc2UgfTsKK307CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2Y4MmFiMTRkNDhlNmQ3ZDQ0ZTZjMmE2ZDEyMGUxOWU4NTk0ZDMzMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTFByaXZhdGUuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05U
RVhUX0dMKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5oIgorCisj
aW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKwor
CisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BF
TkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5o
PgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMUHJpdmF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRl
c3RpbmF0aW9uKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRp
b246Ok9mZnNjcmVlbjoKKyAgICAgICAgbV9nbENvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9m
ZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0
aW5nKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3c6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSgpID0gZGVmYXVs
dDsKKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU6Om1ha2VDb250ZXh0Q3Vy
cmVudCgpCit7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8gbV9nbENvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpIDogZmFsc2U7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlOjpwbGF0Zm9ybUNvbnRleHQoKQoreworICAgIHJl
dHVybiBtX2dsQ29udGV4dCA/IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IEdMQ29u
dGV4dDo6Y3VycmVudCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdhZmY0
Njc2MTJkMTA1Y2M2M2U2MzI2OWIzMmZjZGQ4YzJlMWE3YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTFByaXZhdGUuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwVGV4dHVy
ZUdMOworCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
UHJpdmF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpEZXN0aW5hdGlvbik7CisgICAgfkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSgpOwor
ICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTCBwbGF0Zm9ybUNvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xT
ZXR0aW5nLmNwcAppbmRleCBiY2Q3MjQ2OGUwNWM3MjRiMzBmZTVlZjRkMWMyMzliYjdhNTdmNGU5
Li42ODFiOThhMGY5OTNjZTM3MjhiOTgzMjNkNTA2MGQwZjI4YmI0NTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
bXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5H
TCkgfHwgVVNFKE9QRU5HTF9FUykpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYm
IChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKICNpbmNsdWRlICJUZW1wb3JhcnlPcGVu
R0xTZXR0aW5nLmgiCiAKICNpZiBVU0UoTElCRVBPWFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNl
dHRpbmcuaAppbmRleCAzYjg1NDMxMjk2YzM4MWFkNGI1ZDE0YWVlZTE2MmM5ODJlNTA1ZTYyLi5m
Mzk0M2E5NjlmOWYzZWE1YTRlNmVmYTNiNmM2ZTY4NmYwZGRiNGFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3Jh
cnlPcGVuR0xTZXR0aW5nLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMzRC5oIgogCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIChVU0UoT1BF
TkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkg
JiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQogCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKaW5kZXggNjQyYmYwZTk2MDEwOWJkMzQ3
NjM3YzhkYzBmZmY0Mzg4NDRkNjFkMC4uODI2ZDJkYTViZGVlYjY3OTVmZDA3ZjE1MTQyNDE4MGM4
YWI1ZDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
Q29udGV4dDNEVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyZTA2NGUyMDBhZGEzN2U0MzNiNWNiNjQ0NGRiMzEzYzVh
ZTU5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0
dXJlTWFwcGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyMSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2luY2x1ZGUgPEFOR0xF
L1NoYWRlckxhbmcuaD4KLQotI2lmIFVTRShBTkdMRSkKLSNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZ
UEVTIDAKLS8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQg
ZW50cnkgcG9pbnRzIGZvciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQK
LSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBH
TGVnbENvbnRleHQ7Ci0jaW5jbHVkZSA8QU5HTEUvZWdsLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWds
ZXh0Lmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW5jbHVkZSA8QU5HTEUv
ZW50cnlfcG9pbnRzX2VnbC5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJf
MF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9n
ZW4uaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHRf
YW5nbGUuaD4KLSNpZiBkZWZpbmVkKEFib3ZlKQotI3VuZGVmIEFib3ZlCi0jZW5kaWYKLSNpZiBk
ZWZpbmVkKEJlbG93KQotI3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKE5vbmUpCi0j
dW5kZWYgTm9uZQotI2VuZGlmCi0jZWxpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkv
Z2wuaD4KLSNlbGlmICFVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0j
ZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgot
I2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgot
I2Vsc2UKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNlbmRpZgotCi0jaWYgVVNF
KE5JQ09TSUEpCi0jaWYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIk5pY29zaWFHQzNEQU5HTEVMYXll
ci5oIgotI2Vsc2UKLSNpbmNsdWRlICJOaWNvc2lhR0MzRExheWVyLmgiCi0jZW5kaWYKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgTWF4QWN0aXZl
Q29udGV4dHMgPSAxNjsKLXN0YXRpYyBEZXF1ZTxHcmFwaGljc0NvbnRleHQzRCosIE1heEFjdGl2
ZUNvbnRleHRzPiYgYWN0aXZlQ29udGV4dHMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxEZXF1ZTxHcmFwaGljc0NvbnRleHQzRCosIE1heEFjdGl2ZUNvbnRleHRzPj4gc19hY3RpdmVD
b250ZXh0czsKLSAgICByZXR1cm4gc19hY3RpdmVDb250ZXh0czsKLX0KLQotUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0Nv
bnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0
aGUgSG9zdFdpbmRvdy4KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVj
dGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHN0YXRpYyBi
b29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7
Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotI2lmICFVU0UoT1BFTkdMX0VTKSAmJiAhVVNFKExJ
QkVQT1hZKSAmJiAhVVNFKEFOR0xFKQotICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5H
TFNoaW1zKCk7Ci0jZW5kaWYKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgY29u
dGV4dHMgPSBhY3RpdmVDb250ZXh0cygpOwotICAgIGlmIChjb250ZXh0cy5zaXplKCkgPj0gTWF4
QWN0aXZlQ29udGV4dHMpCi0gICAgICAgIGNvbnRleHRzLmZpcnN0KCktPnJlY3ljbGVDb250ZXh0
KCk7Ci0KLSAgICAvLyBDYWxsaW5nIHJlY3ljbGVDb250ZXh0KCkgYWJvdmUgc2hvdWxkIGhhdmUg
bGVhZCB0byB0aGUgZ3JhcGhpY3MgY29udGV4dCBiZWluZwotICAgIC8vIGRlc3Ryb3llZCBhbmQg
dGh1cyByZW1vdmVkIGZyb20gdGhlIGFjdGl2ZSBjb250ZXh0cyBsaXN0LgotICAgIGlmIChjb250
ZXh0cy5zaXplKCkgPj0gTWF4QWN0aXZlQ29udGV4dHMpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgLy8gQ3JlYXRlIHRoZSBHcmFwaGljc0NvbnRleHQzRCBvYmplY3QgZmlyc3QgaW4g
b3JkZXIgdG8gZXN0YWJsaXN0IGEgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgdGhyZWFkLgotICAg
IGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVz
LCBob3N0V2luZG93LCBkZXN0aW5hdGlvbikpOwotCi0jaWYgVVNFKExJQkVQT1hZKSAmJiBVU0Uo
T1BFTkdMX0VTKQotICAgIC8vIEJhaWwgaWYgR0xFUzMgd2FzIHJlcXVlc3RlZCBidXQgY2Fubm90
IGJlIHByb3ZpZGVkLgotICAgIGlmIChhdHRyaWJ1dGVzLmlzV2ViR0wyICYmICFlcG94eV9pc19k
ZXNrdG9wX2dsKCkgJiYgZXBveHlfZ2xfdmVyc2lvbigpIDwgMzApCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotI2VuZGlmCi0KLSAgICBjb250ZXh0cy5hcHBlbmQoY29udGV4dC5nZXQoKSk7Ci0g
ICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRp
b24sIEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRDb250ZXh0KQotICAgIDogR3JhcGhpY3NDb250
ZXh0M0RCYXNlKGF0dHJpYnV0ZXMsIGRlc3RpbmF0aW9uLCBzaGFyZWRDb250ZXh0KQotewotICAg
IEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwotI2lmIFVTRShO
SUNPU0lBKQotICAgIG1fbmljb3NpYUxheWVyID0gV1RGOjptYWtlVW5pcXVlPE5pY29zaWE6OkdD
M0RBTkdMRUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOwotI2Vsc2UKLSAgICBtX3RleG1hcExh
eWVyID0gV1RGOjptYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcj4oKnRo
aXMsIGRlc3RpbmF0aW9uKTsKLSNlbmRpZgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAg
IGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKSB7Ci0gICAgICAgIC8v
IENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCi0gICAgICAgIGdsOjpHZW5UZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FOR0xFLCBtX3RleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwg
R0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RB
TkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAg
ICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOwotCi0gICAg
ICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1f
ZmJvKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgICAgICBnbDo6R2VuVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICBn
bDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwot
ICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOwotCi0gICAgICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlh
dGVUZXh0dXJlKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FOR0xFLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
TkdMRSwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwot
Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7
Ci0jZW5kaWYKLQotICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgICAg
IGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICAgICAgZ2w6OkdlbkZyYW1lYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgICAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAgIG1fc3Rh
dGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICAgICAgZ2w6OkdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAg
Z2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAg
ICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAg
ICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0g
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICBnbDo6R2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZt
X3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotfQotI2Vsc2UKLUdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRl
cywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlv
biwgR3JhcGhpY3NDb250ZXh0M0QqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHQzREJhc2UoYXR0cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCi17Ci0gICAg
QVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7Ci0jaWYgVVNFKE5J
Q09TSUEpCi0gICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RMYXll
cj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9IG1ha2VV
bmlxdWU8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24p
OwotI2VuZGlmCi0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZhbGlkYXRlQXR0
cmlidXRlcygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5
IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCi0KLSAgICBpZiAoZGVzdGluYXRp
b24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgewotICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0
dXJlIHRvIHJlbmRlciBpbnRvLgotICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwot
ICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19G
SUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCAwKTsKLQotICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgotICAgICAgICA6Omds
R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICAg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19G
SUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICAgICAgOjpnbEdlblRleHR1cmVzKDEs
ICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAg
ICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgOjpnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VE
R0UpOwotCi0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSNlbmRp
ZgotCi0gICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICAgICAgaWYgKGF0
dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICAgICAgbV9zdGF0ZS5ib3Vu
ZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsR2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgICAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKLSNpZiBVU0UoT1BFTkdM
X0VTKQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAg
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChh
dHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5z
dGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNp
ZiAhVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5U
X1NJWkUpOwotCi0gICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIw
KSB7Ci0gICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJv
bSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVl
c3QgdGhhdCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wg
dmVyc2lvbiAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9
IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAv
LyBGcm9tIHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5k
IHdlIG5lZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUg
Y3JlYXRlZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChU
ZXh0dXJlTWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIg
c29sdXRpb246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHQzRCBjcmVhdGVkIG9uIGEgR0xDb250
ZXh0IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAg
IEdDM0RpbnQgY3VycmVudFZBTyA9IDA7Ci0gICAgICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfQVJSQVlfQklORElORywgJmN1cnJlbnRWQU8pOwotICAgICAgICBpZiAo
IWN1cnJlbnRWQU8pIHsKLSAgICAgICAgICAgIG1fdmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsK
LSAgICAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheShtX3Zhbyk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBGb3IgbG93ZXIgdmVyc2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJp
bGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4KLSAgICAgICAgbV9jb21waWxlciA9
IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09NUEFUSUJJTElUWV9PVVRQVVQpOwotCi0gICAg
ICAgIC8vIEdMX1BPSU5UX1NQUklURSBpcyBuZWVkZWQgaW4gbG93ZXIgdmVyc2lvbnMuCi0gICAg
ICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKLSAgICB9Ci0jZWxzZQotICAgIC8vIEFk
anVzdCB0aGUgc2hhZGVyIHNwZWNpZmljYXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMg
KGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1ZXN0ZWQuCi0gICAgbV9jb21waWxlciA9IEFO
R0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBhdHRyaWJ1dGVzLmlzV2ViR0wyID8gU0hf
V0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKLSNlbmRpZgotCi0gICAgLy8gQU5HTEUgaW5p
dGlhbGl6YXRpb24uCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAg
IHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZB
UllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKLSAgICBn
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywg
JkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVz
b3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0
byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAx
OwotCi0gICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwotICAgIGdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIEFOR0xFUmVzb3Vy
Y2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVj
aXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwot
Ci0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZW5kaWYKLQotI2lmIFVTRShB
TkdMRSkKLUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsOjpEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJl
cygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRl
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmICht
X2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2Rl
cHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIGdsOjpEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0
ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLQotICAgIGF1dG8qIGFjdGl2ZUNvbnRleHQgPSBhY3Rp
dmVDb250ZXh0cygpLnRha2VMYXN0KFt0aGlzXShhdXRvKiBpdCkgewotICAgICAgICByZXR1cm4g
aXQgPT0gdGhpczsKLSAgICB9KTsKLSAgICBBU1NFUlRfVU5VU0VEKGFjdGl2ZUNvbnRleHQsICEh
YWN0aXZlQ29udGV4dCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0Nv
bnRleHQzRCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fdGV4dHVy
ZSkKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAg
ICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgot
Ci0gICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChh
dHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6Omds
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2UgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0jaWYgVVNFKE9QRU5H
TF9FUykKLSAgICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwotCi0gICAgICAgIGlmIChtX3N0ZW5jaWxC
dWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1
ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAg
ICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
LSAgICB9Ci0gICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJt
ZWRpYXRlVGV4dHVyZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSAgICBpZiAobV92YW8p
Ci0gICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKLSNlbmRpZgotCi0gICAgYXV0byog
YWN0aXZlQ29udGV4dCA9IGFjdGl2ZUNvbnRleHRzKCkudGFrZUxhc3QoW3RoaXNdKGF1dG8qIGl0
KSB7Ci0gICAgICAgIHJldHVybiBpdCA9PSB0aGlzOwotICAgIH0pOwotICAgIEFTU0VSVF9VTlVT
RUQoYWN0aXZlQ29udGV4dCwgISFhY3RpdmVDb250ZXh0KTsKLX0KLSNlbmRpZiAvLyBVU0UoQU5H
TEUpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0j
aWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3Rh
dHVzKCkKLXsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQz
RDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Ci17Ci0jaWYgVVNFKE5JQ09TSUEp
Ci0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29udGV4dCgpOwotI2VuZGlmCi19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fdGV4dHVyZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRm
b3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICByZXR1cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXIuZ2V0KCk7Ci0jZW5kaWYKLX0KLQot
I2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShBTkdMRSkKLUV4dGVuc2lvbnMzRCYgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25zKSB7Ci0j
aWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFi
bGUgb24gR0xFUzIuCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9u
czNET3BlbkdMRVM+KHRoaXMsICBmYWxzZSk7Ci0jZWxzZQotICAgICAgICAvLyBGcm9tIE9wZW5H
TCAzLjIgb24gd2UgdXNlIHRoZSBDb3JlIHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBn
bEdldFN0cmluZ2kuCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9u
czNET3BlbkdMPih0aGlzLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7
Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Ci19Ci0jZW5kaWYKLQot
I2lmIChQTEFURk9STShHVEspICYmICFVU0UoQU5HTEUpKSB8fCBQTEFURk9STShXSU4pCi12b2lk
KiBHcmFwaGljc0NvbnRleHQzRDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIs
IEdDM0RzaXplaXB0ciwgR0MzRGJpdGZpZWxkKQotewotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCi17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlCdWZmZXJT
dWJEYXRhKEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNp
emVpcHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1h
dGl2KEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZShHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UyRChHQzNEZW51bSwg
R0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UzRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNE
ZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9iamVjdCwgY29uc3Qg
VmVjdG9yPEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0b3I8R0MzRGludD4mKQotewotfQotI2Vu
ZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJl
TWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFw
aGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmYTcyZTBjYWNiM2Iz
NzA2OTU5NWRkZThkMmE1MGQwMDUxOThiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmNwcApAQCAtMCwwICsxLDUyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNp
ZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorCisjaWYgVVNFKEFOR0xFKQorI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8g
U2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2lu
dHMgZm9yIG5vdy4KKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBH
TF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4
dDsKKyNpbmNsdWRlIDxBTkdMRS9lZ2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNp
bmNsdWRlIDxBTkdMRS9lZ2xleHRfYW5nbGUuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2lu
dHNfZWdsLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4u
aD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2lu
Y2x1ZGUgPEFOR0xFL2dsMmV4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgor
I2lmIGRlZmluZWQoQWJvdmUpCisjdW5kZWYgQWJvdmUKKyNlbmRpZgorI2lmIGRlZmluZWQoQmVs
b3cpCisjdW5kZWYgQmVsb3cKKyNlbmRpZgorI2lmIGRlZmluZWQoTm9uZSkKKyN1bmRlZiBOb25l
CisjZW5kaWYKKyNlbGlmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxlcG94eS9nbC5oPgorI2Vs
aWYgIVVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisj
aWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjZWxpZiBVU0Uo
T1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTklDT1NJQSkK
KyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiTmljb3NpYUdDM0RBTkdMRUxheWVyLmgiCisjZWxz
ZQorI2luY2x1ZGUgIk5pY29zaWFHQzNETGF5ZXIuaCIKKyNlbmRpZgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBNYXhBY3RpdmVDb250ZXh0cyA9
IDE2Oworc3RhdGljIERlcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgTWF4QWN0aXZlQ29u
dGV4dHM+JiBhY3RpdmVDb250ZXh0cygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERl
cXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgTWF4QWN0aXZlQ29udGV4dHM+PiBzX2FjdGl2
ZUNvbnRleHRzOworICAgIHJldHVybiBzX2FjdGl2ZUNvbnRleHRzOworfQorCitSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sK
KyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVu
ZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgorICAgIGlmIChkZXN0aW5hdGlvbiA9
PSBEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisjaWYgIVVTRShP
UEVOR0xfRVMpICYmICFVU0UoTElCRVBPWFkpICYmICFVU0UoQU5HTEUpCisgICAgICAgIHN1Y2Nl
c3MgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyNlbmRpZgorICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgfQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvJiBjb250ZXh0cyA9IGFjdGl2ZUNvbnRleHRzKCk7CisgICAgaWYgKGNv
bnRleHRzLnNpemUoKSA+PSBNYXhBY3RpdmVDb250ZXh0cykKKyAgICAgICAgY29udGV4dHMuZmly
c3QoKS0+cmVjeWNsZUNvbnRleHQoKTsKKworICAgIC8vIENhbGxpbmcgcmVjeWNsZUNvbnRleHQo
KSBhYm92ZSBzaG91bGQgaGF2ZSBsZWFkIHRvIHRoZSBncmFwaGljcyBjb250ZXh0IGJlaW5nCisg
ICAgLy8gZGVzdHJveWVkIGFuZCB0aHVzIHJlbW92ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbnRleHRz
IGxpc3QuCisgICAgaWYgKGNvbnRleHRzLnNpemUoKSA+PSBNYXhBY3RpdmVDb250ZXh0cykKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBDcmVhdGUgdGhlIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMIG9iamVjdCBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc3QgYSBjdXJyZW50IGNv
bnRleHQgb24gdGhpcyB0aHJlYWQuCisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIGRlc3RpbmF0aW9u
KSk7CisKKyNpZiBVU0UoTElCRVBPWFkpICYmIFVTRShPUEVOR0xfRVMpCisgICAgLy8gQmFpbCBp
ZiBHTEVTMyB3YXMgcmVxdWVzdGVkIGJ1dCBjYW5ub3QgYmUgcHJvdmlkZWQuCisgICAgaWYgKGF0
dHJpYnV0ZXMuaXNXZWJHTDIgJiYgIWVwb3h5X2lzX2Rlc2t0b3BfZ2woKSAmJiBlcG94eV9nbF92
ZXJzaW9uKCkgPCAzMCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIGNv
bnRleHRzLmFwcGVuZChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gY29udGV4dDsKK30KKwor
I2lmIFVTRShBTkdMRSkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRv
dyosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRl
eHRHTChhdHRyaWJ1dGVzLCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKHNoYXJlZENvbnRleHQsICFzaGFyZWRDb250ZXh0KTsKKyNpZiBVU0UoTklDT1NJ
QSkKKyAgICBtX25pY29zaWFMYXllciA9IFdURjo6bWFrZVVuaXF1ZTxOaWNvc2lhOjpHQzNEQU5H
TEVMYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXllciA9
IFdURjo6bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI+KCp0aGlzLCBk
ZXN0aW5hdGlvbik7CisjZW5kaWYKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZh
bGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBpZiAo
ZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVh
dGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BTkdMRSwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6
OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwKTsKKworICAgICAgICAv
LyBDcmVhdGUgYW4gRkJPLgorICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7
CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICAgICAgZ2w6OkdlblRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FOR0xFLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAg
ICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9U
T19FREdFKTsKKworICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4
dHVyZSk7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdM
RSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAg
ICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOworI2Vu
ZGlmCisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgICAgICBpZiAo
YXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMo
MSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICBtX3N0YXRlLmJv
dW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAg
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAg
ICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVu
Y2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8
fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJz
KDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbDo6
Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKK30KKyNlbHNlCitHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRp
b24gZGVzdGluYXRpb24sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0KQor
ICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENv
bnRleHQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4
dCk7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5p
Y29zaWE6OkdDM0RMYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKKyNlbHNlCisgICAgbV90ZXht
YXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhp
cywgZGVzdGluYXRpb24pOworI2VuZGlmCisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAg
ICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgeworICAgICAgICAv
LyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgICAgICA6OmdsR2VuVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBtX3RleHR1cmUpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgICAgICAvLyBDcmVhdGUgYW4gRkJP
LgorICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JU
ZXh0dXJlKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9z
aXRvclRleHR1cmUpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICAgICAgOjpn
bEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgICAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICAgICAg
OjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKKyNlbmRpZgorCisgICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4K
KyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsR2Vu
RnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAg
ICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgICAgICA6Omds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAg
ICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCaW5kIGNhbnZhcyBG
Qk8uCisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBt
X2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVw
dGgpCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVy
KTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAg
Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICA6OmdsRW5hYmxlKEdM
X1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOworCisgICAgaWYgKEdMQ29udGV4dDo6Y3VycmVu
dCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7CisgICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRy
dWU7CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBD
b3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVy
LgorICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4K
KyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVf
T1VUUFVUKTsKKworICAgICAgICAvLyBGcm9tIHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3Bl
bkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KKyAgICAg
ICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQg
dXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcwor
ICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFP
IGZvciB0aGF0IGNvbnRleHQuCisgICAgICAgIEdDM0RpbnQgY3VycmVudFZBTyA9IDA7CisgICAg
ICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklO
RElORywgJmN1cnJlbnRWQU8pOworICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsKKyAgICAgICAg
ICAgIG1fdmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICAgICAgICAgIGJpbmRWZXJ0ZXhB
cnJheShtX3Zhbyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgbG93
ZXIgdmVyc2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRl
ciBjb21waWxlci4KKyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dM
U0xfQ09NUEFUSUJJTElUWV9PVVRQVVQpOworCisgICAgICAgIC8vIEdMX1BPSU5UX1NQUklURSBp
cyBuZWVkZWQgaW4gbG93ZXIgdmVyc2lvbnMuCisgICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRf
U1BSSVRFKTsKKyAgICB9CisjZWxzZQorICAgIC8vIEFkanVzdCB0aGUgc2hhZGVyIHNwZWNpZmlj
YXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdh
cyByZXF1ZXN0ZWQuCisgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xf
T1VUUFVULCBhdHRyaWJ1dGVzLmlzV2ViR0wyID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9T
UEVDKTsKKyNlbmRpZgorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWls
dEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNl
cygmQU5HTEVSZXNvdXJjZXMpOworCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJp
YnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVY
X1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3Jz
KTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZBUllJTkdf
VkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9J
TUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMp
OworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBn
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1f
VkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisg
ICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMu
TWF4RHJhd0J1ZmZlcnMgPSAxOworCisgICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwor
ICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJB
R01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2Us
ICZwcmVjaXNpb24pOworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9
IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5z
ZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7Cit9CisjZW5kaWYKKworI2lmIFVTRShBTkdMRSkKK0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29t
cG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6
OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAg
ICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkgeworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQor
ICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKwor
ICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJi
dWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgIGlmIChtX2RlcHRo
U3RlbmNpbEJ1ZmZlcikKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMo
MSwgJm1fZmJvKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkRlbGV0
ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworI2VuZGlmCisKKyNpZiBVU0Uo
Q0FJUk8pCisgICAgaWYgKG1fdmFvKQorICAgICAgICBkZWxldGVWZXJ0ZXhBcnJheShtX3Zhbyk7
CisjZW5kaWYKKworICAgIGF1dG8qIGFjdGl2ZUNvbnRleHQgPSBhY3RpdmVDb250ZXh0cygpLnRh
a2VMYXN0KFt0aGlzXShhdXRvKiBpdCkgeworICAgICAgICByZXR1cm4gaXQgPT0gdGhpczsKKyAg
ICB9KTsKKyAgICBBU1NFUlRfVU5VU0VEKGFjdGl2ZUNvbnRleHQsICEhYWN0aXZlQ29udGV4dCk7
Cit9CisjZWxzZQorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fdGV4dHVyZSkK
KyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAg
OjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisg
ICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRy
aWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVs
ZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0
dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9F
UykKKyAgICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZm
ZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZl
cik7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAg
ICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICB9CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRp
YXRlVGV4dHVyZSk7CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisg
ICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKKyNlbmRpZgorCisgICAgYXV0byogYWN0
aXZlQ29udGV4dCA9IGFjdGl2ZUNvbnRleHRzKCkudGFrZUxhc3QoW3RoaXNdKGF1dG8qIGl0KSB7
CisgICAgICAgIHJldHVybiBpdCA9PSB0aGlzOworICAgIH0pOworICAgIEFTU0VSVF9VTlVTRUQo
YWN0aXZlQ29udGV4dCwgISFhY3RpdmVDb250ZXh0KTsKK30KKyNlbmRpZiAvLyBVU0UoQU5HTEUp
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0
Q3VycmVudCgpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNo
ZWNrR1BVU3RhdHVzKCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0Cit7Cisj
aWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29udGV4dCgp
OworI2VuZGlmCit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dHVyZTsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7
CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1
cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1f
dGV4bWFwTGF5ZXIuZ2V0KCk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVT
RShBTkdMRSkKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEV4dGVu
c2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKSB7CisjaWYgVVNFKE9QRU5HTF9FUykK
KyAgICAgICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24gR0xFUzIuCisgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMs
ICBmYWxzZSk7CisjZWxzZQorICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIgb24gd2UgdXNlIHRo
ZSBDb3JlIHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0cmluZ2kuCisgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMPih0aGlzLCBH
TENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisjZW5kaWYKKyAgICB9Cisg
ICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKworI2lmIChQTEFURk9STShHVEsp
ICYmICFVU0UoQU5HTEUpKSB8fCBQTEFURk9STShXSU4pCit2b2lkKiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0
ciwgR0MzRGJpdGZpZWxkKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJT
dWJEYXRhKEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNp
emVpcHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5h
bGZvcm1hdGl2KEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGlu
dCopCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVp
LCBHQzNEc2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0
b3JhZ2UyRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6
ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChH
QzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0Rz
aXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybXMoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYsIEdDM0RlbnVt
LCBWZWN0b3I8R0MzRGludD4mKQoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIu
Y3BwCmluZGV4IDg5OGVlMzQzNTUyYTYzZDAzZDIxNDQyZmZhYzlhOTQ4YWQ5NWQzYWQuLjBjMmEw
MTk2MDU3YjBhODA4M2Q0MzFkNmFlNmViYmY1MDI3ZjllNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3Jt
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVy
LmgiCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKSAmJiAhVVNFKE5JQ09TSUEpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYm
IFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVTRShOSUNPU0lBKQogCiAjaW5jbHVkZSAiQml0bWFw
VGV4dHVyZUdMLmgiCiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCkBAIC0zMCwxNCArMzAsMTQgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6
OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQorVGV4dHVyZU1h
cHBlckdDM0RQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpE
ZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogewogICAg
IHN3aXRjaCAoZGVzdGluYXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0
aW5hdGlvbjo6T2Zmc2NyZWVuOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRl
c3RpbmF0aW9uOjpPZmZzY3JlZW46CiAgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0Ojpj
cmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JD
b21wb3NpdGluZygpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYxLDcg
KzYxLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6Om1ha2VDb250ZXh0
Q3VycmVudCgpCiAgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
IH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3Jt
TGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
IFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
IHsKICAgICBBU1NFUlQobV9nbENvbnRleHQpOwogICAgIHJldHVybiBtX2dsQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0Mz
RFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1
cmUKICAgICAgICAgICAgIG1fY29udGV4dC5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgICAg
ICBtX2NvbnRleHQucmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250
ZXh0Lm1fc3RhdGUuYm91bmRGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0Lm1fc3RhdGUuYm91bmRG
Qk8pOwogCiAgICAgICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQgJiYgcHJldmlvdXNBY3Rp
dmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQogICAgICAgICAgICAgcHJldmlvdXNBY3Rp
dmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEyMCw0ICsxMjAsNCBAQCB2b2lk
IFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4
dHVyZU1hcHBlciYgdGV4dHVyZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2Vu
ZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgKaW5kZXggYjhl
ODFmMTFiMjE4YzA0ZTA2NTQ0MWZiYjY5Y2RhNGY2OWUzZjVkZi4uMGNmNjBmNTczZDhiZjZlZTg3
MmE5MjQzNmQwZjUyOWY5MDdkOTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0Mz
RFBsYXRmb3JtTGF5ZXIuaApAQCAtMTksOSArMTksOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lm
IEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFV
U0UoTklDT1NJQSkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRV
UkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCkBAIC0z
NCwxMSArMzQsMTEgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNs
YXNzIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVy
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFw
cGVyR0MzRFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0M0QmLCBHcmFwaGljc0NvbnRleHQz
RDo6RGVzdGluYXRpb24pOworICAgIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlv
bik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKCk7CiAKICAg
ICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBj
b25zdCBvdmVycmlkZTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZh
dGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QmIG1fY29udGV4dDsKKyAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IG1f
Z2xDb250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNTgsNCArNTgs
NCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2VuZGlmIC8v
IEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCmluZGV4IDYxNjM1ZTUyYTY3Njk1ODM0MzNlZDBlMzAzMjI5Zjg1YzFl
YzA1ZWMuLjZiNDc5MjU3YTYxODlmOTI1MzYzMDc0NjUzNTU3ODM5Y2FhNGM1OGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJCaXRtYXBUZXh0
dXJlR0wuaCIKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlUG9vbC5oIgotI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHTENvbnRleHQu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHQzRERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRERpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYWIzOTZhNDlmOTMxYTE0ODJhYjgyYmY5MTNlYmZlZWRkYmE2ZDUwZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0REaXJlY3QyRC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShE
SVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1h
Z2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdl
RXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlKQotewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNp
emUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoIWlt
YWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAm
JiBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2JjZmJmMjkxNjc2MjUzYWJmNTU2ZjdkMDMxY2E4YjYzZTgzYzlhMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRHTERpcmVjdDJELmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfR0wpICYmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGQyZDFlZmZl
Y3RzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQoreworICAg
IGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25z
dCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5p
c0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoRElSRUNUMkQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZjFhMTY0ZDE3MzA1ZWRmMWZlNmVkYmExZDhj
OTg0MDMzYzhkNTRhMC4uYmE5NDE4YzUwYzc5ZjAzODk1ZTM3YmM3YjM3N2ZhYTkzYjU1NzNiNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzAyLDcgKzMwMiw3IEBACiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRE1h
bmFnZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNjcxYWRh
YTg1NTE2ZGUzMmMzMzk2Y2U4OWMwYmVhNzAyNDk2ZTBjLi5mZjUyZDI1MzZmNTY1ZmEyOTViZWI2
MjAxMjY4YTBmMzMzMTcwZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTIzNyw3ICsyMzcsNyBA
QCBzZXQoUGx1Z2luUHJvY2Vzc19MSUJSQVJJRVMKICAgICBXZWJLaXQKICkKIAotaWYgKEVOQUJM
RV9HUkFQSElDU19DT05URVhUXzNEKQoraWYgKEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMKQog
ICAgICMgRm9yIHBsYXRmb3JtcyB0aGF0IHdhbnQgdG8gdXNlIHN5c3RlbS1wcm92aWRlZCBPcGVu
R0wgKEVTKSAvIEVHTCBoZWFkZXJzLAogICAgICMgdGhlc2UgaW5jbHVkZSBkaXJlY3Rvcmllcywg
bGlicmFyaWVzIG9yIGRlZmluaXRpb25zIG5lZWQgdG8gYmUKICAgICAjIGFkZGVkIGJlZm9yZSB0
aGUgQU5HTEUgZGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3Rr
L1dheWxhbmRDb21wb3NpdG9yLmNwcAppbmRleCBjMzU0MDk5ZmU5NDk4ZmUwNjI5Nzc1NjlkOGU0
ZTRlZGNmNjdhMjAwLi41MGYwODZlZGUyZWYzM2VjOGQ5YTMyOWQyNDQxMGE2N2U3NGI4YTFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5j
cHAKQEAgLTQxLDkgKzQxLDkgQEAKICNpZiBVU0UoT1BFTkdMX0VTKQogI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRXh0
ZW5zaW9uczNET3BlbkdMRVMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4dGVuc2lvbnNHTE9wZW5H
TEVTLmg+CiAjZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvRXh0ZW5zaW9uczNET3BlbkdMLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9FeHRlbnNpb25zR0xPcGVuR0wuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L09wZW5HTFNoaW1zLmg+CiAjZW5kaWYKIApAQCAtNDI3LDkgKzQyNyw5IEBAIGJvb2wgV2F5bGFu
ZENvbXBvc2l0b3I6OmluaXRpYWxpemVFR0woKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNp
ZiBVU0UoT1BFTkdMX0VTKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0xF
Uz4gZ2xFeHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zM0RPcGVuR0xFUz4obnVsbHB0
ciwgIGZhbHNlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+IGds
RXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KG51bGxwdHIsICBm
YWxzZSk7CiAjZWxzZQotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0w+IGds
RXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMPihudWxscHRyLCBHTENv
bnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEV4dGVuc2lvbnNHTE9wZW5HTD4gZ2xFeHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25z
R0xPcGVuR0w+KG51bGxwdHIsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIw
KTsKICNlbmRpZgogICAgIGlmIChnbEV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfRUdMX2lt
YWdlIikgfHwgZ2xFeHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5h
bCIpKQogICAgICAgICBnbEltYWdlVGFyZ2V0VGV4dHVyZTJEID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTEVHTElNQUdFVEFSR0VUVEVYVFVSRTJET0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImds
RUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAKaW5kZXggYzM1
OTNhZjM1NDNlM2MwMjVmOTZiYzQzYzE0NDNjNmU0MGY3MWYzYi4uZGU5Mzk2N2VmZGY5MmIzYzhm
N2I4MzQ0YzQ5ZDAwYjY1NmQ5Y2EzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL0hpZ2hQZXJmb3JtYW5jZUdQVU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9IaWdoUGVyZm9ybWFuY2VHUFVNYW5hZ2VyLmNwcApAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxPcGVuR0wvQ0dMVHlwZXMuaD4K
ICNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQzRE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMTWFuYWdlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVS
ZW1vdGUuY3BwCmluZGV4IDQ3ZmFhZmNjODE2MzQ4YmJmYzJiNDc1OTRlYzZiZDJjNWM2OWJmNzgu
LjZiODllZjlmYTBkYWMyOWFjY2JmNDY4YTY3ZDhkYzllMjkzYjA0ZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVy
UHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVJlbW90ZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0Jiwg
Y29ucwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
UmVtb3RlOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3Rl
Ojpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5oCmluZGV4IGZhYTJlYzlhMzIx
Yjc4NDlkNDY4NjE0ZmNlOGJhOTk3MTFhMWQ3MmQuLjVkYWVkNjVmMDdiMTdlOGNjMTk2OWE1NDQ2
ODJhOGU2ZjZkYTMyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuaApAQCAtMTg0LDcgKzE4
NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgcGFpbnRDdXJy
ZW50RnJhbWVJbkNvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBH
QzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9v
bCkgZmluYWw7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51
bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgZmlu
YWw7CiAgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGlt
ZSgpIGZpbmFsOwogCiAgICAgdm9pZCBzZXRQcmVsb2FkKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpQ
cmVsb2FkKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKaW5kZXggZWQ0MmJkMTk5OGU0YWRlYzhkMjFmNDVlNjFjYTBlN2RiOTgxZWY5MS4uYTM2
MGZlNTY3NGIzMDY1MTk3ZmZlOWVhYTU4NTNmNTU5YjM1YmU2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GdWxsc2NyZWVuTWFuYWdlci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0M0QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQXR0YWNobWVudEVs
ZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEltYWdlRWxlbWVudC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBjMzU4ZWUyYzE0ZTc4YzNiNzI3
M2NjNTk3NTExNGMxNTg5ZWZhOWFkLi4yYWE4ZTc2ZTRjYjg5YTNmZmZiN2QyZTNmYjJiZDg2YmQx
MGY5MWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQpAQCAtNjgsNyArNjgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxv
YWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dDNELmg+
CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkltYWdl
RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCBhZTNk
MmM3ZDQyYjg2MjRlODQ1ZDAwZDNmZDhlYjE0OGE4ODlhYTBhLi5hYjU2Y2I1NTg3N2E5MzllYmIw
ZGZhZjBmMzIxNjg2MzE5ZjMwODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTExMCw3ICsxMTAsNyBAQAogI2lmIFBMQVRG
T1JNKE1BQykKICNpbXBvcnQgIldLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMuaCIKICNp
bXBvcnQgIldlYlN3aXRjaGluZ0dQVUNsaWVudC5oIgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQzRE1hbmFnZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lTWFjLmg+CiAj
aW1wb3J0IDxwYWwvc3BpL21hYy9OU1Njcm9sbGVySW1wU1BJLmg+CiAjZW5kaWYKQEAgLTgwMyw3
ICs4MDMsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNjcm9sbGVyU3R5bGVQcmVmZXJlbmNlQ2hhbmdl
ZChib29sIHVzZU92ZXJsYXlTY3JvbGxiYXJzKQogCiB2b2lkIFdlYlByb2Nlc3M6OmRpc3BsYXlD
b25maWd1cmF0aW9uQ2hhbmdlZChDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5SUQsIENHRGlzcGxh
eUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncykKIHsKLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoZGlzcGxheUlELCBmbGFncywgbnVsbHB0cik7Cisg
ICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVk
KGRpc3BsYXlJRCwgZmxhZ3MsIG51bGxwdHIpOwogfQogICAgIAogdm9pZCBXZWJQcm9jZXNzOjpk
aXNwbGF5V2FzUmVmcmVzaGVkKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNG
VFcuY21ha2UKaW5kZXggYWY4ZmI2ZGFlYmM0NTZmMmM2NDE4MjA2OGEyYzg0NTVjZDUyZThjOS4u
Y2FlYjlkN2ZmZDFjODYwZGYwM2Q3MWNiYzQwZjI1ZjI2MTdmMzQ0MiAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNGVFcu
Y21ha2UKQEAgLTI0Niw3ICsyNDYsNyBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVY
VFVSRV9NQVBQRVJfR0wgT04pCiAjU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RP
Ul9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSIE9GRikKIAotc2V0KEVOQUJM
RV9HUkFQSElDU19DT05URVhUXzNEIE9OKQorc2V0KEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dM
IE9OKQogc2V0KFVTRV9BTkdMRV9FR0wgT04pCiAKIHNldChXVEZfTElCUkFSWV9UWVBFIFNIQVJF
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2Nt
YWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggYTkxZmMyZDA1MDc0ZTNmNmFjZjllYTZjNDFkOWJk
M2VlOTQ5OTExMS4uYmE3ZjM1MmEyYWRjZjcxODA1MTFjZDBhNDA0YTAxNWMxMzhhZGZkOSAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2UKQEAgLTI5Niw3ICsyOTYsNyBAQCBpZiAoRU5BQkxFX09QRU5HTCkK
ICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRWl0aGVyIEdMWCBvciBFR0wgaXMgbmVlZGVk
IGZvciBFTkFCTEVfT1BFTkdMLiIpCiAgICAgZW5kaWYgKCkKIAotICAgIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIFRSVUUpCisgICAgU0VUX0FORF9F
WFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgVFJVRSkKIAogICAgIFNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBUUlVFKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc01hYy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zTWFjLmNtYWtlCmluZGV4IDI2NGNmZjBkZWRlY2U5NmUwZDljYmI1MzA3YTAwYjQ0Mzc2YjZi
MjYuLjY3MmQ3Nzc3MmUyM2NiMzk0NGEzMjc1ZjZlZmU1ZjNlMzEwZGQ1YzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9jbWFrZS9PcHRpb25zTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
TWFjLmNtYWtlCkBAIC0xMTMsNyArMTEzLDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1hTTFQgUFJJVkFURSBPTikKIAogV0VCS0lUX09QVElPTl9FTkQoKQogCi1z
ZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgT04pCitzZXQoRU5BQkxFX0dSQVBISUNTX0NP
TlRFWFRfR0wgT04pCiBzZXQoRU5BQkxFX1dFQktJVF9MRUdBQ1kgT04pCiBzZXQoRU5BQkxFX1dF
QktJVCBPTikKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UKaW5kZXggNTkzNTkx
MWRkOWQ1NDhlYmJhYTk2OTE5NDI1MzY1YTk0NWIyNzA2MS4uYzcwZTA0MWIwZGNjNGZiYWQ2MWIx
YzkyZGViOWY0MDVjODEwZTYzYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5
U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtl
CkBAIC0xMTMsNyArMTEzLDcgQEAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RP
Ul9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX1VOSVhfRE9NQUlOX1NPQ0tFVFMgT04pCiAKICMgUmVuZGVyaW5nIG9w
dGlvbnMKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNE
IE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wg
T04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MgT04p
CiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX05JQ09TSUEgVFJVRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
V1BFLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggZDM0OWMyYzM3
YzBlODg4ZmRiYTY5YmZiNjExMDY3Y2Y0MWQ2MTM5ZC4uMmZiYmI1ODFjMDJiNmY0ODM0YWU4YWZm
YTU1NGRmMGZiMmUzMTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21h
a2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTE5NSw3ICsxOTUsNyBA
QCBpZiAoV1RGX0NQVV9BUk0gT1IgV1RGX0NQVV9NSVBTKQogICAgIFNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKFVTRV9DQVBTVE9ORSAke0RFVkVMT1BFUl9NT0RFfSkKIGVuZGlmICgpCiAKLVNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIFRSVUUpCitTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCBUUlVFKQogCiBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVIgVFJVRSkKIFNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBUUlVFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
V2luQ2Fpcm8uY21ha2UKaW5kZXggZDQ3MWQ1OWNlMTY4MzYxZDU3ZmZkZmUyZjdiYjdjNzI0NTlh
MTgwMS4uMDI5YmE0N2ZmODQ3ODBlZDVmMzBjMGQzZTFkYjM5NGMyOWMzYjA2MCAxMDA2NDQKLS0t
IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dpbkNhaXJvLmNtYWtlCkBAIC0zNiw3ICszNiw3IEBAIFNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9NRURJQV9GT1VOREFUSU9OIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lO
U1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogCi1zZXQo
RU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgT04pCitzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRF
WFRfR0wgT04pCiBzZXQoRU5BQkxFX1dFQktJVCBPTikKIAogc2V0KFVTRV9BTkdMRV9FR0wgT04p
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjkw
MWExMjY3MzA4ZDc0MDdiYTNhMjI1MzUzZjQ2ZWVlMDRiZTc4MC4uMmNjMGVhNDVkNzA3ZGExN2Nm
ZjM0N2MxZjZhNmFjOTlkZGQ3ZTRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0Qg
dG8gR3JhcGhpY3NDb250ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBH
cmFwaGljc0NvbnRleHRHTAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQ
SElDU19DT05URVhUXzNEKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJl
Y29tZXMgR3JhcGhpY3NDb250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5v
dyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0
aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY29uZmlnL3dhdGNobGlzdDoKKwogMjAyMC0wMS0wMyAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiAx
NTArIGZsYWt5IGZhaWx1cmVzIG9uIHNvbWUgYm90cyAoY29sb3IgbWlzbWF0Y2hlcykKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0CmluZGV4IDQyY2E2
MDU4ZThjNDYwYTUwMWRjODg0YTkzMGJlYTY3MTc4Yzc3YzUuLjIzYTMzNDg4MzNlY2EzMGIxM2E2
NzI3ZmMwMjI5Nzc5YjZhMjM5NGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NvbmZpZy93YXRjaGxpc3QKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY29uZmlnL3dhdGNobGlzdApAQCAtMTYzLDEwICsxNjMsMTEgQEAKICAgICAgICAgIldlYkdM
IjogewogICAgICAgICAgICAgImZpbGVuYW1lIjogciJTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy8uKldlYkdMLioiCiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy8uKldlYkdMLioiCisgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZSIKICAgICAgICAgICAgICAgICAgICAgICAg
IHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdSIKICAgICAgICAgICAgICAg
ICAgICAgICAgIHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAg
ICAgICAgICAgICAgICAgICAgICAgIHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFLioiCi0gICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy8uKkdyYXBoaWNzQ29udGV4dDNELioiCisgICAgICAgICAgICAgICAgICAg
ICAgICByInxTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy8uKkdyYXBoaWNzQ29udGV4
dEdMLioiCiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RSIsCiAgICAgICAgIH0sCiAgICAgICAgICJGaWx0ZXJzIjogewpkaWZmIC0tZ2l0IGEvQ2hhbmdl
TG9nIGIvQ2hhbmdlTG9nCmluZGV4IGQ1NWNjZmM3M2U1NjFhNjc4YTBkMmFkYmE1MTkxZjczYjcw
NjQwM2QuLmUyMmZmOTIyYmJmNTk0NzhmNWM0OWI4OWQ3YzE4MmFkM2IzMDNmOTAgMTAwNjQ0Ci0t
LSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wMS0w
NSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIEdyYXBo
aWNzQ29udGV4dDNEIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU3NzgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgYWxsIHRoZSBHcmFwaGljc0NvbnRleHQz
RCB0aGluZ3MgdG8gR3JhcGhpY3NDb250ZXh0R0wKKyAgICAgICAgKGluY2x1ZGVzIEV4dGVuc2lv
bnMzRCBhbmQgR1JBUEhJQ1NfQ09OVEVYVF8zRCkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0RCYXNlIG5vdyBiZWNvbWVzIEdyYXBoaWNzQ29udGV4dEdMLgorICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRCBpcyBub3cgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKHNpbmNlIGl0IHJlcHJlc2Vu
dHMKKyAgICAgICAgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJKS4KKworICAg
ICAgICAqIFNvdXJjZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0
aW9uc0ZUVy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc01hYy5jbWFrZToKKyAgICAgICAgKiBTb3Vy
Y2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFr
ZS9PcHRpb25zV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fp
cm8uY21ha2U6CisKIDIwMjAtMDEtMDMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgc2hhcmVkIHNjaGVtZXMgdG8gdGhlIFdlYktpdC54
Y3dvcmtzcGFjZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJm
b3JtYW5jZVRlc3RzL0NoYW5nZUxvZwppbmRleCAyY2VhZmVkNmRjZTJkMDNlYWUzYTZmMWYxNTU1
NTQ3ZmEzMDY0NzZkLi4yMDJjYjNkOTk0MDEwMzI2YTUyZWJjMmIxYzk0Nzc0MTM5MTJjOTM3IDEw
MDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24g
IDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8g
R3JhcGhpY3NDb250ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlbmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFw
aGljc0NvbnRleHRHTAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElD
U19DT05URVhUXzNEKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29t
ZXMgR3JhcGhpY3NDb250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUg
T3BlbkdMIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogU3RpdGNoTWFy
a2VyL3d0Zi9GZWF0dXJlRGVmaW5lcy5oOgorICAgICAgICAqIFN0aXRjaE1hcmtlci93dGYvUGxh
dGZvcm0uaDoKKwogMjAxOS0xMi0xNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIFN0eWxlQmVuY2ggc3VidGVzdCBmb3IgZHluYW1pYyBtZWRpYSBxdWVy
eSBwZXJmb3JtYW5jZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIv
d3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYv
RmVhdHVyZURlZmluZXMuaAppbmRleCBhZDRiOTFlZTgyNDVmMTc2OTg3ZjM3YmIyNzVhMGRlNjc2
NmU0YjVjLi5lMWI2ZmZlMGE4Yjg3MWVmMGFmZjlhYWZkOWVmOTM0NjZlYTBkMmQyIDEwMDY0NAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaApA
QCAtNjc2LDggKzY3Niw4IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gV2Ugd2lsbCBhbHNvIG5lZWQg
dG8gdXBkYXRlIHRoZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBmaWxlCiAjZGVmaW5lIEVOQUJM
RV9XRUJHTCAwCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKEVOQUJMRV9HUkFQSElDU19DT05URVhU
XzNEKQotI2RlZmluZSBFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBFTkFCTEVfV0VCR0wKKyNp
ZiAhZGVmaW5lZChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyNkZWZpbmUgRU5BQkxFX0dS
QVBISUNTX0NPTlRFWFRfR0wgRU5BQkxFX1dFQkdMCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVO
QUJMRV9XRUJfQU5JTUFUSU9OUykKQEAgLTczMCw4ICs3MzAsOCBAQCB0aGUgcHVibGljIGlPUyBT
REsuIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25m
aWcgZmlsZQogI2Vycm9yICJFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykgcmVxdWlyZXMgRU5BQkxF
KFRPVUNIX0VWRU5UUykiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJHTCkgJiYgIUVOQUJMRShH
UkFQSElDU19DT05URVhUXzNEKQotI2Vycm9yICJFTkFCTEUoV0VCR0wpIHJlcXVpcmVzIEVOQUJM
RShHUkFQSElDU19DT05URVhUXzNEKSIKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF9HTCkKKyNlcnJvciAiRU5BQkxFKFdFQkdMKSByZXF1aXJlcyBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF9HTCkiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHTDIpICYmICFF
TkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93
dGYvUGxhdGZvcm0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9y
bS5oCmluZGV4IDYwYmU4ZjM0ZjBjNDQxYTIwOTgxMWY1MGY2Yzk2NDZmZmNmYWQ5MjQuLjIyMmVk
Nzc5OTE5NTdkMDlmZmY3YWU1N2Q3NzZhMWM2MDRiYzJjMGMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCkBAIC05OTAsNyArOTkwLDcgQEAKICNkZWZp
bmUgVVNFX1RFWFRVUkVfTUFQUEVSIDEKICNlbmRpZgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KSAmJiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgIWRlZmluZWQoVVNFX1RFWFRVUkVf
TUFQUEVSX0dMKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgRU5BQkxFKEdSQVBISUNTX0NP
TlRFWFRfR0wpICYmICFkZWZpbmVkKFVTRV9URVhUVVJFX01BUFBFUl9HTCkKICNkZWZpbmUgVVNF
X1RFWFRVUkVfTUFQUEVSX0dMIDEKICNlbmRpZgogCg==
</data>
<flag name="review"
          id="402559"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386806</attachid>
            <date>2020-01-05 20:09:46 -0800</date>
            <delta_ts>2020-01-05 20:09:46 -0800</delta_ts>
            <desc>EWS test</desc>
            <filename>bug-205778-20200106150943.patch</filename>
            <type>text/plain</type>
            <size>1743598</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDlhZGIxMjdhYzMwNjI4ZDBmM2M0OWRj
YmY1NWEyY2UyN2I1Mzk2NGEuLjM5ODk1MmIzNTRlM2JhYjZkMzBmZGM4ZGJhODdiOWNkMGFiZTQ4
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGlj
c0NvbnRleHRHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA1Nzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29u
dGV4dEdMCisgICAgICAgIChpbmNsdWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRF
WFRfM0QpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFw
aGljc0NvbnRleHRHTC4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMIChzaW5jZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wg
aW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSSkuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmlu
ZXMuaDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAyMC0wMS0wMyAgRGVhbiBKYWNr
c29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBFbmFibGUgQU5HTEUgYnkg
ZGVmYXVsdCBmb3IgQ29jb2EgcGxhdGZvcm1zIChleGNlcHQgc2ltdWxhdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGRhYTNlZTEwNWM3OWZhM2Q0YTEzMjFiMjgzMDlhMjJlNjdkODNjY2EuLjgyNThiODE4NWUw
YjYyZGIyNjgzMTdhMjU1MTRmMTMwMTUzNTk2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzIg
QEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGljc0NvbnRleHRHTAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1Nzc4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIGFsbCB0aGUgR3Jh
cGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAgIChpbmNs
dWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRFWFRfM0QpLgorCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFwaGljc0NvbnRleHRHTC4KKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIChzaW5j
ZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEFQSSkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBIZWFkZXJzLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZToKKyAg
ICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAg
ICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwOgorICAgICAgICAq
IGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFz
LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTEFjdGl2ZUluZm8uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91
cC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RGVidWdTaGFkZXJzLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVy
ZS5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmNwcDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFF1ZXJ5Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xT
YW1wbGVyLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMU3luYy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTeW5j
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRy
YW5zZm9ybUZlZWRiYWNrLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9y
bUZlZWRiYWNrLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHA6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQ6CisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRXh0ZW5zaW9uc0dMLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9FeHRlbnNpb25zM0QuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb3Jt
YXRDb252ZXJ0ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZl
cnRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmguCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
REF0dHJpYnV0ZXMuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGlt
cy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5H
TEUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5n
bGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0
M0RBTkdMRS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5
QU5HTEVTZXR0aW5nLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dDNEQ0cuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR0xMYXllci5tbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L0dyYXBoaWNzQ29udGV4dEdMTkVPTi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHQzRE5FT04uaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2VnbC9HTENvbnRleHRFR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xD
b250ZXh0R0xYLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0
R0xYLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQzRElPUy5oLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RB
TkdMRUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUdDM0RMYXllci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zR0xPcGVuR0xDb21tb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTEVTLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xFUy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTFByaXZhdGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBv
cmFyeU9wZW5HTFNldHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZUdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHQzRFRleHR1cmVN
YXBwZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0RE
aXJlY3QyRC5jcHAuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorCiAyMDIwLTAx
LTA0ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBz
dXBwb3J0IGZvciBpT1MgU2ltdWxhdG9yIHRvIEFOR0xFIGJhY2tlbmQgZm9yIFdlYkdMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDY4NmQ5ZjNkNWM3M2ZkNWUwOGZlZjU0YWEzODNiYWQ2NmNkNzBiMDcuLmRiYjIyMDMw
OTI5YWU3ZjUwMWY3OTA1NzZjYjJhZWM0YmEwYTY2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGljc0NvbnRleHRHTAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1Nzc4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIGFsbCB0aGUgR3Jh
cGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAgIChpbmNs
dWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRFWFRfM0QpLgorCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFwaGljc0NvbnRleHRHTC4KKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIChzaW5j
ZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEFQSSkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Z3RrL1dheWxhbmRDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2F5bGFuZENvbXBv
c2l0b3I6OmluaXRpYWxpemVFR0wpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvSGlnaFBlcmZv
cm1hbmNlR1BVTWFuYWdlci5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVk
aWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmRpc3Bs
YXlDb25maWd1cmF0aW9uQ2hhbmdlZCk6CisKIDIwMjAtMDEtMDQgIEtlaXRoIFJvbGxpbiAgPGty
b2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlZm9ybWF0IFdlYlBhZ2UgbG9nZ2luZwpkaWZm
IC0tZ2l0IGEvU291cmNlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDhiY2VkNjg1Njk4NzFhNzhlZDkxYzMxZDU1YzFiYjc0MWM4OTE2ZmEuLjYyYjA1NmM3ZWNl
NzYyNjk4YzYyODU0MzM3MWVlNGMyMDU4YWE2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvQ01ha2VMaXN0cy50eHQKQEAgLTEzLDcgKzEzLDcgQEAgZW5k
aWYgKCkKIAogYWRkX3N1YmRpcmVjdG9yeShKYXZhU2NyaXB0Q29yZSkKIAotaWYgKEVOQUJMRV9H
UkFQSElDU19DT05URVhUXzNEKQoraWYgKEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMKQogICAg
IGFkZF9zdWJkaXJlY3RvcnkoVGhpcmRQYXJ0eS9BTkdMRSkKIGVuZGlmICgpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0
dXJlRGVmaW5lcy5oCmluZGV4IDY4MmExZTg5NWEyZjZjMGYyZDU1ZmJkMDFiNmFkNTMwMWNmMDAw
NjYuLjk4MDQ1OTNmMTY3ODgxYzE4MzM0ZWFlZWVmZmZjNTRjNjViNGQzMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKKysrIGIvU291cmNlL1dURi93dGYvRmVh
dHVyZURlZmluZXMuaApAQCAtNzIyLDggKzcyMiw4IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gU2Vl
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzkxNjc+LiAqLwogI2RlZmluZSBFTkFCTEVfV0VCR0wg
MAogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNk
ZWZpbmUgRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgRU5BQkxFX1dFQkdMCisjaWYgIWRlZmlu
ZWQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wpCisjZGVmaW5lIEVOQUJMRV9HUkFQSElDU19D
T05URVhUX0dMIEVOQUJMRV9XRUJHTAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfV0VC
X0FSQ0hJVkUpCkBAIC03NjQsOCArNzY0LDggQEAgdGhlIHB1YmxpYyBpT1MgU0RLLiBTZWUgPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE3OTE2Nz4uICovCiAjZXJyb3IgIkVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKSByZXF1aXJlcyBFTkFCTEUoVE9VQ0hfRVZFTlRTKSIKICNlbmRpZgogCi0jaWYgRU5B
QkxFKFdFQkdMKSAmJiAhRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jZXJyb3IgIkVOQUJM
RShXRUJHTCkgcmVxdWlyZXMgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpIgorI2lmIEVOQUJM
RShXRUJHTCkgJiYgIUVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorI2Vycm9yICJFTkFCTEUo
V0VCR0wpIHJlcXVpcmVzIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSIKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdFQkdMMikgJiYgIUVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDBkNjVi
MzY0MDcxZWIxMTU1MTQ2YjQ3Y2E0NWNiNzU0MmI4ZjRlMTMuLjI3YjBmNGZmODkwODlkM2ZhYTlm
ZDE4MzM1ZTNmOTRlMzA1YjViNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtMTE0OCw3ICsxMTQ4LDcgQEAK
ICNlbmRpZgogI2VuZGlmCiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUXzNEKSAmJiAhZGVmaW5lZChVU0VfVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgIWRl
ZmluZWQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMKQogI2RlZmluZSBVU0VfVEVYVFVSRV9NQVBQRVJf
R0wgMQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNGZjODNjZjJiOTg2OTQyZTY0
ZTAwYzM5M2ViY2ZiZmUyMjAyYzlmMC4uNTY3MzIwNGI0MDQ4N2JmNzdiNjMxMzk5MDRiYTdiYjE5
NjRkYzFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE0ODgsMTEgKzE0ODgsMTEgQEAgaWYg
KEVOQUJMRV9RVU9UQSkKICAgICApCiBlbmRpZiAoKQogCi1pZiAoRU5BQkxFX0dSQVBISUNTX0NP
TlRFWFRfM0QpCitpZiAoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wpCiAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0
QnJpZGdlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCiAgICAg
KQogCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgQU5HTEVGcmFtZXdvcmspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQppbmRleCBhYTE2MDNjZTNjMzNlN2RjYzIxY2UyYjhjNTBhYWYyMzg3NjVh
YTY3Li41N2RkMTRlMjgzMGJjMTU3ZTNjYjY0ZGNhNTc2ZDkyYTQwMWQxMWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UKQEAgLTEwMjYsNyArMTAyNiw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFn
ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9u
c0dMLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50M0QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5o
CkBAIC0xMDU3LDEwICsxMDU3LDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RNYW5hZ2VyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRHTC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyQ2xpZW50LmgKQEAgLTExMjMsNyArMTEyMyw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aENhY2hlLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9XaW5kUnVsZS5oCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZS9FeHRlbnNpb25zM0RBTkdMRS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5z
aW9uc0dMQU5HTEUuaAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oCkBAIC0xMTQyLDkgKzExNDIsOSBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9saWJ3cGUvUGxhdGZvcm1EaXNwbGF5
TGliV1BFLmgKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDExMjdiZWQwYTgyZDhjMjVlNzAwOWFkOWI3NTcyODU1
NjAyNWM4YTMuLmY3MTI5MjdjYzkxOGYzYWIwZmU3MDhhOGFjMDE3YmQwZjNjZjk0MGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtMTI5LDcgKzEyOSw3IEBAIGVsc2Ug
KCkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHQzRENHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9v
bC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1GVFcuY21ha2UKaW5kZXggNWMwY2EzOGExZDNiMzJlMTZiYjhlMjgxOGFiN2Qz
MzU0MGRjN2ZmMy4uYWU5MWE3NjM4NDQyNDNiMzE0YjM3MGU0ZDhhMTc1ODYxZDhmZjAxYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTQ2LDE2ICs0NiwxNiBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMu
Y3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5j
cHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVT
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
R0xPcGVuR0xFUy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlVXRpbGl0aWVzLmNwcApAQCAtNzgsNyArNzgsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0REaXJlY3QyRC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQppbmRleCBhMzBhNTQ1Y2M2MzUxNDMxZTkzNjk3ODYyZmEzODliMGY5NjkzZTdj
Li5jZDkyNTMxOWQzOTM0NWFmMGE5MjY2ZTdmOGMyODY5ZGY2MzdmZDZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtMTMxLDI4ICsxMzEsMjggQEAgZW5kaWYgKCkKIAogaWYgKFVTRV9B
TkdMRV9XRUJHTCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9UZW1wb3JhcnlBTkdMRVNldHRpbmcuY3BwCiAgICAgKQog
ZWxzZSAoKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21t
b24uY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvbW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBv
cmFyeU9wZW5HTFNldHRpbmcuY3BwCiAgICAgKQogCiAgICAgaWYgKFVTRV9PUEVOR0xfRVMpCiAg
ICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAotICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3Bw
CisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFUy5jcHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCiAKICAgICBpZiAoVVNFX09QRU5H
TCkKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAotICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAK
KyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTEJhc2UuY3BwCiAgICAgICAgICkKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKaW5kZXggNzFmMDgwNWQwZjFjNjBiZTFjYjgwMDMzMmY0MGRkZDZlN2Jm
MmQ4YS4uYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4Niw3ICsyODYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFNpemVDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dDNEQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0zMDQsNyArMzA0LDcgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRp
b25NYXRyaXhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAK
IAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0K
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29h
Lm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0K
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC0zNDYsMTAgKzM0
NiwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvU2ltcGxlRm9udERhdGFDb3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViTGF5ZXIubW0KIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zR0xPcGVuR0wuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnNHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlL09wZW5UeXBlQ0cuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlv
bi5jbWFrZQppbmRleCAyNjc4YzMxYWQ2MmJkYjgyNjk3OWZiYjczYTNjZTEzNWRkMzQ2ZTY2Li5j
YjFhOGI5ZWUzZWI2ZjA3ZDQ0ZGZkYWFmMTdjODc4OTQ2M2FmYjk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTM3LDcgKzM3LDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVy
aWMuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9H
TENvbnRleHRFR0wuY3BwCkBAIC00NSwxMCArNDQsMTEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9saWJ3cGUvUGxhdGZvcm1EaXNwbGF5TGli
V1BFLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMRVMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zR0xPcGVuR0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnNHTE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZvcm0vbGli
d3BlL1Bhc3RlYm9hcmRMaWJXUEUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGQx
ZmQ0ZWIxMmRkOTcxMTAwMTgwZWE4MDU2ZWQ0ODY1NjlmYzkwNmUuLjI1MGEwYjM1YzA0MDJmNjc5
ZGFlNDliNGEyMGM1YmExOWQ2NWZlYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC0z
NywxNCArMzcsMTMgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9y
bS9hdWRpby9QbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCi0KICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAog
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CmluZGV4IDkyOTdkMDQ0ZTQ0ODI3OGRiZTdjOTE2OWJiMzI2YzlkZmI3MDQyNWIu
LmFjYWU2ZmUzOGRkZTI2YzI4Y2Y1ZDQ0OTExZmM1YWMzMGIyNTg2NzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CkBAIC0xODU3LDggKzE4NTcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRyeVV0aWxpdGll
cy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnRJbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAKLXBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1w
bC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcApAQCAtMTk0Nyw2ICsxOTQ2LDggQEAgcGxh
dGZvcm0vZ3JhcGhpY3MvaXNvL0lTT1NjaGVtZVR5cGVCb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9pc28vSVNPVHJhY2tFbmNyeXB0aW9uQm94LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvaXNvL0lT
T1ZUVEN1ZS5jcHAKIAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmNwcAorCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRh
LmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDIyZTBkZmYwZGU2YThkMzhiMGVmMDhjNGI4YTEw
ZjkxMjQxZjMxOWIuLmIzNmY5MGI2NGQ4ZWMzODU3NjcwMmUxOTNiNjgwMzMwY2Y5MDVmNWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjI2LDggKzIyNiw4IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuY3BwCiAKIC8vIFRoZXNlIHNvdXJjZXMgY2Fu
J3QgYmUgdW5pZmllZCB3aXRoIG90aGVycyBpbiBjYXNlIHRoZXkgYXJlIG1lcmdlZAogLy8gd2l0
aCBmaWxlcyB0aGF0IHVzZSB0aGUgc3lzdGVtIE9wZW5HTC4KLXBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnMzREFOR0xFLmNwcCBAbm8tdW5pZnkKLXBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwIEBuby11bmlmeQorcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwIEBuby11bmlmeQorcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgQG5vLXVuaWZ5CiBwbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9UZW1wb3JhcnlBTkdMRVNldHRpbmcuY3BwIEBuby11bmlmeQogCiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQVZUcmFja1ByaXZhdGVBVkZPYmpDSW1wbC5tbSBA
bm8tdW5pZnkKQEAgLTI4NSw3ICsyODUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGll
bnRDRy5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAg
LTMwNSw3ICszMDUsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJp
eENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCiAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KLXBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dDNEQ29jb2EubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTM3
NSwxMCArMzc1LDExIEBAIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Td2l0Y2hpbmdHUFVDbGllbnQu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9XZWJLaXROU0ltYWdlRXh0cmFzLm1tCiAKLXBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xD
b21tb24uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xCYXNlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29tbW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVu
R0xTZXR0aW5nLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNHLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCBjMmMyNzA5Yjg3OWE4Mzg2OTI4OWZlMjg3MTM1N2Nk
ZTYyNmExYWE0Li43MjA1ZTIwZDNhYjRlMzlmYmVlNGJiOTQzMWFlY2I0YmNjYzI4YmQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzR1RLLnR4dApAQCAtNjksNyArNjksNiBAQCBwbGF0Zm9ybS9Vc2VyQWdlbnRRdWly
a3MuY3BwCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAKIAogcGxh
dGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcCBAbm8tdW5pZnkKLXBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
RGlzcGxheS5jcHAgQG5vLXVuaWZ5CiAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdT
dG9yZUJhY2tlbmRDYWlyb1gxMS5jcHAgQG5vLXVuaWZ5CkBAIC05Miw2ICs5MSw4IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAogCiBwbGF0Zm9y
bS9ncmFwaGljcy9saWJ3cGUvUGxhdGZvcm1EaXNwbGF5TGliV1BFLmNwcAogCitwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmNwcAorCiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAKIAogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2F5bGFuZC9QbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
V1BFLnR4dAppbmRleCA1YWIyMTE5NGU3YzQwNGQ0ZjI4MDE5ODM5ZjMyOGQ2NTY2NmY0YWVhLi5i
NWM4OTE1MDg4NzgzODMyMGM1ZTM5NGZiOGYwYmRkYTg0NDNjODdmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BF
LnR4dApAQCAtNjIsNyArNjIsNiBAQCBwYWdlL3Njcm9sbGluZy9nZW5lcmljL1Njcm9sbGluZ1Ro
cmVhZEdlbmVyaWMuY3BwCiBwbGF0Zm9ybS9Vc2VyQWdlbnRRdWlya3MuY3BwCiAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAog
cGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAgLTcwLDEwICs2OSwxMSBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMTGliV1BFLmNwcAogCiBwbGF0Zm9y
bS9ncmFwaGljcy9saWJ3cGUvUGxhdGZvcm1EaXNwbGF5TGliV1BFLmNwcAogCi1wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAotcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcCBAbm8tdW5pZnkKLXBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKLXBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAgQG5vLXVuaWZ5CitwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKIAog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MDc5ZTk0NjliMTFmYmJmMTY3YTE3MDIyZjU5OTk3NDBjZjY2MWI1OC4uYmQyMmIyNTJkODBiNDE5
M2MzM2U4NzBjN2FmMjlkYTRlZGIzZWVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTEzLDcgKzkxMyw3IEBACiAJCTMxMzU5
MTBBMUU3RERDNzMwMEYzMDYzMCAvKiBSVENTZHBUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTM1OTEwNDFFN0REQzYwMDBGMzA2MzAgLyogUlRD
U2RwVHlwZS5oICovOyB9OwogCQkzMTM1OTEwQjFFN0REQzczMDBGMzA2MzAgLyogUlRDU2lnbmFs
aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMzU5MTA1MUU3RERDNjAwMEYzMDYzMCAvKiBSVENTaWduYWxpbmdTdGF0ZS5oICovOyB9Owog
CQkzMTNCQ0UxQzIzNUUzQkU1MDBGQzM5RTUgLyogRWxlbWVudENvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxM0JDRTFCMjM1RTNCREIwMEZD
MzlFNSAvKiBFbGVtZW50Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3QiAvKiBHcmFwaGljc0Nv
bnRleHQzREJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxM0RFODZGMjNBOTY5NjcwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHQzREJhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMTNERTg3
MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxM0RFODZGMjNBOTY5NjcwMDhGQzQ3QiAv
KiBHcmFwaGljc0NvbnRleHRHTC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxNDAzNzlCMTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9u
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzE0MDM3OTcxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzE0MDM3OUQxMjRC
RUE3RjAwQUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5OTEyNEJFQTdGMDBBRjQw
RTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCAqLzsgfTsKIAkJMzE0MEM1MjAxRkRG
MTUxQTAwRDJBODczIC8qIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0MEM1MUUxRkRGMTUx
QTAwRDJBODczIC8qIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovOyB9OwpA
QCAtOTQ3LDYgKzk0Nyw3IEBACiAJCTMxOTU1QTg4MTYwRDE5OTIwMDg1ODAyNSAvKiBSZW5kZXJT
bmFwc2hvdHRlZFBsdWdJbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzFFOEQ4QkIxNjBCQzk0QzAwNENFOEY1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1
Z0luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTk4NDdGRjFBMUQ4MTY3MDBBMTMz
MTggLyogQW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzE5ODQ4MEMxQTFFNkNFODAwQTEzMzE4
IC8qIEpTQW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxOTg0ODA0MUExRTZCNUQwMEExMzMxOCAvKiBKU0FuaW1hdGlvbkV2ZW50
LmggKi87IH07CisJCTMxOUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxOUE3Mjg3MjNDMjY3RTcwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzMTlBRTA2NDE0MkQ2QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTlBRTA2MjE0MkQ2QjI0
MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzE5RkJENUYxNUQyRjQ2NDAwOTY0MEE2IC8qIENhY2hl
ZEltYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTlGQkQ1RDE1RDJGNDQ0MDA5NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMUEwODk1NjFF
NzM4RDU5MDAzQjY2MDkgLyogSlNXZWJHUFVCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQTA4OTFEMUU3MzhENTkwMDNCNjYwOSAvKiBKU1dl
YkdQVUJ1ZmZlci5oICovOyB9OwpAQCAtOTY5LDcgKzk3MCw3IEBACiAJCTMxQTA4OTg5MUU3MzhE
NUEwMDNCNjYwOSAvKiBKU1dlYkdQVVRleHR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQTA4OTUwMUU3MzhENTkwMDNCNjYwOSAvKiBKU1dlYkdQ
VVRleHR1cmUuaCAqLzsgfTsKIAkJMzFBMDg5OEMxRTczOEQ1QTAwM0I2NjA5IC8qIEpTV2ViR1BV
VGV4dHVyZURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxQTA4OTUzMUU3MzhENTkwMDNCNjYwOSAvKiBKU1dlYkdQVVRleHR1cmVEZXNj
cmlwdG9yLmggKi87IH07CiAJCTMxQTc5NUM3MTg4OEJDQjIwMDM4MkY5MCAvKiBBTkdMRUluc3Rh
bmNlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzFBNzk1QzIxODg4QjcyNDAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmggKi87
IH07Ci0JCTMxQUI1MDAwMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHQzRElPUy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFBQjRGRkYx
MjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggKi87IH07CisJCTMxQUI1
MDAwMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUFCNEZGRjEyMjg3
OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oICovOyB9OwogCQkz
MUMwRkYyMjBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFDMEU0Q0VCNkUw
MDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMUMwRkYyNTBFNENF
QjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYxRjBFNENFQjZFMDA3RDZGRTUgLyog
V2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggKi87IH07CiAJCTMxQzBGRjNFMEU0Q0VGQUMwMDdENkZF
NSAvKiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMUMwRkYzQTBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRB
bmltYXRpb25FdmVudC5oICovOyB9OwpAQCAtMTIxNCw3ICsxMjE1LDcgQEAKIAkJNDRBMjhBQUYx
MkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1M
TmFtZXMuaCAqLzsgfTsKIAkJNDRDOTkxODYwRjNEMUVCRTAwNTg2NjcwIC8qIFNjcm9sbGJhclRo
ZW1lSU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NEM5OTE4NTBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCAqLzsgfTsKIAkJ
NDRDOTkxOUYwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEM5OTE5RDBGM0QyMTBFMDA1ODY2NzAgLyog
VGhlbWVJT1MuaCAqLzsgfTsKLQkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5oICovOyB9OworCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uc0dM
T3BlbkdMQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NERBQjVCMDE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
LmggKi87IH07CiAJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJF
RjE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ1MTI1MDIzMTVEQ0UzN0QwMDJGODRF
MiAvKiBTcGluQnV0dG9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDUxMjUwMjExNURDRTM3RDAwMkY4NEUyIC8qIFNwaW5CdXR0b25FbGVt
ZW50LmggKi87IH07CiAJCTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1h
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUzRUI2
MzUxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzMDcsNyArMTMwOCw3IEBACiAJCTQ5
QzdCOUUwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMwMTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlDN0I5RTMxMDQy
RDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFk
ZXIuaCAqLzsgfTsKIAkJNDlDN0I5RTYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzYx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5oICovOyB9OwotCQk0OUM3QjlGQzEwNDJE
MzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFw
aGljc0NvbnRleHQzRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0I5RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlENURDMkMwRjQy
M0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUQ1REMyODBGNDIzQTczMDA4RjIw
RkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyog
UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RDVEQzJBMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQ5RTkxMUM0MEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFOTExQjQwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwMTEsNyAr
MjAxMiw2IEBACiAJCTZDNjM4ODk1QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJl
cXVlc3RJbml0aWF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2QzYzODg5M0E5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0
SW5pdGlhdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZFMEI5MDY5MjMyMUE2OEQwMDYyMjNCMiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
RVRDMS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUw
QjkwNjUyMzIxQTY4QzAwNjIyM0IyIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmggKi87
IH07CiAJCTZFMEU1NjlDMTgzQkZGRTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRSZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTBFNTY5QTE4M0JG
RkU2MDBFMEU4RDUgLyogRmxvYXRSb3VuZGVkUmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTZFMjFDNkMwMTEyNjMzODUwMEE3QkUwMiAvKiBH
cmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwICovOyB9OwogCQk2RTI0MkIyQjIzMzU5NDA1MDAyQ0FERDQgLyogSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlRVRDMS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkUyNDJCMkEyMzM1OTNEODAwMkNBREQ0IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZUVUQzEuaCAqLzsgfTsKIAkJNkUyNDJCMkMyMzM1OTQwOTAwMkNBREQ0IC8qIEpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUVUQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkUyNDJCMjgyMzM1OTNENzAwMkNBREQ0IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUVUQy5oICovOyB9OwogCQk2RTNGQUQzOTE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJHTENv
bXByZXNzZWRUZXh0dXJlUzNUQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkUzRkFEMzcxNDczM0Y0MDAwRTQyMzA2IC8qIEpTV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEMuaCAqLzsgfTsKQEAgLTIwMjMsMTIgKzIwMjMsMTIgQEAKIAkJNkU0N0U2NjEx
MEI3OTQ0QjAwQjE4NkM4IC8qIFdlYkdMQW55LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RTQ3RTY1RjEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xBbnku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RTRB
QkNENTEzOEVBMEI3MDA3MUQyOTEgLyogSlNIVE1MVW5rbm93bkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNEFCQ0QzMTM4RUEwQjcwMDcx
RDI5MSAvKiBKU0hUTUxVbmtub3duRWxlbWVudC5oICovOyB9OwogCQk2RTRFOTFBRjEwRjdGQjMx
MDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0RTkxQUExMEY3RkIzMTAwQTI3NzlDIC8qIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNE
T3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi87IH07Ci0J
CTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKLQkJNkU3MkY1NEMyMjlEQ0QwQzAwQjNFMTUxIC8q
IEV4dGVuc2lvbnMzREFOR0xFLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zM0RBTkdM
RS5jcHAgKi87IH07Ci0JCTZFNzJGNTRFMjI5RENEMTAwMEIzRTE1MSAvKiBHcmFwaGljc0NvbnRl
eHQzREFOR0xFLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFMjdGMjQyMjI5OENFNEIwMEYxRjYzMiAvKiBHcmFwaGljc0NvbnRleHQzREFOR0xFLmNw
cCAqLzsgfTsKKwkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTE9wZW5H
TC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0Qy
QTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTE9wZW5HTC5oICovOyB9OworCQk2RTY3
RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uc0dMLmggKi87IH07CisJCTZFNzJGNTRDMjI5RENEMEMwMEIzRTE1MSAvKiBFeHRl
bnNpb25zR0xBTkdMRS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTI3RjI0MzIyOUM5Rjg0MDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUuY3Bw
ICovOyB9OworCQk2RTcyRjU0RTIyOURDRDEwMDBCM0UxNTEgLyogR3JhcGhpY3NDb250ZXh0R0xB
TkdMRS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgKi87
IH07CiAJCTZFNzJGNTRGMjI5RENEMTMwMEIzRTE1MSAvKiBUZW1wb3JhcnlBTkdMRVNldHRpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyOTA4
NjEyMjlEQjk1MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAgKi87IH07Ci0J
CTZFNzJGNTUwMjI5RENEMTcwMEIzRTE1MSAvKiBFeHRlbnNpb25zM0RBTkdMRS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyN0YyNDQyMjlDOUY4RDAw
RjFGNjMyIC8qIEV4dGVuc2lvbnMzREFOR0xFLmggKi87IH07CisJCTZFNzJGNTUwMjI5RENEMTcw
MEIzRTE1MSAvKiBFeHRlbnNpb25zR0xBTkdMRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lv
bnNHTEFOR0xFLmggKi87IH07CiAJCTZFNzJGNTUxMjI5RENEMUEwMEIzRTE1MSAvKiBUZW1wb3Jh
cnlBTkdMRVNldHRpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFMjkwODYzMjI5REI5NzAwMDA5ODZFMiAvKiBUZW1wb3JhcnlBTkdMRVNldHRpbmcu
aCAqLzsgfTsKIAkJNkU4NEU5RTExNzY2OEJGMTAwODE1QjY4IC8qIFJhc3RlclNoYXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTg0RTlERjE3NjY4
QkFEMDA4MTVCNjggLyogUmFzdGVyU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk2RThBQ0RFRDIzMzQ1Q0JDMDAyNEFBRjUgLyogV2ViR0xD
b21wcmVzc2VkVGV4dHVyZUVUQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU4QUNERUIyMzM0NUNBRjAwMjRBQUY1IC8qIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVFVEMuaCAqLzsgfTsKQEAgLTIyMjAsNyArMjIyMCw3IEBACiAJCTdDMkZBNjEyMUVBOTVB
M0MwMEEwMzEwOCAvKiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMkZBNjEwMUVBOTVBMzIwMEEwMzEw
OCAvKiBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzMwRDk4NDFGODE1QUVDMDAyNjgzNTYgLyog
SlNBYm9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMzBEOTgwMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5o
ICovOyB9OwogCQk3QzMwRDk4NjFGODE1QUVDMDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzMEQ5ODExRjgx
NUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuaCAqLzsgfTsKLQkJN0MzMzBBMDIxREY4RkFD
NjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzMzBBMDExREY4RkFDNjAwRDMzOTVD
IC8qIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdDMzMwQTAyMURGOEZBQzYwMEQzMzk1QyAvKiBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0Nv
bnRleHRHTEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3QzMzMEEwODFERjlGOTUxMDBEMzM5NUMgLyogSlNQb3NpdGlvbk9wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzMw
QTA2MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0aW9ucy5oICovOyB9OwogCQk3QzNB
OTFFNjFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNBOTFFNTFDOTYzQjg4MDBE
MUE3RTMgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MzQjc5NzExOTA4NzU3QjAwQjQ3QTJEIC8qIFVz
ZXJNZXNzYWdlSGFuZGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzNCNzk2RjE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVy
LmNwcCAqLzsgfTsKQEAgLTQyNDIsNyArNDI0Miw2IEBACiAJCUQwNUNFRDJBMEE0MEJCMkMwMEM1
QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI4MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9j
a0NvbW1hbmQuaCAqLzsgfTsKIAkJRDA2QzBEOEYwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92ZUZv
cm1hdENvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQwNkMwRDhEMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggKi87
IH07CiAJCUQwN0RFQUJBMEEzNjU1NEEwMENBMzBGOCAvKiBJbnNlcnRMaXN0Q29tbWFuZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA3REVBQjgwQTM2
NTU0QTAwQ0EzMEY4IC8qIEluc2VydExpc3RDb21tYW5kLmggKi87IH07Ci0JCUQwODQzQTRCMjBG
RUJFM0QwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwODQzQTRBMjBGRUJFM0QwMEZFODYw
RSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMDg2RkU5ODA5RDUzQUFCMDA1QkM3NEQgLyogVW5s
aW5rQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDA4NkZFOTYwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuaCAqLzsgfTsKIAkJ
RDA4QjAwRTQyMEEyODI1OTAwMDRCQzBBIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RDLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEEyMEQ1NDIw
OTJBMEE2MDBFMEMyNTkgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEMuaCAqLzsgfTsKIAkJ
RDBBM0E3MzExNDA1QTM5ODAwRkI4RUQzIC8qIFJlc291cmNlTG9hZGVyT3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDBBM0E3MzAxNDA1QTM5
ODAwRkI4RUQzIC8qIFJlc291cmNlTG9hZGVyT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MDAzLDggKzcwMDIsOCBAQAogCQkzMTM1
OTEwNTFFN0REQzYwMDBGMzA2MzAgLyogUlRDU2lnbmFsaW5nU3RhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDU2lnbmFsaW5nU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzEzNTkxMEMxRTdERENCNjAwRjMwNjMwIC8qIFJUQ0J1bmRsZVBvbGlj
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENCdW5kbGVQb2xpY3kuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEzQkNFMUIyMzVFM0JEQjAwRkMzOUU1IC8q
IEVsZW1lbnRDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1l
bnRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxM0RFODZEMjNBOTY5
NjYwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHQzREJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RCYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzEzREU4NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNz
Q29udGV4dDNEQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHQzREJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzEzREU4NkQy
M0E5Njk2NjAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dEdMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzEzREU4NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29u
dGV4dEdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4
dEdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNDAzNzk3MTI0QkVBN0YwMEFG
NDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJDb3JlTW90aW9uTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTQwMzc5ODEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlTW90aW9uTWFu
YWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE0MDM3OTkxMjRCRUE3RjAw
QUY0MEU0IC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERldmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03MDg5LDYgKzcwODgsNyBAQAogCQkzMTk4NDgwMDFBMUQ4MTY3
MDBBMTMzMTggLyogQW5pbWF0aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFu
aW1hdGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE5ODQ4MDMx
QTFFNkI1RDAwQTEzMzE4IC8qIEpTQW5pbWF0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNBbmltYXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxOTg0ODA0MUExRTZCNUQwMEExMzMxOCAvKiBKU0FuaW1hdGlvbkV2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQW5pbWF0aW9uRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE5QTcyODcyM0MyNjdFNzAwODUzNTND
IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE5QUUwNjExNDJENkIyNDAwNjU2M0ExIC8qIFN0eWxlRmls
dGVyRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUZp
bHRlckRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTlBRTA2MjE0MkQ2
QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0eWxlRmlsdGVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMTlCREU0RjFFN0E4NThBMDBCQTI5NkMgLyogSlNSVENJY2VUcmFuc3BvcnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNSVENJY2VUcmFuc3BvcnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE0MSw3ICs3MTQxLDcgQEAKIAkJMzFBNzk1
QzMxODg4QjcyNDAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBBTkdMRUluc3RhbmNlZEFycmF5cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxQTc5NUM0MTg4OEJBRDEwMDM4MkY5MCAvKiBKU0FOR0xFSW5zdGFuY2Vk
QXJyYXlzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQU5HTEVJ
bnN0YW5jZWRBcnJheXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUE3OTVD
NTE4ODhCQUQxMDAzODJGOTAgLyogSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FOR0xFSW5zdGFuY2VkQXJyYXlzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxQUI0RkZGMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGlj
c0NvbnRleHQzRElPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHQzRElPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMUFCNEZGRjEy
Mjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQzBGRjFCMEU0Q0VCNkUwMDdENkZFNSAv
KiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxQzBGRjFDMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMUMwRkYxRDBFNENFQjZFMDA3RDZGRTUg
LyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktp
dEFuaW1hdGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2OTQs
OCArNzY5NCw4IEBACiAJCTQ0Qzk5MTlFMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRoZW1lSU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEQ4REE5ODEzOTU0NUJFMDAzMzdCNzUgLyogU1ZH
TVBhdGhFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdNUGF0aEVsZW1lbnQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEQ4REE5QTEzOTU0NUNEMDAzMzdC
NzUgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDREQUI1QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0NERBQjVCMDE1QTYy
MzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RTg4RTRDMjM2OTEyOEEwMDlC
NDg0NyAvKiBIaWdobGlnaHRNYXAuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhpZ2hsaWdo
dE1hcC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RTg4RTREMjM2OTEyOEIw
MDlCNDg0NyAvKiBIaWdobGlnaHRSYW5nZUdyb3VwLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBIaWdobGlnaHRSYW5nZUdyb3VwLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDRFODhFNTAyMzZBNTZBQzAwOUI0ODQ3IC8qIEhpZ2hsaWdodE1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIaWdobGlnaHRNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4OTIsNyAr
Nzg5Miw3IEBACiAJCTQ5QzdCOUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR0xUZXh0dXJlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QzYxMDQyRDMyRjAwMDlENDQ3IC8q
IFdlYkdMVGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHTFRl
eHR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QzcxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xU
ZXh0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5RkIxMDQyRDM2
NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ5QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QkE4QzEwNDJGNUIxMDAwOUQ0
NDcgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RvY3VtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdHJpeDNEVHJhbnNm
b3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlENURDMjgw
RjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTMwLDcgKzc5MzAsNyBAQAogCQk0OUVFRDE0
QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDE0
QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZDN0E0RjE0NDRB
RjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGlj
c0NvbnRleHQzRENvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZG
QkYzRDExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJHTExheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RkZCRjNFMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViR0xMYXllci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNEEwREEyRkMxMjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVk
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtQXNz
b2NpYXRlZEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI1OCwx
NSArOTI1OCwxNSBAQAogCQk2RTBCOTA2ODIzMjFBNjhEMDA2MjIzQjIgLyogV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUVUQzEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RTBFNTY5OTE4M0JGRkU2MDBFMEU4RDUgLyogRmxvYXRSb3VuZGVkUmVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFJvdW5kZWRSZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUwRTU2OUExODNCRkZFNjAwRTBFOEQ1IC8q
IEZsb2F0Um91bmRlZFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxv
YXRSb3VuZGVkUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTIxQzZCRjEx
MjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250
ZXh0M0RDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHQzRENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyMUM2QkYx
MTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8q
IEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0R0xDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZFMjQyQjI2MjMzNTkzRDcwMDJDQURENCAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmNw
cDsgcGF0aCA9IC4uLy4uLy4uLy4uLy4uLy4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkUyNDJCMjgyMzM1OTNENzAwMkNBREQ0IC8qIEpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUVUQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVFVEMuaDsgcGF0aCA9IC4uLy4uLy4uLy4uLy4uLy4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMjQyQjI5MjMzNTkzRDcwMDJDQURENCAvKiBKU1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVFVEMxLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUVUQzEuY3BwOyBwYXRoID0gLi4vLi4vLi4vLi4vLi4vLi4vV2ViS2l0QnVp
bGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEMxLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUyNDJCMkEyMzM1OTNEODAw
MkNBREQ0IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5oOyBwYXRoID0gLi4vLi4vLi4vLi4vLi4vLi4v
V2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVFVEMxLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFMjdGMjQyMjI5
OENFNEIwMEYxRjYzMiAvKiBHcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTI3RjI0MzIyOUM5Rjg0MDBGMUY2MzIgLyogRXh0
ZW5zaW9uczNEQU5HTEUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXh0ZW5zaW9uczNEQU5HTEUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RTI3
RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0ZW5zaW9uczNEQU5HTEUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNEQU5HTEUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhp
Y3NDb250ZXh0R0xBTkdMRS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFMjdG
MjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25zR0xBTkdMRS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFMjdGMjQ0MjI5QzlGOEQwMEYxRjYzMiAvKiBFeHRlbnNp
b25zR0xBTkdMRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25z
R0xBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTI5MDg2MTIyOURCOTUw
MDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZFMjkwODYzMjI5REI5NzAwMDA5ODZFMiAvKiBUZW1wb3JhcnlB
TkdMRVNldHRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcG9yYXJ5
QU5HTEVTZXR0aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFM0ZBRDM2MTQ3
MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTI4OCw5ICs5Mjg4LDkgQEAK
IAkJNkU0QUJDRDMxMzhFQTBCNzAwNzFEMjkxIC8qIEpTSFRNTFVua25vd25FbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFVua25vd25FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNEU5MUFBMTBGN0ZCMzEwMEEyNzc5QyAvKiBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkU0RTkxQUIxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5z
aW9uczNET3BlbkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
dGVuc2lvbnMzRE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFNjdE
MkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRl
bnNpb25zR0xPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXh0ZW5zaW9uc0dMT3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2
N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTE9wZW5HTC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zR0xPcGVuR0wuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnNH
TC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zR0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4NEU5REUxNzY2OEJBRDAwODE1QjY4IC8qIFJh
c3RlclNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJhc3Rl
clNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4NEU5REYxNzY2OEJB
RDAwODE1QjY4IC8qIFJhc3RlclNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJhc3RlclNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFOEFDREU5
MjMzNDVDQUYwMDI0QUFGNSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTgyNSw3ICs5ODI1LDcgQEAKIAkJN0MzMEQ5ODAxRjgxNUFDMTAw
MjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQWJvcnRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDMzBEOTgxMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MzMEQ5ODIxRjgxNUFDMjAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAv
KiBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzMw
QTAzMURGOUU5NUIwMEQzMzk1QyAvKiBQb3NpdGlvbk9wdGlvbnMuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBvc2l0aW9u
T3B0aW9ucy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzMwQTA1MURGOUY5
NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1Bvc2l0aW9uT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDMzMwQTA2MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Bvc2l0aW9uT3B0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA2ODksNyArMTA2ODksNyBAQAogCQk5
MzMwOURENTA5OUU2NDkxMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyYXBDb250ZW50c0luRHVtbXlT
cGFuQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUVBMDA5OUVC
NzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2hhcmVkVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlF
QTEwOTlFQjc4QzAwNTZFNTgxIC8qIFRpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTMz
MkFCM0QxNjUxNUQ3NzAwRDgyN0VDIC8qIEdyYXBoaWNzQ29udGV4dDNETkVPTi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE5FT04uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzMkFCM0QxNjUxNUQ3NzAwRDgyN0VDIC8qIEdyYXBo
aWNzQ29udGV4dEdMTkVPTi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFw
aGljc0NvbnRleHRHTE5FT04uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMkFC
ODcxNjUzQTk3OTAwRDgyN0VDIC8qIEZFQmxlbmRORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZFQmxlbmRORU9OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzMzJBQjg4MTY1M0E5NzkwMEQ4MjdFQyAvKiBGRUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFQ29tcG9zaXRlQXJpdGhtZXRpY05F
T04uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMkFCODkxNjUzQTk3OTAwRDgy
N0VDIC8qIEZFR2F1c3NpYW5CbHVyTkVPTi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGRUdhdXNzaWFuQmx1ck5FT04uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwOTMxLDcgKzEwOTMxLDcgQEAKIAkJOTUyMDc2MDAxRjI2NzVGOTAwN0QyQUFCIC8qIENhbGxU
cmFjZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFRyYWNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk1MjA3NjAxMUYyNjc1RjkwMDdEMkFBQiAvKiBDYWxsVHJhY2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxUcmFjZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTUyMDc2MDIxRjI2NzVGOTAwN0QyQUFCIC8qIENhbGxUcmFjZXJUeXBlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYWxsVHJhY2VyVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJOTZBQkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTZB
QkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzUx
MDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUG9saWN5Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MDU5OTc2MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbGljeUNoZWNrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwQjcyODkxNDRGRkFDNjAwRjAwQTM3IC8qIEV2ZW50SW50
ZXJmYWNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFdmVudEludGVyZmFj
ZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRXZlbnRJbnRlcmZhY2VzLmg7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNDIzNyw4ICsxNDIzNyw3IEBA
CiAJCUQwN0RFQUI4MEEzNjU1NEEwMENBMzBGOCAvKiBJbnNlcnRMaXN0Q29tbWFuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zZXJ0TGlzdENvbW1hbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NDAzM0EyMjFDQkY1NDAwMDA3MjA1IC8qIEdQVUJ1
ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlEMDg0MDMzRDIyMUUxODY0MDAwMDcyMDUgLyogV2ViR1BVQmluZEdy
b3VwRGVzY3JpcHRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHUFVCaW5kR3JvdXBEZXNj
cmlwdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDA4NDNBNEEyMEZFQkUz
RDAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RDA4NDNBNEMyMEZFQzE2NTAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlEMDg0M0E0QzIwRkVDMTY1MDBGRTg2MEUgLyogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQwODVFNjRBMjIzNkRFQUUwMEMzRTFFMiAvKiBHUFVCaW5kR3JvdXBNZXRhbC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEdQVUJpbmRHcm91cE1ldGFsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlEMDg2RkU5NjA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtDb21tYW5kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODZGRTk3MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtD
b21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua0Nv
bW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1OTEsNyArMTU1OTAs
NyBAQAogCQlGQjkyREY0OTE1RkVEMDg3MDA5OTQ0MzMgLyogQ2xpcFBhdGhPcGVyYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcFBhdGhPcGVyYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkI5NjVCODExN0JCQjVGOTAwRTgzNUI5IC8qIENT
U0ZpbHRlckltYWdlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjk2NUI4
MjE3QkJCNjJDMDBFODM1QjkgLyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQkQ2
QUY4MjE1RUYyMUEzMDA4QjcxMTAgLyogQmFzaWNTaGFwZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQmFzaWNTaGFwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGQkQ2QUY4MzE1RUYyMUEzMDA4QjcxMTAgLyogQmFzaWNTaGFwZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzaWNTaGFwZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkJENkFGODQxNUVGMjFENDAwOEI3MTEwIC8qIEJhc2ljU2hhcGVG
dW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzaWNT
aGFwZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODQ0Myw3
ICsxODQ0Miw3IEBACiAJCQkJMEY5N0E2NTcxNTVEQTgxRTAwRkFERDRDIC8qIERpc3BsYXlSZWZy
ZXNoTW9uaXRvcklPUy5tbSAqLywKIAkJCQkxQUMyRDg5QzFCMUUyOTFGMDBENTJFODcgLyogRm9u
dEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIuaCAqLywKIAkJCQkzNzI3REZENDE0MkFBRTQ1MDBENDQ5
Q0IgLyogRm9udENhY2hlSU9TLm1tICovLAotCQkJCTMxQUI0RkZGMTIyODc4QTIwMDFBN0RCMCAv
KiBHcmFwaGljc0NvbnRleHQzRElPUy5oICovLAorCQkJCTMxQUI0RkZGMTIyODc4QTIwMDFBN0RC
MCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmggKi8sCiAJCQkJRkVEMTNEM0YwQ0VB
OTM5NDAwRDg5NDY2IC8qIEljb25JT1MubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlvczsKQEAg
LTIwOTEzLDkgKzIwOTEyLDkgQEAKIAkJNkUyN0YyNDEyMjk4Q0UyRTAwRjFGNjMyIC8qIGFuZ2xl
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2RTI3RjI0
MzIyOUM5Rjg0MDBGMUY2MzIgLyogRXh0ZW5zaW9uczNEQU5HTEUuY3BwICovLAotCQkJCTZFMjdG
MjQ0MjI5QzlGOEQwMEYxRjYzMiAvKiBFeHRlbnNpb25zM0RBTkdMRS5oICovLAotCQkJCTZFMjdG
MjQyMjI5OENFNEIwMEYxRjYzMiAvKiBHcmFwaGljc0NvbnRleHQzREFOR0xFLmNwcCAqLywKKwkJ
CQk2RTI3RjI0MzIyOUM5Rjg0MDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUuY3BwICovLAor
CQkJCTZFMjdGMjQ0MjI5QzlGOEQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5oICovLAor
CQkJCTZFMjdGMjQyMjI5OENFNEIwMEYxRjYzMiAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmNw
cCAqLywKIAkJCQk2RTI5MDg2MTIyOURCOTUwMDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5HTEVTZXR0
aW5nLmNwcCAqLywKIAkJCQk2RTI5MDg2MzIyOURCOTcwMDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5H
TEVTZXR0aW5nLmggKi8sCiAJCQkpOwpAQCAtMjE3MjAsNyArMjE3MTksNyBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk5MzMyQUI4NjE2NTNBOTc5MDBEODI3RUMg
LyogZmlsdGVycyAqLywKLQkJCQk5MzMyQUIzRDE2NTE1RDc3MDBEODI3RUMgLyogR3JhcGhpY3ND
b250ZXh0M0RORU9OLmggKi8sCisJCQkJOTMzMkFCM0QxNjUxNUQ3NzAwRDgyN0VDIC8qIEdyYXBo
aWNzQ29udGV4dEdMTkVPTi5oICovLAogCQkJKTsKIAkJCXBhdGggPSBhcm07CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMjQ4ODQsOSArMjQ4ODMsOSBAQAogCQkJCUIyNzUzNTJDMEIw
NTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkQwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCAqLywKIAkJCQlCQzUzQzYwQTBEQTU2Q0YxMDAy
MUVCNUQgLyogR3JhZGllbnRDRy5jcHAgKi8sCi0JCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAy
IC8qIEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwICovLAogCQkJCUIyRUQ5NzcwMEIxRjU1Q0UwMDI1
N0QwRiAvKiBHcmFwaGljc0NvbnRleHRDRy5jcHAgKi8sCiAJCQkJOTM0OTA3RTMxMjVCQkJDODAw
N0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCisJCQkJNkUyMUM2QzExMTI2MzM5OTAw
QTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlE
RUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAogCQkJ
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKIAkJCQky
MjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLApAQCAt
MjQ5OTQsNyArMjQ5OTMsNyBAQAogCQkJCTJEMjlFQ0M0MTkyRUNDODMwMDk4NEI3OCAvKiBEaXNw
bGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmggKi8sCiAJCQkJMzFEQ0RGNDExREExQzQ1NDAwRUE1
QjkzIC8qIEV4dGVuZGVkQ29sb3IuY3BwICovLAogCQkJCTMxRENERjQyMURBMUM0NTQwMEVBNUI5
MyAvKiBFeHRlbmRlZENvbG9yLmggKi8sCi0JCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRC5oICovLAorCQkJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRl
bnNpb25zR0wuaCAqLywKIAkJCQlCMjc1MzUzQTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2lu
dC5jcHAgKi8sCiAJCQkJQjI3NTM1M0IwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuaCAq
LywKIAkJCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAqLywK
QEAgLTI1MDU1LDEzICsyNTA1NCw5IEBACiAJCQkJMkQyRkMwNTcxNDYwQ0Q2RjAwMjYzNjMzIC8q
IEdyYWRpZW50SW1hZ2UuaCAqLywKIAkJCQlCMkEwMTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3Jh
cGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlCMkEwMTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3Jh
cGhpY3NDb250ZXh0LmggKi8sCi0JCQkJNkUyMUM2QkYxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBo
aWNzQ29udGV4dDNELmNwcCAqLywKLQkJCQk0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3Jh
cGhpY3NDb250ZXh0M0QuaCAqLywKLQkJCQk3QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3Jh
cGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggKi8sCi0JCQkJMzEzREU4NkQyM0E5Njk2NjAwOEZD
NDdCIC8qIEdyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAgKi8sCi0JCQkJMzEzREU4NkYyM0E5Njk2
NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dDNEQmFzZS5oICovLAotCQkJCUQwODQzQTRDMjBG
RUMxNjUwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwICovLAotCQkJCUQw
ODQzQTRBMjBGRUJFM0QwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCAqLywK
KwkJCQkzMTNERTg2RDIzQTk2OTY2MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuY3BwICov
LAorCQkJCTMxM0RFODZGMjNBOTY5NjcwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oICov
LAorCQkJCTdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMuaCAqLywKIAkJCQkwRjAwMTI0MDFGQUQ4ODEwMDA1MzFENzYgLyogR3JhcGhpY3NDb250
ZXh0SW1wbC5jcHAgKi8sCiAJCQkJMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllci5jcHAgKi8sCkBAIC0yNTI5NSw4ICsyNTI5MCw4IEBACiAJCQkJMUMxMkFDMjgxRUU3
NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwICovLAog
CQkJCTFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNv
cmVUZXh0LmggKi8sCiAJCQkJQjUzMjBENkExMjJBMjRFOTAwMkQxNDQwIC8qIEZvbnRQbGF0Zm9y
bURhdGFDb2NvYS5tbSAqLywKLQkJCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhp
Y3NDb250ZXh0M0RDb2NvYS5tbSAqLywKIAkJCQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyog
R3JhcGhpY3NDb250ZXh0Q29jb2EubW0gKi8sCisJCQkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4
IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gKi8sCiAJCQkJQ0RBNTk1OTYyMTQ2
REY3ODAwQTg0MTg1IC8qIEhFVkNVdGlsaXRpZXNDb2NvYS5oICovLAogCQkJCUNEQTU5NTk3MjE0
NkRGNzgwMEE4NDE4NSAvKiBIRVZDVXRpbGl0aWVzQ29jb2EubW0gKi8sCiAJCQkJMkQwQjRBQTkx
OERBMUNDRDAwNDM0REUxIC8qIElPU3VyZmFjZS5oICovLApAQCAtMjg1MjgsMTIgKzI4NTIzLDE2
IEBACiAJCUZCQzIyMEREMTIzN0ZCRUIwMEJDRjc4OCAvKiBvcGVuZ2wgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovLAotCQkJCTZFNjdEMkE1MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLywKLQkJCQk0NERBQjVBRjE1QTYyMzU4MDA5
N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLywKLQkJCQk0NERBQjVCMDE1
QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8sCi0JCQkJRkJD
MjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCAqLywK
LQkJCQk5NkFCQTQyMjE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwICovLAorCQkJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25z
R0xPcGVuR0wuY3BwICovLAorCQkJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNp
b25zR0xPcGVuR0wuaCAqLywKKwkJCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5z
aW9uc0dMT3BlbkdMQ29tbW9uLmNwcCAqLywKKwkJCQk0NERBQjVCMDE1QTYyMzU4MDA5N0MxRTQg
LyogRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmggKi8sCisJCQkJNkUyMUM2QkYxMTI2MzM4NTAw
QTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcCAqLywKKwkJCQk0OUM3QjlGQjEw
NDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCAqLywKKwkJCQlGQkMy
MjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCAq
LywKKwkJCQk5NkFCQTQyMjE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xDb21tb24uY3BwICovLAorCQkJCUQwODQzQTRDMjBGRUMxNjUwMEZFODYwRSAvKiBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwICovLAorCQkJCTMxOUE3Mjg3MjNDMjY3RTcwMDg1
MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCAqLywKIAkJCQk3QTI5QkE2
OTE4N0I3ODFDMDBGMjlDRUIgLyogVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAgKi8sCiAJCQkJ
N0EyOUJBNjcxODdCNzMyMjAwRjI5Q0VCIC8qIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCAqLywK
IAkJCSk7CkBAIC0yOTg0NiwxMCArMjk4NDUsMTAgQEAKIAkJCQk5M0QxOTYzMTFENkNBQjc2MDBG
QzdFNDcgLyogRXhjZXB0aW9uT3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzN0ZCMzQ1MUY5RUEw
NkQwMEQwRkMzMSAvKiBFeHRlbmRhYmxlTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMURDREY0NDFEQTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNkU3MkY1NTAyMjlEQ0QxNzAwQjNFMTUxIC8qIEV4dGVuc2lvbnMzREFO
R0xFLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0
ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLywKLQkJCQk0NERBQjVCMjE1QTYyMzU4MDA5
N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk2
RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLywK
KwkJCQk2RTcyRjU1MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0ZW5zaW9uc0dMQU5HTEUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0xP
cGVuR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFFNCAvKiBF
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYw
MzZFRDIwMEVFMkFGQiAvKiBFeHRlbnNpb25TdHlsZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUM0MzA0QjExOTFBQzkwODAwMEUyQkMwIC8qIEVYVFNoYWRlclRleHR1cmVMT0QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc3Mjg2OTRGMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmls
dGVyQW5pc290cm9waWMuaCBpbiBIZWFkZXJzICovLApAQCAtMzAwNDUsMTIgKzMwMDQ0LDEyIEBA
CiAJCQkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50QXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkQ0ODFGMDQxNDZCNUM2QjAwQUE3ODM0IC8qIEdyYWRpZW50SW1h
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTAxNUE5MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFw
aGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0
NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0MzMzBBMDIxREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMzEzREU4NzAyM0E5Njk3MzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzFBQjUwMDAxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBo
aWNzQ29udGV4dDNESU9TLmggaW4gSGVhZGVycyAqLywKLQkJCQlEMDg0M0E0QjIwRkVCRTNEMDBG
RTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzQ5MDdFNDEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MzMzBBMDIxREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5RkMxMDQyRDM2
NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMUFCNTAwMDEyMjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lP
Uy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBQ0I5RTky
Mzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8q
IEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzM1OTQsNyArMzM1OTMsNyBAQAog
CQkJCUJFMjM0ODBDMThBOTg3MEIwMEU0QjZFOCAvKiBEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQ0NjNDRjY4MjIxMkZBNjgwMDFBODU3NyAvKiBEYXRhRGV0ZWN0b3JzQ29yZVNvZnRM
aW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxOEYxRDU0RjVGQjAwREQ3QzY4IC8qIEVt
cHR5R2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTZFNzJGNTRDMjI5RENE
MEMwMEIzRTE1MSAvKiBFeHRlbnNpb25zM0RBTkdMRS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2
RTcyRjU0QzIyOURDRDBDMDBCM0UxNTEgLyogRXh0ZW5zaW9uc0dMQU5HTEUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0NFNkNCRkQxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUE0QkIwQTE5NTRENjE2MDBGQTVDMkUgLyogR2FtZXBh
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MThGNEZGNjE5NENBNEU2MDA4MUJBQUUgLyogR2Ft
ZXBhZEJ1dHRvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNjAyLDggKzMzNjAxLDcgQEAKIAkJ
CQk1MUE5RDlFOTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE1QkUxOTExRDU0RjVGQjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92aWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4Mzc5NjRDRjFGOERCNjlEMDAyMThFQTAgLyogR2VvbG9j
YXRpb25Qb3NpdGlvbkRhdGFJT1MubW0gaW4gU291cmNlcyAqLywKLQkJCQk2RTIxQzZDMDExMjYz
Mzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NkU3MkY1NEUyMjlEQ0QxMDAwQjNFMTUxIC8qIEdyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNkU3MkY1NEUyMjlEQ0QxMDAwQjNFMTUxIC8qIEdyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzRTUxMEIxOERGOEYzNTAwQzEx
MkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlBOEQwNkIzQTBBMjY1
RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQzkwMEMz
MTk0M0MwRkMwMDg2MjVCNSAvKiBIVFRQSGVhZGVyTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAppbmRleCA2NDMxMjFiNTliMmNm
MjkyYmE2MGY1ODgwMjQwY2Y4NzNjMTE4YmNhLi5jYzkzYWRhOTVhNWIzZGFkZDc2NTU0YTk3ZmEw
YWVlOTU3ZTllNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAK
QEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnBhaW50Q3VycmVudEZy
YW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29ucwogICAgIHBsYXllci0+
cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoY29udGV4dCwgZGVzdFJlY3QpOwogfQogCi1ib29s
IEhUTUxWaWRlb0VsZW1lbnQ6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKK2Jvb2wgSFRNTFZpZGVvRWxlbWVudDo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGZsaXBZKQogewogICAgIGlmICghcGxheWVyKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKaW5kZXggYjNhMDZkZGNm
NmM2YTBhNTRkMmQ3NzljMjk0N2Y1NjI2ZjA0YzA5NC4uNGM4ODIwODQ0ZmE0YzdjOTI1ZDNlOWM2
YzlkZDAyMGEyNDNiNjQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgK
QEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogCiAgICAgLy8gVXNlZCBieSBXZWJHTCB0byBkbyBH
UFUtR1BVIHRleHR1cmVzIGNvcHkgaWYgcG9zc2libGUuCiAgICAgLy8gU2VlIG1vcmUgZGV0YWls
cyBhdCBNZWRpYVBsYXllcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCkgZGVm
aW5lZCBpbiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oLgot
ICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEKiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CisgICAgYm9vbCBjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKIAogICAgIGJvb2wgc2hvdWxkRGlz
cGxheVBvc3RlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZGlzcGxheU1vZGUoKSA9PSBQb3N0ZXIg
fHwgZGlzcGxheU1vZGUoKSA9PSBQb3N0ZXJXYWl0aW5nRm9yVmlkZW87IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IDlmNzhlOGIyYmVjYjE4Yjk4OWY2Mjhk
ZTEzYzEzZWRhOTBiNmIyOTEuLjA5MWEzNjk5MmE5YzM1ZjEzMGY4NWRjYzgxOGY5NTk3ZTI3MmRl
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTE0Nyw3ICsx
NDcsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6
OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAgIGlmICghaW1hZ2VCaXRtYXAtPmJ1ZmZl
cigpKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51bGxwdHIg
fSB9OwogCi0gICAgICAgIGF1dG8qIGdjM2QgPSB3ZWJHTENvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCk7CisgICAgICAgIGF1dG8qIGdjM2QgPSB3ZWJHTENvbnRleHQtPmdyYXBoaWNzQ29udGV4
dEdMKCk7CiAgICAgICAgIGdjM2QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGltYWdl
Qml0bWFwLT5idWZmZXIoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoZSB0cmFuc2ZlciBhbGdv
cml0aG0gcmVxdWlyZXMgdGhhdCB0aGUgY2FudmFzIGVmZmVjdGl2ZWx5CkBAIC0xNTUsOSArMTU1
LDkgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0
cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICAvLyBuZWVkIHRvIGVyYXNlIHdoYXQncyB0
aGVyZS4KIAogICAgICAgICBHQzNEZmxvYXQgY2xlYXJDb2xvcls0XTsKLSAgICAgICAgZ2MzZC0+
Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xv
cik7CisgICAgICAgIGdjM2QtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQ0xF
QVJfVkFMVUUsIGNsZWFyQ29sb3IpOwogICAgICAgICBnYzNkLT5jbGVhckNvbG9yKDAsIDAsIDAs
IDApOwotICAgICAgICBnYzNkLT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVS
X0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgICAgIGdjM2QtPmNsZWFyKEdyYXBoaWNz
Q29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0JV
RkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICAg
ICAgZ2MzZC0+Y2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNv
bG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKIAogICAgICAgICByZXR1cm4geyBXVEZNb3ZlKGltYWdl
Qml0bWFwKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJ
bnN0YW5jZWRBcnJheXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0
YW5jZWRBcnJheXMuY3BwCmluZGV4IDc0MGQ1NGIyNTQ3NWNmNzgzMjQ0NmU3YWI3M2FmY2FjMmVm
MzU4M2IuLjhkNzRlNDA5ODIzNzU2MDAxOGVjMGUzOWE5MWU5NmM3MDFlNzkyYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAK
QEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgogCiAj
aWYgUExBVEZPUk0oR1RLKSB8fCBVU0UoQU5HTEUpCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgi
CisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzgsNyArMzgsNyBAQCBBTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRB
cnJheXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICAgICA6IFdlYkdMRXh0
ZW5zaW9uKGNvbnRleHQpCiB7CiAjaWYgVVNFKEFOR0xFKQotICAgIGNvbnRleHQuZ3JhcGhpY3ND
b250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2luc3Rh
bmNlZF9hcnJheXMiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVu
c2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CiAjZW5k
aWYKIH0KIApAQCAtNTMsMTMgKzUzLDEzIEBAIGJvb2wgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1
cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogewogI2lmIFBMQVRG
T1JNKENPQ09BKQogI2lmIFVTRShBTkdMRSkKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX2luc3RhbmNlZF9h
cnJheXMiKTsKKyAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRl
bnNpb25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAjZWxp
ZiBQTEFURk9STShHVEspCi0gICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+
Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Cisg
ICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1
cHBvcnRzKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0KTsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKaW5kZXggNDJiYjNlMjkzNThh
OGUxMGVkNjgyOTBmMzk2Nzg0OTk4NGZkNTI1MS4uNDEwY2VhNWY0ZGJhNTg2MTQ3ZjgyZWU3OGI1
ZGJhNzk5OTE5N2EwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
VmVydGV4QXJyYXlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09F
U1ZlcnRleEFycmF5T2JqZWN0LmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdF
QkdMKQogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dM
LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTYxLDEzICs2MSwxMyBAQCB2b2lkIE9FU1ZlcnRleEFycmF5T2JqZWN0OjpkZWxl
dGVWZXJ0ZXhBcnJheU9FUyhXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKiBhcnJheQogICAgIGlm
ICghYXJyYXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpICYmIGFycmF5T2JqZWN0ID09IHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCY+KG1fY29udGV4dCkubV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0KQogICAgICAgICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQmPiht
X2NvbnRleHQpLnNldEJvdW5kVmVydGV4QXJyYXlPYmplY3QobnVsbHB0cik7CiAKLSAgICBhcnJh
eU9iamVjdC0+ZGVsZXRlT2JqZWN0KG1fY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAg
ICBhcnJheU9iamVjdC0+ZGVsZXRlT2JqZWN0KG1fY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgp
KTsKIH0KIAogR0MzRGJvb2xlYW4gT0VTVmVydGV4QXJyYXlPYmplY3Q6OmlzVmVydGV4QXJyYXlP
RVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJyYXlPYmplY3QpCiB7CiAgICAgcmV0dXJu
IGFycmF5T2JqZWN0ICYmICFtX2NvbnRleHQuaXNDb250ZXh0TG9zdCgpICYmIGFycmF5T2JqZWN0
LT5oYXNFdmVyQmVlbkJvdW5kKCkKLSAgICAgICAgJiYgbV9jb250ZXh0LmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5T2JqZWN0LT5vYmpl
Y3QoKSk7CisgICAgICAgICYmIG1fY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRl
bnNpb25zKCkuaXNWZXJ0ZXhBcnJheU9FUyhhcnJheU9iamVjdC0+b2JqZWN0KCkpOwogfQogCiB2
b2lkIE9FU1ZlcnRleEFycmF5T2JqZWN0OjpiaW5kVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUyogYXJyYXlPYmplY3QpCkBAIC03NiwxMSArNzYsMTEgQEAgdm9pZCBPRVNW
ZXJ0ZXhBcnJheU9iamVjdDo6YmluZFZlcnRleEFycmF5T0VTKFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMqIGFycmF5T2IKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGFycmF5T2JqZWN0ICYm
IChhcnJheU9iamVjdC0+aXNEZWxldGVkKCkgfHwgIWFycmF5T2JqZWN0LT52YWxpZGF0ZShudWxs
cHRyLCBjb250ZXh0KCkpKSkgewotICAgICAgICBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0Qo
KS0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgbV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvJiBleHRlbnNpb25zID0gbV9jb250ZXh0LmdyYXBoaWNzQ29u
dGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKKyAgICBhdXRvJiBleHRlbnNpb25zID0gbV9jb250
ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICBhdXRvJiBjb250
ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihtX2NvbnRleHQpOwogICAgIGlm
IChhcnJheU9iamVjdCAmJiAhYXJyYXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpICYmIGFycmF5
T2JqZWN0LT5vYmplY3QoKSkgewogICAgICAgICBleHRlbnNpb25zLmJpbmRWZXJ0ZXhBcnJheU9F
UyhhcnJheU9iamVjdC0+b2JqZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAwYjNkYmZmZmUxYjBkYzNm
NTBiMWFiYzE4NTExN2NhMzc2ZjFiZmNhLi5lOTIzMDgzZTIzNGNiYjllODc3MDkyMTFlMjU1MTVj
Zjk4OGJkM2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TDJSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKICNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNs
dWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCkBAIC02Nyw3ICs2Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4gV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgR3JhcGhpY3ND
b250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dD4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2Um
IGNhbnZhcywgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiB7CiAgICAg
YXV0byByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ+KG5ldyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOwog
CkBAIC03Niw3ICs3Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0
PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzCiAgICAgcmV0dXJuIHJl
bmRlcmluZ0NvbnRleHQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250
ZXh0PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBS
ZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4g
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHRyaWJ1dGVzKQogewogICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dChjYW52YXMsIFdURk1vdmUoY29udGV4dCksIGF0dHJpYnV0ZXMpKTsKIApAQCAtODUsMTIgKzg1
LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzCiAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRl
eHQ7CiB9CiAKLVdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQo
Q2FudmFzQmFzZSYgY2FudmFzLCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKK1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFz
QmFzZSYgY2FudmFzLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAg
ICA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoY2FudmFzLCBhdHRyaWJ1dGVzKQogewogfQog
Ci1XZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jh
c2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTD4mJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKICAgICA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoY2FudmFzLCBXVEZNb3ZlKGNv
bnRleHQpLCBhdHRyaWJ1dGVzKQogewogICAgIGluaXRpYWxpemVTaGFkZXJFeHRlbnNpb25zKCk7
CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgY29uc3QgQXJyYXlCdWZmZXJWaWV3JgogewogICAgIGF1dG8g
b3B0aW9uYWxFbGVtZW50U2l6ZSA9IGFycmF5QnVmZmVyVmlld0VsZW1lbnRTaXplKGRhdGEpOwog
ICAgIGlmICghb3B0aW9uYWxFbGVtZW50U2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJidWZmZXJEYXRhIiwgIklu
dmFsaWQgdHlwZSBvZiBBcnJheSBCdWZmZXIgVmlldyIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJidWZmZXJEYXRhIiwg
IkludmFsaWQgdHlwZSBvZiBBcnJheSBCdWZmZXIgVmlldyIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGF1dG8gZWxlbWVudFNpemUgPSBvcHRpb25hbEVsZW1lbnRTaXplLnZhbHVlKCk7
CkBAIC0xNTcsMTMgKzE1NywxMyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBjb25zdCBBcnJheUJ1ZmZlclZpZXcmCiAgICAgICAgIHx8
IGNoZWNrZWRCeXRlTGVuZ3RoLmhhc092ZXJmbG93ZWQoKQogICAgICAgICB8fCBjaGVja2VkQnl0
ZVNyY09mZnNldC51bnNhZmVHZXQoKSA+IGRhdGEuYnl0ZUxlbmd0aCgpCiAgICAgICAgIHx8IGNo
ZWNrZWRCeXRlTGVuZ3RoLnVuc2FmZUdldCgpID4gZGF0YS5ieXRlTGVuZ3RoKCkgLSBjaGVja2Vk
Qnl0ZVNyY09mZnNldC51bnNhZmVHZXQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic3JjT2Zmc2V0
IG9yIGxlbmd0aCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzcmNPZmZz
ZXQgb3IgbGVuZ3RoIGlzIG91dCBvZiBib3VuZHMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGF1dG8gc2xpY2UgPSBVaW50OEFycmF5Ojp0cnlDcmVhdGUoZGF0YS5wb3NzaWJseVNo
YXJlZEJ1ZmZlcigpLCBkYXRhLmJ5dGVPZmZzZXQoKSArIGNoZWNrZWRCeXRlU3JjT2Zmc2V0LnVu
c2FmZUdldCgpLCBjaGVja2VkQnl0ZUxlbmd0aC51bnNhZmVHZXQoKSk7CiAgICAgaWYgKCFzbGlj
ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09G
X01FTU9SWSwgImJ1ZmZlckRhdGEiLCAiQ291bGQgbm90IGNyZWF0ZSBpbnRlcm1lZGlhdGUgQXJy
YXlCdWZmZXJWaWV3Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpPVVRfT0ZfTUVNT1JZLCAiYnVmZmVyRGF0YSIsICJDb3VsZCBub3QgY3JlYXRlIGludGVy
bWVkaWF0ZSBBcnJheUJ1ZmZlclZpZXciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKHRhcmdldCwgQnVmZmVyRGF0YVNv
dXJjZShzbGljZS5nZXQoKSksIHVzYWdlKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxv
bmcgb2Zmc2V0LCBjbwogewogICAgIGF1dG8gb3B0aW9uYWxFbGVtZW50U2l6ZSA9IGFycmF5QnVm
ZmVyVmlld0VsZW1lbnRTaXplKGRhdGEpOwogICAgIGlmICghb3B0aW9uYWxFbGVtZW50U2l6ZSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJidWZmZXJTdWJEYXRhIiwgIkludmFsaWQgdHlwZSBvZiBBcnJheSBCdWZmZXIg
VmlldyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sICJidWZmZXJTdWJEYXRhIiwgIkludmFsaWQgdHlwZSBvZiBBcnJheSBC
dWZmZXIgVmlldyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8gZWxlbWVudFNp
emUgPSBvcHRpb25hbEVsZW1lbnRTaXplLnZhbHVlKCk7CkBAIC0xODgsMTMgKzE4OCwxMyBAQCB2
b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBsb25nIGxvbmcgb2Zmc2V0LCBjbwogICAgICAgICB8fCBjaGVja2VkQnl0ZUxlbmd0aC5oYXNP
dmVyZmxvd2VkKCkKICAgICAgICAgfHwgY2hlY2tlZEJ5dGVTcmNPZmZzZXQudW5zYWZlR2V0KCkg
PiBkYXRhLmJ5dGVMZW5ndGgoKQogICAgICAgICB8fCBjaGVja2VkQnl0ZUxlbmd0aC51bnNhZmVH
ZXQoKSA+IGRhdGEuYnl0ZUxlbmd0aCgpIC0gY2hlY2tlZEJ5dGVTcmNPZmZzZXQudW5zYWZlR2V0
KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgInNyY09mZnNldCBvciBsZW5ndGggaXMgb3V0IG9m
IGJvdW5kcyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAic3JjT2Zmc2V0IG9yIGxlbmd0aCBpcyBv
dXQgb2YgYm91bmRzIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHNsaWNl
ID0gVWludDhBcnJheTo6dHJ5Q3JlYXRlKGRhdGEucG9zc2libHlTaGFyZWRCdWZmZXIoKSwgZGF0
YS5ieXRlT2Zmc2V0KCkgKyBjaGVja2VkQnl0ZVNyY09mZnNldC51bnNhZmVHZXQoKSwgY2hlY2tl
ZEJ5dGVMZW5ndGgudW5zYWZlR2V0KCkpOwogICAgIGlmICghc2xpY2UpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJidWZmZXJT
dWJEYXRhIiwgIkNvdWxkIG5vdCBjcmVhdGUgaW50ZXJtZWRpYXRlIEFycmF5QnVmZmVyVmlldyIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6T1VUX09GX01F
TU9SWSwgImJ1ZmZlclN1YkRhdGEiLCAiQ291bGQgbm90IGNyZWF0ZSBpbnRlcm1lZGlhdGUgQXJy
YXlCdWZmZXJWaWV3Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIwNSwxOSArMjA1
LDE5IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y29weUJ1ZmZlclN1YkRhdGEoR0Mz
RGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICgocmVhZFRhcmdldCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIgJiYgd3JpdGVUYXJnZXQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQotICAgICAgICB8fCAod3JpdGVU
YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSICYmIHJlYWRU
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJjb3B5QnVmZmVyU3ViRGF0YSIsICJFaXRoZXIgYm90aCB0YXJnZXRzIG5lZWQgdG8gYmUg
RUxFTUVOVF9BUlJBWV9CVUZGRVIgb3IgbmVpdGhlciBzaG91bGQgYmUgRUxFTUVOVF9BUlJBWV9C
VUZGRVIuIik7CisgICAgaWYgKChyZWFkVGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVN
RU5UX0FSUkFZX0JVRkZFUiAmJiB3cml0ZVRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVIpCisgICAgICAgIHx8ICh3cml0ZVRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIgJiYgcmVhZFRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlCdWZmZXJTdWJE
YXRhIiwgIkVpdGhlciBib3RoIHRhcmdldHMgbmVlZCB0byBiZSBFTEVNRU5UX0FSUkFZX0JVRkZF
UiBvciBuZWl0aGVyIHNob3VsZCBiZSBFTEVNRU5UX0FSUkFZX0JVRkZFUi4iKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAocmVhZE9mZnNldCA8IDAgfHwgd3JpdGVPZmZzZXQgPCAw
IHx8IHNpemUgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IHJlYWRCdWZmZXIgPSB2YWxpZGF0ZUJ1ZmZl
ckRhdGFQYXJhbWV0ZXJzKCJjb3B5QnVmZmVyU3ViRGF0YSIsIHJlYWRUYXJnZXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiB3cml0ZUJ1
ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImNvcHlCdWZmZXJTdWJEYXRhIiwg
d3JpdGVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiByZWFkQnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygi
Y29weUJ1ZmZlclN1YkRhdGEiLCByZWFkVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6U1RBVElD
X0RSQVcpOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gd3JpdGVCdWZmZXIgPSB2YWxpZGF0ZUJ1
ZmZlckRhdGFQYXJhbWV0ZXJzKCJjb3B5QnVmZmVyU3ViRGF0YSIsIHdyaXRlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHRHTDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghcmVhZEJ1ZmZlciB8fCAhd3Jp
dGVCdWZmZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJJbnZhbGlkIHJlYWRUYXJnZXQg
b3Igd3JpdGVUYXJnZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJJbnZhbGlkIHJlYWRU
YXJnZXQgb3Igd3JpdGVUYXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjI1
LDEyICsyMjUsMTIgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpjb3B5QnVmZmVyU3Vi
RGF0YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cmkKICAgICBDaGVja2VkPEdDM0Rp
bnRwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkV3JpdGVPZmZzZXQod3JpdGVPZmZzZXQpOwog
ICAgIENoZWNrZWQ8R0MzRHNpemVpcHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFNpemUoc2l6
ZSk7CiAgICAgaWYgKGNoZWNrZWRSZWFkT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2Vk
V3JpdGVPZmZzZXQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRTaXplLmhhc092ZXJmbG93ZWQo
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIk9mZnNldCBvciBzaXplIGlzIHRvbyBiaWci
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJPZmZzZXQgb3Igc2l6ZSBpcyB0b28gYmlnIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIXdyaXRlQnVmZmVyLT5hc3NvY2lh
dGVDb3B5QnVmZmVyU3ViRGF0YSgqcmVhZEJ1ZmZlciwgY2hlY2tlZFJlYWRPZmZzZXQudW5zYWZl
R2V0KCksIGNoZWNrZWRXcml0ZU9mZnNldC51bnNhZmVHZXQoKSwgY2hlY2tlZFNpemUudW5zYWZl
R2V0KCkpKSB7Ci0gICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiBy
YW5nZSIpOworICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFu
Z2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjQ4LDI5ICsyNDgsMjkgQEAgdm9p
ZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgbG9uZyBsb25nIHNyY0J5dGUKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIgPSB2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0R0w6OlNUQVRJQ19EUkFXKTsKICAgICBpZiAoIWJ1ZmZlcikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIk5vIFdlYkdMQnVmZmVyIGlzIGJvdW5kIHRvIHRhcmdl
dCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIk5vIFdlYkdMQnVmZmVyIGlzIGJvdW5k
IHRvIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gRklYTUU6IElt
cGxlbWVudCAiSWYgdGFyZ2V0IGlzIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVIsIGFuZCBhbnkg
dHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCBpcyBjdXJyZW50bHkgYWN0aXZlLCBhbiBJTlZBTElE
X09QRVJBVElPTiBlcnJvciBpcyBnZW5lcmF0ZWQuIgogCiAgICAgaWYgKCFkc3REYXRhKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiTnVsbCBkc3REYXRhIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1
ZmZlclN1YkRhdGEiLCAiTnVsbCBkc3REYXRhIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBhdXRvIG9wdGlvbmFsRWxlbWVudFNpemUgPSBhcnJheUJ1ZmZlclZpZXdFbGVtZW50U2l6
ZSgqZHN0RGF0YSk7CiAgICAgaWYgKCFvcHRpb25hbEVsZW1lbnRTaXplKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEJ1ZmZlclN1YkRhdGEiLCAiSW52YWxpZCB0eXBlIG9mIEFycmF5IEJ1ZmZlciBWaWV3Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiSW52YWxpZCB0eXBlIG9mIEFycmF5IEJ1ZmZlciBW
aWV3Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBlbGVtZW50U2l6ZSA9IG9w
dGlvbmFsRWxlbWVudFNpemUudmFsdWUoKTsKICAgICBhdXRvIGRzdERhdGFMZW5ndGggPSBkc3RE
YXRhLT5ieXRlTGVuZ3RoKCkgLyBlbGVtZW50U2l6ZTsKIAogICAgIGlmIChkc3RPZmZzZXQgPiBk
c3REYXRhTGVuZ3RoKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiZHN0T2Zmc2V0IGlz
IGxhcmdlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4iKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJkc3RPZmZzZXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxl
bmd0aCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yODAsMTcgKzI4MCwxNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dEJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc3JjQnl0ZQogICAgIENo
ZWNrZWQ8R0MzRHVpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ29weUxlbmd0aChjb3B5TGVu
Z3RoKTsKICAgICBhdXRvIGNoZWNrZWREZXN0aW5hdGlvbkVuZCA9IGNoZWNrZWREc3RPZmZzZXQg
KyBjaGVja2VkQ29weUxlbmd0aDsKICAgICBpZiAoY2hlY2tlZERlc3RpbmF0aW9uRW5kLmhhc092
ZXJmbG93ZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgImRzdE9mZnNldCArIGNv
cHlMZW5ndGggaXMgdG9vIGhpZ2giKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJkc3RP
ZmZzZXQgKyBjb3B5TGVuZ3RoIGlzIHRvbyBoaWdoIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoY2hlY2tlZERlc3RpbmF0aW9uRW5kLnVuc2FmZUdldCgpID4gZHN0RGF0YUxl
bmd0aCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgImVuZCBvZiB3cml0dGVuIGRlc3Rp
bmF0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZl
clN1YkRhdGEiLCAiZW5kIG9mIHdyaXR0ZW4gZGVzdGluYXRpb24gaXMgcGFzdCB0aGUgZW5kIG9m
IHRoZSBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChzcmNCeXRl
T2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgInNyY0J5dGVPZmZzZXQg
aXMgbGVzcyB0aGFuIDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJzcmNCeXRlT2Zm
c2V0IGlzIGxlc3MgdGhhbiAwIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI5OSwx
NyArMjk5LDE3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyU3ViRGF0
YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNCeXRlCiAgICAgQ2hlY2tlZDxHQzNEaW50
cHRyLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZEVsZW1lbnRTaXplKGVsZW1lbnRTaXplKTsKICAg
ICBhdXRvIGNoZWNrZWRTb3VyY2VFbmQgPSBjaGVja2VkU3JjQnl0ZU9mZnNldCArIGNoZWNrZWRD
b3B5TGVuZ3RoUHRyICogY2hlY2tlZEVsZW1lbnRTaXplOwogICAgIGlmIChjaGVja2VkU291cmNl
RW5kLmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkU291cmNlRW5kLnVuc2FmZUdldCgpID4gYnVm
ZmVyLT5ieXRlTGVuZ3RoKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJQYXJhbWV0
ZXJzIHdvdWxkIHJlYWQgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzb3VyY2UgYnVmZmVyIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09Q
RVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiUGFyYW1ldGVycyB3b3VsZCByZWFkIG91dHNp
ZGUgdGhlIGJvdW5kcyBvZiB0aGUgc291cmNlIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBGSVhNRTogQ29hbGVzY2UgbXVsdGlwbGUgZ2V0
QnVmZmVyU3ViRGF0YSgpIGNhbGxzIHRvIHVzZSBhIHNpbmdsZSBtYXAoKSBjYWxsCi0gICAgdm9p
ZCogcHRyID0gbV9jb250ZXh0LT5tYXBCdWZmZXJSYW5nZSh0YXJnZXQsIGNoZWNrZWRTcmNCeXRl
T2Zmc2V0LnVuc2FmZUdldCgpLCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KGNoZWNrZWRDb3B5
TGVuZ3RoUHRyLnVuc2FmZUdldCgpICogY2hlY2tlZEVsZW1lbnRTaXplLnVuc2FmZUdldCgpKSwg
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BUF9SRUFEX0JJVCk7CisgICAgdm9pZCogcHRyID0gbV9jb250
ZXh0LT5tYXBCdWZmZXJSYW5nZSh0YXJnZXQsIGNoZWNrZWRTcmNCeXRlT2Zmc2V0LnVuc2FmZUdl
dCgpLCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KGNoZWNrZWRDb3B5TGVuZ3RoUHRyLnVuc2Fm
ZUdldCgpICogY2hlY2tlZEVsZW1lbnRTaXplLnVuc2FmZUdldCgpKSwgR3JhcGhpY3NDb250ZXh0
R0w6Ok1BUF9SRUFEX0JJVCk7CiAgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihkc3REYXRh
LT5iYXNlQWRkcmVzcygpKSArIGRzdERhdGEtPmJ5dGVPZmZzZXQoKSArIGRzdE9mZnNldCAqIGVs
ZW1lbnRTaXplLCBwdHIsIGNvcHlMZW5ndGggKiBlbGVtZW50U2l6ZSk7CiAgICAgaWYgKCFtX2Nv
bnRleHQtPnVubWFwQnVmZmVyKHRhcmdldCkpCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAi
RmFpbGVkIHdoaWxlIHVubWFwcGluZyBidWZmZXIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0
YSIsICJGYWlsZWQgd2hpbGUgdW5tYXBwaW5nIGJ1ZmZlciIpOwogI2VuZGlmCiAgICAgbV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKIH0KQEAgLTMyOSwzOSArMzI5
LDM5IEBAIHN0YXRpYyBib29sIGlzUmVuZGVyYWJsZUludGVybmFsZm9ybWF0KEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0KQogewogICAgIC8vIE9wZW5HTCBFUyAzOiBpbnRlcm5hbGZvcm1hdCBtdXN0
IGJlIGEgY29sb3ItcmVuZGVyYWJsZSwgZGVwdGgtcmVuZGVyYWJsZSwgb3Igc3RlbmNpbC1yZW5k
ZXJhYmxlIGZvcm1hdCwgYXMgc2hvd24gaW4gVGFibGUgMSBiZWxvdy4KICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
MTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkcxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
MTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMlVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMy
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9DT01QT05FTlQyNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9DT01QT05FTlQzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVO
Q0lMODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyVUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzg6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Ukc4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
NTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkE4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQTE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2SToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5D
SUxfSU5ERVg4OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzczLDE0ICszNzMsMTQgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Z2V0SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzMKICAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUykgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW50ZXJu
YWxmb3JtYXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgIGlmIChw
bmFtZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFUykgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW50ZXJuYWxmb3Jt
YXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKICAgICBpbnQgbnVtVmFsdWVzID0gMDsKICNpZiBVU0UoT1BFTkdM
X0VTKQotICAgIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6TlVNX1NBTVBMRV9DT1VOVFMsIDEsICZudW1WYWx1
ZXMpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6TlVNX1NBTVBMRV9DT1VOVFMsIDEsICZudW1WYWx1
ZXMpOwogCiAgICAgR0MzRGludCBwYXJhbXNbbnVtVmFsdWVzXTsKICAgICBtX2NvbnRleHQtPmdl
dEludGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIG51bVZhbHVl
cywgcGFyYW1zKTsKQEAgLTM4OCwyMSArMzg4LDIxIEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmdldEludGVybmFsZm9ybWF0UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
CiAgICAgLy8gT24gZGVza3RvcCBPcGVuR0wgNC4xIG9yIGJlbG93IHdlIG11c3QgZW11bGF0ZSBn
bEdldEludGVybmFsZm9ybWF0aXYuCiAKICAgICAvLyBHTF9JTlZBTElEX0VOVU0gaXMgZ2VuZXJh
dGVkIGlmIHRhcmdldCBpcyBub3QgR0xfUkVOREVSQlVGRkVSLgotICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW50ZXJuYWxmb3JtYXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEludGVybmFsZm9ybWF0UGFyYW1ldGVy
IiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIC8vIEdMX0lOVkFMSURfRU5VTSBpcyBnZW5lcmF0ZWQgaWYgaW50ZXJuYWxmb3JtYXQgaXMg
bm90IGNvbG9yLSwgZGVwdGgtLCBvciBzdGVuY2lsLXJlbmRlcmFibGUuCiAgICAgaWYgKCFpc1Jl
bmRlcmFibGVJbnRlcm5hbGZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEludGVybmFs
Zm9ybWF0UGFyYW1ldGVyIiwgImludmFsaWQgaW50ZXJuYWwgZm9ybWF0Iik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRJbnRl
cm5hbGZvcm1hdFBhcmFtZXRlciIsICJpbnZhbGlkIGludGVybmFsIGZvcm1hdCIpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBWZWN0b3I8R0MzRGludD4gc2FtcGxlczsK
ICAgICAvLyBUaGUgd2F5IEkgdW5kZXJzdGFuZCB0aGlzIGlzIHRoYXQgdGhpcyB3aWxsIHJldHVy
biBhIE1JTklNVU0gbnVtU2FtcGxlcyBmb3IgYWxsIGFjY2VwZXRlZCBpbnRlcm5hbGZvcm1hdHMu
CiAgICAgLy8gSG93ZXZlciwgdGhlIHRydWUgdmFsdWUgb2YgdGhpcyBvbiBzdXBwb3J0ZWQgR0wg
dmVyc2lvbnMgaXMgZ2xlYW5lZCB2aWEgYSBnZXRJbnRlcm5hbGZvcm1hdGl2IGNhbGwgdGhhdCBk
ZXBlbmRzIG9uIGludGVybmFsZm9ybWF0LgotICAgIGludCBudW1TYW1wbGVzTWFzayA9IGdldElu
dFBhcmFtZXRlcihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1NBTVBMRVMpOworICAgIGludCBudW1T
YW1wbGVzTWFzayA9IGdldEludFBhcmFtZXRlcihHcmFwaGljc0NvbnRleHRHTDo6TUFYX1NBTVBM
RVMpOwogCiAgICAgd2hpbGUgKG51bVNhbXBsZXNNYXNrID4gMCkgewogICAgICAgICBzYW1wbGVz
LmFwcGVuZChudW1TYW1wbGVzTWFzayk7CkBAIC00MzksNTcgKzQzOSw1NyBAQCB2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51
bSB0YXJnZXQsIEdDMwogewogICAgIC8vIFRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBX
ZWJHTCAxLCBhbHNvIGFjY2VwdHMgaW50ZXJuYWwgZm9ybWF0IERFUFRIX1NURU5DSUwsCiAgICAg
Ly8gd2hpY2ggc2hvdWxkIGJlIG1hcHBlZCB0byBERVBUSDI0X1NURU5DSUw4IGJ5IGltcGxlbWVu
dGF0aW9ucy4KLSAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1NURU5DSUwpCi0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIMjRfU1RFTkNJTDg7CisgICAgaWYgKGludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9TVEVOQ0lMKQorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4OwogCiAgICAgLy8gRVMgMzogR0xfSU5WQUxJRF9P
UEVSQVRJT04gaXMgZ2VuZXJhdGVkIGlmIGludGVybmFsZm9ybWF0IGlzIGEgc2lnbmVkIG9yIHVu
c2lnbmVkIGludGVnZXIgZm9ybWF0IGFuZCBzYW1wbGVzIGlzIGdyZWF0ZXIgdGhhbiAwLgogICAg
IGlmIChpc0ludGVnZXJGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmIHNhbXBsZXMgPiAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSIsICJtdWx0aXNhbXBsaW5nIG5v
dCBzdXBwb3J0ZWQgZm9yIHRoaXMgZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSIsICJtdWx0aXNhbXBsaW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZm9y
bWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBzd2l0Y2ggKGludGVybmFsZm9y
bWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQThVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMlVJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRzE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlIxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVDMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQy
NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEx
Nkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBf
QTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyVUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHODoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOEk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1
X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
SU5ERVg4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBODoKICAgICAg
ICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1w
bGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQodHJ1ZSk7CiAgICAgICAgIG1fcmVuZGVy
YnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZfU1RFTkNJTDg6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSDI0X1NURU5DSUw4OgogICAgICAgICBpZiAoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQi
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQi
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2NvbnRleHQtPnJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJn
ZXQsIEdDMwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0
KGludGVybmFsZm9ybWF0KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRl
cmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwpAQCAtNTA3LDg4ICs1MDcsODggQEAgdm9p
ZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R0MzRGVudW0gdGFyZ2V0LCBHQzMKIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhTdG9yYWdlRnVuY1BhcmFtZXRlcnMoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2
ZWxzLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgaWYgKHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICBpZiAod2lkdGggPiBtX21heFRleHR1cmVTaXplIHx8IGhl
aWdodCA+IG1fbWF4VGV4dHVyZVNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAidGV4dHVyZSBkaW1l
bnNpb25zIGFyZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSB0ZXh0dXJlIHNpemUiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAidGV4dHVyZSBkaW1lbnNpb25zIGFyZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11
bSB0ZXh0dXJlIHNpemUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVApIHsKKyAgICBp
ZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQKSB7CiAgICAg
ICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAh
PSBoZWlnaHQgZm9yIGN1YmUgbWFwIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0g
aGVpZ2h0IGZvciBjdWJlIG1hcCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICB9IGVsc2UgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgaWYgKGxldmVscyA8IDAgfHwgbGV2ZWxzID4gbV9tYXhUZXh0dXJlTGV2ZWwpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAibnVtYmVyIG9mIGxldmVscyBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgIm51bWJlciBvZiBsZXZlbHMgaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlI4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlIzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRzhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRzE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCODoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOF9T
Tk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTFGX0cxMUZfQjEwRjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I5X0U1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkY6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4
X0FMUEhBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOF9TTk9STToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IxMF9BMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQyNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEgyNF9TVEVOQ0lMODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9T
VEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZG
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkY6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOEk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHODoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Ukc4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukcz
MlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjExRl9HMTFG
X0IxMEY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOV9FNToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
MzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhVSToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0I4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNlVJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMySToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThf
U05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ix
MF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZGOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QThVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEgzMkZfU1RFTkNJTDg6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgIlVua25vd24gaW50ZXJuYWxGb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
VW5rbm93biBpbnRlcm5hbEZvcm1hdCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC02MTEsNyArNjExLDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdG9y
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzMKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHRleHR1cmUtPmltbXV0YWJsZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInRleFN0b3Jh
Z2UyRCIsICJ0ZXhTdG9yYWdlMkQgYWxyZWFkeSBjYWxsZWQgb24gdGhpcyB0ZXh0dXJlIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgInRleFN0b3JhZ2UyRCIsICJ0ZXhTdG9yYWdlMkQgYWxyZWFkeSBjYWxsZWQgb24gdGhp
cyB0ZXh0dXJlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdGV4dHVyZS0+c2V0SW1t
dXRhYmxlKCk7CkBAIC02MjEsOCArNjIxLDggQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzMKICAg
ICB7CiAgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICAgICAgICAgR0MzRGVudW0gdHlwZTsKLSAg
ICAgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhT
dG9yYWdlMkQiLCAiVGV4dHVyZSBoYXMgdW5rbm93biBpbnRlcm5hbCBmb3JtYXQiKTsKKyAgICAg
ICAgaWYgKCFHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9y
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSkpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJ0
ZXhTdG9yYWdlMkQiLCAiVGV4dHVyZSBoYXMgdW5rbm93biBpbnRlcm5hbCBmb3JtYXQiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC02MzEsNyArNjMxLDcgQEAgdm9pZCBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWkgbGV2ZWxzLCBHQzMKIAogICAgICAgICB1bnNpZ25lZCBzaXplOwogICAgICAgICBHQzNE
ZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnNpemUsIG51bGxwdHIpOwot
ICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAg
ICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAidGV4U3RvcmFnZTJEIiwgImJhZCBkaW1lbnNp
b25zIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY0MCwxMyArNjQwLDEz
IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzCiAgICAgICAgIG1lbXNldChkYXRhLmRhdGEoKSwg
MCwgc2l6ZSk7CiAKICAgICAgICAgZm9yIChHQzNEc2l6ZWkgbGV2ZWwgPSAwOyBsZXZlbCA8IGxl
dmVsczsgKytsZXZlbCkgewotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4
U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0
YS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLCBsZXZlbCwgMCwgMCwg
bGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOwotICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2
ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZLCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1h
dCwgdHlwZSwgZGF0YS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3Vi
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCBs
ZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5k
YXRhKCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aLCBsZXZlbCwgMCwgMCwgbGV2
ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOworICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUCkg
eworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0
aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOworICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YLCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQs
IGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+
dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZLCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwg
ZGF0YS5kYXRhKCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCBsZXZlbCwgMCwg
MCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOwor
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwg
bGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOworICAgICAgICAgICAgICAg
IG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aLCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZv
cm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIDAsIDAsIGxldmVs
V2lkdGgsIGxldmVsSGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpKTsKICAgICAgICAg
ICAgIGxldmVsV2lkdGggPSBzdGQ6Om1heCgxLCBsZXZlbFdpZHRoIC8gMik7CkBAIC02NTUsMTUg
KzY1NSwxNSBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3JhZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgIH0KIAogICAgIGZvciAoR0Mz
RHNpemVpIGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7ICsrbGV2ZWwpIHsKLSAgICAgICAgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgewotICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1gsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgICAgICAgICAgdGV4dHVyZS0+
c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1gsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIGxldmVsLCBpbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpOwotICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ksIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1osIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgICAgICAgICAgdGV4dHVyZS0+c2V0
TGV2ZWxJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1os
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUpOworICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8o
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURSk7CisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSk7CisgICAgICAg
ICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSk7CisgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURSk7CisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgbGV2ZWwsIGludGVy
bmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RSk7CisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSk7CisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFKTsKICAgICB9CiB9CiAKQEAgLTg3NywxNyArODc3LDE3IEBAIHZvaWQgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCiB7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtYXNrICYgfihH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKKyAgICBpZiAobWFzayAmIH4oR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
QlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCAiY2xlYXIiLCAiaW52YWxpZCBtYXNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Y29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdy
YXBoaWNzQ29udGV4dDNEKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFy
IiwgcmVhc29uKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHRHTCgpLCAmcmVhc29uKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJlYXNvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0JVRkZFUl9CSVQpICYmIGlzSW50ZWdlckZvcm1hdChtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXIiLCAiY2Fubm90
IGNsZWFyIGFuIGludGVnZXIgYnVmZmVyIik7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQpICYmIGlzSW50
ZWdlckZvcm1hdChtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKSkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
T1BFUkFUSU9OLCAiY2xlYXIiLCAiY2Fubm90IGNsZWFyIGFuIGludGVnZXIgYnVmZmVyIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkK
QEAgLTkzMiwyNSArOTMyLDI1IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0J1
ZmZlcnMoY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVycykKICAgICBjb25zdCBHQzNEZW51
bSogYnVmcyA9IGJ1ZmZlcnMuZGF0YSgpOwogICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcp
IHsKICAgICAgICAgaWYgKG4gIT0gMSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVycyIsICJtb3JlIHRo
YW4gb25lIGJ1ZmZlciIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVycyIsICJtb3JlIHRoYW4gb25lIGJ1
ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChidWZz
WzBdICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLICYmIGJ1ZnNbMF0gIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZmZXJzIiwgIkJBQ0sgb3IgTk9ORSIp
OworICAgICAgICBpZiAoYnVmc1swXSAhPSBHcmFwaGljc0NvbnRleHRHTDo6QkFDSyAmJiBidWZz
WzBdICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QnVmZmVy
cyIsICJCQUNLIG9yIE5PTkUiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAvLyBCZWNhdXNlIHRoZSBiYWNrYnVmZmVyIGlzIHNpbXVsYXRlZCBvbiBhbGwgY3VycmVu
dCBXZWJLaXQgcG9ydHMsIHdlIG5lZWQgdG8gY2hhbmdlIEJBQ0sgdG8gQ09MT1JfQVRUQUNITUVO
VDAuCi0gICAgICAgIEdDM0RlbnVtIHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkJBQ0spID8gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwIDogR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkU7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVu
c2lvbnMoKS5kcmF3QnVmZmVyc0VYVCgxLCAmdmFsdWUpOworICAgICAgICBHQzNEZW51bSB2YWx1
ZSA9IChidWZzWzBdID09IEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLKSA/IEdyYXBoaWNzQ29udGV4
dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCA6IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOworICAgICAg
ICBncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZHJhd0J1ZmZlcnNFWFQoMSwg
JnZhbHVlKTsKICAgICAgICAgc2V0QmFja0RyYXdCdWZmZXIoYnVmc1swXSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKG4gPiBnZXRNYXhEcmF3QnVmZmVycygpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdC
dWZmZXJzIiwgIm1vcmUgdGhhbiBtYXggZHJhdyBidWZmZXJzIik7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZm
ZXJzIiwgIm1vcmUgdGhhbiBtYXggZHJhdyBidWZmZXJzIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBuOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChidWZzW2ldICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FICYmIGJ1
ZnNbaV0gIT0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCArIGkpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnMiLCAiQ09MT1Jf
QVRUQUNITUVOVGkgb3IgTk9ORSIpOworICAgICAgICAgICAgaWYgKGJ1ZnNbaV0gIT0gR3JhcGhp
Y3NDb250ZXh0R0w6Ok5PTkUgJiYgYnVmc1tpXSAhPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwICsgaSkpIHsKKyAgICAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJkcmF3QnVmZmVycyIsICJDT0xPUl9BVFRBQ0hNRU5UaSBvciBOT05FIik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05NjEsMjQgKzk2MSwy
NCBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmRyYXdCdWZmZXJzKGNvbnN0IFZlY3Rv
cjxHQzNEZW51bT4mIGJ1ZmZlcnMpCiB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
QnVmZmVyaXYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsIEludDMyTGlzdCYm
LCBHQzNEdWludCkKIHsKICAgICBzd2l0Y2ggKGJ1ZmZlcikgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SOgogICAg
ICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+PSBnZXRNYXhEcmF3QnVmZmVy
cygpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVyaXYiLCAiYnVmZmVyIGluZGV4IG91dCBvZiByYW5n
ZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcml2IiwgImJ1ZmZlciBpbmRleCBvdXQgb2YgcmFuZ2Ui
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPOiBDYWxs
IGNsZWFyQnVmZmVyaXYsIHJlcXVpcmVzIGdsMy5oIGFuZCBFUzMvZ2wuaAogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUw6CiAgICAgICAgIGlmIChkcmF3YnVmZmVyKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImNsZWFyQnVmZmVyaXYiLCAiYnVmZmVyIGluZGV4IG11c3QgYmUgMCIpOworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjbGVh
ckJ1ZmZlcml2IiwgImJ1ZmZlciBpbmRleCBtdXN0IGJlIDAiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPOiBDYWxsIGNsZWFyQnVmZmVyaXYsIHJlcXVp
cmVzIGdsMy5oIGFuZCBFUzMvZ2wuaAogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXJC
dWZmZXJpdiIsICJidWZmZXIgYXJndW1lbnQgbXVzdCBiZSBDT0xPUiBvciBTVEVOQ0lMIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgImNsZWFyQnVmZmVyaXYiLCAiYnVmZmVyIGFyZ3VtZW50IG11c3QgYmUgQ09MT1Igb3Ig
U1RFTkNJTCIpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC05ODYsMTggKzk4NiwxOCBA
QCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQnVmZmVyaXYoR0MzRGVudW0gYnVm
ZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsCiB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyQnVmZmVydWl2KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVyLCBVaW50MzJM
aXN0JiYsIEdDM0R1aW50KQogewogICAgIHN3aXRjaCAoYnVmZmVyKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1I6
CiAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IGdldE1heERyYXdC
dWZmZXJzKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJ1aXYiLCAiYnVmZmVyIGluZGV4IG91dCBv
ZiByYW5nZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcnVpdiIsICJidWZmZXIgaW5kZXggb3V0IG9m
IHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gVE9E
TzogQ2FsbCBjbGVhckJ1ZmZlcnVpdiwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5oCiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX1NURU5DSUw6CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXJCdWZmZXJ1aXYi
LCAiYnVmZmVyIGFyZ3VtZW50IG11c3QgYmUgQ09MT1IiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXJCdWZmZXJ1
aXYiLCAiYnVmZmVyIGFyZ3VtZW50IG11c3QgYmUgQ09MT1IiKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQpAQCAtMTAwNSwyNCArMTAwNSwyNCBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmNsZWFyQnVmZmVydWl2KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVyLAog
dm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhckJ1ZmZlcmZ2KEdDM0RlbnVtIGJ1ZmZl
ciwgR0MzRGludCBkcmF3YnVmZmVyLCBGbG9hdDMyTGlzdCYmLCBHQzNEdWludCkKIHsKICAgICBz
d2l0Y2ggKGJ1ZmZlcikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SOgogICAgICAgICBpZiAoZHJhd2J1ZmZlciA8
IDAgfHwgZHJhd2J1ZmZlciA+PSBnZXRNYXhEcmF3QnVmZmVycygpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFy
QnVmZmVyZnYiLCAiYnVmZmVyIGluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1
ZmZlcmZ2IiwgImJ1ZmZlciBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPOiBDYWxsIGNsZWFyQnVmZmVyZnYsIHJlcXVp
cmVzIGdsMy5oIGFuZCBFUzMvZ2wuaAogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDoKICAg
ICAgICAgaWYgKGRyYXdidWZmZXIpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIg
aW5kZXggbXVzdCBiZSAwIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVyIGluZGV4
IG11c3QgYmUgMCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8v
IFRPRE86IENhbGwgY2xlYXJCdWZmZXJmdiwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5oCiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUw6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpTVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NU
RU5DSUw6CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIgYXJn
dW1lbnQgbXVzdCBiZSBDT0xPUiBPUiBERVBUSCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcmZ2Iiwg
ImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIENPTE9SIE9SIERFUFRIIik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIH0KQEAgLTEwMzAsMTggKzEwMzAsMTggQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpjbGVhckJ1ZmZlcmZ2KEdDM0RlbnVtIGJ1ZmZlciwgR0MzRGludCBkcmF3YnVmZmVy
LAogdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhckJ1ZmZlcmZpKEdDM0RlbnVtIGJ1
ZmZlciwgR0MzRGludCBkcmF3YnVmZmVyLCBHQzNEZmxvYXQsIEdDM0RpbnQpCiB7CiAgICAgc3dp
dGNoIChidWZmZXIpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CiAgICAgICAgIGlm
IChkcmF3YnVmZmVyKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVyIGluZGV4IG11
c3QgYmUgMCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcmZ2IiwgImJ1ZmZlciBpbmRleCBtdXN0IGJl
IDAiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPOiBD
YWxsIGNsZWFyQnVmZmVyZmksIHJlcXVpcmVzIGdsMy5oIGFuZCBFUzMvZ2wuaAogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUw6CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIgYXJndW1lbnQgbXVz
dCBiZSBERVBUSF9TVEVOQ0lMIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVyIGFy
Z3VtZW50IG11c3QgYmUgREVQVEhfU1RFTkNJTCIpOwogICAgICAgICBicmVhazsKICAgICB9CiB9
CkBAIC0xMjI3LDE2ICsxMjI3LDE2IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZEJ1ZmZlclJhbmdlKEdDM0RlbnVtLCBHQzNEdWludCwgV2ViR0xCdWZmZXIqLCBHCiBXZWJHTEFu
eSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbmRleGVkUGFyYW1ldGVyKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHVpbnQpCiB7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVJfQklORElORzoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUl9TSVpFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSX1NUQVJUOgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW5kZXhlZFBh
cmFtZXRlciIsICJwYXJhbWV0ZXIgbmFtZSBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9T
VEFSVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUl9CSU5ESU5H
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRJbmRl
eGVkUGFyYW1ldGVyIiwgInBhcmFtZXRlciBuYW1lIG5vdCB5ZXQgc3VwcG9ydGVkIik7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRJbmRleGVkUGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEluZGV4ZWRQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiB9CkBAIC0xMjUzLDIwICsxMjUzLDIwIEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmdldEFjdGl2ZVVuaWZvcm1zKFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSwgY29uc3QKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5JRk9STV9UWVBFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOSUZPUk1fU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JMT0NL
X0lOREVYOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fT0ZGU0VUOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQVJSQVlfU1RSSURFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fTUFUUklYX1NUUklERToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTklGT1JNX0lTX1JPV19NQUpPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTklGT1JNX1RZUEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9S
TV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQkxPQ0tfSU5ERVg6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9PRkZTRVQ6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9BUlJBWV9TVFJJREU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5JRk9STV9NQVRSSVhfU1RSSURFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOSUZPUk1fSVNfUk9XX01BSk9SOgogICAgICAgICB7CiAgICAgICAgICAgICBWZWN0
b3I8R0MzRGludD4gcGFyYW1zKHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgMCk7CiAgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm1zKHByb2dyYW0ub2JqZWN0KCksIHVuaWZvcm1J
bmRpY2VzLCBwbmFtZSwgcGFyYW1zKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHBhcmFt
cyk7CiAgICAgICAgIH0KICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QWN0aXZlVW5pZm9ybXMiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0QWN0aXZlVW5pZm9ybXMiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CkBAIC0x
MzE5LDcgKzEzMTksNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVZlcnRl
eEFycmF5KFdlYkdMVmVydGV4QXJyYXlPYmplY3QqIGFycmF5T2JqZQogICAgICAgICBiaW5kVmVy
dGV4QXJyYXkobnVsbHB0cik7IC8vIFRoZSBkZWZhdWx0IFZBTyB3YXMgcmVtb3ZlZCBpbiBPcGVu
R0wgMy4zIGJ1dCBub3QgZnJvbSBXZWJHTCAyOyBiaW5kIHRoZSBkZWZhdWx0IGZvciBXZWJHTCB0
byB1c2UuCiAjZW5kaWYKICAgICAKLSAgICBhcnJheU9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBo
aWNzQ29udGV4dDNEKCkpOworICAgIGFycmF5T2JqZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3ND
b250ZXh0R0woKSk7CiB9CiAKIEdDM0Rib29sZWFuIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omlz
VmVydGV4QXJyYXkoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdCogYXJyYXlPYmplY3QpCkBAIC0xMzM5
LDcgKzEzMzksNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJpbmRWZXJ0ZXhBcnJh
eShXZWJHTFZlcnRleEFycmF5T2JqZWN0KiBhcnJheU9iamVjdAogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgaWYgKGFycmF5T2JqZWN0ICYmIChhcnJheU9iamVjdC0+aXNEZWxldGVkKCkgfHwg
IWFycmF5T2JqZWN0LT52YWxpZGF0ZSgwLCAqdGhpcykgfHwgIW1fY29udGV4dE9iamVjdHMuY29u
dGFpbnMoYXJyYXlPYmplY3QpKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXJyYXlPYmplY3QgJiYgIWFy
cmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSAmJiBhcnJheU9iamVjdC0+b2JqZWN0KCkpIHsK
QEAgLTEzODAsNyArMTM4MCw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEVOQUJMRV9JRl9SRVFV
RVNURUQoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEsIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVy
ZUVUQzEsICJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIsIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVFVEMxOjpzdXBwb3J0ZWQoKnRoaXMpKTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQywgbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMs
ICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiwgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQoKnRoaXMpKTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVE
KFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLCBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RD
LCAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiLCBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQzo6c3VwcG9ydGVkKCp0aGlzKSk7Ci0gICAgRU5BQkxFX0lGX1JFUVVFU1RFRChXZWJHTERl
cHRoVGV4dHVyZSwgbV93ZWJnbERlcHRoVGV4dHVyZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiLCBX
ZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKCpncmFwaGljc0NvbnRleHQzRCgpKSk7CisgICAg
RU5BQkxFX0lGX1JFUVVFU1RFRChXZWJHTERlcHRoVGV4dHVyZSwgbV93ZWJnbERlcHRoVGV4dHVy
ZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiLCBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKCpn
cmFwaGljc0NvbnRleHRHTCgpKSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChXZWJHTERlYnVn
UmVuZGVyZXJJbmZvLCBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8sICJXRUJHTF9kZWJ1Z19yZW5k
ZXJlcl9pbmZvIiwgdHJ1ZSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChXZWJHTERlYnVnU2hh
ZGVycywgbV93ZWJnbERlYnVnU2hhZGVycywgIldFQkdMX2RlYnVnX3NoYWRlcnMiLCBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJf
c291cmNlIl9zKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNDE5LDcgKzE0MTksNyBAQCBP
cHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9y
dGVkRXh0ZW5zaW9ucygpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJHTF9jb21w
cmVzc2VkX3RleHR1cmVfcHZydGMiX3MpOwogICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQzo6c3VwcG9ydGVkKCp0aGlzKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX3MzdGMiX3MpOwotICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3Vw
cG9ydGVkKCpncmFwaGljc0NvbnRleHQzRCgpKSkKKyAgICBpZiAoV2ViR0xEZXB0aFRleHR1cmU6
OnN1cHBvcnRlZCgqZ3JhcGhpY3NDb250ZXh0R0woKSkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
IldFQkdMX2RlcHRoX3RleHR1cmUiX3MpOwogICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2xvc2Vf
Y29udGV4dCJfcyk7CiAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5z
bGF0ZWRfc2hhZGVyX3NvdXJjZSJfcykpCkBAIC0xNDMyLDEyICsxNDMyLDEyIEBAIE9wdGlvbmFs
PFZlY3RvcjxTdHJpbmc+PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRl
bnNpb25zKCkKIHN0YXRpYyBib29sIHZhbGlkYXRlRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNobWVu
dChHQzNEZW51bSYgYXR0YWNobWVudCkKIHsKICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkJBQ0s6CiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVk
IG9uIGFsbCBjdXJyZW50IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBD
T0xPUl9BVFRBQ0hNRU5UMC4KLSAgICAgICAgYXR0YWNobWVudCA9IEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMDsKKyAgICAgICAgYXR0YWNobWVudCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMDsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTE0NTAsMTIgKzE0NTAsMTIgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmcKICAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyVGFyZ2V0KGZ1bmN0
aW9uTmFtZSwgdGFyZ2V0KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHRh
cmdldEZyYW1lYnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFN
RUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgOiBtX2ZyYW1lYnVmZmVyQmluZGlu
ZzsKKyAgICBhdXRvIHRhcmdldEZyYW1lYnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6UkVBRF9GUkFNRUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgOiBtX2Zy
YW1lYnVmZmVyQmluZGluZzsKIAogICAgIGlmICghdGFyZ2V0RnJhbWVidWZmZXIpIHsKICAgICAg
ICAgLy8gT3BlbkdMIEVTIDM6IERlZmF1bHQgZnJhbWVidWZmZXIgaXMgYm91bmQuCiAgICAgICAg
IGlmICghdmFsaWRhdGVEZWZhdWx0RnJhbWVidWZmZXJBdHRhY2htZW50KGF0dGFjaG1lbnQpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIH0KICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CkBAIC0xNDY3LDIwICsx
NDY3LDIwIEBAIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnCiAKICAgICBhdXRvIG9iamVjdCA9IG1h
a2VSZWZQdHIodGFyZ2V0RnJhbWVidWZmZXItPmdldEF0dGFjaG1lbnRPYmplY3QoYXR0YWNobWVu
dCkpOwogICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOwot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAg
aWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFw
aGljc0NvbnRleHRHTDo6Tk9ORSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBzd2l0
Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9SRURfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX0dSRUVOX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVO
VF9UWVBFOiB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9SRURfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0dSRUVOX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9U
WVBFOiB7CiAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgICAgICBtX2NvbnRleHQtPmdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5h
bWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKQEAgLTE0ODksNDEgKzE0ODksNDEg
QEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmcKICAgICAKICAgICBpZiAob2JqZWN0LT5pc1RleHR1
cmUoKSkgewogICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
KTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUpOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgogICAg
ICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUm
Pigqb2JqZWN0KSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5D
T0RJTkc6IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElO
RzogewogICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVu
dCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0K
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVyZSBhdHRhY2htZW50Iik7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VS
VChvYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwogICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX1RZUEU6Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6
UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXImPigqb2JqZWN0KSk7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5D
T0RJTkcgOiB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQ09MT1JfRU5DT0RJTkcgOiB7CiAgICAgICAgICAgICBhdXRvJiByZW5kZXJCdWZm
ZXIgPSByZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyJj4oKm9iamVjdCk7CiAgICAg
ICAgICAgICBhdXRvIGZvcm1hdCA9IHJlbmRlckJ1ZmZlci5nZXRJbnRlcm5hbEZvcm1hdCgpOwot
ICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4
Ci0gICAgICAgICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVT
U0VEX1NSR0I4X0VUQzIKLSAgICAgICAgICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDCi0gICAgICAgICAgICAgICAg
fHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhS
T1VHSF9BTFBIQTFfRVRDMikgewotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0IpOworICAgICAgICAgICAgaWYgKGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4CisgICAgICAgICAgICAgICAgfHwg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1NSR0I4X0VUQzIKKyAgICAg
ICAgICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0VUQzJfRUFDCisgICAgICAgICAgICAgICAgfHwgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMikgewor
ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250
ZXh0R0w6OlNSR0IpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CiAg
ICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNo
bWVudCIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xNTM3LDM2ICsxNTM3LDM2IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0CiBib29sIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJUYXJnZXQoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQpCiB7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpEUkFXX0ZSQU1FQlVGRkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFQURfRlJBTUVCVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19GUkFNRUJVRkZFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSOgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTm9uRGVmYXVsdEZyYW1lYnVmZmVyQXR0YWNo
bWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiB7CiAg
ICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICYmIGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxH
QzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29s
b3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR3JhcGhpY3NDb250
ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwICYmIGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNE
ZW51bT4oR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JB
dHRhY2htZW50cygpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNo
bWVudCIpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogR0MzRGludCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycygpCiB7CiAgICAgaWYgKCFtX21heERyYXdCdWZmZXJz
KQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
RFJBV19CVUZGRVJTLCAmbV9tYXhEcmF3QnVmZmVycyk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9EUkFXX0JVRkZFUlMsICZtX21heERyYXdC
dWZmZXJzKTsKICAgICByZXR1cm4gbV9tYXhEcmF3QnVmZmVyczsKIH0KIApAQCAtMTU3NCw3ICsx
NTc0LDcgQEAgR0MzRGludCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFj
aG1lbnRzKCkKIHsKICAgICAvLyBEcmF3QnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNI
TUVOVFMgPT0gTUFYX0RSQVdfQlVGRkVSUwogICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRz
KQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
RFJBV19CVUZGRVJTLCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX0RSQVdfQlVGRkVSUywgJm1fbWF4
Q29sb3JBdHRhY2htZW50cyk7CiAgICAgcmV0dXJuIG1fbWF4Q29sb3JBdHRhY2htZW50czsKIH0K
IApAQCAtMTU4Miw1OCArMTU4Miw1OCBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcgogewogICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
dGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1
ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBo
aWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAi
aW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fcmVu
ZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IxMF9BMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMlVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RzE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkExNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOEk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUxfSU5ERVg4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FM
UEhBODoKICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICAgICAgbV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKHRydWUpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJp
bmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9T
VEVOQ0lMODoKICAgICAgICAgaWYgKCFpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVN
LCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwpAQCAtMTY0
Miw3ICsxNjQyLDcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJT
dG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXIKICAgICAgICAgbV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQg
aW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRl
cm5hbGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGFwcGx5U3RlbmNpbFRl
c3QoKTsKQEAgLTE2NTQsMTMgKzE2NTQsMTMgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOwogICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOgogICAgICAgICBp
c1ZhbGlkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICghaXNWYWxpZCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiaGludCIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlkIHRhcmdl
dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQs
IG1vZGUpOwpAQCAtMTY3MCw5NyArMTY3MCw5NyBAQCBHQzNEZW51bSBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpiYXNlSW50ZXJuYWxGb3JtYXRGcm9tSW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaQog
ewogICAgIC8vIEhhbmRsZXMgc2l6ZWQsIHVuc2l6ZWQsIGFuZCBjb21wcmVzc2VkIGludGVybmFs
IGZvcm1hdHMuCiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4X1NOT1JNOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1IxMV9F
QUM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9TSUdORURfUjExX0VB
QzoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQ7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFRF9JTlRFR0VSOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHODoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkY6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzoKLSAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpSRzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRzMyVUk6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdF
UjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TVBSRVNTRURfU1JHQjhfRVRDMjoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOEk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2SToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMlVJOgot
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQThfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEEx
X0VUQzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0VUQzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJF
U1NFRF9SR0JBOF9FVEMyX0VBQzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjEwX0EyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgotICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQyNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQzMkY6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5UOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJ
TDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZfU1RFTkNJTDg6Ci0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlI4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkY6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01Q
UkVTU0VEX1IxMV9FQUM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9T
SUdORURfUjExX0VBQzoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlI4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2SToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJOgorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk06CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukcz
MkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzoKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpSRzsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOFVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMySToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzMyVUk6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6UkdfSU5URUdFUjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkNPTVBSRVNTRURfU1JHQjhfRVRDMjoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0I7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOEk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNlVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IzMlVJOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VS
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThfU05PUk06CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhf
QUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkY6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRI
Uk9VR0hfQUxQSEExX0VUQzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NF
RF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzoKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEzMlVJOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RF
TkNJTDg6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkFMUEhBOgogICAgICAgICByZXR1cm4gaW50ZXJuYWxmb3JtYXQ7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORTsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogICAg
IH0KIH0KIAogYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojppc0ludGVnZXJGb3JtYXQoR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChiYXNlSW50ZXJuYWxGb3JtYXRG
cm9tSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVEX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5U
RUdFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkVEX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzcxLDMyOSArMTc3MSwzMjkgQEAgV2ViR0xBbnkg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQogICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVf
VEVYVFVSRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfVEVYVFVSRToKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgogICAgICAgICByZXR1cm4g
Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xG
bG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TFBIQV9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBX0JJVFM6CiAgICAg
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5hbHBoYSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVJfQklORElORzoKICAgICAgICAg
cmV0dXJuIG1fYm91bmRBcnJheUJ1ZmZlcjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORDoKICAgICAgICAgcmV0dXJu
IGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EX0NPTE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0NPTE9SOgog
ICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QkxFTkRfRFNUX0FMUEhBOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RT
VF9SR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRFNUX1JHQjoKICAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpCTEVORF9FUVVBVElPTl9BTFBIQToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9F
UVVBVElPTl9SR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRVFVQVRJT05f
UkdCOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpCTEVORF9TUkNfQUxQSEE6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25l
ZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRf
U1JDX1JHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9TUkNfUkdCOgogICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpC
TFVFX0JJVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0NMRUFSX1ZBTFVFOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xG
bG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9XUklURU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfV1JJVEVN
QVNLOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKICAg
ICAgICAgcmV0dXJuIFVpbnQzMkFycmF5Ojp0cnlDcmVhdGUobV9jb21wcmVzc2VkVGV4dHVyZUZv
cm1hdHMuZGF0YSgpLCBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5zaXplKCkpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpDVUxMX0ZBQ0U6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0VfTU9ERToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpDVUxMX0ZBQ0VfTU9ERToKICAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
VVJSRU5UX1BST0dSQU06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VSUkVOVF9QUk9H
UkFNOgogICAgICAgICByZXR1cm4gbV9jdXJyZW50UHJvZ3JhbTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0JJVFM6CiAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRl
cy5kZXB0aCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gZ2V0SW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9W
QUxVRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DTEVBUl9WQUxVRToKICAg
ICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9GVU5DOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0ZVTkM6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfUkFOR0U6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJy
YXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RF
U1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfVEVTVDoKICAgICAgICAgcmV0
dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1dSSVRFTUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9X
UklURU1BU0s6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RElUSEVSOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElO
RzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOgogICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZST05UX0ZBQ0U6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJ
TlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CiAg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpHUkVFTl9CSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1B
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X0ZPUk1BVDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToK
ICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TElORV9XSURUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5F
X1dJRFRIOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CiAgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZF
Ul9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9SRU5ERVJCVUZGRVJfU0la
RToKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhU
VVJFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RFWFRVUkVfU0laRToK
ICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpNQVhfVkFSWUlOR19WRUNUT1JTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgogICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgogICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZJRVdQT1JUX0RJTVM6CiAgICAgICAgIHJl
dHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJ
R05NRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBBQ0tfQUxJR05NRU5UOgogICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpQT0xZR09OX09GRlNFVF9GQUNUT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZJ
TEw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKICAg
ICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX1VOSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlBPTFlHT05fT0ZGU0VUX1VOSVRTOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9CSVRTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9CSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfQklO
RElORzoKICAgICAgICAgcmV0dXJuIG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RU5ERVJFUjoKICAgICAgICAgcmV0dXJuICJXZWJLaXQgV2ViR0wiX3N0cjsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQlVGRkVSUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTQU1QTEVfQlVGRkVSUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX0lOVkVSVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgogICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNBTVBMRV9DT1ZFUkFHRV9WQUxVRToKICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRVM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9Y
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfQk9YOgogICAgICAgICByZXR1
cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNT
T1JfVEVTVDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAg
ICAgcmV0dXJuICJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdy
YXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GQUlMOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKKyAgICAgICAgcmV0dXJuICJX
ZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4
dEdMOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfQkFDS19GQUlMOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QkFDS19GVU5DOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19GVU5D
OgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CiAgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTVEVOQ0lMX0JBQ0tfUkVGOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19XUklURU1BU0s6CiAgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQklUUzoK
ICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLnN0ZW5j
aWwpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxV
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgogICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0ZBSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJ
TF9GQUlMOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX0ZVTkM6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9Q
QVNTX0RFUFRIX0ZBSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9QQVNT
X0RFUFRIX0ZBSUw6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6CiAg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9SRUY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9SRUY6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX1RFU1Q6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZBTFVF
X01BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9WQUxVRV9NQVNLOgog
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfV1JJVEVNQVNLOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVM
X0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1VCUElYRUxfQklUUzoKICAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfQklORElOR18yRDoKICAgICAgICAgcmV0dXJuIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZl
VGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKICAgICAgICAgcmV0dXJuIG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZzsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKICAgICAg
ICAgcmV0dXJuIG1fdW5wYWNrRmxpcFk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKICAgICAgICAgcmV0dXJuIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09M
T1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
UEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6CiAgICAgICAgIHJldHVybiBtX3VucGFj
a0NvbG9yc3BhY2VDb252ZXJzaW9uOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRP
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRU5ET1I6CiAgICAgICAgIHJldHVybiAi
V2ViS2l0Il9zdHI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJTSU9OOgogICAgICAgICByZXR1cm4gIldlYkdMIDIu
MCJfc3RyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlZJRVdQT1JUOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRB
cnJheVBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpV
Tk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKICAgICAgICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVy
SW5mbykgewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICByZXR1cm4gIkFw
cGxlIEdQVSJfc3RyOwogI2Vsc2UKLSAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQtPmdldFN0
cmluZyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVIpOworICAgICAgICAgICAgcmV0dXJuIG1f
Y29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJFUik7CiAjZW5kaWYK
ICAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdF
QkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBl
bmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGNhc2UgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgogICAgICAgICBpZiAobV93ZWJnbERl
YnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5n
KEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1IpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHRH
TDo6VkVORE9SKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBX
RUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9Q
WV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYwogICAgICAgICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMpCi0gICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIoRXh0ZW5zaW9uczNEOjpN
QVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5h
YmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKEV4dGVuc2lvbnNH
TDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90
IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOgogICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfM0RfVEVYVFVSRV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF8z
RF9URVhUVVJFX1NJWkU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9BUlJBWV9URVhUVVJFX0xBWUVSUzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6CiAgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpNQVhfQ09MT1JfQVRUQUNITUVOVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9GUkFHTUVO
VF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0NP
TUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKICAgICAgICAgcmV0dXJuIGdldElu
dDY0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09N
QklORURfVU5JRk9STV9CTE9DS1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0NP
TUJJTkVEX1VOSUZPUk1fQkxPQ0tTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVkVSVEVYX1VO
SUZPUk1fQ09NUE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklO
RURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzoKICAgICAgICAgcmV0dXJuIGdldEludDY0UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRFJBV19CVUZG
RVJTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9EUkFXX0JVRkZFUlM6CiAgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9FTEVNRU5UX0lOREVYOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1B
WF9FTEVNRU5UX0lOREVYOgogICAgICAgICByZXR1cm4gZ2V0SW50NjRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9FTEVNRU5UU19JTkRJQ0VTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9FTEVNRU5UU19JTkRJQ0VTOgogICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfRUxFTUVOVFNfVkVSVElDRVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFY
X0VMRU1FTlRTX1ZFUlRJQ0VTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9DT01Q
T05FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X0NPTVBPTkVOVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9QUk9HUkFNX1RFWEVMX09GRlNFVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfUFJPR1JBTV9URVhFTF9PRkZTRVQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9TQU1QTEVT
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9TQU1QTEVTOgogICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfU0VSVkVSX1dBSVRfVElNRU9VVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhf
U0VSVkVSX1dBSVRfVElNRU9VVDoKICAgICAgICAgcmV0dXJuIGdldEludDY0UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9MT0RfQklBUzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9MT0RfQklBUzoKICAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFW
RURfQ09NUE9ORU5UUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFU
RV9BVFRSSUJTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfU0VQQVJBVEVfQVRUUklCUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RSQU5TRk9STV9GRUVEQkFD
S19TRVBBUkFURV9DT01QT05FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9U
UkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzoKICAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1VO
SUZPUk1fQkxPQ0tfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVU5JRk9S
TV9CTE9DS19TSVpFOgogICAgICAgICByZXR1cm4gZ2V0SW50NjRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1M6
CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TUFYX1ZBUllJTkdfQ09NUE9ORU5UUzoKICAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9P
VVRQVVRfQ09NUE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVY
X09VVFBVVF9DT01QT05FTlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tT
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6
CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOiAKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzogCiAgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUlOX1BST0dSQU1fVEVYRUxfT0ZGU0VUOgog
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpQQUNLX1JPV19MRU5HVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UEFDS19ST1dfTEVOR1RIOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX1NLSVBfUElYRUxTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlBBQ0tfU0tJUF9QSVhFTFM6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfU0tJ
UF9ST1dTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBBQ0tfU0tJUF9ST1dTOgogICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfSU1BR0VfSEVJR0hUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOUEFDS19JTUFHRV9IRUlHSFQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19ST1dfTEVOR1RIOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19ST1dfTEVOR1RIOgogICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfU0tJUF9JTUFHRVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX1NL
SVBfSU1BR0VTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfU0tJUF9QSVhFTFM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5QQUNLX1NLSVBfUElYRUxTOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfU0tJ
UF9ST1dTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19TS0lQX1JPV1M6CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJBU1RFUklaRVJfRElTQ0FSRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSQVNURVJJWkVSX0RJU0NBUkQ6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09W
RVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNBTVBMRV9DT1ZFUkFHRToKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVE
QkFDS19BQ1RJVkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURC
QUNLX0FDVElWRToKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19QQVVTRUQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRDoKICAg
ICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQ6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVDoKICAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FSUkFZX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VkVSVEVYX0FSUkFZX0JJTkRJTkc6CiAgICAgICAgIGlmIChtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmlzRGVmYXVsdE9iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiBtYWtlUmVmUHRyKHN0YXRpY19jYXN0PFdlYkdMVmVydGV4QXJyYXlPYmplY3Qm
PigqbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RFJBV19CVUZGRVIwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVS
MToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjI6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIzOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRSQVdfQlVGRkVSNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZF
UjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVI2OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSNzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpEUkFXX0JVRkZFUjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZG
RVI5OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMTA6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIxMToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpEUkFXX0JVRkZFUjEyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdf
QlVGRkVSMTM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIxNDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjE1OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSMDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
UkFXX0JVRkZFUjE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIyOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSMzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RFJBV19CVUZGRVI1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSNjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjc6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRSQVdfQlVGRkVSOToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjEw
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSMTE6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIxMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEUkFXX0JVRkZFUjEzOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVG
RkVSMTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIxNToKICAgICAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKICAgICAgICAgcmV0dXJuIG1fYmFj
a0RyYXdCdWZmZXI7IC8vIGVtdWxhdGVkIGJhY2tidWZmZXIKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HOgogICAgICAgICByZXR1cm4gbV9yZWFkRnJh
bWVidWZmZXJCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfUkVBRF9C
VUZGRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVJfQklORElORzogICAK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9CVUZGRVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl9CSU5ESU5HOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQklORElOR18yRF9BUlJBWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0JJTkRJTkdfM0Q6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNG
T1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOSUZPUk1fQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAicGFyYW1ldGVyIG5h
bWUgbm90IHlldCBzdXBwb3J0ZWQiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZ
X1JFQURfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfV1JJVEVfQlVG
RkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJ
Tkc6ICAgCisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfVU5QQUNLX0JVRkZFUl9C
SU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfQlVGRkVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX0JJTkRJTkdfMkRfQVJSQVk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9CSU5ESU5HXzNEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgInBhcmFt
ZXRlciBuYW1lIG5vdCB5ZXQgc3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQpAQCAtMjEyMiwxMyArMjEyMiwxMyBAQCBib29sIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNE
ZW51bSB0eXBlLCB1bnNpZwogICAgIGlmICghbWF4SW5kZXgpIHsKICAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5
cGUgb2YgaW5kZXguCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9CWVRFOgogICAgICAgICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxH
QzNEdWJ5dGU+KGJ1ZmZlciwgMCwgbnVtRWxlbWVudHMpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKICAgICAgICAgICAgIG1heElu
ZGV4ID0gZ2V0TWF4SW5kZXg8R0MzRHVzaG9ydD4oYnVmZmVyLCAwLCBudW1FbGVtZW50cyAvIHNp
emVvZihHQzNEdXNob3J0KSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdD
M0R1aW50PihidWZmZXIsIDAsIG51bUVsZW1lbnRzIC8gc2l6ZW9mKEdDM0R1aW50KSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTIxNTQsMTQgKzIxNTQsMTQgQEAg
Ym9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRp
dmUoR0MzRGVudW0gdHlwZSwgdW5zaWcKIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
VU5DX0FERDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNSU46Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZVTkNfQUREOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZVTkNfU1VCVFJBQ1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1JTjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVg6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0K
QEAgLTIxNjksMTkgKzIxNjksMTkgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMKIGJvb2wgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gY2FwKQogewogICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VM
TF9GQUNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBPTFlHT05fT0ZGU0VUX0ZJTEw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9D
T1ZFUkFHRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJBU1RFUklaRVJfRElTQ0FSRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpCTEVORDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDVUxMX0ZBQ0U6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpESVRIRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9MWUdPTl9PRkZTRVRf
RklMTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJB
R0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkFTVEVS
SVpFUl9ESVNDQVJEOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIGNhcGFiaWxpdHkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCBjYXBhYmlsaXR5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKaW5k
ZXggOTJjMTgzMmI5ZWM5YTMzNWNkOTgwNWQ5MDM5NzUyNDNjMGQzMDJjMS4uY2VkMThjZDRmYThk
YWFkOGMyNDYwYjVhNzljMjEzMzI3Njg1MGIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaApAQCAtNDEsOCArNDEsOCBAQCBj
bGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0OwogY2xhc3MgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKICAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpOwogcHVibGljOgotICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZh
c0Jhc2UmLCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMpOwotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBSZWY8
R3JhcGhpY3NDb250ZXh0M0Q+JiYsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2Fu
dmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIFJl
ZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
KTsKIAogICAgIC8vIEJ1ZmZlciBvYmplY3RzCiAgICAgdXNpbmcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6YnVmZmVyRGF0YTsKQEAgLTIwNiw4ICsyMDYsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkgZmluYWw7CiAKIHByaXZhdGU6
Ci0gICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0
M0RBdHRyaWJ1dGVzKTsKLSAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBS
ZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7Cisg
ICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzKTsKKyAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBSZWY8
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7
CiAKICAgICBib29sIGlzV2ViR0wyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5oCmluZGV4IDY1YzA4
MzQ0OGVmYjJkN2IzNWU1MmZiYTJkYzc0ZjVjZDkyYzdlNDIuLjZmNDNjMDQxMDdiMzYxZDE0Yzk5
OWY2ZDk4YzUwZGM3MDQ1YWYzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQWN0aXZlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQWN0aXZlSW5mby5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuY3BwCmluZGV4IGQ4N2NhZTI1MDYzYzc2YTdmN2QwM2IyNmM4ODIzZjZlNzIyMTc5YzQuLmI4
ZWUyNWZhY2Y2ODUwZjAyZmRkYzQ4Njg2NTJhMGNiNTNjNmY4MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgUmVmPFdlYkdM
QnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0
eCkKIFdlYkdMQnVmZmVyOjpXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBj
dHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiB7Ci0gICAgc2V0T2JqZWN0KGN0eC5n
cmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVCdWZmZXIoKSk7CisgICAgc2V0T2JqZWN0KGN0eC5n
cmFwaGljc0NvbnRleHRHTCgpLT5jcmVhdGVCdWZmZXIoKSk7CiAgICAgY2xlYXJDYWNoZWRNYXhJ
bmRpY2VzKCk7CiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAgV2ViR0xCdWZmZXI6On5XZWJHTEJ1ZmZl
cigpCiAgICAgZGVsZXRlT2JqZWN0KDApOwogfQogCi12b2lkIFdlYkdMQnVmZmVyOjpkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0KQordm9pZCBXZWJHTEJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBj
b250ZXh0M2QtPmRlbGV0ZUJ1ZmZlcihvYmplY3QpOwogfQpAQCAtNjIsNyArNjIsNyBAQCBib29s
IFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhSW1wbChjb25zdCB2b2lkKiBkYXRhLCBH
QzNEc2l6ZWlwdHIgYnl0ZUxlbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2gg
KG1fdGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9C
VUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVI6
CiAgICAgICAgIGlmIChieXRlTGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX2J5dGVMZW5ndGgg
PSBieXRlTGVuZ3RoOwpAQCAtODIsMTggKzgyLDE4IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29j
aWF0ZUJ1ZmZlckRhdGFJbXBsKGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RzaXplaXB0ciBieXRlTGVu
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9lbGVtZW50QXJyYXlCdWZmZXIgPSBudWxs
cHRyOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSOgog
ICAgICAgICBtX2J5dGVMZW5ndGggPSBieXRlTGVuZ3RoOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBkZWZhdWx0OgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIHN3aXRjaCAobV90YXJn
ZXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVGRkVSOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlBJWEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQ
SVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TklGT1JNX0JVRkZFUjoKICAgICAgICAgICAgIG1fYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTM1LDcgKzEzNSw3IEBAIGJv
b2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGFJbXBsKEdDM0RpbnRwdHIgb2Zm
c2V0LCBjb25zdCB2b2lkKiBkYXRhCiAgICAgfQogCiAgICAgc3dpdGNoIChtX3RhcmdldCkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICBjbGVh
ckNhY2hlZE1heEluZGljZXMoKTsKICAgICAgICAgaWYgKGJ5dGVMZW5ndGgpIHsKICAgICAgICAg
ICAgIGlmICghbV9lbGVtZW50QXJyYXlCdWZmZXIpCkBAIC0xNDMsMTcgKzE0MywxNyBAQCBib29s
IFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhSW1wbChHQzNEaW50cHRyIG9mZnNl
dCwgY29uc3Qgdm9pZCogZGF0YQogICAgICAgICAgICAgbWVtY3B5KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihtX2VsZW1lbnRBcnJheUJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldCwgZGF0YSwg
Ynl0ZUxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkFSUkFZX0JVRkZFUjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICNp
ZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBzd2l0Y2ggKG1fdGFyZ2V0KSB7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfUkVBRF9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPUFlfV1JJVEVfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNP
UFlfUkVBRF9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfV1JJ
VEVfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9QQUNLX0JV
RkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfVU5QQUNLX0JVRkZF
UjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVI6CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0xOTQsNyArMTk0
LDcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQ29weUJ1ZmZlclN1YkRhdGEoY29uc3Qg
V2ViR0xCdWZmZXImIHJlYWRCdWZmZXIsIEdDM0QKICAgICB9CiAKICAgICBzd2l0Y2ggKG1fdGFy
Z2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVI6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVI6CiAgICAg
ICAgIGNsZWFyQ2FjaGVkTWF4SW5kaWNlcygpOwogICAgICAgICBpZiAoc2l6ZSkgewogICAgICAg
ICAgICAgaWYgKCFtX2VsZW1lbnRBcnJheUJ1ZmZlcikKQEAgLTIwMiwxNyArMjAyLDE3IEBAIGJv
b2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUNvcHlCdWZmZXJTdWJEYXRhKGNvbnN0IFdlYkdMQnVm
ZmVyJiByZWFkQnVmZmVyLCBHQzNECiAgICAgICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG1fZWxlbWVudEFycmF5QnVmZmVyLT5kYXRhKCkpICsgd3JpdGVPZmZzZXQs
IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihyZWFkQnVmZmVyLmVsZW1lbnRBcnJh
eUJ1ZmZlcigpLT5kYXRhKCkpICsgcmVhZE9mZnNldCwgc2l6ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUjoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBzd2l0
Y2ggKG1fdGFyZ2V0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfUkVB
RF9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfV1JJVEVfQlVG
RkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZFUjoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfUkVBRF9CVUZGRVI6CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfV1JJVEVfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpQSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5JRk9STV9CVUZGRVI6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogI2VuZGlmCkBAIC0yNTgsMTcgKzI1OCwxNyBAQCB2b2lkIFdlYkdMQnVmZmVyOjpzZXRU
YXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBib29sIGZvcldlYkdMMikKICAgICAvLyBJbiBXZWJHTCwg
YSBidWZmZXIgaXMgYm91bmQgdG8gb25lIHRhcmdldCBpbiBpdHMgbGlmZXRpbWUKICAgICBpZiAo
bV90YXJnZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVN
RU5UX0FSUkFZX0JVRkZFUikKKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpB
UlJBWV9CVUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUikKICAgICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7CiAgICAgZWxzZSBpZiAoZm9yV2Vi
R0wyKSB7CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVM
X1BBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBB
Q0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JV
RkZFUjoKICAgICAgICAgICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OwogICAgICAgICB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCmluZGV4IGUzM2Q5NzM3YzM1
OTIzOTgzMmM2ZGE1ZjNmNTgwOGZiNGE2Nzg5MDMuLmJkNDNjZGQwOTk0Nzc3ZGVkNzU3ZWNiODI4
YmE4Nzc3ZDhmOTgzODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIu
aApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xCdWZmZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgR0MzRGVudW0gbV90YXJnZXQgeyAwIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVNUQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVNUQy5jcHAKaW5kZXggMTMyZjNlNjBiN2JhNjMzMWEzOWRkODhiNzYxYjAyYzUw
N2JhZTJjNC4uMWJmZjQzYjc3ZTc4YzhkMTYzOGUyODc5MTcwMDIyY2JjMmVhOGRlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFT
VEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBU1RDLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0j
aW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCIKIApAQCAtMzYsNDEgKzM2LDQxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRl
bnNpb24oY29udGV4dCkKLSAgICAsIG1faXNIRFJTdXBwb3J0ZWQoY29udGV4dC5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0tIUl90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2FzdGNfaGRyIl9zKSkKLSAgICAsIG1faXNMRFJTdXBwb3J0ZWQoY29udGV4dC5ncmFw
aGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0tIUl90ZXh0dXJl
X2NvbXByZXNzaW9uX2FzdGNfbGRyIl9zKSkKKyAgICAsIG1faXNIRFJTdXBwb3J0ZWQoY29udGV4
dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0tIUl90
ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfaGRyIl9zKSkKKyAgICAsIG1faXNMRFJTdXBwb3J0ZWQo
Y29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdM
X0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyIl9zKSkKIHsKLSAgICBjb250ZXh0Lmdy
YXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9LSFJf
dGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hkciJfcyk7Ci0gICAgY29udGV4dC5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfS0hSX3RleHR1cmVf
Y29tcHJlc3Npb25fYXN0Y19sZHIiX3MpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0wo
KS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0tIUl90ZXh0dXJlX2NvbXByZXNz
aW9uX2FzdGNfaGRyIl9zKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4
dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3Rj
X2xkciJfcyk7CiAKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUik7Ci0gICAgY29udGV4dC5hZGRD
b21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RD
XzV4NF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSKTsKLSAgICBjb250ZXh0LmFkZENv
bXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
Nng1X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184
eDVfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4
OF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEw
eDZfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18x
MHgxMF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFIpOwotICAgIGNvbnRleHQuYWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNU
Q18xMngxMl9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSKTsKKyAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FT
VENfNXg0X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRl
bnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIpOworICAgIGNvbnRleHQuYWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNU
Q182eDVfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUik7CisgICAgY29udGV4dC5hZGRD
b21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RD
Xzh4NV9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSKTsKKyAgICBjb250ZXh0LmFkZENv
bXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
OHg4X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSKTsKKyAgICBjb250ZXh0LmFkZENv
bXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
MTB4Nl9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUik7CisgICAgY29udGV4dC5hZGRD
b21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RD
XzEweDEwX0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRl
bnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUik7CisgICAgY29udGV4dC5h
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9B
U1RDXzEyeDEyX0tIUik7CiAgICAgCi0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUik7
Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg1X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUik7Ci0gICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
OHg1X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUik7Ci0gICAgY29udGV4
dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfOHg4X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9L
SFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSKTsKLSAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ18xMHg4X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hS
KTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIpOwotICAgIGNvbnRleHQuYWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FM
UEhBOF9BU1RDXzEyeDEyX0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUik7
CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUik7CisgICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg1X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUik7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
OHg1X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUik7CisgICAgY29udGV4
dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfOHg4X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9L
SFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSKTsKKyAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ18xMHg4X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hS
KTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIpOworICAgIGNvbnRleHQuYWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FM
UEhBOF9BU1RDXzEyeDEyX0tIUik7CiB9CiAKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RDOjp+
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEMoKSA9IGRlZmF1bHQ7CkBAIC05NCw4ICs5NCw4IEBA
IFZlY3RvcjxTdHJpbmc+IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RDOjpnZXRTdXBwb3J0ZWRQ
cm9maWxlcygpCiAKIGJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEM6OnN1cHBvcnRlZChj
b25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogewotICAgIHJldHVybiBj
b250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xf
S0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIiX3MpCi0gICAgICAgIHx8IGNvbnRleHQu
Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9LSFJfdGV4
dHVyZV9jb21wcmVzc2lvbl9hc3RjX2xkciJfcyk7CisgICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9LSFJfdGV4dHVyZV9j
b21wcmVzc2lvbl9hc3RjX2hkciJfcykKKyAgICAgICAgfHwgY29udGV4dC5ncmFwaGljc0NvbnRl
eHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0tIUl90ZXh0dXJlX2NvbXByZXNz
aW9uX2FzdGNfbGRyIl9zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmNwcAppbmRleCAyMTY4ZGEzNWZiYWY2OWM4NDQ4OTQyODcyNjJiYjYxYjBkODc3OGZmLi45Zjgx
ZmIwODFlMTVlOGI2YWU5ZWI3MGI1YWE2ODE3NGM0MmM4OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcApA
QCAtMjksMTggKzI5LDE4IEBACiAKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FNRF9jb21w
cmVzc2VkX0FUQ190ZXh0dXJlIik7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5n
ZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1
cmUiKTsKIAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9B
TFBIQV9BTUQpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQpOworICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX0FUQ19SR0JfQU1EKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0
KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQpOwor
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQpOwogfQogCiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjp+V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQygpID0gZGVmYXVsdDsK
QEAgLTUyLDcgKzUyLDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQzo6Z2V0TmFtZSgpIGNvbnN0CiAKIGJvb2wgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQzo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9u
cygpLnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSIpOworICAgIHJldHVy
biBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygi
R0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUVUQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlRVRDLmNwcAppbmRleCBmNGM5NGE2ZDYzZjQ5YjI2NjgxZGEzNTc2MjViY2Jk
NTFkMWJjNzY0Li5hNmE1NGFhMTUzNzA4NmZlMjlmMWM2MmU3M2E5YjAxMzVhZjNmNzgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
RVRDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlRVRDLmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHTCkKICNpbmNs
dWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25z
M0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDE4ICszNiwxOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDOjpXZWJHTENv
bXByZXNzZWRUZXh0dXJlRVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAg
ICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250
ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2NvbXByZXNz
ZWRfdGV4dHVyZV9ldGMiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4
dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9jb21wcmVzc2VkX3RleHR1cmVfZXRj
Iik7CiAKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SMTFfRUFDKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TSUdORURfUjExX0VBQyk7Ci0gICAgY29u
dGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkcxMV9FQUMpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyk7Ci0gICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9FVEMyKTsK
LSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9FVEMyKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRD
Mik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyKTsKLSAgICBjb250ZXh0
LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
OF9FVEMyX0VBQyk7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDKTsKKyAgICBjb250ZXh0
LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SMTFf
RUFDKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TSUdORURfUjExX0VBQyk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkcxMV9FQUMpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NJR05FRF9SRzExX0VBQyk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCOF9FVEMyKTsKKyAgICBjb250ZXh0LmFkZENv
bXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMy
KTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMik7CisgICAgY29udGV4dC5h
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhf
UFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyk7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDKTsKIH0KIAogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVU
Qzo6fldlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMoKSA9IGRlZmF1bHQ7CkBAIC01OSw3ICs1OSw3
IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEM6OmdldE5hbWUoKSBjb25zdAogCiBib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEM6OnN1
cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogewotICAgIHJldHVy
biBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygi
R0xfQU5HTEVfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpOworICAgIHJldHVybiBjb250ZXh0Lmdy
YXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVfY29t
cHJlc3NlZF90ZXh0dXJlX2V0YyIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
RVRDMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0
dXJlRVRDMS5jcHAKaW5kZXggYmRjM2JlZTBhODc2YWNmNjk4MWIwMDQ4YzY3NTAzZDNjNGNmYmNl
Ni4uZmIzZGZlYWZmYTYwYmY1OGUyYjZkZWI0MTQxNThjZDNmMTllNzg4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEMxLmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHTCkKICNpbmNsdWRlICJX
ZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5oIgogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgi
CisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw5ICszNiw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlRVRDMShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogICAgIDog
V2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNE
KCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9PRVNfY29tcHJlc3NlZF9FVEMx
X1JHQjhfdGV4dHVyZSIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0
ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0
dXJlIik7CiAKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lv
bnMzRDo6RVRDMV9SR0I4X09FUyk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zR0w6OkVUQzFfUkdCOF9PRVMpOwogfQogCiBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlRVRDMTo6fldlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxKCkgPSBkZWZhdWx0OwpAQCAt
NTAsNyArNTAsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlRVRDMTo6Z2V0TmFtZSgpIGNvbnN0CiAKIGJvb2wgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUVUQzE6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQog
ewotICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMo
KS5zdXBwb3J0cygiR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiKTsKKyAgICBy
ZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9y
dHMoIkdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlIik7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwCmluZGV4IDRiZDBhZjQ3NDA5MDQxODM1
NGI2NTYwM2E3YjYwYzVkZmUyZDk4ZjYuLjkzNTk5YWMzYzdlNzliYzA5NjkwMGU3ZmQ0MjFmYzA0
NWQzNGY3ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcApAQCAtMjksNyArMjksNyBAQAogCiAjaW5j
bHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNp
b25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDEyICszNywx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6Oldl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250
ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAgICBjb250ZXh0LmdyYXBo
aWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9JTUdfdGV4
dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0wo
KS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0lNR190ZXh0dXJlX2NvbXByZXNz
aW9uX3B2cnRjIik7CiAKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7Ci0gICAgY29udGV4
dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
X1BWUlRDXzJCUFBWMV9JTUcpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyk7Ci0gICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7
CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYx
X0lNRyk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HKTsKIH0KIAogV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDOjp+V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgPSBkZWZhdWx0
OwpAQCAtNTQsNyArNTQsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEM6OmdldE5hbWUoKSBjb25zdAogCiBib29sIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNv
bnRleHQpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0
ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyIpOwor
ICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5z
dXBwb3J0cygiR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMiKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCmluZGV4IDVkZmYxOTA0ZDc2OTQyMDlj
ZTk5NmZiMDJlZjQ1OWNiNjBhNjIzY2QuLmEzZDE1MWVkOWNhMzZlZDUzMWUxODRmY2JjYTQ1NDBi
ZWQ2MTlhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25z
M0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM3LDE1ICszNywxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6V2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkK
ICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7Ci0gICAgYXV0byYgZXh0ZW5zaW9ucyA9
IGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGF1dG8m
IGV4dGVuc2lvbnMgPSBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMo
KTsKICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNz
aW9uX2R4dDEiKTsKICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX3RleHR1
cmVfY29tcHJlc3Npb25fZHh0MyIpOwogICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1Iik7CiAKLSAgICBjb250ZXh0LmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVCk7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKTsKLSAgICBjb250ZXh0LmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19FWFQpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCk7CisgICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCk7CisgICAgY29udGV4dC5hZGRDb21w
cmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfRVhUKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQpOwogfQogCiBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQzo6fldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgPSBkZWZhdWx0OwpA
QCAtNTcsNyArNTcsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQzo6Z2V0TmFtZSgpIGNvbnN0CiAKIGJvb2wgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0
KQogewotICAgIGF1dG8mIGV4dGVuc2lvbnMgPSBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKTsKKyAgICBhdXRvJiBleHRlbnNpb25zID0gY29udGV4dC5ncmFwaGlj
c0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCk7CiAjaWYgVVNFKEFOR0xFKQogICAgIHJldHVy
biBleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxIikK
ICAgICAgICAgJiYgZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVz
c2lvbl9keHQzIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuaAppbmRleCBlYTY3NDIzOWMwMDA4NmNiODNjMDMzMzZhMWYxNjM3MTBl
YjZlZjljLi45ODhkMzY4MjNkNThjZTFmOWYxNzJjOTU5YWIwN2QxZThiMDM0YzBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5o
CkBAIC0yOSwxMiArMjksMTIgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIFdlYkdMUG93ZXJQ
cmVmZXJlbmNlID0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U7Ci11c2luZyBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzID0gR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzOwordXNpbmcg
V2ViR0xQb3dlclByZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTsK
K3VzaW5nIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgPSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXM7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCmluZGV4IDlkZGVmMTU4Y2QwYWNkZTZiNjhj
YWRkZDJiYzkzY2VkNWE4M2RlZmEuLjQyYjljY2Y0MjNlMjAzMGRmNjRjMWY2NTk0YmFkMzllNWVk
YjliMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dEdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRH
cm91cC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjaW5jbHVkZSAi
V2ViR0xTaGFyZWRPYmplY3QuaCIKIApAQCAtNDQsMTAgKzQ0LDEwIEBAIFdlYkdMQ29udGV4dEdy
b3VwOjp+V2ViR0xDb250ZXh0R3JvdXAoKQogICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMo
KTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0QmIFdlYkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhp
Y3NDb250ZXh0M0QoKQorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIFdlYkdMQ29udGV4dEdyb3Vw
OjpnZXRBR3JhcGhpY3NDb250ZXh0R0woKQogewogICAgIEFTU0VSVCghbV9jb250ZXh0cy5pc0Vt
cHR5KCkpOwotICAgIHJldHVybiAqKCptX2NvbnRleHRzLmJlZ2luKCkpLT5ncmFwaGljc0NvbnRl
eHQzRCgpOworICAgIHJldHVybiAqKCptX2NvbnRleHRzLmJlZ2luKCkpLT5ncmFwaGljc0NvbnRl
eHRHTCgpOwogfQogCiB2b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0R3JvdXAuaAppbmRleCBlYWNkMjJlYzc2M2FlMDNjMjZlMDE0ZjNkNTBm
MDdlZDZiNTkxMzY3Li42M2QxZDI5MDE5YTcxZDc3OGVjZWMzYzkxM2ZiNGYxYWIxYTUyMDViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKQEAg
LTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkT2JqZWN0KFdlYkdMU2hhcmVkT2Jq
ZWN0Jik7CiAgICAgdm9pZCByZW1vdmVPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QmKTsKIAotICAg
IEdyYXBoaWNzQ29udGV4dDNEJiBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYgZ2V0QUdyYXBoaWNzQ29udGV4dEdMKCk7CiAKICAgICB2b2lkIGxv
c2VDb250ZXh0R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2Rl
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVj
dC5jcHAKaW5kZXggNmExYzdhYjI5OTljODQ1Y2U5ZmU0MzEyOTE0MGVjM2NiYmM0MDVlYS4uNDUx
NDEyOGI1MWY4NGViN2M3MGI4MDIxZjU5ZDg3NWQxZjU1OGMxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCkBAIC00NywxNSArNDcs
MTUgQEAgdm9pZCBXZWJHTENvbnRleHRPYmplY3Q6OmRldGFjaENvbnRleHQoKQogewogICAgIGRl
dGFjaCgpOwogICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgZGVsZXRlT2JqZWN0KG1fY29u
dGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIGRlbGV0ZU9iamVjdChtX2NvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dEdMKCkpOwogICAgICAgICBtX2NvbnRleHQtPnJlbW92ZUNvbnRl
eHRPYmplY3QoKnRoaXMpOwogICAgICAgICBtX2NvbnRleHQgPSBudWxscHRyOwogICAgIH0KIH0K
IAotR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdMQ29udGV4dE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBXZWJHTENvbnRleHRPYmpl
Y3Q6OmdldEFHcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4
dCA/IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKSA6IG51bGxwdHI7CisgICAgcmV0dXJu
IG1fY29udGV4dCA/IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0R0woKSA6IG51bGxwdHI7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4
dE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0
LmgKaW5kZXggMzZmMjI0ODUyNDAyZDllYjU4MWZjNTAxMWE1MDg3NzRjYjJiZTZjMS4uYzM4ZTY0
ODcyM2U0N2I1NzIzZjA5MDViODVkYjIxZjM4YjExNTFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsK
IAogLy8gV2ViR0xDb250ZXh0T2JqZWN0IHRoZSBiYXNlIGNsYXNzIGZvciBvYmplY3RzIHRoYXQg
YXJlIG93bmVkIGJ5IGEgc3BlY2lmaWMKQEAgLTU3LDcgKzU3LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICByZXR1cm4gbV9jb250ZXh0OwogICAgIH0KIAotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBn
ZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogZ2V0QUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCmluZGV4IGI4
YTgyMWJiN2VlN2U1NzI0ZjM2YTM4MTdhY2YwMDRlZTRmNDVlZTUuLmM1NTg0OGJmN2Y1NmIwNjdk
ODc0NjZiNDhjODZmYTcxNjNmNDMyYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IldlYkdMRGVidWdTaGFkZXJzLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNs
dWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKIApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBXZWJHTERlYnVnU2hhZGVyczo6V2ViR0xEZWJ1Z1NoYWRlcnMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRl
eHQpCiB7Ci0gICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCku
ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIik7CisgICAg
Y29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxl
ZCgiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIik7CiB9CiAKIFdlYkdMRGVidWdT
aGFkZXJzOjp+V2ViR0xEZWJ1Z1NoYWRlcnMoKSA9IGRlZmF1bHQ7CkBAIC01NCw3ICs1NCw3IEBA
IFN0cmluZyBXZWJHTERlYnVnU2hhZGVyczo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZShXZWJH
TFNoYWRlciYgc2hhZGVyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgaWYgKCFtX2Nv
bnRleHQudmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSIsICZz
aGFkZXIpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9jb250
ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5nZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUoc2hhZGVyLm9iamVjdCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0Lmdy
YXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5nZXRUcmFuc2xhdGVkU2hhZGVyU291
cmNlQU5HTEUoc2hhZGVyLm9iamVjdCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCmlu
ZGV4IDBkMWI3YTc1MWFjZDdhODE0YTRkZTUxM2M5OWYyNjlkNmZhOTBkMDMuLjQ1MzFlOWY2Y2Ex
YWYwNjI4YTQ2ZDdlZGI2YzczNTEwYzg0ODEyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHAKQEAgLTI5LDE1ICsyOSwxNSBAQAogCiAj
aW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdl
YkdMRGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlJiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAgICBjb250
ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJH
TF9PRVNfZGVwdGhfdGV4dHVyZSIpOwotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+
Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FSQl9kZXB0aF90ZXh0dXJlIik7Cisg
ICAgY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5h
YmxlZCgiR0xfT0VTX2RlcHRoX3RleHR1cmUiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4
dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BUkJfZGVwdGhfdGV4dHVy
ZSIpOwogfQogCiBXZWJHTERlcHRoVGV4dHVyZTo6fldlYkdMRGVwdGhUZXh0dXJlKCkgPSBkZWZh
dWx0OwpAQCAtNDcsOSArNDcsOSBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJH
TERlcHRoVGV4dHVyZTo6Z2V0TmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIFdlYkdMRGVwdGhUZXh0
dXJlTmFtZTsKIH0KIAotYm9vbCBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKEdyYXBoaWNz
Q29udGV4dDNEJiBjb250ZXh0KQorYm9vbCBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0KQogewotICAgIEV4dGVuc2lvbnMzRCYgZXh0
ZW5zaW9ucyA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9ucygpOworICAgIEV4dGVuc2lvbnNHTCYgZXh0
ZW5zaW9ucyA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9ucygpOwogICAgIHJldHVybiBleHRlbnNpb25z
LnN1cHBvcnRzKCJHTF9PRVNfZGVwdGhfdGV4dHVyZSIpCiAgICAgICAgIHx8IGV4dGVuc2lvbnMu
c3VwcG9ydHMoIkdMX0FSQl9kZXB0aF90ZXh0dXJlIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAppbmRleCA1MmNlOTZkYWM4OWE0MzcxYzcz
ZWUzM2E1ZjU0N2IwNmNjNDJiN2E4Li4wZjhiOTlkNDI0NGRlM2IyYjgzYTZiZmZlMjI0YThiMjNh
YzY3MTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRo
VGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0
dXJlLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFdlYkdMRGVwdGhU
ZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKICAgICB2aXJ0dWFsIH5XZWJHTERl
cHRoVGV4dHVyZSgpOwogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKEdyYXBoaWNzQ29udGV4
dDNEJik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Jik7CiAKICAgICBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCmluZGV4
IDY1MDlhOTIyNDcyZjFlMDc5YWM5MTEzNGEzZjY5N2RhOGUyYzYzOGUuLmNlMzQ1ZTY5ODJkMzFl
ZmE5M2IzZjkyODE1ZjBjMGQ3MGI3ZWI5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCkBAIC0yOCwxNCArMjgsMTQgQEAKICNpZiBFTkFC
TEUoV0VCR0wpCiAjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgogCi0jaW5jbHVkZSAiRXh0
ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogV2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsK
LSAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRl
eHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVy
cyIpOwogfQogCiBXZWJHTERyYXdCdWZmZXJzOjp+V2ViR0xEcmF3QnVmZmVycygpID0gZGVmYXVs
dDsKQEAgLTQ4LDkgKzQ4LDkgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xE
cmF3QnVmZmVyczo6Z2V0TmFtZSgpIGNvbnN0CiBib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogewogI2lmIFVTRShBTkdM
RSkKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25z
KCkuc3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICByZXR1cm4gY29udGV4dC5n
cmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0VYVF9kcmF3
X2J1ZmZlcnMiKTsKICNlbHNlCi0gICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0Qo
KS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9FWFRfZHJhd19idWZmZXJzIikKKyAgICBy
ZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9y
dHMoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKQogICAgICAgICAmJiBzYXRpc2ZpZXNXZWJHTFJlcXVp
cmVtZW50cyhjb250ZXh0KTsKICNlbmRpZgogfQpAQCAtNjMsMjUgKzYzLDI1IEBAIHZvaWQgV2Vi
R0xEcmF3QnVmZmVyczo6ZHJhd0J1ZmZlcnNXRUJHTChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBi
dWZmZXJzKQogICAgIGNvbnN0IEdDM0RlbnVtKiBidWZzID0gYnVmZmVycy5kYXRhKCk7CiAgICAg
aWYgKCFtX2NvbnRleHQubV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAgICAgICAgaWYgKG4gIT0g
MSkgewotICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnNXRUJHTCIsICJtb3JlIHRoYW4gb25l
IGJ1ZmZlciIpOworICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnNXRUJHTCIsICJtb3JlIHRo
YW4gb25lIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChidWZzWzBdICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLICYmIGJ1ZnNbMF0gIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PTkUpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QnVmZmVy
c1dFQkdMIiwgIkJBQ0sgb3IgTk9ORSIpOworICAgICAgICBpZiAoYnVmc1swXSAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6QkFDSyAmJiBidWZzWzBdICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKSB7
CisgICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnNXRUJHTCIsICJCQUNLIG9yIE5PTkUi
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBCZWNhdXNlIHRo
ZSBiYWNrYnVmZmVyIGlzIHNpbXVsYXRlZCBvbiBhbGwgY3VycmVudCBXZWJLaXQgcG9ydHMsIHdl
IG5lZWQgdG8gY2hhbmdlIEJBQ0sgdG8gQ09MT1JfQVRUQUNITUVOVDAuCi0gICAgICAgIEdDM0Rl
bnVtIHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0spID8gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwIDogR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7
Ci0gICAgICAgIG1fY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCku
ZHJhd0J1ZmZlcnNFWFQoMSwgJnZhbHVlKTsKKyAgICAgICAgR0MzRGVudW0gdmFsdWUgPSAoYnVm
c1swXSA9PSBHcmFwaGljc0NvbnRleHRHTDo6QkFDSykgPyBHcmFwaGljc0NvbnRleHRHTDo6Q09M
T1JfQVRUQUNITUVOVDAgOiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKKyAgICAgICAgbV9jb250
ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5kcmF3QnVmZmVyc0VYVCgx
LCAmdmFsdWUpOwogICAgICAgICBtX2NvbnRleHQuc2V0QmFja0RyYXdCdWZmZXIoYnVmc1swXSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG4gPiBtX2NvbnRleHQuZ2V0TWF4RHJhd0J1ZmZl
cnMoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnNXRUJHTCIsICJtb3JlIHRoYW4g
bWF4IGRyYXcgYnVmZmVycyIpOworICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnNXRUJHTCIs
ICJtb3JlIHRoYW4gbWF4IGRyYXcgYnVmZmVycyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIGZvciAoR0MzRHNpemVpIGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoYnVmc1tpXSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSAmJiBidWZzW2ld
ICE9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQw
X0VYVCArIGkpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZmZXJzV0VCR0wi
LCAiQ09MT1JfQVRUQUNITUVOVGlfRVhUIG9yIE5PTkUiKTsKKyAgICAgICAgICAgIGlmIChidWZz
W2ldICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FICYmIGJ1ZnNbaV0gIT0gc3RhdGljX2Nhc3Q8
R0MzRGVudW0+KEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDBfRVhUICsgaSkpIHsKKyAg
ICAgICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnNXRUJHTCIsICJDT0xPUl9BVFRBQ0hN
RU5UaV9FWFQgb3IgTk9ORSIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtOTIsMTggKzkyLDE4IEBAIHZvaWQgV2ViR0xEcmF3QnVmZmVyczo6
ZHJhd0J1ZmZlcnNXRUJHTChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKQogLy8gc3Rh
dGljCiBib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIHdlYmdsQ29udGV4dCkKIHsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IHdlYmdsQ29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpOworICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0ID0gd2ViZ2xDb250ZXh0LmdyYXBoaWNz
Q29udGV4dEdMKCk7CiAKICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciB3ZSBtYWtlIHN1cmUg
R0xfRVhUX2RyYXdfYnVmZmVycyBpcyBzdXBwb3J0ZWQuCiAgICAgR0MzRGludCBtYXhEcmF3QnVm
ZmVycyA9IDA7CiAgICAgR0MzRGludCBtYXhDb2xvckF0dGFjaG1lbnRzID0gMDsKLSAgICBjb250
ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbWF4
RHJhd0J1ZmZlcnMpOwotICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFY
X0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1heENvbG9yQXR0YWNobWVudHMpOworICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtYXhE
cmF3QnVmZmVycyk7CisgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhf
Q09MT1JfQVRUQUNITUVOVFNfRVhULCAmbWF4Q29sb3JBdHRhY2htZW50cyk7CiAgICAgaWYgKG1h
eERyYXdCdWZmZXJzIDwgNCB8fCBtYXhDb2xvckF0dGFjaG1lbnRzIDwgNCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgUGxhdGZvcm0zRE9iamVjdCBmYm8gPSBjb250ZXh0LT5jcmVhdGVG
cmFtZWJ1ZmZlcigpOwotICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIGZibyk7CisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgZmJvKTsKIAogICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgYnVmZmVyWzRdID0geyAwLCAwLCAwLCAwIH07IC8vIHRleHR1cmVzIGFyZSByZXF1aXJl
ZCB0byBiZSBpbml0aWFsaXplZCBmb3Igb3RoZXIgcG9ydHMuCiAgICAgYm9vbCBzdXBwb3J0c0Rl
cHRoID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9PRVNfZGVwdGhfdGV4
dHVyZSIpCkBAIC0xMTMsMTQgKzExMywxNCBAQCBib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnNhdGlz
Zmllc1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIHdlYgogICAg
IFBsYXRmb3JtM0RPYmplY3QgZGVwdGhTdGVuY2lsID0gMDsKICAgICBpZiAoc3VwcG9ydHNEZXB0
aFN0ZW5jaWwpIHsKICAgICAgICAgZGVwdGhTdGVuY2lsID0gY29udGV4dC0+Y3JlYXRlVGV4dHVy
ZSgpOwotICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgZGVwdGhTdGVuY2lsKTsKLSAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NU
RU5DSUwsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzgsIGJ1ZmZlcik7CisgICAgICAgIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwp
OworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCwgMSwgMSwgMCwgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9J
TlRfMjRfOCwgYnVmZmVyKTsKICAgICB9CiAgICAgUGxhdGZvcm0zRE9iamVjdCBkZXB0aCA9IDA7
CiAgICAgaWYgKHN1cHBvcnRzRGVwdGgpIHsKICAgICAgICAgZGVwdGggPSBjb250ZXh0LT5jcmVh
dGVUZXh0dXJlKCk7Ci0gICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBkZXB0aCk7Ci0gICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9D
T01QT05FTlQsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQsIGJ1ZmZlcik7CisgICAgICAgIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBkZXB0aCk7CisgICAg
ICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAs
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQsIDEsIDEsIDAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQs
IGJ1ZmZlcik7CiAgICAgfQogCiAgICAgVmVjdG9yPFBsYXRmb3JtM0RPYmplY3Q+IGNvbG9yczsK
QEAgLTEyOSwzMCArMTI5LDMwIEBAIGJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2Vi
R0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgd2ViCiAgICAgZm9yIChH
QzNEaW50IGkgPSAwOyBpIDwgbWF4QWxsb3dlZEJ1ZmZlcnM7ICsraSkgewogICAgICAgICBQbGF0
Zm9ybTNET2JqZWN0IGNvbG9yID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwogICAgICAgICBj
b2xvcnMuYXBwZW5kKGNvbG9yKTsKLSAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbG9yKTsKLSAgICAgICAgY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDEsIDEsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgYnVmZmVyKTsKLSAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
Y29sb3IsIDApOwotICAgICAgICBpZiAoY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgY29sb3IpOworICAgICAgICBjb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQSwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9CWVRFLCBidWZmZXIpOworICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdM
OjpDT0xPUl9BVFRBQ0hNRU5UMCArIGksIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBj
b2xvciwgMCk7CisgICAgICAgIGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN1cHBvcnRzRGVwdGgpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBkZXB0aCwgMCk7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAgICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIGRlcHRoLCAwKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUikgIT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgICAgICAgICAg
b2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJE
LCAwLCAwKTsKICAgICAgICAgfQogICAgICAgICBpZiAoc3VwcG9ydHNEZXB0aFN0ZW5jaWwpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOwotICAgICAgICAg
ICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgZGVwdGhTdGVuY2lsLCAwKTsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgZGVwdGhTdGVuY2lsLCAwKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIp
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICAg
ICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCAwKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwLCAwKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIDApOwogICAgICAgICB9CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCmluZGV4
IGZjMGNkZTY2NTcxMDYxYTdkZTE0NmNkZjdkZGQ5ZjVmMWE1NTFkODQuLmI5MzY5Zjg3NjYzOWNj
ZjMyYjljYmM1ZjI4MzVlMjY2YWI5NGMzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoV0VCR0wpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNp
b25zR0wuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldlYkdM
RHJhd0J1ZmZlcnMuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCkBA
IC01MSw5ICs1MSw5IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IG92ZXJyaWRlOwogICAgICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZTsK
ICAgICAgICAgdm9pZCBzZXRJbml0aWFsaXplZCgpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIG9u
RGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhdHRh
Y2goR3JhcGhpY3NDb250ZXh0M0QqLCBHQzNEZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAg
ICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1l
bnQpIG92ZXJyaWRlOworICAgICAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqKSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqLCBHQzNEZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCB1bmF0
dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJy
aWRlOwogCiAgICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudCgpIHsgfTsKIApAQCAt
MTExLDI2ICsxMTEsMjYgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgICAgIG1fcmVuZGVyYnVmZmVy
LT5zZXRJbml0aWFsaXplZCgpOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJB
dHRhY2htZW50OjpvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIHZv
aWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjpvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiBjb250ZXh0KQogICAgIHsKICAgICAgICAgbV9yZW5kZXJidWZmZXItPm9uRGV0
YWNoZWQoY29udGV4dCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFj
aG1lbnQ6OmF0dGFjaChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgR0MzRGVudW0gYXR0YWNo
bWVudCkKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YXR0YWNoKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2htZW50KQogICAgIHsK
ICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QgPSBvYmplY3RPclplcm8obV9yZW5kZXJi
dWZmZXIuZ2V0KCkpOwotICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdCk7CisgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgYXR0YWNobWVudCwg
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgb2JqZWN0KTsKICAgICB9CiAKLSAgICB2
b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6dW5hdHRhY2goR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1
ZmZlckF0dGFjaG1lbnQ6OnVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0
LCBHQzNEZW51bSBhdHRhY2htZW50KQogICAgIHsKICNpZiAhVVNFKEFOR0xFKQotICAgICAgICBp
ZiAoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRB
Q0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgICAgIGlmIChhdHRhY2htZW50ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVG
RkVSLCAwKTsKICAgICAgICAgfSBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGNvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgYXR0
YWNobWVudCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgICAgICAg
ICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDAp
OwogICAgIH0KIAogICAgIGNsYXNzIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQgOiBwdWJsaWMgV2Vi
R0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2htZW50IHsKQEAgLTE0Nyw5ICsxNDcsOSBAQCBuYW1l
c3BhY2UgewogICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAg
Ym9vbCBpc0luaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgc2V0SW5p
dGlhbGl6ZWQoKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29u
dGV4dDNEKikgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNE
KiwgR0MzRGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgdW5hdHRhY2go
R3JhcGhpY3NDb250ZXh0M0QqLCBHQzNEZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKKyAgICAg
ICAgdm9pZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKikgb3ZlcnJpZGU7Cisg
ICAgICAgIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0
YWNobWVudCkgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqLCBHQzNEZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKIAogICAgICAgICBXZWJH
TFRleHR1cmVBdHRhY2htZW50KCkgeyB9OwogCkBAIC0yMTEsMjYgKzIxMSwyNiBAQCBuYW1lc3Bh
Y2UgewogICAgICAgICAvLyBUZXh0dXJlcyBhcmUgYXNzdW1lZCB0byBiZSBpbml0aWFsaXplZC4K
ICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6Om9uRGV0YWNoZWQoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50
OjpvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0KQogICAgIHsKICAg
ICAgICAgbV90ZXh0dXJlLT5vbkRldGFjaGVkKGNvbnRleHQpOwogICAgIH0KIAotICAgIHZvaWQg
V2ViR0xUZXh0dXJlQXR0YWNobWVudDo6YXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBHQzNEZW51bSBhdHRhY2htZW50KQorICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6
YXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2ht
ZW50KQogICAgIHsKICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QgPSBvYmplY3RPclpl
cm8obV90ZXh0dXJlLmdldCgpKTsKLSAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBtX3RhcmdldCwg
b2JqZWN0LCBtX2xldmVsKTsKKyAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBtX3RhcmdldCwgb2Jq
ZWN0LCBtX2xldmVsKTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6
OnVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2htZW50
KQorICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6dW5hdHRhY2goR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAgICAgewogI2lmICFV
U0UoQU5HTEUpCi0gICAgICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIG1fdGFyZ2V0LCAwLCBtX2xldmVsKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgbV90YXJnZXQs
IDAsIG1fbGV2ZWwpOworICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7CisgICAgICAgICAgICBjb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBtX3RhcmdldCwgMCwgbV9sZXZlbCk7CisgICAg
ICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIG1fdGFy
Z2V0LCAwLCBtX2xldmVsKTsKICAgICAgICAgfSBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGNv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgYXR0YWNobWVudCwgbV90YXJnZXQsIDAsIG1fbGV2ZWwpOworICAgICAgICAgICAgY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBh
dHRhY2htZW50LCBtX3RhcmdldCwgMCwgbV9sZXZlbCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0F0
dGFjaG1lbnRDb21wbGV0ZShXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEF0dGFjaG1lbnQqIGF0dGFj
aGVkT2JqZWN0LCBHQzNEZW51bSBhdHRhY2htZW50LCBjb25zdCBjaGFyKiogcmVhc29uKQpAQCAt
MjM4LDggKzIzOCw4IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIEFTU0VSVChhdHRhY2hlZE9iamVj
dCAmJiBhdHRhY2hlZE9iamVjdC0+aXNWYWxpZCgpKTsKICAgICAgICAgQVNTRVJUKHJlYXNvbik7
CiAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCA9IGF0dGFjaGVkT2JqZWN0LT5nZXRGb3JtYXQoKTsK
LSAgICAgICAgdW5zaWduZWQgbmVlZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNC
eUF0dGFjaG1lbnRUeXBlKGF0dGFjaG1lbnQpOwotICAgICAgICB1bnNpZ25lZCBoYXZlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCk7CisgICAgICAgIHVu
c2lnbmVkIG5lZWQgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2xlYXJCaXRzQnlBdHRh
Y2htZW50VHlwZShhdHRhY2htZW50KTsKKyAgICAgICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpOwogCiAgICAgICAg
IGlmICgobmVlZCAmIGhhdmUpICE9IG5lZWQpIHsKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0
YWNobWVudCB0eXBlIGlzIG5vdCBjb3JyZWN0IGZvciBhdHRhY2htZW50IjsKQEAgLTI0OSw4ICsy
NDksOCBAQCBuYW1lc3BhY2UgewogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGhh
cyBhIDAgZGltZW5zaW9uIjsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQgfHwgYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hN
RU5UKQotICAgICAgICAgICAgJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMKSB7CisgICAgICAgIGlmICgoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVO
Q0lMX0FUVEFDSE1FTlQpCisgICAgICAgICAgICAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX1NURU5DSUwpIHsKICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQgREVQ
VEhfU1RFTkNJTCBub3QgYWxsb3dlZCBvbiBERVBUSCBvciBTVEVOQ0lMIGF0dGFjaG1lbnQiOwog
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMjcyLDcgKzI3Miw3IEBAIFdl
YkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY3R4KQogICAgIDogV2ViR0xDb250ZXh0T2JqZWN0KGN0eCkKICAgICAsIG1faGFzRXZlckJl
ZW5Cb3VuZChmYWxzZSkKIHsKLSAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0
R0woKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKIFdlYkdMRnJhbWVidWZmZXI6On5XZWJH
TEZyYW1lYnVmZmVyKCkKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OmF0dGFjaChHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBhdHRhY2htZW50UG9pbnQpCiAg
ICAgQVNTRVJUKGlzQm91bmQoKSk7CiAgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNo
bWVudE9iamVjdCA9IGdldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7CiAgICAgaWYgKGF0dGFjaG1l
bnRPYmplY3QpCi0gICAgICAgIGF0dGFjaG1lbnRPYmplY3QtPmF0dGFjaChjb250ZXh0KCktPmdy
YXBoaWNzQ29udGV4dDNEKCksIGF0dGFjaG1lbnRQb2ludCk7CisgICAgICAgIGF0dGFjaG1lbnRP
YmplY3QtPmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdMKCksIGF0dGFjaG1lbnRQ
b2ludCk7CiB9CiAKIFdlYkdMU2hhcmVkT2JqZWN0KiBXZWJHTEZyYW1lYnVmZmVyOjpnZXRBdHRh
Y2htZW50T2JqZWN0KEdDM0RlbnVtIGF0dGFjaG1lbnQpIGNvbnN0CkBAIC0zMzYsMjAgKzMzNiwy
MCBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50KQogCiAgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVu
dD4gYXR0YWNobWVudE9iamVjdCA9IGdldEF0dGFjaG1lbnQoYXR0YWNobWVudCk7CiAgICAgaWYg
KGF0dGFjaG1lbnRPYmplY3QpIHsKLSAgICAgICAgYXR0YWNobWVudE9iamVjdC0+b25EZXRhY2hl
ZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgICAgICBhdHRhY2htZW50T2Jq
ZWN0LT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgICAg
IG1fYXR0YWNobWVudHMucmVtb3ZlKGF0dGFjaG1lbnQpOwogICAgICAgICBkcmF3QnVmZmVyc0lm
TmVjZXNzYXJ5KGZhbHNlKTsKICNpZiAhVVNFKEFOR0xFKQogICAgICAgICBzd2l0Y2ggKGF0dGFj
aG1lbnQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UOgotICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9B
VFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCk7Ci0gICAgICAg
ICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgIGF0dGFjaChH
cmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0FUVEFDSE1FTlQpOworICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1NURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5UKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCk7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAg
ICAgIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAjZW5kaWYKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFdlYkdMRnJhbWVi
dWZmZXI6OnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcihXZWJHTFNoYXJlZE9i
amVjdCogYQogICAgICAgICAgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVudE9i
amVjdCA9IGVudHJ5LnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmpl
Y3QtPmlzU2hhcmVkT2JqZWN0KGF0dGFjaG1lbnQpKSB7CiAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gYXR0YWNobWVudFR5cGUgPSBlbnRyeS5rZXk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVu
dE9iamVjdC0+dW5hdHRhY2goY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLCBhdHRhY2ht
ZW50VHlwZSk7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdC0+dW5hdHRhY2goY29u
dGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgpLCBhdHRhY2htZW50VHlwZSk7CiAgICAgICAgICAg
ICAgICAgcmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnRUeXBl
KTsKICAgICAgICAgICAgICAgICBjaGVja01vcmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzg0LDcgKzM4NCw3IEBAIEdDM0RzaXplaSBXZWJHTEZyYW1lYnVmZmVyOjpnZXRD
b2xvckJ1ZmZlcldpZHRoKCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0
YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDApOworICAgIFJlZlB0
cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29u
dGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCk7CiAgICAgaWYgKCFhdHRhY2htZW50KQogICAgICAg
ICByZXR1cm4gMDsKIApAQCAtMzk1LDcgKzM5NSw3IEBAIEdDM0RzaXplaSBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRDb2xvckJ1ZmZlckhlaWdodCgpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVu
dCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwKTsK
KyAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChH
cmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDApOwogICAgIGlmICghYXR0YWNobWVu
dCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTQwNiw3ICs0MDYsNyBAQCBHQzNEZW51bSBXZWJH
TEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0CiB7CiAgICAgaWYgKCFv
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4g
YXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFD
SE1FTlQwKTsKKyAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0
YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDApOwogICAgIGlmICgh
YXR0YWNobWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGF0dGFjaG1lbnQtPmdl
dEZvcm1hdCgpOwpAQCAtNDIyLDI5ICs0MjIsMjkgQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZl
cjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogbV9hdHRhY2htZW50cykgewogICAgICAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50
PiBhdHRhY2htZW50ID0gZW50cnkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghaXNBdHRhY2ht
ZW50Q29tcGxldGUoYXR0YWNobWVudC5nZXQoKSwgZW50cnkua2V5LCByZWFzb24pKQotICAgICAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ7CisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc1Zh
bGlkKCkpIHsKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBub3QgdmFsaWQi
OwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVJfVU5TVVBQT1JURUQ7CiAgICAgICAgIH0KICAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudEZv
cm1hdCA9IGF0dGFjaG1lbnQtPmdldEZvcm1hdCgpOwogCiAgICAgICAgIC8vIEF0dGFjaGluZyBh
biBTUkdCX0VYVCBmb3JtYXQgYXR0YWNobWVudCB0byBhIGZyYW1lYnVmZmVyIGlzIGludmFsaWQu
Ci0gICAgICAgIGlmIChhdHRhY2htZW50Rm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQp
CisgICAgICAgIGlmIChhdHRhY2htZW50Rm9ybWF0ID09IEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQp
CiAgICAgICAgICAgICBhdHRhY2htZW50Rm9ybWF0ID0gMDsKIAogICAgICAgICBpZiAoIWF0dGFj
aG1lbnRGb3JtYXQpIHsKICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBpcyBhbiB1
bnN1cHBvcnRlZCBmb3JtYXQiOwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAg
ICAgICAgfQogICAgICAgICBzd2l0Y2ggKGVudHJ5LmtleSkgewotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5UOgogICAgICAgICAgICAgaGF2ZURlcHRoID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
QVRUQUNITUVOVDoKICAgICAgICAgICAgIGhhdmVTdGVuY2lsID0gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVDoKICAgICAgICAgICAgIGhhdmVEZXB0aFN0ZW5jaWwgPSB0cnVlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQ1NCw0MyArNDU0LDQzIEBAIEdDM0RlbnVtIFdl
YkdMRnJhbWVidWZmZXI6OmNoZWNrU3RhdHVzKGNvbnN0IGNoYXIqKiByZWFzb24pIGNvbnN0CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAod2lkdGggIT0gYXR0YWNobWVudC0+Z2V0
V2lkdGgoKSB8fCBoZWlnaHQgIT0gYXR0YWNobWVudC0+Z2V0SGVpZ2h0KCkpIHsKICAgICAgICAg
ICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnRzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIGRpbWVu
c2lvbnMiOwotICAgICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOworICAgICAgICAgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgICsrY291bnQ7CiAgICAgfQogICAgIGlmICghY291
bnQpIHsKICAgICAgICAgKnJlYXNvbiA9ICJubyBhdHRhY2htZW50cyI7Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFD
SE1FTlQ7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ7CiAgICAgfQogICAgIGlmICghd2lkdGggfHwgIWhl
aWdodCkgewogICAgICAgICAqcmVhc29uID0gImZyYW1lYnVmZmVyIGhhcyBhIDAgZGltZW5zaW9u
IjsKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgIH0KICAgICAvLyBXZWJHTCBzcGVjaWZp
Yzogbm8gY29uZmxpY3RpbmcgREVQVEgvU1RFTkNJTC9ERVBUSF9TVEVOQ0lMIGF0dGFjaG1lbnRz
LgogICAgIGlmICgoaGF2ZURlcHRoU3RlbmNpbCAmJiAoaGF2ZURlcHRoIHx8IGhhdmVTdGVuY2ls
KSkgfHwgKGhhdmVEZXB0aCAmJiBoYXZlU3RlbmNpbCkpIHsKICAgICAgICAgKnJlYXNvbiA9ICJj
b25mbGljdGluZyBERVBUSC9TVEVOQ0lML0RFUFRIX1NURU5DSUwgYXR0YWNobWVudHMiOwotICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OwogICAgIH0KLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBM
RVRFOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7
CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzZCwgY29uc3QgY2hhcioqIHJlYXNvbikKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6
b25BY2Nlc3MoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgY29uc3QgY2hhcioq
IHJlYXNvbikKIHsKLSAgICBpZiAoY2hlY2tTdGF0dXMocmVhc29uKSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgaWYgKGNoZWNrU3RhdHVzKHJlYXNvbikg
IT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgcmV0dXJuIGluaXRpYWxpemVBdHRhY2htZW50cyhjb250ZXh0M2QsIHJl
YXNvbik7CiB9CiAKIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbEJ1ZmZlcigpIGNv
bnN0CiB7Ci0gICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVudCA9IGdldEF0dGFj
aG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCk7CisgICAgUmVmUHRy
PFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250
ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCk7CiAgICAgaWYgKCFhdHRhY2htZW50KQotICAgICAg
ICBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQoR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk7CiAgICAgcmV0dXJuIGF0
dGFjaG1lbnQgJiYgYXR0YWNobWVudC0+aXNWYWxpZCgpOwogfQogCi12b2lkIFdlYkdMRnJhbWVi
dWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0ZU9iamVj
dEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QpCiB7CiAgICAgZm9yIChhdXRvJiBhdHRhY2htZW50IDogbV9hdHRhY2htZW50cy52
YWx1ZXMoKSkKICAgICAgICAgYXR0YWNobWVudC0+b25EZXRhY2hlZChjb250ZXh0M2QpOwpAQCAt
NDk4LDcgKzQ5OCw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNECiAgICAgY29udGV4dDNkLT5k
ZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOwogfQogCi1ib29sIFdlYkdMRnJhbWVidWZmZXI6Omlu
aXRpYWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKiog
cmVhc29uKQorYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNobWVudHMoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIGczZCwgY29uc3QgY2hhcioqIHJlYXNvbikKIHsKICAgICBB
U1NFUlQob2JqZWN0KCkpOwogICAgIEdDM0RiaXRmaWVsZCBtYXNrID0gMDsKQEAgLTUwNywyMSAr
NTA3LDIxIEBAIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdy
YXBoaWNzQ29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIqCiAgICAgICAgIEdDM0RlbnVtIGF0dGFj
aG1lbnRUeXBlID0gZW50cnkua2V5OwogICAgICAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBh
dHRhY2htZW50ID0gZW50cnkudmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICghYXR0YWNobWVudC0+
aXNJbml0aWFsaXplZCgpKQotICAgICAgICAgICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKGF0dGFjaG1lbnRUeXBlKTsKKyAgICAgICAgICAg
IG1hc2sgfD0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENsZWFyQml0c0J5QXR0YWNobWVu
dFR5cGUoYXR0YWNobWVudFR5cGUpOwogICAgIH0KICAgICBpZiAoIW1hc2spCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgLy8gV2Ugb25seSBjbGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJi
dWZmZXJzIHdoZW4gdGhleSBhcmUgcmVhZHkgdG8gYmUKICAgICAvLyByZWFkLCBpLmUuLCB3aGVu
IHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZS4KLSAgICBpZiAoZzNkLT5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgaWYgKGczZC0+Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICAqcmVhc29uID0gImZyYW1l
YnVmZmVyIG5vdCBjb21wbGV0ZSI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBib29sIGluaXRDb2xvciA9IG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVS
X0JJVDsKLSAgICBib29sIGluaXREZXB0aCA9IG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVDsKLSAgICBib29sIGluaXRTdGVuY2lsID0gbWFzayAmIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgYm9vbCBpbml0Q29sb3IgPSBtYXNrICYg
R3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgYm9vbCBpbml0RGVwdGgg
PSBtYXNrICYgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0JVRkZFUl9CSVQ7CisgICAgYm9vbCBp
bml0U3RlbmNpbCA9IG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklU
OwogCiAgICAgR0MzRGZsb2F0IGNvbG9yQ2xlYXJWYWx1ZVtdID0gezAsIDAsIDAsIDB9LCBkZXB0
aENsZWFyVmFsdWUgPSAwOwogICAgIEdDM0RpbnQgc3RlbmNpbENsZWFyVmFsdWUgPSAwOwpAQCAt
NTMwLDI3ICs1MzAsMjcgQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNo
bWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAgICBHQzNEYm9vbGVh
biBpc1NjaXNzb3JFbmFibGVkID0gMDsKICAgICBHQzNEYm9vbGVhbiBpc0RpdGhlckVuYWJsZWQg
PSAwOwogICAgIGlmIChpbml0Q29sb3IpIHsKLSAgICAgICAgZzNkLT5nZXRGbG9hdHYoR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFLCBjb2xvckNsZWFyVmFsdWUpOwotICAgICAg
ICBnM2QtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0ssIGNv
bG9yTWFzayk7CisgICAgICAgIGczZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xP
Ul9DTEVBUl9WQUxVRSwgY29sb3JDbGVhclZhbHVlKTsKKyAgICAgICAgZzNkLT5nZXRCb29sZWFu
dihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOwogICAgICAg
ICBnM2QtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiAgICAgICAgIGczZC0+Y29sb3JNYXNrKHRy
dWUsIHRydWUsIHRydWUsIHRydWUpOwogICAgIH0KICAgICBpZiAoaW5pdERlcHRoKSB7Ci0gICAg
ICAgIGczZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwg
JmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgICAgIGczZC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIGczZC0+Z2V0Rmxv
YXR2KEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DTEVBUl9WQUxVRSwgJmRlcHRoQ2xlYXJWYWx1
ZSk7CisgICAgICAgIGczZC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1dS
SVRFTUFTSywgJmRlcHRoTWFzayk7CiAgICAgICAgIGczZC0+Y2xlYXJEZXB0aCgxLjBmKTsKICAg
ICAgICAgZzNkLT5kZXB0aE1hc2sodHJ1ZSk7CiAgICAgfQogICAgIGlmIChpbml0U3RlbmNpbCkg
ewotICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NM
RUFSX1ZBTFVFLCAmc3RlbmNpbENsZWFyVmFsdWUpOwotICAgICAgICBnM2QtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxH
QzNEaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIGczZC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUxfQ0xFQVJfVkFMVUUsICZzdGVuY2lsQ2xlYXJWYWx1ZSk7Cisg
ICAgICAgIGczZC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfV1JJVEVN
QVNLLCByZWludGVycHJldF9jYXN0PEdDM0RpbnQqPigmc3RlbmNpbE1hc2spKTsKICAgICAgICAg
ZzNkLT5jbGVhclN0ZW5jaWwoMCk7CiAgICAgICAgIGczZC0+c3RlbmNpbE1hc2soMHhmZmZmZmZm
Zik7CiAgICAgfQotICAgIGlzU2Npc3NvckVuYWJsZWQgPSBnM2QtPmlzRW5hYmxlZChHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgaXNEaXRoZXJFbmFibGVkID0gZzNkLT5pc0VuYWJs
ZWQoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7Ci0gICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpESVRIRVIpOworICAgIGlzU2Npc3NvckVuYWJsZWQgPSBnM2QtPmlzRW5hYmxl
ZChHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUKTsKKyAgICBnM2QtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCk7CisgICAgaXNEaXRoZXJFbmFibGVkID0gZzNk
LT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0R0w6OkRJVEhFUik7CisgICAgZzNkLT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dEdMOjpESVRIRVIpOwogCiAgICAgZzNkLT5jbGVhcihtYXNrKTsKIApA
QCAtNTY3LDE4ICs1NjcsMTggQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0
YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAgICAgICAgZzNk
LT5zdGVuY2lsTWFzayhzdGVuY2lsTWFzayk7CiAgICAgfQogICAgIGlmIChpc1NjaXNzb3JFbmFi
bGVkKQotICAgICAgICBnM2QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KTsKKyAgICAgICAgZzNkLT5lbmFibGUoR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCk7
CiAgICAgZWxzZQotICAgICAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCk7CisgICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NP
Ul9URVNUKTsKICAgICBpZiAoaXNEaXRoZXJFbmFibGVkKQotICAgICAgICBnM2QtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKKyAgICAgICAgZzNkLT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0R0w6OkRJVEhFUik7CiAgICAgZWxzZQotICAgICAgICBnM2QtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkRJVEhFUik7CisgICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHRHTDo6RElUSEVSKTsKIAogICAgIGZvciAoQXR0YWNobWVudE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2F0dGFjaG1lbnRzLmJlZ2luKCk7IGl0ICE9IG1fYXR0YWNobWVudHMuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUgPSBpdC0+a2V5OwogICAgICAgICBhdXRv
IGF0dGFjaG1lbnQgPSBpdC0+dmFsdWU7Ci0gICAgICAgIEdDM0RiaXRmaWVsZCBiaXRzID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5
cGUpOworICAgICAgICBHQzNEYml0ZmllbGQgYml0cyA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAg
aWYgKGJpdHMgJiBtYXNrKQogICAgICAgICAgICAgYXR0YWNobWVudC0+c2V0SW5pdGlhbGl6ZWQo
KTsKICAgICB9CkBAIC01OTUsNyArNTk1LDcgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkcmF3
QnVmZmVycyhjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZzKQogICAgIG1fZHJhd0J1ZmZlcnMg
PSBidWZzOwogICAgIG1fZmlsdGVyZWREcmF3QnVmZmVycy5yZXNpemUobV9kcmF3QnVmZmVycy5z
aXplKCkpOwogICAgIGZvciAoYXV0byYgYnVmZmVyIDogbV9maWx0ZXJlZERyYXdCdWZmZXJzKQot
ICAgICAgICBidWZmZXIgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgYnVmZmVy
ID0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiAgICAgZHJhd0J1ZmZlcnNJZk5lY2Vzc2FyeSh0
cnVlKTsKIH0KIApAQCAtNjExLDMzICs2MTEsMzMgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpk
cmF3QnVmZmVyc0lmTmVjZXNzYXJ5KGJvb2wgZm9yY2UpCiAgICAgYm9vbCByZXNldCA9IGZvcmNl
OwogICAgIC8vIFRoaXMgZmlsdGVyaW5nIHdvcmtzIGFyb3VuZCBncmFwaGljcyBkcml2ZXIgYnVn
cyBvbiBNYWMgT1MgWC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZHJhd0J1ZmZlcnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZHJhd0J1ZmZlcnNbaV0gIT0gR3JhcGhpY3ND
b250ZXh0M0Q6Ok5PTkUgJiYgZ2V0QXR0YWNobWVudChtX2RyYXdCdWZmZXJzW2ldKSkgeworICAg
ICAgICBpZiAobV9kcmF3QnVmZmVyc1tpXSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSAmJiBn
ZXRBdHRhY2htZW50KG1fZHJhd0J1ZmZlcnNbaV0pKSB7CiAgICAgICAgICAgICBpZiAobV9maWx0
ZXJlZERyYXdCdWZmZXJzW2ldICE9IG1fZHJhd0J1ZmZlcnNbaV0pIHsKICAgICAgICAgICAgICAg
ICBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnNbaV0gPSBtX2RyYXdCdWZmZXJzW2ldOwogICAgICAgICAg
ICAgICAgIHJlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChtX2ZpbHRlcmVkRHJhd0J1ZmZlcnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkUpIHsKLSAgICAgICAgICAgICAgICBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnNbaV0gPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgIGlmIChtX2ZpbHRlcmVkRHJhd0J1
ZmZlcnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpIHsKKyAgICAgICAgICAgICAgICBt
X2ZpbHRlcmVkRHJhd0J1ZmZlcnNbaV0gPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKICAgICAg
ICAgICAgICAgICByZXNldCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKHJlc2V0KSB7Ci0gICAgICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+Z2V0RXh0ZW5zaW9ucygpLmRyYXdCdWZmZXJzRVhUKAorICAgICAgICBjb250ZXh0KCktPmdy
YXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5kcmF3QnVmZmVyc0VYVCgKICAgICAg
ICAgICAgIG1fZmlsdGVyZWREcmF3QnVmZmVycy5zaXplKCksIG1fZmlsdGVyZWREcmF3QnVmZmVy
cy5kYXRhKCkpOwogICAgIH0KIH0KIAogR0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0RHJh
d0J1ZmZlcihHQzNEZW51bSBkcmF3QnVmZmVyKQogewotICAgIGludCBpbmRleCA9IHN0YXRpY19j
YXN0PGludD4oZHJhd0J1ZmZlciAtIEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCk7Cisg
ICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50PihkcmF3QnVmZmVyIC0gRXh0ZW5zaW9uc0dM
OjpEUkFXX0JVRkZFUjBfRVhUKTsKICAgICBBU1NFUlQoaW5kZXggPj0gMCk7CiAgICAgaWYgKGlu
ZGV4IDwgc3RhdGljX2Nhc3Q8aW50PihtX2RyYXdCdWZmZXJzLnNpemUoKSkpCiAgICAgICAgIHJl
dHVybiBtX2RyYXdCdWZmZXJzW2luZGV4XTsKLSAgICBpZiAoZHJhd0J1ZmZlciA9PSBFeHRlbnNp
b25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDA7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
OworICAgIGlmIChkcmF3QnVmZmVyID09IEV4dGVuc2lvbnNHTDo6RFJBV19CVUZGRVIwX0VYVCkK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMDsKKyAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAppbmRleCBlZTBhOTQzMWI3MDcxNmQ5
YmM3MGZhZDBiMTliMGM1ZTM4ZDE2NGJhLi44YjRiOTVhYmM5NTMxZGI3OWUzMjVkMzVlY2I2ZGM2
ZWMwNzVjODZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZy
YW1lYnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5oCkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0luaXRpYWxpemVkKCkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5pdGlhbGl6ZWQoKSA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dDNEKikgPSAwOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0g
YXR0YWNobWVudCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3ND
b250ZXh0M0QqLCBHQzNEZW51bSBhdHRhY2htZW50KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKikgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0YWNo
bWVudCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5hdHRhY2goR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqLCBHQzNEZW51bSBhdHRhY2htZW50KSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFdlYkdMQXR0YWNobWVudCgpOwpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJuIGZhbHNlIGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBpbmNvbXBsZXRlOyBvdGhlcndp
c2UgaW5pdGlhbGl6ZQogICAgIC8vIHRoZSBidWZmZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGlu
aXRpYWxpemVkIGFuZAogICAgIC8vIG5lZWRUb0luaXRpYWxpemVBdHRhY2htZW50cyBpcyB0cnVl
LgotICAgIGJvb2wgb25BY2Nlc3MoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiogcmVh
c29uKTsKKyAgICBib29sIG9uQWNjZXNzKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgY29uc3Qg
Y2hhcioqIHJlYXNvbik7CiAKICAgICAvLyBTb2Z0d2FyZSB2ZXJzaW9uIG9mIGdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cygpLCBleGNlcHQgdGhhdCB3aGVuCiAgICAgLy8gRlJBTUVCVUZGRVJfQ09N
UExFVEUgaXMgcmV0dXJuZWQsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIGZvcgpAQCAtMTA0LDEzICsx
MDQsMTMgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xBdHRhY2htZW50KiBnZXRBdHRhY2htZW50
KEdDM0RlbnVtKSBjb25zdDsKIAogICAgIC8vIFJldHVybiBmYWxzZSBpZiBmcmFtZWJ1ZmZlciBp
cyBpbmNvbXBsZXRlLgotICAgIGJvb2wgaW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgY2hhcioqIHJlYXNvbik7CisgICAgYm9vbCBpbml0aWFsaXplQXR0YWNo
bWVudHMoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBjb25zdCBjaGFyKiogcmVhc29uKTsKIAog
ICAgIC8vIENoZWNrIGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBjdXJyZW50bHkgYm91bmQuCiAgICAg
Ym9vbCBpc0JvdW5kKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9i
amVjdC5jcHAKaW5kZXggNDhmOTM5ZTBkYThmNGUzMmM4MjJkMjkxMjEyNGZmY2JlNGU1YWE5OS4u
YWYyODQ5Y2Q4OTgzYWRhNzdiYjljZDM0NWIyMzhkZWExNjFiNmJlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdl
YkdMT2JqZWN0OjpzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiAgICAgbV9vYmpl
Y3QgPSBvYmplY3Q7CiB9CiAKLXZvaWQgV2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkKQordm9pZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QpCiB7CiAgICAgbV9kZWxldGVkID0gdHJ1
ZTsKICAgICBpZiAoIW1fb2JqZWN0KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFdlYkdMT2JqZWN0
OjpkZWxldGVPYmplY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKIAogICAgIGlmICgh
bV9hdHRhY2htZW50Q291bnQpIHsKICAgICAgICAgaWYgKCFjb250ZXh0M2QpCi0gICAgICAgICAg
ICBjb250ZXh0M2QgPSBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgICAgIGNvbnRl
eHQzZCA9IGdldEFHcmFwaGljc0NvbnRleHRHTCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0M2Qp
CiAgICAgICAgICAgICBkZWxldGVPYmplY3RJbXBsKGNvbnRleHQzZCwgbV9vYmplY3QpOwpAQCAt
NjksNyArNjksNyBAQCB2b2lkIFdlYkdMT2JqZWN0OjpkZXRhY2goKQogICAgIG1fYXR0YWNobWVu
dENvdW50ID0gMDsgLy8gTWFrZSBzdXJlIE9wZW5HTCByZXNvdXJjZSBpcyBkZWxldGVkLgogfQog
Ci12b2lkIFdlYkdMT2JqZWN0OjpvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M2QpCit2b2lkIFdlYkdMT2JqZWN0OjpvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiBjb250ZXh0M2QpCiB7CiAgICAgaWYgKG1fYXR0YWNobWVudENvdW50KQogICAgICAgICAtLW1f
YXR0YWNobWVudENvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgK
aW5kZXggMGRhNWQ3MThkNmNiNWMyNWI0MWZhMjY0NDgwZTRmODNhZDQxNzYyMy4uNDkyNGZmOGEx
OGY1ZDJjYzIxMjNjMGU5YWY4NDE4YzNkYmEyMzhkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTE9iamVjdC5oCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDsKIGNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTsKIApAQCAtNDUsMTAgKzQ1LDEwIEBAIHB1YmxpYzoKICAgICAvLyBkZWxldGVPYmpl
Y3QgbWF5IG5vdCBhbHdheXMgZGVsZXRlIHRoZSBPcGVuR0wgcmVzb3VyY2UuICBGb3IgcHJvZ3Jh
bXMgYW5kCiAgICAgLy8gc2hhZGVycywgZGVsZXRpb24gaXMgZGVsYXllZCB1bnRpbCB0aGV5IGFy
ZSBubyBsb25nZXIgYXR0YWNoZWQuCiAgICAgLy8gRklYTUU6IHJldmlzaXQgdGhpcyB3aGVuIHJl
c291cmNlIHNoYXJpbmcgYmV0d2VlbiBjb250ZXh0cyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgdm9p
ZCBkZWxldGVPYmplY3QoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2b2lkIGRlbGV0ZU9iamVj
dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOwogCiAgICAgdm9pZCBvbkF0dGFjaGVkKCkgeyAr
K21fYXR0YWNobWVudENvdW50OyB9Ci0gICAgdm9pZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4
dDNEKik7CisgICAgdm9pZCBvbkRldGFjaGVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKik7CiAK
ICAgICAvLyBUaGlzIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjbGllbnQgc2lkZSBpc3N1ZSBhIGRl
bGV0ZSBjYWxsIGFscmVhZHksIG5vdAogICAgIC8vIHdoZXRoZXIgdGhlIE9wZW5HTCByZXNvdXJj
ZSBpcyBkZWxldGVkLgpAQCAtNjUsMTMgKzY1LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNl
dE9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIC8vIGRlbGV0ZU9iamVjdEltcGwgc2hv
dWxkIGJlIG9ubHkgY2FsbGVkIG9uY2UgdG8gZGVsZXRlIHRoZSBPcGVuR0wgcmVzb3VyY2UuCi0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0
Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRleHQoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoKCk7CiAKLSAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhp
Y3NDb250ZXh0M0QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogZ2V0QUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3QgPSAwOwogCiBwcml2YXRlOgogICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9vYmplY3QgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xQcm9ncmFtLmNwcAppbmRleCBkZWVhYzc1MGY0ZmRhMjQzZTZhMzcxNjZlZjQz
YTkxYTliNDNmZDU4Li4zZWZlZmZiYTEwM2E3YTlmZjBlMjFhM2UxNmY2YWRjY2Q0NzczOGZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKQEAgLTcwLDcg
KzcwLDcgQEAgV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYgY3R4KQogICAgICAgICBpbnN0YW5jZXMobG9jaykuYWRkKHRoaXMsICZjdHgpOwogICAg
IH0KIAotICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUHJvZ3Jh
bSgpKTsKKyAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dEdMKCktPmNyZWF0ZVByb2dy
YW0oKSk7CiB9CiAKIFdlYkdMUHJvZ3JhbTo6fldlYkdMUHJvZ3JhbSgpCkBAIC05Myw3ICs5Myw3
IEBAIHZvaWQgV2ViR0xQcm9ncmFtOjpjb250ZXh0RGVzdHJveWVkKCkKICAgICBDb250ZXh0RGVz
dHJ1Y3Rpb25PYnNlcnZlcjo6Y29udGV4dERlc3Ryb3llZCgpOwogfQogCi12b2lkIFdlYkdMUHJv
Z3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0
Zm9ybTNET2JqZWN0IG9iaikKK3ZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqKQog
ewogICAgIGNvbnRleHQzZC0+ZGVsZXRlUHJvZ3JhbShvYmopOwogICAgIGlmIChtX3ZlcnRleFNo
YWRlcikgewpAQCAtMTUxLDkgKzE1MSw5IEBAIHZvaWQgV2ViR0xQcm9ncmFtOjppbmNyZWFzZUxp
bmtDb3VudCgpCiBXZWJHTFNoYWRlciogV2ViR0xQcm9ncmFtOjpnZXRBdHRhY2hlZFNoYWRlcihH
QzNEZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVS
VEVYX1NIQURFUjoKICAgICAgICAgcmV0dXJuIG1fdmVydGV4U2hhZGVyLmdldCgpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVI6CiAgICAgICAgIHJldHVybiBtX2ZyYWdtZW50U2hh
ZGVyLmdldCgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY1LDEyICsx
NjUsMTIgQEAgYm9vbCBXZWJHTFByb2dyYW06OmF0dGFjaFNoYWRlcihXZWJHTFNoYWRlciogc2hh
ZGVyKQogICAgIGlmICghc2hhZGVyIHx8ICFzaGFkZXItPm9iamVjdCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgc3dpdGNoIChzaGFkZXItPmdldFR5cGUoKSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VkVSVEVYX1NIQURFUjoKICAgICAgICAgaWYgKG1fdmVydGV4U2hhZGVyKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBtX3ZlcnRleFNoYWRlciA9IHNoYWRlcjsKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUjoKICAgICAg
ICAgaWYgKG1fZnJhZ21lbnRTaGFkZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIG1fZnJhZ21lbnRTaGFkZXIgPSBzaGFkZXI7CkBAIC0xODUsMTIgKzE4NSwxMiBAQCBib29s
IFdlYkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiAgICAgaWYg
KCFzaGFkZXIgfHwgIXNoYWRlci0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBzd2l0Y2ggKHNoYWRlci0+Z2V0VHlwZSgpKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfU0hB
REVSOgogICAgICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIgIT0gc2hhZGVyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBtX3ZlcnRleFNoYWRlciA9IG51bGxwdHI7CiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVI6CiAgICAgICAg
IGlmIChtX2ZyYWdtZW50U2hhZGVyICE9IHNoYWRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgbV9mcmFnbWVudFNoYWRlciA9IG51bGxwdHI7CkBAIC0yMDAsMTUgKzIwMCwx
NSBAQCBib29sIFdlYkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
CiAgICAgfQogfQogCi12b2lkIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlv
bnMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKK3ZvaWQgV2ViR0xQcm9ncmFtOjpjYWNo
ZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNk
KQogewogICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zLmNsZWFyKCk7CiAKICAgICBHQzNEaW50
IG51bUF0dHJpYnMgPSAwOwotICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBH
cmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsKKyAgICBj
b250ZXh0M2QtPmdldFByb2dyYW1pdihvYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElW
RV9BVFRSSUJVVEVTLCAmbnVtQXR0cmlicyk7CiAgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnMu
cmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4obnVtQXR0cmlicykpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtQXR0cmliczsgKytpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpB
Y3RpdmVJbmZvIGluZm87CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMOjpBY3RpdmVJbmZvIGlu
Zm87CiAgICAgICAgIGNvbnRleHQzZC0+Z2V0QWN0aXZlQXR0cmliSW1wbChvYmplY3QoKSwgaSwg
aW5mbyk7CiAgICAgICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zW2ldID0gY29udGV4dDNkLT5n
ZXRBdHRyaWJMb2NhdGlvbihvYmplY3QoKSwgaW5mby5uYW1lKTsKICAgICB9CkBAIC0yMjIsMTEg
KzIyMiwxMSBAQCB2b2lkIFdlYkdMUHJvZ3JhbTo6Y2FjaGVJbmZvSWZOZWVkZWQoKQogICAgIGlm
ICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQgPSBnZXRBR3JhcGhpY3NDb250ZXh0R0woKTsKICAgICBpZiAoIWNvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKICAgICBHQzNEaW50IGxpbmtTdGF0dXMgPSAwOwotICAgIGNv
bnRleHQtPmdldFByb2dyYW1pdihvYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RB
VFVTLCAmbGlua1N0YXR1cyk7CisgICAgY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBH
cmFwaGljc0NvbnRleHRHTDo6TElOS19TVEFUVVMsICZsaW5rU3RhdHVzKTsKICAgICBtX2xpbmtT
dGF0dXMgPSBsaW5rU3RhdHVzOwogICAgIGlmIChtX2xpbmtTdGF0dXMpCiAgICAgICAgIGNhY2hl
QWN0aXZlQXR0cmliTG9jYXRpb25zKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uaAppbmRleCAzZTA4MmZjMmRkYmMxMTllYjIzNWRiNjViZTU5NTkwYzMz
YTQzNTA0Li44OWI0NjBjMDY3MGYyZWViNThhNDQ4MzQ3NWZiYTEwNjk0NTY4YzdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaApAQCAtNzMsMTAgKzczLDEwIEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNE
KiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0Nv
bnRleHQzRCopOworICAgIHZvaWQgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqKTsKICAgICB2b2lkIGNhY2hlSW5mb0lmTmVlZGVkKCk7CiAKICAgICBW
ZWN0b3I8R0MzRGludD4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUXVlcnkuY3BwCmluZGV4IDhjYTUyNTExNTczNTAxNTQ1YWM1NWY1ZTk0
MWVhYTVhODA0M2JlYWYuLmNiNjQ0NTIyMjczNDY1MDU3MmNiYjU2MDMzMzdiOWYyZjQ1ZDk2NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuY3BwCkBAIC00NiwxNCAr
NDYsMTQgQEAgV2ViR0xRdWVyeTo6fldlYkdMUXVlcnkoKQogV2ViR0xRdWVyeTo6V2ViR0xRdWVy
eShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVj
dChjdHgpCiB7Ci0gICAgLy8gRklYTUU6IENhbGwgY3JlYXRlUXVlcnkgZnJvbSBHcmFwaGljc0Nv
bnRleHQzRC4KKyAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVRdWVyeSBmcm9tIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLgogfQogCi12b2lkIFdlYkdMUXVlcnk6OmRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lk
IFdlYkdMUXVlcnk6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNv
bnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQzZCk7CiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgLy8gRklYTUU6IENhbGwg
ZGVsZXRlUXVlcnkgZnJvbSBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAvLyBGSVhNRTogQ2FsbCBk
ZWxldGVRdWVyeSBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmgKaW5kZXggZmQ2NDRkMjRjMTI4MWM5YzE5OGUy
ZjVhZjkxNTJlYzg0NjE1YjM2NS4uMDg3YzA0MTFmOTYzOWIzMjEyYTg4NTY2NTJhYmExYWIxMmM1
MTNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuaApAQCAtMzgsNyAr
MzgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBXZWJHTFF1ZXJ5KFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0
KSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAppbmRleCA2OTk2ZDliMWRh
OTMwZjNhMmJhYmEyMzBlNDkyYzBkNzg0YTdjZDE5Li4wNmVlMDdiNTczZmY1NzZjZmNhYzQ0NzM4
YTNmNmNjNWMyNDM4ODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJidWZmZXIuY3BwCkBAIC00NiwxNyArNDYsMTcgQEAgV2ViR0xSZW5kZXJidWZmZXI6
On5XZWJHTFJlbmRlcmJ1ZmZlcigpCiAKIFdlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1
ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9i
amVjdChjdHgpCi0gICAgLCBtX2ludGVybmFsRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
NCkKKyAgICAsIG1faW50ZXJuYWxGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0KQogICAg
ICwgbV9pbml0aWFsaXplZChmYWxzZSkKICAgICAsIG1fd2lkdGgoMCkKICAgICAsIG1faGVpZ2h0
KDApCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKICAgICAsIG1faGFzRXZlckJlZW5Cb3VuZChmYWxz
ZSkKIHsKLSAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpKTsKKyAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dEdMKCktPmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKK3ZvaWQgV2ViR0xSZW5kZXJidWZmZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAg
ICAgY29udGV4dDNkLT5kZWxldGVSZW5kZXJidWZmZXIob2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCmluZGV4IDM3YTkzOGUzM2E2
MmQxNDcxNTFjZGE4YmQ2YzM3NGM0NzBmMWZlMTAuLmMyODAyN2U2ZmUzNzg3NmMwY2Y5ZDQxN2Jk
NjRjMmVkY2M5OTM5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAg
V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogCi0gICAgdm9p
ZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBp
c1JlbmRlcmJ1ZmZlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmlu
ZGV4IDNhNTBmZmMwZTBlNDg3MzNiZmQ0YmUwZjRkMjY3ZmFiOGU2ZmE5ZDkuLjI4NDNkNDYxNmFm
MWUyNTQxYmIxZWYxNzM2NzkxMzQxZjI3ZjM2ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzUsNyArMzUsNyBA
QAogI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKICNpbmNsdWRlICJFWFRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWMuaCIKICNpbmNsdWRlICJFWFRzUkdCLmgiCi0jaW5jbHVkZSAiRXh0
ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiSFRNTENh
bnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFZpZGVvRWxlbWVudC5oIgpAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOwog
Ci1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmli
dXRlcyBhdHRyaWJ1dGVzKQorc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIHsKICAgICBhdXRvIHJlbmRlcmluZ0Nv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOwogCkBAIC04MSw3ICs4MSw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmCiAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dDNE
PiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+
JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiB7CiAg
ICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5n
Q29udGV4dD4obmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIFdURk1vdmUoY29udGV4
dCksIGF0dHJpYnV0ZXMpKTsKIApAQCAtOTAsMTIgKzkwLDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZh
c0Jhc2UmCiAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9CiAKLVdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgR3JhcGhp
Y3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OldlYkdMUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiBjYW52YXMsIEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZShjYW52YXMsIGF0dHJpYnV0ZXMpCiB7CiB9CiAKLVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4
dDNEPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQor
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYg
Y2FudmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYgY29udGV4dCwgR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKGNhbnZhcywgV1RGTW92ZShjb250ZXh0KSwgYXR0cmlidXRlcykKIHsKICAgICBpbml0
aWFsaXplVmVydGV4QXJyYXlPYmplY3RzKCk7CkBAIC0yNTEsNTggKzI1MSw1OCBAQCBXZWJHTEFu
eSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cihHQzNEZW51bSB0YXJnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAo
IW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1l
YnVmZmVyIGJvdW5kIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
ciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgCiAgICAgYXV0byBvYmplY3QgPSBtYWtlUmVmUHRyKG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQpKTsKICAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICAgICAgaWYgKHBuYW1lID09IEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6
Tk9ORSk7CiAgICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURfRU5VTSBp
biB0aGlzIGNhc2UsIHdoaWxlIGRlc2t0b3AgR0wKICAgICAgICAgLy8gc3BlY2lmaWVzIElOVkFM
SURfT1BFUkFUSU9OLgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICAKICAgICBpZiAob2JqZWN0LT5pc1RleHR1cmUoKSkgewogICAgICAgICBz
d2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFKTsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgogICAgICAgICAgICAgcmV0dXJuIG1h
a2VSZWZQdHIocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUmPigqb2JqZWN0KSk7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVW
RUw6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICBjYXNlIEV4dGVuc2lvbnNHTDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQ6IHsKICAgICAgICAgICAgIEdD
M0RpbnQgdmFsdWUgPSAwOwogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwog
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJl
IGF0dGFjaG1lbnQiKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CiAg
ICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIpOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgogICAg
ICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1
ZmZlciY+KCpvYmplY3QpKTsKLSAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CisgICAgICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewogICAgICAg
ICAgICAgaWYgKCFtX2V4dHNSR0IpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBh
dHRhY2htZW50Iik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIp
OwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiByZW5kZXJCdWZmZXIgPSByZWludGVycHJl
dF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4ob2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgIEdD
M0RlbnVtIHJlbmRlckJ1ZmZlckZvcm1hdCA9IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChyZW5kZXJCdWZmZXJGb3JtYXQgIT0gRXh0ZW5zaW9u
czNEOjpTUkdCX0VYVCAmJiByZW5kZXJCdWZmZXJGb3JtYXQgIT0gRXh0ZW5zaW9uczNEOjpTUkdC
X0FMUEhBX0VYVCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyRm9ybWF0ID09IEV4dGVu
c2lvbnMzRDo6U1JHQjhfQUxQSEE4X0VYVCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQpOwotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAg
ICAgICAgICAgIEFTU0VSVChyZW5kZXJCdWZmZXJGb3JtYXQgIT0gRXh0ZW5zaW9uc0dMOjpTUkdC
X0VYVCAmJiByZW5kZXJCdWZmZXJGb3JtYXQgIT0gRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VY
VCk7CisgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyRm9ybWF0ID09IEV4dGVuc2lvbnNHTDo6
U1JHQjhfQUxQSEE4X0VYVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKICAgICAgICAgfQog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIpOwogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTAsMjQgKzMxMCwyNCBAQCBX
ZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcihHQzNEZW51bSB0YXJnZQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50KQogewotICAgIGlmICh0YXJnZXQg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGFyZ2V0Iik7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyByZXR1cm4g
dHJ1ZSB1bmNvbmRpdGlvbmFsbHkgZm9yIENPTE9SX0FUVEFDSE1FTlQwLAogICAgIC8vIGJ1dCBm
YWxzZSBmb3Igb3RoZXIgQ09MT1JfQVRUQUNITUVOVCB2YWx1ZXMgaWYgbV93ZWJnbERyYXdCdWZm
ZXJzIGlzIGZhbHNlPwogICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxf
QVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5U
MDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAg
ICAgICAgICYmIGF0dGFjaG1lbnQgPj0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwCi0gICAgICAgICAgICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1heENvbG9yQXR0YWNobWVu
dHMoKSkpCisgICAgICAgICAgICAmJiBhdHRhY2htZW50ID49IEdyYXBoaWNzQ29udGV4dEdMOjpD
T0xPUl9BVFRBQ0hNRU5UMAorICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0
PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhD
b2xvckF0dGFjaG1lbnRzKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0
dGFjaG1lbnQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KQEAgLTMzNiwyNSAr
MzM2LDI1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJp
bnZhbGlkIHRhcmdldCIpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJF
TkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5n
IHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1
ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1
ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0
aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6U1JHQjhfQUxQSEE4X0VYVDoKLSAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ID09IEV4dGVu
c2lvbnMzRDo6U1JHQjhfQUxQSEE4X0VYVCAmJiAhbV9leHRzUkdCKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVy
YnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0I4X0FMUEhBOF9F
WFQ6CisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zR0w6OlNSR0I4X0FM
UEhBOF9FWFQgJiYgIW1fZXh0c1JHQikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAi
aW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTM2MiwxNSArMzYyLDE1IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gaW50ZXJuCiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0
cnVlKTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWln
aHQpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CiAgICAg
ICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKQotICAgICAgICAgICAgbV9jb250ZXh0
LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5D
SUw4LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVy
U3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnNHTDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhT
dGVuY2lsU3VwcG9ydGVkKCkpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElu
dGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVN
LCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwpAQCAtMzgyLDE2ICsz
ODIsMTYgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBtb2RlKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBpc1ZhbGlkID0gZmFs
c2U7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpH
RU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpHRU5FUkFU
RV9NSVBNQVBfSElOVDoKICAgICAgICAgaXNWYWxpZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09F
UzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkZS
QUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMKICAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKICAgICAgICAgICAg
IGlzVmFsaWQgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKCFpc1ZhbGlk
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFy
Z2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5oaW50KHRhcmdl
dCwgbW9kZSk7CkBAIC00MDEsMTMgKzQwMSwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJf
QklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVh
ciIsICJpbnZhbGlkIG1hc2siKTsKKyAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0R0w6
OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAi
aW52YWxpZCBtYXNrIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwogICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKG1fY29udGV4dC5nZXQo
KSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24pOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJlYXNvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKQEAgLTQyMSwyNDMgKzQyMSwyNDMg
QEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoR0MzRGVudW0g
cG5hbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3dpdGNoIChwbmFtZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkFDVElWRV9URVhUVVJFOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFT
RURfTElORV9XSURUSF9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTElBU0VE
X0xJTkVfV0lEVEhfUkFOR0U6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBX0JJVFM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6QUxQSEFfQklUUzoKICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmFscGhhKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkFSUkFZX0JVRkZFUl9CSU5ESU5HOgogICAgICAgICByZXR1cm4gbV9ib3VuZEFycmF5QnVm
ZmVyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkJMRU5EOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfQ09MT1I6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfQ09MT1I6CiAgICAgICAgIHJldHVybiBnZXRXZWJH
TEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EX0RTVF9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9EU1Rf
QUxQSEE6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX1JHQjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpCTEVORF9EU1RfUkdCOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VR
VUFUSU9OX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0VRVUFUSU9O
X0FMUEhBOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX1JHQjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9FUVVBVElPTl9SR0I6CiAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfU1JDX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX1NS
Q19BTFBIQToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkJMRU5EX1NSQ19SR0I6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25l
ZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxVRV9C
SVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMVUVfQklUUzoKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQ0xF
QVJfVkFMVUU6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9XUklURU1BU0s6CiAgICAgICAgIHJldHVybiBn
ZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgogICAgICAgICByZXR1cm4gVWludDMyQXJy
YXk6OnRyeUNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q1VMTF9GQUNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVTExfRkFDRToKICAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNV
TExfRkFDRV9NT0RFOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDVVJSRU5UX1BST0dSQU06CiAgICAgICAgIHJldHVybiBt
X2N1cnJlbnRQcm9ncmFtOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQklUUzoKICAgICAgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRoKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NMRUFSX1ZBTFVFOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfRlVOQzoKICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9SQU5H
RToKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9URVNUOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1dSSVRFTUFTSzoKICAgICAgICAgcmV0
dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpESVRIRVI6CiAgICAgICAg
IHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBt
YWtlUmVmUHRyKG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVy
KCkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkc6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQklORElORzoKICAgICAgICAg
cmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZST05UX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJPTlRfRkFDRToKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKICAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVF
Tl9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkdSRUVOX0JJVFM6CiAgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgogICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1dJRFRI
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVfV0lEVEg6CiAgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CiAgICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0NV
QkVfTUFQX1RFWFRVUkVfU0laRToKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9W
RUNUT1JTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFOgogICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9TSVpFOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlO
R19WRUNUT1JTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WQVJZSU5HX1ZFQ1RP
UlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfVkVSVEVYX0FUVFJJQlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JT
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JT
OgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpNQVhfVklFV1BPUlRfRElNUzoKICAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5VTV9TSEFERVJf
QklOQVJZX0ZPUk1BVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TlVNX1NIQURFUl9C
SU5BUllfRk9STUFUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UEFDS19BTElHTk1FTlQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VU
X0ZBQ1RPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9GQUNU
T1I6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9GSUxMOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVh
blBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9P
RkZTRVRfVU5JVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9MWUdPTl9PRkZTRVRf
VU5JVFM6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkVEX0JJVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgogICAgICAgICByZXR1cm4g
bV9yZW5kZXJidWZmZXJCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkVSOgogICAgICAgICByZXR1
cm4gIldlYktpdCBXZWJHTCJfc3RyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBM
RV9CVUZGRVJTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9CVUZGRVJTOgog
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09W
RVJBR0VfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0NPVkVSQUdF
X1ZBTFVFOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U0FNUExFUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6U0NJU1NPUl9CT1g6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUOgogICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1cm4gIldlYkdMIEdMU0wg
RVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJ
TkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX0ZBSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hBRElOR19M
QU5HVUFHRV9WRVJTSU9OOgorICAgICAgICByZXR1cm4gIldlYkdMIEdMU0wgRVMgMS4wICgiICsg
bV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0R0w6OlNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTikgKyAiKSI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNL
X0ZBSUw6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX0ZVTkM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX0ZVTkM6CiAgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfUkVGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19SRUY6CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQkFDS19WQUxVRV9NQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNURU5DSUxfQkFDS19WQUxVRV9NQVNLOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQkFDS19XUklURU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9C
QUNLX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CSVRTOgogICAgICAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfQ0xFQVJfVkFMVUU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRkFJTDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0ZBSUw6CiAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9GVU5DOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
RlVOQzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKICAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKICAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX1JFRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1JFRjoKICAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
VEVTVDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVkFMVUVfTUFTSzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX1ZBTFVFX01BU0s6CiAgICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9XUklURU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9XUklU
RU1BU0s6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1VCUElYRUxfQklUUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVUJQSVhFTF9CSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0JJTkRJTkdf
MkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9CSU5ESU5HXzJEOgogICAg
ICAgICByZXR1cm4gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJE
QmluZGluZzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0JJTkRJTkdfQ1VC
RV9NQVA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVf
TUFQOgogICAgICAgICByZXR1cm4gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0u
dGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVO
VDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgogICAgICAgICByZXR1cm4gbV91bnBhY2tGbGlw
WTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFf
V0VCR0w6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMOgogICAgICAgICByZXR1cm4gbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VC
R0w6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVS
U0lPTl9XRUJHTDoKICAgICAgICAgcmV0dXJuIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlZFTkRPUjoKICAgICAgICAgcmV0dXJuICJXZWJLaXQiX3N0cjsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlZFUlNJT046CiAgICAgICAgIHJldHVybiAiV2ViR0wgMS4wIl9zdHI7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VklFV1BPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VklF
V1BPUlQ6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9P
RVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpG
UkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzCiAgICAgICAgIGlmIChtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9T
SEFERVJfREVSSVZBVElWRV9ISU5UX09FUyk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIG5vdCBlbmFibGVkIik7Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uc0dMOjpG
UkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUyk7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIG5vdCBlbmFi
bGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CiAgICAgICAgIGlmIChtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8pIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICAgICAg
cmV0dXJuICJBcHBsZSBHUFUiX3N0cjsKICNlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSRVIp
OwogI2VuZGlmCiAgICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJf
aW5mbyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIFdl
YkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VEX1ZFTkRPUl9XRUJHTDoKICAgICAgICAgaWYg
KG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQt
PmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKTsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBl
bmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhp
Y3NDb250ZXh0R0w6OlZFTkRPUik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpWRVJURVhfQVJSQVlfQklORElOR19PRVM6IC8vIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
CiAgICAgICAgIGlmIChtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7CiAgICAgICAgICAgICBpZiAo
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKHN0YXRp
Y19jYXN0PFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMmPigqbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0KSk7CiAgICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5v
dCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpNQVhfVEVYVFVSRV9NQVhfQU5J
U09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwogICAgICAgICBp
ZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpCi0gICAgICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uczNEOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09U
Uk9QWV9FWFQpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnNHTDo6TUFYX1RFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9B
VFRBQ0hNRU5UU19FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgQkVHSU4KKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBC
RUdJTgogICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQogICAgICAgICAgICAgcmV0dXJu
IGdldE1heENvbG9yQXR0YWNobWVudHMoKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90
IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpNQVhfRFJB
V19CVUZGRVJTX0VYVDoKICAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycykKICAgICAgICAg
ICAgIHJldHVybiBnZXRNYXhEcmF3QnVmZmVycygpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAi
Z2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVy
cyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzCi0gICAgICAgICAgICAmJiBwbmFtZSA+PSBF
eHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQKLSAgICAgICAgICAgICYmIHBuYW1lIDwgc3Rh
dGljX2Nhc3Q8R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1h
eERyYXdCdWZmZXJzKCkpKSB7Ci0gICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gR3JhcGhpY3ND
b250ZXh0M0Q6Ok5PTkU7CisgICAgICAgICAgICAmJiBwbmFtZSA+PSBFeHRlbnNpb25zR0w6OkRS
QVdfQlVGRkVSMF9FWFQKKyAgICAgICAgICAgICYmIHBuYW1lIDwgc3RhdGljX2Nhc3Q8R0MzRGVu
dW0+KEV4dGVuc2lvbnNHTDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1heERyYXdCdWZmZXJzKCkp
KSB7CisgICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7
CiAgICAgICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCiAgICAgICAgICAgICAgICAg
dmFsdWUgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0RHJhd0J1ZmZlcihwbmFtZSk7CiAgICAg
ICAgICAgICBlbHNlIC8vIGVtdWxhdGVkIGJhY2tidWZmZXIKICAgICAgICAgICAgICAgICB2YWx1
ZSA9IG1fYmFja0RyYXdCdWZmZXI7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAg
IH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiB9CkBAIC02NjcsOSArNjY3LDkgQEAgR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKICAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZl
cnMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQotICAg
ICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVS
U19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2Vy
dihFeHRlbnNpb25zR0w6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3QnVmZmVycyk7
CiAgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zR0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMp
OwogICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVO
VFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KICAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVm
ZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKIH0KQEAgLTY3OSw3ICs2NzksNyBAQCBHQzNE
aW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4Q29sb3JBdHRhY2htZW50cygpCiAgICAg
aWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICgh
bV9tYXhDb2xvckF0dGFjaG1lbnRzKQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4
dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2ht
ZW50cyk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhf
Q09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKICAgICByZXR1
cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwogfQogICAgIApAQCAtNzA3LDIwICs3MDcsMjAgQEAg
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2
ZShHQzNEZW51bSB0eXBlLCB1bnNpZ24KICAgICBpZiAoIW1heEluZGV4KSB7CiAgICAgICAgIC8v
IENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXggaW4gdGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBn
aXZlbiB0eXBlIG9mIGluZGV4LgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURTogeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOiB7CiAgICAgICAgICAgICBjb25zdCBHQzNEdWJ5
dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7CiAg
ICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKysp
CiAgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXhJbmRleCA/IHN0ZDo6bWF4KG1heEluZGV4
LnZhbHVlKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwW2ldKSkgOiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocFtpXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDogewogICAgICAgICAgICAgbnVtRWxlbWVudHMg
Lz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwogICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9
IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7CiAgICAgICAg
ICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCiAgICAg
ICAgICAgICAgICAgbWF4SW5kZXggPSBtYXhJbmRleCA/IHN0ZDo6bWF4KG1heEluZGV4LnZhbHVl
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwW2ldKSkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cFtpXSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfSU5UOiB7CiAgICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4
VWludCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBudW1FbGVt
ZW50cyAvPSBzaXplb2YoR0MzRHVpbnQpOwpAQCAtNzUxLDE5ICs3NTEsMTkgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51
bSB0eXBlLCB1bnNpZ24KIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQogewogICAg
IHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfU1VCVFJBQ1Q6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpNSU5fRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfRVhUOgotICAgICAgICBp
ZiAoKG1vZGUgPT0gRXh0ZW5zaW9uczNEOjpNSU5fRVhUIHx8IG1vZGUgPT0gRXh0ZW5zaW9uczNE
OjpNQVhfRVhUKSAmJiAhbV9leHRCbGVuZE1pbk1heCkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBtb2RlIik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlVOQ19BREQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6Ok1BWF9FWFQ6CisgICAgICAgIGlm
ICgobW9kZSA9PSBFeHRlbnNpb25zR0w6Ok1JTl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zR0w6
Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4KSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIG1vZGUiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBtb2RlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtNzcxLDE4ICs3NzEsMTggQEAg
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0QKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCiB7
CiAgICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRI
RVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VMTF9GQUNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RElUSEVSOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBPTFlHT05fT0ZGU0VUX0ZJTEw6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNBTVBMRV9DT1ZFUkFHRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTQ0lTU09SX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9U
RVNUOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIGNhcGFiaWxpdHkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmls
aXR5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IGIyMTRkNDM2
MThhMzNmNGJhN2Y0ODlmMDJmN2Y2OWJiNzUxMjJlNGUuLmU4ZTM2ODg4MjhiNmY1MGJjZGJiMDU2
ZDkzMDBhMTQzMmY4MDE4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0M0RB
dHRyaWJ1dGVzKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYsIEdyYXBo
aWNzQ29udGV4dDNEQXR0cmlidXRlcyk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYs
IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyk7CiAKICAgICBib29sIGlzV2ViR0wxKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC01OCw4ICs1OCw4IEBAIHB1YmxpYzoKICAg
ICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIGNhcCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KENh
bnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMpOwotICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dChDYW52YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBHcmFwaGlj
c0NvbnRleHQzREF0dHJpYnV0ZXMpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dChDYW52YXNC
YXNlJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiwgR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAKaW5kZXggNzlhNTVlMmNiNzc3NzcwN2JmYzM4OWIxZDgzYzMwYmFlMmJkNzMx
ZS4uMGMyZmM4NGJmYzA2YmRmNGQ4ZGMzNmM3NWQ5Yjk5YjZkYmZkMjNlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuaCIKICNpbmNsdWRlICJFWFRzUkdCLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgot
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgpAQCAtMzkzLDM3ICszOTMsMzcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKCFtX3Byb2dyYW0gfHwgTElLRUxZKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmlzV2Vi
R0xQcm9ncmFtSGlnaGxpZ2h0ZWQobV9jb250ZXh0LCAqbV9wcm9ncmFtKSkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgaWYgKGhhc0J1ZmZlckJpbmRpbmcoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkcpKSB7Ci0gICAgICAgICAgICBpZiAoIWhhc0J1ZmZlckJp
bmRpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HKSkKKyAgICAgICAg
aWYgKGhhc0J1ZmZlckJpbmRpbmcoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0JJTkRJ
TkcpKSB7CisgICAgICAgICAgICBpZiAoIWhhc0J1ZmZlckJpbmRpbmcoR3JhcGhpY3NDb250ZXh0
R0w6OlJFTkRFUkJVRkZFUl9CSU5ESU5HKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBpZiAoaGFzRnJhbWVidWZmZXJQYXJhbWV0ZXJBdHRhY2htZW50KEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UKSkKKyAgICAgICAgICAgIGlmIChoYXNGcmFtZWJ1ZmZl
clBhcmFtZXRlckF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChoYXNGcmFtZWJ1ZmZl
clBhcmFtZXRlckF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVO
VCkpCisgICAgICAgICAgICBpZiAoaGFzRnJhbWVidWZmZXJQYXJhbWV0ZXJBdHRhY2htZW50KEdy
YXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVy
UGFyYW1ldGVyQXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRB
Q0hNRU5UKSkKKyAgICAgICAgICAgIGlmIChoYXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0dGFjaG1l
bnQoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgICAgIH0KIAotICAgICAgICBzYXZlQmxlbmRW
YWx1ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfQ09MT1IsIG1fc2F2ZWRCbGVuZC5jb2xvcik7
Ci0gICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElP
Tl9SR0IsIG1fc2F2ZWRCbGVuZC5lcXVhdGlvblJHQik7Ci0gICAgICAgIHNhdmVCbGVuZFZhbHVl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9BTFBIQSwgbV9zYXZlZEJsZW5kLmVx
dWF0aW9uQWxwaGEpOwotICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkRfU1JDX1JHQiwgbV9zYXZlZEJsZW5kLnNyY1JHQik7Ci0gICAgICAgIHNhdmVCbGVuZFZh
bHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfQUxQSEEsIG1fc2F2ZWRCbGVuZC5zcmNB
bHBoYSk7Ci0gICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9E
U1RfUkdCLCBtX3NhdmVkQmxlbmQuZHN0UkdCKTsKLSAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9BTFBIQSwgbV9zYXZlZEJsZW5kLmRzdEFscGhhKTsK
LSAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5ELCBtX3NhdmVk
QmxlbmQuZW5hYmxlZCk7CisgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dEdM
OjpCTEVORF9DT0xPUiwgbV9zYXZlZEJsZW5kLmNvbG9yKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFs
dWUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0VRVUFUSU9OX1JHQiwgbV9zYXZlZEJsZW5kLmVx
dWF0aW9uUkdCKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0R0w6OkJM
RU5EX0VRVUFUSU9OX0FMUEhBLCBtX3NhdmVkQmxlbmQuZXF1YXRpb25BbHBoYSk7CisgICAgICAg
IHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9TUkNfUkdCLCBtX3NhdmVk
QmxlbmQuc3JjUkdCKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0R0w6
OkJMRU5EX1NSQ19BTFBIQSwgbV9zYXZlZEJsZW5kLnNyY0FscGhhKTsKKyAgICAgICAgc2F2ZUJs
ZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0RTVF9SR0IsIG1fc2F2ZWRCbGVuZC5k
c3RSR0IpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRf
RFNUX0FMUEhBLCBtX3NhdmVkQmxlbmQuZHN0QWxwaGEpOworICAgICAgICBzYXZlQmxlbmRWYWx1
ZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkQsIG1fc2F2ZWRCbGVuZC5lbmFibGVkKTsKIAogICAg
ICAgICBzdGF0aWMgY29uc3QgR0MzRGZsb2F0IHJlZCA9IDExMS4wIC8gMjU1LjA7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgZ3JlZW4gPSAxNjguMCAvIDI1NS4wOwogICAgICAgICBz
dGF0aWMgY29uc3QgR0MzRGZsb2F0IGJsdWUgPSAyMjAuMCAvIDI1NS4wOwogICAgICAgICBzdGF0
aWMgY29uc3QgR0MzRGZsb2F0IGFscGhhID0gMi4wIC8gMy4wOwogCi0gICAgICAgIG1fY29udGV4
dC5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LmVu
YWJsZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkQpOwogICAgICAgICBtX2NvbnRleHQuYmxlbmRD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgIG1fY29udGV4dC5ibGVuZEVx
dWF0aW9uKEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX0FERCk7Ci0gICAgICAgIG1fY29udGV4dC5i
bGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SLCBHcmFwaGljc0NvbnRl
eHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CisgICAgICAgIG1fY29udGV4dC5ibGVuZEVxdWF0
aW9uKEdyYXBoaWNzQ29udGV4dEdMOjpGVU5DX0FERCk7CisgICAgICAgIG1fY29udGV4dC5ibGVu
ZEZ1bmMoR3JhcGhpY3NDb250ZXh0R0w6OkNPTlNUQU5UX0NPTE9SLCBHcmFwaGljc0NvbnRleHRH
TDo6T05FX01JTlVTX1NSQ19BTFBIQSk7CiAKICAgICAgICAgbV9kaWRBcHBseSA9IHRydWU7CiAg
ICAgfQpAQCAtNDM0LDcgKzQzNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgaWYgKCFtX3NhdmVkQmxlbmQuZW5hYmxlZCkKLSAgICAgICAgICAgIG1fY29udGV4
dC5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgICAgICBtX2NvbnRl
eHQuZGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkQpOwogCiAgICAgICAgIGNvbnN0IFJl
ZlB0cjxGbG9hdDMyQXJyYXk+JiBjb2xvciA9IG1fc2F2ZWRCbGVuZC5jb2xvcjsKICAgICAgICAg
bV9jb250ZXh0LmJsZW5kQ29sb3IoY29sb3ItPml0ZW0oMCksIGNvbG9yLT5pdGVtKDEpLCBjb2xv
ci0+aXRlbSgyKSwgY29sb3ItPml0ZW0oMykpOwpAQCAtNDU3LDE5ICs0NTcsMTkgQEAgcHJpdmF0
ZToKICAgICBib29sIGhhc0J1ZmZlckJpbmRpbmcoR0MzRGVudW0gcG5hbWUpCiAgICAgewogICAg
ICAgICBXZWJHTEFueSBiaW5kaW5nID0gbV9jb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElO
RykKKyAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9C
SU5ESU5HKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRy
PFdlYkdMRnJhbWVidWZmZXI+PihiaW5kaW5nKSAmJiBXVEY6OmdldDxSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4+KGJpbmRpbmcpOwotICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HKQorICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OlJFTkRFUkJVRkZFUl9CSU5ESU5HKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPj4oYmluZGluZykgJiYg
V1RGOjpnZXQ8UmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPj4oYmluZGluZyk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKICAgICBib29sIGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVyQXR0
YWNobWVudChHQzNEZW51bSBhdHRhY2htZW50KQogICAgIHsKLSAgICAgICAgV2ViR0xBbnkgYXR0
YWNobWVudFBhcmFtZXRlciA9IG1fY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSk7CisgICAgICAg
IFdlYkdMQW55IGF0dGFjaG1lbnRQYXJhbWV0ZXIgPSBtX2NvbnRleHQuZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgYXR0YWNo
bWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZ
UEUpOwogICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8dW5zaWduZWQ+KGF0dGFj
aG1lbnRQYXJhbWV0ZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
V1RGOjpnZXQ8dW5zaWduZWQ+KGF0dGFjaG1lbnRQYXJhbWV0ZXIpICE9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSkKKyAgICAgICAgaWYgKFdU
Rjo6Z2V0PHVuc2lnbmVkPihhdHRhY2htZW50UGFyYW1ldGVyKSAhPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUikpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTQ5MCw3ICs0OTAsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRBcHBseSB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMg
Ym9vbCBpc0hpZ2hQZXJmb3JtYW5jZUNvbnRleHQoY29uc3QgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiYgY29udGV4dCkKK3N0YXRpYyBib29sIGlzSGlnaFBlcmZvcm1hbmNlQ29udGV4dChjb25z
dCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiBjb250ZXh0KQogewogICAgIHJldHVy
biBjb250ZXh0LT5wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24oKSA9PSBXZWJHTFBvd2Vy
UHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlOwogfQpAQCAtNTQyLDkgKzU0Miw5IEBAIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjcmVhdGUoQ2FuCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZnJhbWUtPnNldHRp
bmdzKCkuZm9yY2VXZWJHTFVzZXNMb3dQb3dlcigpKSB7Ci0gICAgICAgICAgICBpZiAoYXR0cmli
dXRlcy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6
OkhpZ2hQZXJmb3JtYW5jZSkKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnBvd2VyUHJlZmVy
ZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNl
KQogICAgICAgICAgICAgICAgIExPRyhXZWJHTCwgIk92ZXJyaWRpbmcgcG93ZXJQcmVmZXJlbmNl
IGZyb20gaGlnaC1wZXJmb3JtYW5jZSB0byBsb3ctcG93ZXIuIik7Ci0gICAgICAgICAgICBhdHRy
aWJ1dGVzLnBvd2VyUHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNl
OjpMb3dQb3dlcjsKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMucG93ZXJQcmVmZXJlbmNlID0gR3Jh
cGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2VyOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHBhZ2UpCkBAIC01NzcsNyArNTc3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZShD
YW4KICAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiAgICAgfQogCi0gICAgYXV0byBj
b250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93
KTsKKyAgICBhdXRvIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKGF0
dHJpYnV0ZXMsIGhvc3RXaW5kb3cpOwogICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpIHsKICAgICAgICAgaWYgKGNhbnZhc0VsZW1lbnQpIHsKICAgICAg
ICAgICAgIGNhbnZhc0VsZW1lbnQtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LApAQCAtNjI3
LDcgKzYyNyw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UoQ2FudmFzQmFzZSYgY2FudmFzLCBXZWJHTENvCiAgICAgbV9jaGVja0ZvckNvbnRl
eHRMb3NzSGFuZGxpbmdUaW1lci5zdGFydE9uZVNob3QoY2hlY2tDb250ZXh0TG9zc0hhbmRsaW5n
RGVsYXkpOwogfQogCi1XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmIGNv
bnRleHQsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoQ2FudmFzQmFzZSYgY2FudmFz
LCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYgY29udGV4dCwgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogR1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0
KGNhbnZhcykKICAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQogICAgICwgbV9kaXNw
YXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcihjYW52YXMuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCAqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dExvc3RF
dmVudCkKQEAgLTY0Nyw3ICs2NDcsNyBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYQogICAgIAog
ICAgIG1fY29udGV4dC0+YWRkQ2xpZW50KCp0aGlzKTsKIAotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0
RGltcyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFY
X1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKIAogICAgIHNldHVwRmxhZ3MoKTsK
ICAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwpAQCAtNzIzLDcgKzcyMyw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fdW5w
YWNrQWxpZ25tZW50ID0gNDsKICAgICBtX3VucGFja0ZsaXBZID0gZmFsc2U7CiAgICAgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhID0gZmFsc2U7Ci0gICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVy
c2lvbiA9IEdyYXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0w7CisgICAgbV91
bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IEdyYXBoaWNzQ29udGV4dEdMOjpCUk9XU0VSX0RF
RkFVTFRfV0VCR0w7CiAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsKICAgICBtX2N1
cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxw
dHI7CkBAIC03NDcsMzAgKzc0NywzMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmluaXRpYWxpemVOZXdDb250ZXh0KCkKICAgICBtX2NvbG9yTWFza1swXSA9IG1fY29sb3JNYXNr
WzFdID0gbV9jb2xvck1hc2tbMl0gPSBtX2NvbG9yTWFza1szXSA9IHRydWU7CiAKICAgICBHQzNE
aW50IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VO
SVRTLCAmbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKICAgICBtX3RleHR1cmVVbml0cy5j
bGVhcigpOwogICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKICAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBudW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzOyArK2kpCiAgICAgICAgIG1fdW5yZW5kZXJhYmxlVGV4dHVyZVVuaXRzLmFkZChp
KTsKIAogICAgIEdDM0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmbnVtVmVy
dGV4QXR0cmlicyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRH
TDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmbnVtVmVydGV4QXR0cmlicyk7CiAgICAgbV9tYXhWZXJ0
ZXhBdHRyaWJzID0gbnVtVmVydGV4QXR0cmliczsKICAgICAKICAgICBtX21heFRleHR1cmVTaXpl
ID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNp
emUpOwogICAgIG1fbWF4VGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxD
b3VudChtX21heFRleHR1cmVTaXplLCBtX21heFRleHR1cmVTaXplKTsKICAgICBtX21heEN1YmVN
YXBUZXh0dXJlU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVT
aXplKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOwogICAgIG1f
bWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291bnQo
bV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKICAgICBt
X21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSwgJm1fbWF4UmVuZGVyYnVmZmVy
U2l6ZSk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFY
X1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKIAogICAgIC8vIFRo
ZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRfZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4K
ICAgICBtX21heERyYXdCdWZmZXJzID0gMDsKICAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAw
OwogCi0gICAgbV9iYWNrRHJhd0J1ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAg
IG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0NvbnRleHRHTDo6QkFDSzsKICAgICBtX2RyYXdC
dWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gZmFsc2U7CiAgICAgbV9kcmF3QnVmZmVy
c1N1cHBvcnRlZCA9IGZhbHNlOwogICAgIApAQCAtODY3LDcgKzg2Nyw3IEBAIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6On5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKCkKIAogICAgIGlmICgh
bV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CiAgICAgICAgIGRldGFjaEFuZFJlbW92ZUFs
bE9iamVjdHMoKTsKLSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAg
IGRlc3Ryb3lHcmFwaGljc0NvbnRleHRHTCgpOwogICAgICAgICBtX2NvbnRleHRHcm91cC0+cmVt
b3ZlQ29udGV4dCgqdGhpcyk7CiAgICAgfQogCkBAIC04ODMsNyArODgzLDcgQEAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6fldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoKQogICAgIH0KIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0cm95R3JhcGhpY3NDb250ZXh0
M0QoKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0cm95R3JhcGhpY3NDb250
ZXh0R0woKQogewogICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCiAgICAgICAg
IHJldHVybjsKQEAgLTk1MywzNyArOTUzLDM3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Y2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIG1hc2spCiAgICAgLy8gRGV0ZXJt
aW5lIGlmIGl0J3MgcG9zc2libGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQg
Zm9yIGFuZCB0aGlzIGNsZWFyLgogICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1f
c2Npc3NvckVuYWJsZWQ7CiAKLSAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpCisgICAgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChjb21iaW5lZENsZWFy
ICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQpKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/IG1fY2xlYXJDb2xvclsw
XSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1sxXSA/IG1f
Y2xlYXJDb2xvclsxXSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9y
TWFza1syXSA/IG1fY2xlYXJDb2xvclsyXSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NvbG9yTWFza1szXSA/IG1fY2xlYXJDb2xvclszXSA6IDApOwotICAgIGVsc2UKKyAg
ICB9IGVsc2UKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwogICAg
IG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpOwotICAgIEdDM0Ri
aXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsK
KyAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JV
RkZFUl9CSVQ7CiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzLT5kZXB0aCkgewotICAgICAgICBp
ZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1fZGVwdGhNYXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKSkKKyAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8
ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVS
X0JJVCkpCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMS4wZik7Ci0gICAgICAg
IGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAg
ICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklUOwogICAg
ICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKICAgICB9CiAgICAgaWYgKGNvbnRleHRB
dHRyaWJ1dGVzLT5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNr
ICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIGlmIChj
b21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVS
X0JJVCkpCiAgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNp
bCAmIG1fc3RlbmNpbE1hc2spOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2NvbnRleHQt
PmNsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBh
cmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOworICAgICAgICBjbGVh
ck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAg
bV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dEdMOjpGUk9OVCwg
MHhGRkZGRkZGRik7CiAgICAgfQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCAwKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCAwKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7
CiAKICAgICByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJC
aW5kaW5nKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQo
KSkpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkp
OwogICAgIG1fbGF5ZXJDbGVhcmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBjb21iaW5lZENsZWFy
OwpAQCAtOTkzLDE0ICs5OTMsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpy
ZXN0b3JlU3RhdGVBZnRlckNsZWFyKCkKIHsKICAgICAvLyBSZXN0b3JlIHRoZSBzdGF0ZSB0aGF0
IHRoZSBjb250ZXh0IHNldC4KICAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKLSAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgICAg
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpOwogICAg
IG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xvclsxXSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9yWzJdLCBtX2NsZWFyQ29sb3Jb
M10pOwogICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNrWzBdLCBtX2NvbG9yTWFz
a1sxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSwgbV9jb2xvck1h
c2tbM10pOwogICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2NsZWFyRGVwdGgpOwogICAgIG1f
Y29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsKLSAgICBtX2NvbnRleHQtPnN0
ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBtX3N0ZW5jaWxNYXNr
KTsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0R0w6
OkZST05ULCBtX3N0ZW5jaWxNYXNrKTsKICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRo
TWFzayk7CiB9CiAKQEAgLTEwNzgsMTIgKzEwNzgsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBtX2NvbnRleHQt
PnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CiAKICAgICBhdXRvJiB0ZXh0dXJlVW5pdCA9IG1fdGV4
dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXh0dXJlVW5p
dC50ZXh0dXJlMkRCaW5kaW5nLmdldCgpKSk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleHR1cmVVbml0LnRl
eHR1cmUyREJpbmRpbmcuZ2V0KCkpKTsKICAgICBpZiAodGV4dHVyZVVuaXQudGV4dHVyZTJEQmlu
ZGluZyAmJiB0ZXh0dXJlVW5pdC50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1
cmUodGV4dHVyZUV4dGVuc2lvbkZsYWdzKCkpKQogICAgICAgICBtX3VucmVuZGVyYWJsZVRleHR1
cmVVbml0cy5hZGQobV9hY3RpdmVUZXh0dXJlVW5pdCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9yWmVybyht
X3JlbmRlcmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJi
dWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fcmVu
ZGVyYnVmZmVyQmluZGluZy5nZXQoKSkpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykK
LSAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAg
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CiB9CiAKIGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdApA
QCAtMTExMSwxOSArMTExMSwxOSBAQCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJh
d2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0CiB1bnNpZ25lZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpzaXplSW5CeXRlcyhHQzNEZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6QllURToKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEYnl0ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9CWVRFOgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U0hPUlQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0KTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6SU5UOgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9JTlQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVpbnQpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZMT0FUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTEzNCwxMSArMTEzNCwxMSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKIHsK
ICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2YgcmFu
Z2UiKTsKKyAgICBpZiAodGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCA+PSBt
X3RleHR1cmVVbml0cy5zaXplKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImFjdGl2ZVRleHR1cmUiLCAidGV4dHVyZSB1bml0
IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fYWN0aXZlVGV4
dHVyZVVuaXQgPSB0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwOworICAgIG1f
YWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUw
OwogICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIApAQCAtMTE0Nyw3
ICsxMTQ3LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphdHRhY2hTaGFkZXIo
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlcioKICAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9n
cmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiYXR0YWNoU2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNo
YWRlciIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVyIGF0dGFjaG1lbnQgYWxyZWFk
eSBoYXMgc2hhZGVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5h
dHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclplcm8oc2hhZGVyKSk7
CkBAIC0xMTYzLDExICsxMTYzLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpCiAgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQXR0
cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRBdHRyaWJMb2Nh
dGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYmluZEF0dHJpYkxvY2F0aW9u
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQt
PmJpbmRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsK
QEAgLTExODAsNyArMTE4MCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hl
Y2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAob2JqZWN0KSB7CiAgICAgICAgIGlmICghb2JqZWN0LT52YWxp
ZGF0ZShjb250ZXh0R3JvdXAoKSwgKnRoaXMpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
Im9iamVjdCBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGRlbGV0ZWQgPSAhb2JqZWN0LT5vYmplY3QoKTsKQEAg
LTExOTYsMTIgKzExOTYsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5k
QnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikKICAgICBpZiAoZGVs
ZXRlZCkKICAgICAgICAgYnVmZmVyID0gbnVsbHB0cjsKICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZl
ci0+Z2V0VGFyZ2V0KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiYmluZEJ1ZmZlciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRh
cmdldHMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAiYmluZEJ1ZmZlciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3
aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpCisgICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSKQogICAgICAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQogICAgICAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPnNldEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIpOwogICAgIGVsc2Ugewog
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKQEAgLTEyMDksMjIgKzEyMDksMjIgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
V2ViR0xCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgaWYgKGlzV2ViR0wyKCkpIHsKICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfUkVBRF9CVUZGRVI6CisgICAgICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1JFQURfQlVGRkVSOgogICAgICAgICAg
ICAgICAgIG1fYm91bmRDb3B5UmVhZEJ1ZmZlciA9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPUFlfV1JJVEVfQlVG
RkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9XUklURV9CVUZG
RVI6CiAgICAgICAgICAgICAgICAgbV9ib3VuZENvcHlXcml0ZUJ1ZmZlciA9IGJ1ZmZlcjsKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBJWEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UElYRUxfUEFDS19CVUZGRVI6CiAgICAgICAgICAgICAgICAgbV9ib3VuZFBpeGVsUGFja0J1ZmZl
ciA9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgogICAgICAgICAgICAgICAgIG1f
Ym91bmRQaXhlbFVucGFja0J1ZmZlciA9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgogICAgICAgICAgICAgICAgIG1fYm91bmRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlciA9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVI6CiAgICAgICAgICAgICAgICAgbV9ib3VuZFVu
aWZvcm1CdWZmZXIgPSBidWZmZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBkZWZhdWx0OgpAQCAtMTIzNCw3ICsxMjM0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcikK
ICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmICghc3VjY2VzcykgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRC
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJiaW5kQnVmZmVyIiwgImludmFsaWQg
dGFyZ2V0Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjU0
LDIzICsxMjU0LDIzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlCiAKICAgICBib29sIGlzV2Vi
R0wyRHJhd0ZyYW1lYnVmZmVyVGFyZ2V0ID0gZmFsc2U7CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAg
ICBpc1dlYkdMMkRyYXdGcmFtZWJ1ZmZlclRhcmdldCA9IGlzV2ViR0wyKCkgJiYgdGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0ZSQU1FQlVGRkVSOworICAgIGlzV2ViR0wyRHJhd0Zy
YW1lYnVmZmVyVGFyZ2V0ID0gaXNXZWJHTDIoKSAmJiB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OkRSQVdfRlJBTUVCVUZGRVI7CiAjZW5kaWYKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
IAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSIHx8IGlz
V2ViR0wyRHJhd0ZyYW1lYnVmZmVyVGFyZ2V0KSB7CisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIgfHwgaXNXZWJHTDJEcmF3RnJhbWVidWZmZXJUYXJnZXQp
IHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7CiAgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoV0VCR0wyKQotICAgIGlmIChpc1dlYkdMMigp
ICYmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSIHx8IHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUikpIHsKKyAgICBpZiAoaXNXZWJH
TDIoKSAmJiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiB8fCB0YXJn
ZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIpKSB7CiAgICAgICAgIG1f
cmVhZEZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKICAgICAgICAgc3VjY2VzcyA9IHRydWU7
CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1ZmZl
ciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFsaWQgdGFy
Z2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEyODcsOCArMTI4Nyw4IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIFdlYkdMUmVuZGVyYnVmCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoZGVsZXRlZCkK
ICAgICAgICAgcmVuZGVyQnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0
YXJnZXQiKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZG
RVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSByZW5kZXJCdWZmZXI7
CkBAIC0xMzA1LDE5ICsxMzA1LDE5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1CiAgICAgaWYg
KGRlbGV0ZWQpCiAgICAgICAgIHRleHR1cmUgPSBudWxscHRyOwogICAgIGlmICh0ZXh0dXJlICYm
IHRleHR1cmUtPmdldFRhcmdldCgpICYmIHRleHR1cmUtPmdldFRhcmdldCgpICE9IHRhcmdldCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJiaW5kVGV4dHVyZSIsICJ0ZXh0dXJlcyBjYW4gbm90IGJlIHVzZWQgd2l0aCBt
dWx0aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBu
b3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBHQzNEaW50IG1heExldmVsID0gMDsKICAgICBhdXRvJiB0ZXh0dXJlVW5pdCA9IG1f
dGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdOwotICAgIGlmICh0YXJnZXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFXzJEKSB7CiAgICAgICAgIHRleHR1cmVVbml0LnRleHR1cmUyREJp
bmRpbmcgPSB0ZXh0dXJlOwogICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOwog
ICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUodGV4
dHVyZUV4dGVuc2lvbkZsYWdzKCkpKQogICAgICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJl
VW5pdHMuYWRkKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBtX3VucmVuZGVyYWJsZVRleHR1cmVVbml0cy5yZW1vdmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7
Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVApIHsKKyAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV9DVUJFX01BUCkgewogICAgICAgICB0ZXh0dXJlVW5pdC50ZXh0dXJlQ3ViZU1hcEJpbmRp
bmcgPSB0ZXh0dXJlOwogICAgICAgICBtYXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZl
bDsKICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+bmVlZFRvVXNlQmxhY2tUZXh0dXJl
KHRleHR1cmVFeHRlbnNpb25GbGFncygpKSkKQEAgLTEzMjUsNyArMTMyNSw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJH
TFRleHR1cmUqIHRleHR1CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdW5yZW5kZXJhYmxl
VGV4dHVyZVVuaXRzLnJlbW92ZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwgImlu
dmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CkBAIC0xMzg3LDE1ICsx
Mzg3LDE1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNECiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUg
PCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplIDwgMCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICghc2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA9PSAwIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlw
dHI+KHNpemUpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTE0MTIsNyArMTQxMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVm
ZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIE9wdGlvbmFsPEJ1ZmZlckRhdGFTCiAgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZGF0YSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlckRhdGEiLCAibnVsbCBkYXRhIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJudWxs
IGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKQEAgLTE0MjEsNyArMTQyMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIE9wdGlvbmFsPEJ1ZmZlckRhdGFT
CiAKICAgICBXVEY6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVy
LT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEuZ2V0KCkpKSB7Ci0gICAgICAgICAgICB0aGlzLT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJp
bnZhbGlkIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE0
MzgsMTEgKzE0MzgsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJT
dWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFdlYkdM
QnVmZmVyPiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJE
YXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIFJlZlB0
cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVm
ZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlNUQVRJQ19EUkFXKTsKICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJv
ZmZzZXQgPCAwIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFkYXRhKQpAQCAt
MTQ1MCw3ICsxNDUwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJT
dWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwKIAogICAgIFdURjo6dmlz
aXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZl
clN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS5nZXQoKSkpIHsK
LSAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Cisg
ICAgICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE0NjYsMjUgKzE0NjYsMjUgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgbG9uZyBsb25nIG9mZnNldCwKIEdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQogewogICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUikgewogI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgICAgIGlmIChpc1dl
YkdMMSgpIHx8ICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfRlJBTUVCVUZGRVIg
JiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSkgeworICAg
ICAgICBpZiAoaXNXZWJHTDEoKSB8fCAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpEUkFX
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJV
RkZFUikpIHsKICNlbmRpZgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX0VOVU0sICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQgdGFy
Z2V0Iik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAg
ICB9CiAjZW5kaWYKICAgICB9CiAKLSAgICBhdXRvIHRhcmdldEZyYW1lYnVmZmVyID0gKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1
ZmZlckJpbmRpbmcgOiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICBhdXRvIHRhcmdldEZyYW1l
YnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUikg
PyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgOiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKIAogICAg
IGlmICghdGFyZ2V0RnJhbWVidWZmZXIgfHwgIXRhcmdldEZyYW1lYnVmZmVyLT5vYmplY3QoKSkK
LSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURTsK
ICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CiAgICAg
R0MzRGVudW0gcmVzdWx0ID0gdGFyZ2V0RnJhbWVidWZmZXItPmNoZWNrU3RhdHVzKCZyZWFzb24p
OwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBM
RVRFKSB7CisgICAgaWYgKHJlc3VsdCAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJf
Q09NUExFVEUpIHsKICAgICAgICAgU3RyaW5nIHN0ciA9ICJXZWJHTDogY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1czoiICsgU3RyaW5nKHJlYXNvbik7CiAgICAgICAgIHByaW50VG9Db25zb2xlKE1lc3Nh
Z2VMZXZlbDo6V2FybmluZywgc3RyKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1NDUs
NyArMTU0NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcGlsZVNoYWRl
cihXZWJHTFNoYWRlciogc2hhZGVyKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5j
b21waWxlU2hhZGVyKG9iamVjdE9yWmVybyhzaGFkZXIpKTsKICAgICBHQzNEaW50IHZhbHVlOwot
ICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKKyAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHRHTDo6Q09NUElMRV9T
VEFUVVMsICZ2YWx1ZSk7CiAgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7CiAKICAgICBhdXRv
KiBjYW52YXMgPSBodG1sQ2FudmFzKCk7CkBAIC0xNTY2LDExICsxNTY2LDExIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghdmFsaWRhdGVDb21w
cmVzc2VkVGV4Rm9ybWF0KGludGVybmFsZm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleEltYWdl
MkQiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleEltYWdlMkQi
LCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChib3JkZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJib3JkZXIgbm90IDAi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUUsICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJib3JkZXIgbm90IDAiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMo
ImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50
ZXJuYWxmb3JtYXQpKQpAQCAtMTU5Miw3ICsxNTkyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSk7CisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFKTsKICAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKIH0KIApAQCAtMTYwMyw3ICsxNjAz
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xl
dmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEIiwgImludmFsaWQgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSgiY29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEpKQpAQCAtMTYxNCwy
OSArMTYxNCwyOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90IG1h
dGNoIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwg
ImZvcm1hdCBkb2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKCJj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdGV4LmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhLmJ5dGVM
ZW5ndGgoKSwgZGF0YS5iYXNlQWRkcmVzcygpKTsKKyAgICBncmFwaGljc0NvbnRleHRHTCgpLT5j
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEuYnl0ZUxlbmd0aCgpLCBkYXRhLmJhc2VBZGRyZXNz
KCkpOwogICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOwogfQogCiBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlU2V0dGFibGVUZXhJbnRlcm5hbEZvcm1hdChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogewogICAgIHN3aXRjaCAo
aW50ZXJuYWxGb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01Q
T05FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQyNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9DT01QT05FTlQzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEgyNF9TVEVOQ0lMODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVO
Q0lMODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQsIG9ubHkgcmVuZGVyZWQgdG8i
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01Q
T05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0lOREVYODoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQsIG9ubHkgcmVuZGVyZWQgdG8iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTY1Niwy
MyArMTY1NiwyMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbAogICAgICAgICByZXR1cm47CiAg
ICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3Zl
cmZsb3cgaGFwcGVucyBmaXJzdC4KICAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zm
c2V0ICsgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNp
b25zIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5nZXRXaWR0
aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWlnaHQodGFy
Z2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJyZWN0YW5nbGUgb3V0IG9m
IHJhbmdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91dCBvZiByYW5n
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0
ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICBpZiAoIXZhbGlk
YXRlU2V0dGFibGVUZXhJbnRlcm5hbEZvcm1hdCgiY29weVRleFN1YkltYWdlMkQiLCBpbnRlcm5h
bEZvcm1hdCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRD
b2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxGb3JtYXQsIGdldEJvdW5kRnJhbWVi
dWZmZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJmcmFt
ZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFn
ZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21w
bGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgJnJlYXNvbikpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNz
Q29udGV4dEdMKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJ
bWFnZTJEIiwgcmVhc29uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29t
cG9zaXRlZCgpOwpAQCAtMTY4MiwyMSArMTY4MiwyMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bAogICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
cldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBl
ZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewogICAgICAgICBHQzNEZW51bSBm
b3JtYXQ7CiAgICAgICAgIEdDM0RlbnVtIHR5cGU7Ci0gICAgICAgIGlmICghR3JhcGhpY3NDb250
ZXh0M0Q6OnBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KHRleC0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCksIGZvcm1hdCwgdHlwZSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb3B5
VGV4U3ViSW1hZ2UyRCIsICJUZXh0dXJlIGhhcyB1bmtub3duIGludGVybmFsIGZvcm1hdCIpOwor
ICAgICAgICBpZiAoIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb3NzaWJsZUZvcm1hdEFuZFR5
cGVGb3JJbnRlcm5hbEZvcm1hdCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
LCBmb3JtYXQsIHR5cGUpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiY29weVRleFN1YkltYWdlMkQiLCAiVGV4dHVyZSBo
YXMgdW5rbm93biBpbnRlcm5hbCBmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwogICAgICAgICBp
ZiAod2lkdGggJiYgaGVpZ2h0KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaXplOwogICAgICAg
ICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCBu
dWxscHRyKTsKLSAgICAgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpIHsKKyAgICAgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9f
RVJST1IpIHsKICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlU
ZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgemVybyA9IG1ha2VVbmlxdWVBcnJheTx1bnNp
Z25lZCBjaGFyPihzaXplKTsKICAgICAgICAgICAgIGlmICghemVybykgewotICAgICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
Y29weVRleFN1YkltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY29weVRl
eFN1YkltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsK
QEAgLTE3NjAsOCArMTc2MCw4IEBAIFJlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjcmVhdGVTaGFkZXIiLCAiaW52YWxp
ZCBzaGFkZXIgdHlwZSIpOworICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpWRVJU
RVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUikg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCAiY3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xNzgyLDcgKzE3ODIsNyBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQogICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgKnRoaXMp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImRlbGV0ZSIsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29u
dGV4dCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlz
IGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAob2JqZWN0
LT5pc0RlbGV0ZWQoKSkKQEAgLTE3OTAsNyArMTc5MCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiAgICAgaWYgKG9i
amVjdC0+b2JqZWN0KCkpCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhl
cmUgYmVjYXVzZSB3ZSB3YW50CiAgICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5i
b3VuZC4KLSAgICAgICAgb2JqZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7
CisgICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dEdMKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xODExLDE3ICsxODExLDE3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJh
bWVidWZmZXIpCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICBpZiAoaXNXZWJHTDIoKSAmJiBmcmFt
ZWJ1ZmZlciA9PSBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAgICAgICAgbV9yZWFkRnJh
bWVidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVIsIDApOworICAgICAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJV
RkZFUiwgMCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fZnJhbWVi
dWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsK
ICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBpZiAoaXNXZWJHTDIoKSkKLSAgICAgICAgICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0ZSQU1F
QlVGRkVSLCAwKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dEdMOjpEUkFXX0ZSQU1FQlVGRkVSLCAwKTsKICAgICAgICAgZWxzZQogI2VuZGlm
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCAwKTsKICAgICB9CiB9CiAKQEAgLTE4
OTEsNyArMTg5MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVwdGhSYW5n
ZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQogICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoek5lYXIgPiB6RmFyKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2Ui
LCAiek5lYXIgPiB6RmFyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0
LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKQEAgLTE5MDIsMjMgKzE5MDIsMjMgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBXZWJHTFNoYWRlcioKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGV0YWNoU2hh
ZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZGV0YWNoU2hhZGVyIiwgInNo
YWRlciBub3QgYXR0YWNoZWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRl
eHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFk
ZXIpKTsKLSAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAg
c2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dEdMKCkpOwogfQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGUoR0MzRGVudW0gY2FwKQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZGlzYWJsZSIs
IGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX1RFU1QpIHsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVO
Q0lMX1RFU1QpIHsKICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICBh
cHBseVN0ZW5jaWxUZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGNhcCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKQorICAgIGlmIChjYXAgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCkKICAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZh
bHNlOwogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwogfQpAQCAtMTkyOCw3ICsxOTI4LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAi
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xOTQyLDcgKzE5NDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVOUE9UVGV4dHVyZUxldmVs
KEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBsZXZlbCwgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKQogewogICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBs
ZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
ZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtMTk1OSw3ICsxOTU5LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW4KICAgICBpZiAo
b2Zmc2V0IDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgeworICAgIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9JTlQpIHsKICAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIGlu
dCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDQgZm9yIGFsaWdubWVudCByZWFz
b25zLgogICAgICAgICBpZiAob2Zmc2V0ICUgNCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE5NzAsNyArMTk3MCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVuCiAgICAgICAgIEdD
M0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyA0OwogICAg
ICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVCkgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfU0hPUlQpIHsKICAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFy
cmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMu
CiAgICAgICAgIGlmIChvZmZzZXQgJSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTk4MSw3ICsxOTgxLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW4KICAgICAgICAgR0MzRHNp
emVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDI7CiAgICAgICAg
IGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEUpIHsKICAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZm
ZXItPmJ5dGVMZW5ndGgoKTsKICAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0g
b2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjAwOSwxMyArMjAwOSwxMyBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNp
c2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgogICAgICAgICBtYXhJ
bmRleCA9IGdldE1heEluZGV4PEdDM0R1aW50PihidWZmZXIsIG9mZnNldCwgY291bnQpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKICAgICAgICAgbWF4
SW5kZXggPSBnZXRNYXhJbmRleDxHQzNEdXNob3J0PihidWZmZXIsIG9mZnNldCwgY291bnQpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6CiAgICAgICAgIG1h
eEluZGV4ID0gZ2V0TWF4SW5kZXg8R0MzRHVieXRlPihidWZmZXIsIG9mZnNldCwgY291bnQpOwog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMDk0LDcgKzIwOTQsNyBAQCBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVt
ZW50Q291bnQsCiAgICAgICAgICAgICBpZiAodXNpbmdTaW11bGF0ZWRBcnJheUJ1ZmZlcikgewog
ICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZW5hYmxl
ZCAmJiBzdGF0ZS5pc0JvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmJ1
ZmZlckJpbmRpbmctPmdldFRhcmdldCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIgfHwgc3RhdGUuYnVmZmVyQmluZGluZy0+Z2V0VGFyZ2V0KCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUu
YnVmZmVyQmluZGluZy0+Z2V0VGFyZ2V0KCkgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JV
RkZFUiB8fCBzdGF0ZS5idWZmZXJCaW5kaW5nLT5nZXRUYXJnZXQoKSA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gISFzdGF0ZS5idWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMjEwOSwxMSArMjEwOSwxMSBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50
Q291bnQsCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlV2ViR0xPYmpl
Y3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0KQogewogICAg
IGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVj
dCBvciBvYmplY3QgZGVsZXRlZCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgKnRoaXMpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29u
dGV4dCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpA
QCAtMjEyOCw3ICsyMTI4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qg
b3IgY291bnQgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTIxMzgs
NyArMjEzOCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3
QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzCiAgICAgfQogCiAgICAgaWYgKHBy
aW1pdGl2ZUNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0yMTQ2LDE3ICsyMTQ2LDE3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
CiAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFN1bSA9IENoZWNr
ZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+KGZpcnN0KSArIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+KGNvdW50KTsKICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93
PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOwogICAgIGlmIChjaGVja2Vk
U3VtLmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dl
ZCgpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwg
Y2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlU2ltdWxhdGVkVmVy
dGV4QXR0cmliMChjaGVja2VkU3VtLnVuc2FmZUdldCgpIC0gMSkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNpbXVs
YXRlZCB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1w
dCB0byBhY2Nlc3Mgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzaW11bGF0ZWQgdmVydGV4QXR0
cmliMCBhcnJheSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgY29uc3Qg
Y2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNz
Q29udGV4dDNEKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCByZWFzb24pOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dEdMKCksICZyZWFzb24pKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0yMTcyLDIxICsyMTcyLDIxIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hP
UlQ6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6CiAgICAgICAg
IGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQgfHwgaXNXZWJHTDIoKSkKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
eXBlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYgKGNvdW50
IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQg
PCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0yMTk2LDE4ICsyMTk2LDE4IEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHCiAgICAgfQogICAgIAogICAgIGlmIChwcmltaXRpdmVDb3VudCA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgInByaW1jb3VudCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAK
ICAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVy
KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZFUiBib3Vu
ZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRfQVJSQVlfQlVGRkVSIGJvdW5k
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBFbnN1cmUgd2UgaGF2
ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZS4KICAgICBpZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5
U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxF
TUVOVF9BUlJBWV9CVUZGRVIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBv
ZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIWNvdW50KQpAQCAtMjIxNiwyNSArMjIxNiwyNSBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgRwogICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CiAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZFByaW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKICAgICBpZiAo
Y2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFz
T3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mg
b3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRv
IGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAogICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUs
IG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBj
aGVja2VkUHJpbWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7CiAgICAgICAgIGlmICghdmFsaWRh
dGVJbmRleEFycmF5UHJlY2lzZShjaGVja2VkQ291bnQudW5zYWZlR2V0KCksIHR5cGUsIHN0YXRp
Y19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5zYWZlR2V0
KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBv
ZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8g
YWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIXZhbGlkYXRlU2ltdWxhdGVkVmVydGV4QXR0
cmliMChudW1FbGVtZW50cykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFj
Y2VzcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNpbXVsYXRlZCB2ZXJ0ZXhBdHRyaWIwIGFy
cmF5Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0c2lkZSB0
aGUgYm91bmRzIG9mIHRoZSBzaW11bGF0ZWQgdmVydGV4QXR0cmliMCBhcnJheSIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJm
cmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAmcmVh
c29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKKyAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHRHTCgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgcmVhc29uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAK
QEAgLTIyNTYsNyArMjI1Niw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJh
d0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6CiAgICAgICAgIGF1
dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZp
cnN0ICsgY291bnQgLSAxKTsKICAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0
dXMpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRy
aWJ1dGUgYnVmZmVyLgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5cyIsICJ1bmFibGUgdG8gc2ltdWxh
dGUgdmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5cyIsICJ1bmFi
bGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZl
cnRleEF0dHJpYjBTdGF0dXMudmFsdWUoKTsKQEAgLTIyODIsMTEgKzIyODIsMTEgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXoKIHN0YXRpYyBHQzNEdWludCBnZXRSZXN0YXJ0SW5kZXgoR0MzRGVu
dW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X0JZVEU6CiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdDM0R1Ynl0ZT46Om1h
eCgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgogICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxHQzNEdXNob3J0Pjo6bWF4KCk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVDoKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0MzRHVpbnQ+Ojpt
YXgoKTsKICAgICB9CiAKQEAgLTIzMTIsNyArMjMxMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzCiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0gc2ltdWxhdGVW
ZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKICAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0
dHJpYjBTdGF0dXMpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIHNpbXVsYXRl
IHRoZSBhdHRyaWJ1dGUgYnVmZmVyLgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0VsZW1lbnRzIiwgInVuYWJs
ZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3RWxl
bWVudHMiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVk
ID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzLnZhbHVlKCk7CkBAIC0yMzQ0LDEyICsyMzQ0
LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlKEdDM0RlbnVtIGNh
cCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFi
aWxpdHkoImVuYWJsZSIsIGNhcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09IEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpIHsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNz
Q29udGV4dEdMOjpTVEVOQ0lMX1RFU1QpIHsKICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCA9IHRy
dWU7CiAgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUKQogICAgICAgICBtX3NjaXNz
b3JFbmFibGVkID0gdHJ1ZTsKICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwogfQpAQCAtMjM1
OSw3ICsyMzU5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0
cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5n
ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMzg3LDMzICsyMzg3LDMzIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51CiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAocmVu
ZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgaWYgKHJl
bmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
ICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4
dEdyb3VwKCksICp0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJu
byBidWZmZXIgb3IgYnVmZmVyIG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBidWZmZXIgb3IgYnVmZmVyIG5vdCBmcm9tIHRoaXMg
Y29udGV4dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChidWZmZXIgJiYgIWJ1
ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIiwgImJ1ZmZlciBoYXMgbmV2ZXIgYmVlbiBib3VuZCIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlciIsICJidWZmZXIgaGFzIG5ldmVyIGJlZW4gYm91bmQiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVy
QmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZm
ZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1f
cmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOwogCiAgICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1
cnJlbnQKICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBs
YWNlIG9mIHRoZSBkZWZhdWx0CiAgICAgLy8gRkJPLgogICAgIGlmICghdGFyZ2V0RnJhbWVidWZm
ZXIgfHwgIXRhcmdldEZyYW1lYnVmZmVyLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3Ja
ZXJvKGJ1ZmZlcik7CiAjaWYgIVVTRShBTkdMRSkKLSAgICBpZiAoYXR0YWNobWVudCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwotICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJP
YmplY3QpOworICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCByZW5k
ZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRB
Q0hNRU5ULCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CiAgICAgfSBlbHNlCiAj
ZW5kaWYKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKQEAgLTI0MjYs
MjkgKzI0MjYsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGEKICAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmIChsZXZlbCAmJiBpc1dlYkdMMSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJl
MkQiLCAibGV2ZWwgbm90IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJsZXZlbCBu
b3QgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0ZXh0dXJlICYmICF0ZXh0
dXJlLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgKnRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVm
ZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlzIGNvbnRl
eHQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gdGV4dHVyZSBvciB0ZXh0
dXJlIG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byB0YXJnZXRGcmFtZWJ1ZmZlciA9ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFQURfRlJBTUVCVUZGRVIpID8gbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nIDogbV9mcmFtZWJ1
ZmZlckJpbmRpbmc7CisgICAgYXV0byB0YXJnZXRGcmFtZWJ1ZmZlciA9ICh0YXJnZXQgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIpID8gbV9yZWFkRnJhbWVidWZmZXJCaW5k
aW5nIDogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CiAKICAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVm
YXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAogICAgIC8vIGltcGxl
bWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQK
ICAgICAvLyBGQk8uCiAgICAgaWYgKCF0YXJnZXRGcmFtZWJ1ZmZlciB8fCAhdGFyZ2V0RnJhbWVi
dWZmZXItPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZy
YW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZy
YW1lYnVmZmVyIGJvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlT2JqZWN0ID0gb2JqZWN0T3JaZXJvKHRleHR1cmUpOwogCiAjaWYgIVVT
RV9BTkdMRQotICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCB0ZXh0YXJn
ZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQs
IHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgIGlmIChhdHRhY2htZW50ID09
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsKKyAgICAgICAg
bV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2
ZWwpOwogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxl
dmVsKTsKQEAgLTI0NzIsMTIgKzI0NzIsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCiAgICAgaWYgKCF0ZXgpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRo
ZSBzYW1lIHNpemUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93
ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1lIHNpemUiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMzkxNi4gQ29tcHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAy
OgogICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFw
IiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09Q
RVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBtYXBzIGZy
b20gY29tcHJlc3NlZCB0ZXh0dXJlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KCF2YWxpZGF0ZVNldHRhYmxlVGV4SW50ZXJuYWxGb3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4
LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIDApKSkKQEAgLTI0ODcsMTUgKzI0ODcsMTUgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0
YXJnZXQpCiAgICAgLy8gb24gTWFjLiAgUmVtb3ZlIHRoZSBoYWNrIG9uY2UgdGhpcyBkcml2ZXIg
YnVnIGlzIGZpeGVkLgogI2lmIE9TKERBUldJTikKICAgICBib29sIG5lZWRUb1Jlc2V0TWluRmls
dGVyID0gZmFsc2U7Ci0gICAgaWYgKHRleC0+Z2V0TWluRmlsdGVyKCkgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUikgewotICAgICAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKTsKKyAgICBpZiAodGV4LT5n
ZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KSB7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01J
UE1BUF9MSU5FQVIpOwogICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7CiAgICAg
fQogI2VuZGlmCiAgICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogI2lmIE9T
KERBUldJTikKICAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIHRleC0+Z2V0TWluRmlsdGVyKCkpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCB0ZXgt
PmdldE1pbkZpbHRlcigpKTsKICNlbmRpZgogICAgIHRleC0+Z2VuZXJhdGVNaXBtYXBMZXZlbElu
Zm8oKTsKIH0KQEAgLTI1MDQsNyArMjUwNCw3IEBAIFJlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgiZ2V0QWN0aXZlQXR0cmliIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIGluZm87CisgICAgR3JhcGhpY3NDb250
ZXh0R0w6OkFjdGl2ZUluZm8gaW5mbzsKICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlQXR0
cmliKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMjUxNyw3ICsyNTE3LDcgQEAgUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0K
IHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KCJnZXRBY3RpdmVVbmlmb3JtIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIGluZm87CisgICAgR3JhcGhpY3ND
b250ZXh0R0w6OkFjdGl2ZUluZm8gaW5mbzsKICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZl
VW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCkBAIC0yNTM1LDggKzI1
MzUsOCBAQCBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZAogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZXNbXSA9IHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFE
RVIsCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVIKICAgICB9Owog
ICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJPYmplY3RzOwogICAgIGZvciAo
YXV0byBzaGFkZXJUeXBlIDogc2hhZGVyVHlwZXMpIHsKQEAgLTI1NTgsNyArMjU1OCw3IEBAIEdD
M0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBjb25zCiAgICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCiAg
ICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2V0QXR0cmliTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CiAgICAgICAgIHJl
dHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24o
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKQEAgLTI1NzAsMzQgKzI1NzAsMzQgQEAgV2Vi
R0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29s
IHZhbGlkID0gZmFsc2U7Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSIHx8IHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9C
VUZGRVIpCisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVS
IHx8IHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCiAg
ICAgICAgIHZhbGlkID0gdHJ1ZTsKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgIGlmIChpc1dlYkdM
MigpKSB7CiAgICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPUFlfUkVBRF9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPUFlfV1JJVEVfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQ
SVhFTF9QQUNLX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxf
VU5QQUNLX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9S
TV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfUkVBRF9CVUZG
RVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfV1JJVEVfQlVGRkVSOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVI6CiAgICAgICAgICAgICB2
YWxpZCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBpZiAoIXZhbGlkKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZl
clBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpF
ICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfVVNBR0UpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1
ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgaWYgKHBuYW1l
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6QlVGRkVSX1VTQUdFKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAg
ICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRlcml2
KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4
dDNEOjpCVUZGRVJfU0laRSkKKyAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkJV
RkZFUl9TSVpFKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YWx1ZSk7CiB9CkBAIC0yNjA5LDcgKzI2MDksNyBAQCBPcHRpb25hbDxXZWJH
TENvbnRleHRBdHRyaWJ1dGVzPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRDb250ZXh0
QXR0cmlidXRlcwogCiAgICAgLy8gQWxzbywgd2UgbmVlZCB0byBlbmZvcmNlIHJlcXVlc3RlZCB2
YWx1ZXMgb2YgImZhbHNlIiBmb3IgZGVwdGgKICAgICAvLyBhbmQgc3RlbmNpbCwgcmVnYXJkbGVz
cyBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgdW5kZXJseWluZwotICAgIC8vIEdyYXBoaWNzQ29u
dGV4dDNELgorICAgIC8vIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogCiAgICAgYXV0byBhdHRy
aWJ1dGVzID0gbV9jb250ZXh0LT5jb250ZXh0QXR0cmlidXRlcygpOwogICAgIGlmICghbV9hdHRy
aWJ1dGVzLmRlcHRoKQpAQCAtMjYyMiw3ICsyNjIyLDcgQEAgT3B0aW9uYWw8V2ViR0xDb250ZXh0
QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Q29udGV4dEF0dHJpYnV0
ZXMKIEdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEVycm9yKCkKIHsKICAg
ICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6
Ok5PX0VSUk9SOwogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9yKCk7CiB9CiAKQEAgLTI2
MzMsMTggKzI2MzMsMTggQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEcKIAogICAgIEdDM0RpbnQg
dmFsdWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERUxFVEVfU1RBVFVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFTEVURV9T
VEFUVVM6CiAgICAgICAgIHJldHVybiBwcm9ncmFtLT5pc0RlbGV0ZWQoKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VkFMSURBVEVfU1RBVFVTOgogICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihv
YmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktf
U1RBVFVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTktfU1RBVFVTOgogICAgICAg
ICByZXR1cm4gcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QVRU
QUNIRURfU0hBREVSUzoKICAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVTOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpBQ1RJVkVfQVRUUklCVVRFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJ
VkVfVU5JRk9STVM6CiAjaWYgVVNFKEFOR0xFKQogICAgICAgICBtX2NvbnRleHQtPmdldFByb2dy
YW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwogI2Vsc2UKQEAgLTI2
NTIsNyArMjY1Miw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBy
b2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHCiAjZW5kaWYgLy8gVVNFKEFO
R0xFKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1Q
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UHJvZ3JhbVBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIH0KQEAgLTI2NjgsNDIgKzI2NjgsNDIgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwg
R0MKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwor
ICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUikgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAi
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAh
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0
SW50ZXJuYWxGb3JtYXQoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTAorICAg
IGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwKICAgICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+aXNWYWxpZCgpKSB7CiAgICAgICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSk7CiAgICAgICAgIGludCB2YWx1ZSA9IDA7CiAgICAgICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfV0lEVEg6CiAgICAgICAg
ICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
SEVJR0hUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfSEVJ
R0hUOgogICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEhlaWdo
dCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9SRURfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKICAgICAgICAgICAgIHZhbHVlID0gMDsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfREVQVEhfU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVG
RkVSX0RFUFRIX1NJWkU6CiAgICAgICAgICAgICB2YWx1ZSA9IDI0OwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lM
X1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9TVEVO
Q0lMX1NJWkU6CiAgICAgICAgICAgICB2YWx1ZSA9IDg7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1B
VDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0lOVEVSTkFM
X0ZPUk1BVDoKICAgICAgICAgICAgIHJldHVybiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldElu
dGVybmFsRm9ybWF0KCk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMjcx
MSwyMCArMjcxMSwyMCBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQwogCiAgICAgR0MzRGludCB2
YWx1ZSA9IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfSEVJR0hUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9SRURfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JF
RU5fU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9T
SVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpF
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVO
REVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
QlVGRkVSX1NURU5DSUxfU0laRToKICAgICAgICAgbV9jb250ZXh0LT5nZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1B
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9S
TUFUOgogICAgICAgICByZXR1cm4gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
fQpAQCAtMjczNSwxNiArMjczNSwxNiBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRAogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBu
YW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERUxFVEVfU1RBVFVTOgogICAgICAgICByZXR1cm4gc2hh
ZGVyLT5pc0RlbGV0ZWQoKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NU
QVRVUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QSUxFX1NUQVRVUzoKICAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPih2YWx1ZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1RZUEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U0hBREVSX1RZUEU6CiAgICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0
T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhbHVlKTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IH0KQEAgLTI3NjEsMjMgKzI3NjEsMjMgQEAgUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9y
bWF0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQcmVjaXNpb24KICAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBl
Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBzaGFkZXIgdHlwZSIp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgc3dpdGNoIChwcmVjaXNpb25U
eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0ZMT0FUOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpISUdIX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19JTlQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpISUdIX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfRkxP
QVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUVESVVNX0ZMT0FUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkhJR0hfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6TE9XX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNRURJVU1fSU5UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhJR0hfSU5UOgogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9u
IHR5cGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHByZWNpc2lv
biB0eXBlIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtMjgwNCwyMSAr
MjgwNCwyMSBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJh
bWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbgogICAgIEdDM0RpbnQgdmFsdWUgPSAw
OwogICAgIEdDM0RmbG9hdCBmVmFsdWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1Q6CiAgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFy
YW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YWx1ZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFY
X0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwogICAgICAgICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyZnYodGFy
Z2V0LCBwbmFtZSwgJmZWYWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGZWYWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4
dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CkBAIC0yODI4LDcgKzI4Mjgs
NyBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCF1bmlmb3JtTG9jYXRpb24gfHwgdW5pZm9y
bUxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtIiwg
Im5vIHVuaWZvcm1sb2NhdGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3JhbSIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRVbmlmb3JtIiwgIm5vIHVuaWZvcm1sb2NhdGlvbiBvciBub3QgdmFsaWQgZm9yIHRo
aXMgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgR0MzRGlu
dCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+bG9jYXRpb24oKTsKQEAgLTI4MzYsNzggKzI4
MzYsNzggQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkcKICAgICBHQzNEZW51bSBiYXNlVHlwZTsK
ICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUo
KSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Qk9PTDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6Qk9PTDsKICAgICAg
ICAgbGVuZ3RoID0gMTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Qk9PTF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09M
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJPT0xfVkVDMjoKKyAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6Qk9PTDsKICAgICAgICAgbGVuZ3RoID0gMjsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgotICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkJPT0xfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRH
TDo6Qk9PTDsKICAgICAgICAgbGVuZ3RoID0gMzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpCT09MOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJPT0xfVkVDNDoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6Qk9PTDsKICAgICAgICAgbGVu
Z3RoID0gNDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6SU5UOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4
dEdMOjpJTlQ7CiAgICAgICAgIGxlbmd0aCA9IDE7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpJTlQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UX1ZFQzI6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OklOVDsKICAgICAgICAgbGVuZ3Ro
ID0gMjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZF
QzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpJTlRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHRHTDo6SU5UOwogICAgICAgICBsZW5ndGggPSAzOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVF9W
RUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ7CiAgICAgICAg
IGxlbmd0aCA9IDQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgIGxlbmd0aCA9IDE7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZMT0FUX1ZFQzI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZM
T0FUOwogICAgICAgICBsZW5ndGggPSAyOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF9WRUMzOgor
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVu
Z3RoID0gMzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkZMT0FUX01BVDI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
R0w6OkZMT0FUOwogICAgICAgICBsZW5ndGggPSA0OwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF9N
QVQzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAg
ICAgbGVuZ3RoID0gOTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRfTUFUNDoKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgIGxlbmd0aCA9IDE2Owog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNBTVBMRVJfMkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFUl9DVUJFOgor
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ7CiAgICAgICAgIGxlbmd0
aCA9IDE7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIENhbid0IGhh
bmRsZSB0aGlzIHR5cGUKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAi
Z2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlwZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAgICAgc3dpdGNoIChiYXNlVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOiB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6IHsKICAgICAg
ICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKICAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNz
RVhUU3VwcG9ydGVkKQogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuZ2V0
blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAqIHNpemVv
ZihHQzNEZmxvYXQpLCB2YWx1ZSk7CkBAIC0yOTE3LDcgKzI5MTcsNyBAQCBXZWJHTEFueSBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
Y29uc3QgV2ViRwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdOwogICAgICAgICByZXR1cm4g
RmxvYXQzMkFycmF5Ojp0cnlDcmVhdGUodmFsdWUsIGxlbmd0aCk7CiAgICAgfQotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OklOVDogeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklO
VDogewogICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwogICAgICAgICBpZiAobV9pc1Jv
YnVzdG5lc3NFWFRTdXBwb3J0ZWQpCiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDQg
KiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKQEAgLTI5MjcsNyArMjkyNyw3IEBAIFdlYkdMQW55
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBXZWJHCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVbMF07CiAgICAgICAgIHJl
dHVybiBJbnQzMkFycmF5Ojp0cnlDcmVhdGUodmFsdWUsIGxlbmd0aCk7CiAgICAgfQotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpCT09MOiB7CiAgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CiAgICAgICAgIGlmICht
X2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlv
biwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwpAQCAtMjk0Niw3ICsyOTQ2LDcgQEAgV2Vi
R0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFdlYkcKICAgICB9CiAKICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgc29t
ZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29tcGxleCBsb2dpYyBhYm92
ZQotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7CisgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25vd24g
ZXJyb3IiKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMjk2MSw3ICsyOTYxLDcgQEAg
UmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRVbmlmb3JtTG9jYXRpb24oV2ViR0wKICAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5rU3RhdHVz
KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9P
UEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlv
biA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bmFtZSk7CkBAIC0yOTcwLDEyICsyOTcwLDEyIEBAIFJlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlv
bj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMCiAK
ICAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKICNpZiBVU0UoQU5HTEUpCi0gICAgbV9j
b250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRl
eHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOworICAgIG1fY29udGV4dC0+
Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0R0w6OkFD
VElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKICNlbHNlCi0gICAgbV9jb250ZXh0LT5n
ZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFw
aGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOworICAgIG1f
Y29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9n
cmFtKSwgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1z
KTsKICNlbmRpZgogICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IGFjdGl2ZVVuaWZvcm1zOyBp
KyspIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8gaW5mbzsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUluZm8gaW5mbzsKICAgICAgICAgaWYgKCFtX2Nv
bnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9t
IHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCkBAIC0yOTk4LDM2ICsyOTk4LDM2IEBAIFdlYkdM
QW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0dHJpYihHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGlu
ZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJh
bmdlIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGNvbnN0IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAgIGlm
ICgoaXNXZWJHTDIoKSB8fCBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSAmJiBwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFKQorICAgIGlm
ICgoaXNXZWJHTDIoKSB8fCBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSAmJiBwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFKQogICAgICAg
ICByZXR1cm4gc3RhdGUuZGl2aXNvcjsKIAogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJ
TkRJTkc6CiAgICAgICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiAhaW5kZXggJiYgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKS5idWZmZXJCaW5k
aW5nID09IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikKICAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZm
ZXJCaW5kaW5nCiAgICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN0YXRlLmJ1ZmZl
ckJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9FTkFCTEVEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfRU5BQkxFRDoKICAgICAgICAgcmV0dXJuIHN0YXRlLmVuYWJsZWQ7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKICAgICAg
ICAgcmV0dXJuIHN0YXRlLm5vcm1hbGl6ZWQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZF
UlRFWF9BVFRSSUJfQVJSQVlfU0laRToKICAgICAgICAgcmV0dXJuIHN0YXRlLnNpemU7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CiAgICAg
ICAgIHJldHVybiBzdGF0ZS5vcmlnaW5hbFN0cmlkZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgogICAgICAgICByZXR1cm4gc3RhdGUudHlwZTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgogICAgICAgICBy
ZXR1cm4gRmxvYXQzMkFycmF5Ojp0cnlDcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0u
dmFsdWUsIDQpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQpAQCAtMzExNCw3ICsz
MTE0LDcgQEAgR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNFbmFibGVk
KEdDM0RlbnVtIGNhcCkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkKKyAgICBpZiAo
Y2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1RFU1QpCiAgICAgICAgIHJldHVybiBt
X3N0ZW5jaWxFbmFibGVkOwogICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChjYXApOwog
fQpAQCAtMzE4OCw4ICszMTg4LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjps
aW5rUHJvZ3JhbVdpdGhvdXRJbnZhbGlkYXRpbmdBdHRyaWJMb2NhdGlvbnMoV2UKICAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJsaW5rUHJv
Z3JhbSIsIHByb2dyYW0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8V2Vi
R0xTaGFkZXI+IHZlcnRleFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKLSAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IGZy
YWdtZW50U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiB2ZXJ0ZXhTaGFk
ZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVY
X1NIQURFUik7CisgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBmcmFnbWVudFNoYWRlciA9IHByb2dy
YW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVIp
OwogICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzVmFsaWQoKSB8fCAh
ZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkpIHsKICAgICAgICAg
cHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTMyMTIsMzUgKzMyMTIsMzUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwaXhl
bFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKICAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChwbmFtZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKICAgICAgICAgbV91bnBh
Y2tGbGlwWSA9IHBhcmFtOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgogICAgICAgICBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEgPSBwYXJhbTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKLSAgICAg
ICAgaWYgKHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wg
fHwgcGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICAgICAgaWYg
KHBhcmFtID09IEdyYXBoaWNzQ29udGV4dEdMOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFy
YW0gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpCiAgICAgICAgICAgICBtX3VucGFja0NvbG9y
c3BhY2VDb252ZXJzaW9uID0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBB
Q0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIik7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwg
ImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdM
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJ
R05NRU5UOgogICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFtID09
IDQgfHwgcGFyYW0gPT0gOCkgewotICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6UEFDS19BTElHTk1FTlQpCiAgICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25t
ZW50ID0gcGFyYW07Ci0gICAgICAgICAgICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBB
Q0tfQUxJR05NRU5UOgorICAgICAgICAgICAgZWxzZSAvLyBHcmFwaGljc0NvbnRleHRHTDo6VU5Q
QUNLX0FMSUdOTUVOVDoKICAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCA9IHBhcmFt
OwogICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBm
b3IgYWxpZ25tZW50Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVy
IGZvciBhbGlnbm1lbnQiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9FTlVNLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogfQpAQCAtMzI2NSw2NiArMzI2NSw2NiBAQCBlbnVtIGNs
YXNzIEludGVybmFsRm9ybWF0VGhlbWUgewogc3RhdGljIEludGVybmFsRm9ybWF0VGhlbWUgaW50
ZXJuYWxGb3JtYXRUaGVtZShHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKIHsKICAgICBzd2l0Y2gg
KGludGVybmFsRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1JHQl9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1J
TkFOQ0VfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNSR0I4X0FMUEhBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FM
UEhBOgogICAgICAgICByZXR1cm4gSW50ZXJuYWxGb3JtYXRUaGVtZTo6Tm9ybWFsaXplZEZpeGVk
UG9pbnQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IxMF9BMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTFG
X0cxMUZfQjEwRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMlVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjlfRTU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjExRl9HMTFGX0IxMEY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTJVSToKICAgICAgICAgcmV0dXJu
IEludGVybmFsRm9ybWF0VGhlbWU6OlBhY2tlZDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk06Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOF9TTk9S
TToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk06CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOF9TTk9STToKICAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0VGhlbWU6OlNpZ25lZE5v
cm1hbGl6ZWRGaXhlZFBvaW50OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRzE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
MTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZGOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkY6CiAgICAgICAgIHJldHVybiBJbnRlcm5h
bEZvcm1hdFRoZW1lOjpGbG9hdGluZ1BvaW50OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlIzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4SToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEx
Nkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToKICAgICAgICAgcmV0dXJu
IEludGVybmFsRm9ybWF0VGhlbWU6OlNpZ25lZEludGVnZXI7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QThVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
OFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlIzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOFVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOFVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkEzMlVJOgogICAgICAgICByZXR1cm4gSW50ZXJuYWxGb3JtYXRUaGVtZTo6VW5z
aWduZWRJbnRlZ2VyOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBJbnRlcm5hbEZvcm1h
dFRoZW1lOjpOb25lOwpAQCAtMzMzNCwxNyArMzMzNCwxNyBAQCBzdGF0aWMgSW50ZXJuYWxGb3Jt
YXRUaGVtZSBpbnRlcm5hbEZvcm1hdFRoZW1lKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogc3Rh
dGljIGludCBudW1iZXJPZkNvbXBvbmVudHNGb3JGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQogewog
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdF
UjoKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSRzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgog
ICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgog
ICAgICAgICByZXR1cm4gMzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdF
UjoKICAgICAgICAgcmV0dXJuIDQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0zMzU0LDY5ICszMzU0LDY5IEBAIHN0YXRpYyBpbnQgbnVtYmVyT2ZDb21wb25lbnRzRm9yRm9y
bWF0KEdDM0RlbnVtIGZvcm1hdCkKIHN0YXRpYyBpbnQgbnVtYmVyT2ZDb21wb25lbnRzRm9ySW50
ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRl
cm5hbEZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOF9TTk9STToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIz
MkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2VUk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NPTVBPTkVOVDMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhfU05PUk06CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSF9DT01QT05FTlQzMkY6CiAgICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JNOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
MzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMySToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJGOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
MzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMySToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIMzJGX1NURU5DSUw4OgogICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOF9TTk9STToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTFGX0cxMUZfQjEwRjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I5X0U1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkY6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyVUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4X1NOT1JNOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlIxMUZfRzExRl9CMTBGOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjlfRTU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZGOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0I4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOEk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJVSToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkk6CiAgICAgICAgIHJldHVybiAzOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQl9BTFBIQToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQThfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0IxMF9BMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZGOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQThVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOEk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTUkdCX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhB
ODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9STToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ix
MF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToKICAgICAgICAg
cmV0dXJuIDQ7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNDM0LDUyICsz
NDM0LDUyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoCiAgICAgR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQgPSAwOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBjb25z
dCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgICAgIGlmICgh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICZyZWFz
b24pKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKKyAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0
R0woKSwgJnJlYXNvbikpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCBy
ZWFzb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1F
OiByZWFkQnVmZmVyKCkgc2hvdWxkIGFmZmVjdCB0aGlzCiAgICAgICAgIGludGVybmFsRm9ybWF0
ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5hbHBoYSkKLSAgICAgICAgICAgIGludGVy
bmFsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4OworICAgICAgICAgICAgaW50ZXJu
YWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGludGVybmFsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg7CisgICAgICAg
ICAgICBpbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4OwogICAgIH0KIAog
ICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJNaXNzaW5n
IGF0dGFjaG1lbnQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJNaXNzaW5nIGF0dGFjaG1lbnQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChpc1dlYkdMMSgpKSB7CiAgICAg
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFM
UEhBOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkFMUEhBOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAi
cmVhZFBpeGVscyIsICJpbnZhbGlkIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfQllURToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hP
UlRfNV82XzU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JU
XzVfNV81XzE6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOgogICAg
ICAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCAmJiAhbV9vZXNUZXh0dXJlSGFsZkZsb2F0
KSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwg
InJlYWRQaXhlbHMiLCAiaW52YWxpZCB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImlu
dmFsaWQgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBl
IG5vdCBVTlNJR05FRF9CWVRFfEZMT0FUIik7CisgICAgICAgIGlmIChmb3JtYXQgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEgfHwgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X0JZVEUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRF
fEZMT0FUIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDg3
LDUzICszNDg3LDUzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVs
cyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoCiAgICAgSW50ZXJuYWxGb3Jt
YXRUaGVtZSBpbnRlcm5hbEZvcm1hdFRoZW1lID0gV2ViQ29yZTo6aW50ZXJuYWxGb3JtYXRUaGVt
ZShpbnRlcm5hbEZvcm1hdCk7CiAgICAgaW50IGludGVybmFsRm9ybWF0Q29tcG9uZW50Q291bnQg
PSBudW1iZXJPZkNvbXBvbmVudHNGb3JJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCk7CiAg
ICAgaWYgKGludGVybmFsRm9ybWF0VGhlbWUgPT0gSW50ZXJuYWxGb3JtYXRUaGVtZTo6Tm9uZSB8
fCAhaW50ZXJuYWxGb3JtYXRDb21wb25lbnRDb3VudCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJJbmNv
cnJlY3QgaW50ZXJuYWwgZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIkluY29ycmVjdCBpbnRl
cm5hbCBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2RlZmluZSBDSEVDS19D
T01QT05FTlRfQ09VTlQgXAogICAgIGlmIChudW1iZXJPZkNvbXBvbmVudHNGb3JGb3JtYXQoZm9y
bWF0KSA8IGludGVybmFsRm9ybWF0Q29tcG9uZW50Q291bnQpIHsgXAotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIs
ICJOb3QgZW5vdWdoIGNvbXBvbmVudHMgaW4gZm9ybWF0Iik7IFwKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAi
Tm90IGVub3VnaCBjb21wb25lbnRzIGluIGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVybjsgXAog
ICAgIH0KIAogI2RlZmluZSBJTlRFUk5BTF9GT1JNQVRfQ0hFQ0sodHlwZU1hY3JvLCBwaXhlbFR5
cGVNYWNybykgXAotICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlTWFjcm8g
fHwgcGl4ZWxzLmdldFR5cGUoKSAhPSBKU0M6OnBpeGVsVHlwZU1hY3JvKSB7IFwKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQ
aXhlbHMiLCAidHlwZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAorICAgIGlm
ICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0eXBlTWFjcm8gfHwgcGl4ZWxzLmdl
dFR5cGUoKSAhPSBKU0M6OnBpeGVsVHlwZU1hY3JvKSB7IFwKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAidHlw
ZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAogICAgICAgICByZXR1cm47IFwK
ICAgICB9IFwKLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRUQgJiYgZm9y
bWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRyAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQiAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpIHsgXAotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVh
ZFBpeGVscyIsICJVbmtub3duIGZvcm1hdCIpOyBcCisgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6UkVEICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkcgJiYgZm9y
bWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBKSB7IFwKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiVW5rbm93biBmb3JtYXQiKTsgXAogICAg
ICAgICByZXR1cm47IFwKICAgICB9IFwKICAgICBDSEVDS19DT01QT05FTlRfQ09VTlQKIAogI2Rl
ZmluZSBJTlRFUk5BTF9GT1JNQVRfSU5URUdFUl9DSEVDSyh0eXBlTWFjcm8sIHBpeGVsVHlwZU1h
Y3JvKSBcCi0gICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OnR5cGVNYWNybyB8fCBw
aXhlbHMuZ2V0VHlwZSgpICE9IEpTQzo6cGl4ZWxUeXBlTWFjcm8pIHsgXAotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVs
cyIsICJ0eXBlIGRvZXMgbm90IG1hdGNoIGludGVybmFsIGZvcm1hdCIpOyBcCisgICAgaWYgKHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnR5cGVNYWNybyB8fCBwaXhlbHMuZ2V0VHlw
ZSgpICE9IEpTQzo6cGl4ZWxUeXBlTWFjcm8pIHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJ0eXBlIGRv
ZXMgbm90IG1hdGNoIGludGVybmFsIGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVybjsgXAogICAg
IH0gXAotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSICYm
IGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUiAmJiBmb3JtYXQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQV9JTlRFR0VSKSB7IFwKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiVW5rbm93biBmb3JtYXQiKTsg
XAorICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICYmIGZv
cm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAmJiBmb3JtYXQgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQV9JTlRFR0VSKSB7IFwKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiVW5rbm93biBmb3JtYXQiKTsgXAog
ICAgICAgICByZXR1cm47IFwKICAgICB9IFwKICAgICBDSEVDS19DT01QT05FTlRfQ09VTlQKIAot
I2RlZmluZSBDQVNFX1BBQ0tFRF9JTlRFUk5BTF9GT1JNQVRfQ0hFQ0soaW50ZXJuYWxGb3JtYXRN
YWNybywgZm9ybWF0TWFjcm8sIHR5cGUwTWFjcm8sIHBpeGVsVHlwZTBNYWNybywgdHlwZTFNYWNy
bywgcGl4ZWxUeXBlMU1hY3JvKSBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjppbnRlcm5hbEZvcm1h
dE1hY3JvOiBcCi0gICAgaWYgKCEodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6dHlwZTBNYWNy
byAmJiBwaXhlbHMuZ2V0VHlwZSgpID09IEpTQzo6cGl4ZWxUeXBlME1hY3JvKSBcCi0gICAgICAg
ICYmICEodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6dHlwZTFNYWNybyAmJiBwaXhlbHMuZ2V0
VHlwZSgpID09IEpTQzo6cGl4ZWxUeXBlMU1hY3JvKSkgeyBcCi0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgInR5
cGUgZG9lcyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKKyNkZWZpbmUgQ0FTRV9QQUNL
RURfSU5URVJOQUxfRk9STUFUX0NIRUNLKGludGVybmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3Jv
LCB0eXBlME1hY3JvLCBwaXhlbFR5cGUwTWFjcm8sIHR5cGUxTWFjcm8sIHBpeGVsVHlwZTFNYWNy
bykgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW50ZXJuYWxGb3JtYXRNYWNybzogXAor
ICAgIGlmICghKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnR5cGUwTWFjcm8gJiYg
cGl4ZWxzLmdldFR5cGUoKSA9PSBKU0M6OnBpeGVsVHlwZTBNYWNybykgXAorICAgICAgICAmJiAh
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnR5cGUxTWFjcm8gJiYgcGl4ZWxzLmdl
dFR5cGUoKSA9PSBKU0M6OnBpeGVsVHlwZTFNYWNybykpIHsgXAorICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJ0
eXBlIGRvZXMgbm90IG1hdGNoIGludGVybmFsIGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVybjsg
XAogICAgIH0gXAotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OmZvcm1hdE1h
Y3JvKSB7IFwKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiSW52YWxpZCBmb3JtYXQiKTsgXAorICAgIGlmIChm
b3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcm1hdE1hY3JvKSB7IFwKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJl
YWRQaXhlbHMiLCAiSW52YWxpZCBmb3JtYXQiKTsgXAogICAgICAgICByZXR1cm47IFwKICAgICB9
IFwKICAgICBicmVhazsKIAogICAgIHN3aXRjaCAoaW50ZXJuYWxGb3JtYXRUaGVtZSkgewogICAg
IGNhc2UgSW50ZXJuYWxGb3JtYXRUaGVtZTo6Tm9ybWFsaXplZEZpeGVkUG9pbnQ6Ci0gICAgICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCkgeworICAgICAgICBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQpIHsKICAgICAgICAgICAgIElOVEVSTkFMX0ZP
Uk1BVF9DSEVDSyhGTE9BVCwgVHlwZUZsb2F0MzIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgSU5URVJOQUxfRk9STUFUX0NIRUNLKFVOU0lHTkVEX0JZVEUsIFR5cGVVaW50OCk7CkBA
IC0zNTc1LDEyICszNTc1LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVh
ZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoCiAgICAgdW5zaWdu
ZWQgcGFkZGluZyA9IDA7CiAgICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgewog
ICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0
ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5
dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0
R0w6Ok5PX0VSUk9SKSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInJl
YWRQaXhlbHMiLCAiaW52YWxpZCBkaW1lbnNpb25zIik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHBpeGVscy5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVx
dWlyZWQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBs
YXJnZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAi
QXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJnZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTM2NTIsMjIgKzM2NTIsMjIgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMKICAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0
ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAo
ZmFjZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNLOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZST05UX0FORF9CQUNLOgogICAgICAgICBtX3N0ZW5j
aWxGdW5jUmVmID0gcmVmOwogICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKICAg
ICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOwogICAgICAgICBtX3N0ZW5jaWxGdW5jTWFz
a0JhY2sgPSBtYXNrOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUk9OVDoKICAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKICAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0s6CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNr
ID0gcmVmOwogICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZh
Y2UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2Us
IGZ1bmMsIHJlZiwgbWFzayk7CkBAIC0zNjg3LDE4ICszNjg3LDE4IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
dWludCBtYXNrCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIHN3aXRjaCAoZmFjZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05UX0FORF9CQUNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZST05UX0FORF9CQUNL
OgogICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKICAgICAgICAgbV9zdGVuY2lsTWFza0Jh
Y2sgPSBtYXNrOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUk9OVDoKICAgICAgICAgbV9zdGVu
Y2lsTWFzayA9IG1hc2s7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJBQ0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkFDSzoKICAgICAgICAgbV9z
dGVuY2lsTWFza0JhY2sgPSBtYXNrOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
c3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxNYXNrU2Vw
YXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9j
b250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwpAQCAtMzc0MiwzMyArMzc0
MiwzMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRCYXNlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgRwogICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKIH0KIAot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRP
TVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dEdMOjpET01T
b3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7CiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0
cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEs
IG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUp
OworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJh
Y3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKTsKICAgICBpZiAoIWltYWdl
RXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGlt
YWdlIGRhdGEiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNl
RGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxw
aGFPcCgpOworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3Jt
YXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29u
dGV4dEdMOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsK
ICAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4
ZWxEYXRhKCk7CiAKICAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCAmJiBmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9Ob3RoaW5nICYmICFmbGlwWSkKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nICYm
ICFmbGlwWSkKICAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKICAgICBlbHNlIHsKICAg
ICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRh
LCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4
dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleEltYWdlMkQiLCAicGFja0ltYWdlIGVycm9yIik7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAi
cGFja0ltYWdlIGVycm9yIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5w
aXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElH
Tk1FTlQsIDEpOwogICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSk7CiAgICAgaWYgKG1f
dW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FM
SUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwogfQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1
bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25T
b3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpCkBAIC0zNzgyLDcgKzM3ODIsNyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFRleEZ1bgogCiAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZSkgewog
ICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09IFRleEltYWdlICYmIHRleHR1cmUtPmltbXV0YWJs
ZSgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInRleFN0b3JhZ2UoKSBjYWxsZWQgb24g
dGhpcyB0ZXh0dXJlIHByZXZpb3VzbHkiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidGV4
U3RvcmFnZSgpIGNhbGxlZCBvbiB0aGlzIHRleHR1cmUgcHJldmlvdXNseSIpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICghdmFsaWRhdGVOUE9UVGV4
dHVyZUxldmVsKHdpZHRoLCBoZWlnaHQsIGxldmVsLCBmdW5jdGlvbk5hbWUpKQpAQCAtMzgwMCwx
NSArMzgwMCwxNSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4
RnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdl
LCBjaGVjayBpZiBvdmVyZmxvdyBoYXBwZW5zIGZpcnN0LgogICAgICAgICBpZiAoeG9mZnNldCAr
IHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lv
bnMiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAo
eG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9m
ZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQodGFyZ2V0LCBsZXZlbCkgIT0gaW50ZXJuYWxGb3JtYXQgfHwgKGlzV2ViR0wxKCkgJiYgdGV4
dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSAhPSB0eXBlKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJl
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC0zODM1
LDQxICszODM1LDQxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlCiAgICAgICAgIGNoYW5nZVVu
cGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQogICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1l
bnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19BTElHTk1FTlQsIDEpOworICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBo
aWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKICAgICB0ZXhJbWFnZTJEQmFzZSh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIGRhdGEpOwogICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAg
IG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRJbXBsKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFw
aGljc0NvbnRleHQzRDo6RE9NU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBp
bWFnZSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFks
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAg
ICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2Us
IGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lv
biA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250
ZXh0R0w6Ok5PTkUpOwogICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJE
IiwgImJhZCBpbWFnZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVNvdXJjZUZvcm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3Ag
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VG
b3JtYXQoKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7CiAgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEg
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOwogICAgIAogICAgIGJvb2wgbmVlZENv
bnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBo
YU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcgJiYgIWZsaXBZKQor
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYmIHNvdXJj
ZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4ICYmIGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcgJiYgIWZsaXBZKQogICAgICAgICBuZWVkQ29udmVy
c2lvbiA9IGZhbHNlOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0lt
YWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhh
T3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tB
bGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0
YSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKIAogICAgIHRleFN1Yklt
YWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgp
LCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/
IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEpOwogCiAgICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91
bnBhY2tBbGlnbm1lbnQpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYg
cGl4ZWxzKQpAQCAtMzg4Myw3ICszODgzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKIAog
ICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCk7CiAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1Yklt
YWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1Yklt
YWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zOTAzLDE4ICszOTAzLDE4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDCiAgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRydWU7CiAgICAgfQogICAgIGlm
IChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsK
IAogICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwogCiAg
ICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0
b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1l
bnQpOworICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpV
TlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CiB9CiAKIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBPcHRpb25hbDxUZXhJbWFnZVNvdXJjZT4mJiBz
b3VyY2UpCiB7CiAgICAgaWYgKCFzb3VyY2UpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgInNvdXJj
ZSBpcyBudWxsIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJzb3VyY2UgaXMgbnVsbCIpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtMzkyOCw3ICszOTI4LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0QKIAogICAgICAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1
cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICBpZiAoIWludGVy
bmFsRm9ybWF0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRh
cmdldCBvciBsZXZlbCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVy
ZSB0YXJnZXQgb3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0K
IApAQCAtMzk0MSw3ICszOTQxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKIAogICAgICAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZh
c3RDb3B5SW1hZ2VNb2RlKCkpOwogICAgICAgICBpZiAoaW1hZ2UpCi0gICAgICAgICAgICB0ZXhT
dWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5
cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpJbWFnZSwgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgICAgIHRleFN1
YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9
OwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SW1hZ2VEYXRhPiYgcGl4ZWxzKSAtPiBFeGNlcHRp
b25Pcjx2b2lkPiB7CiAgICAgICAgIGF1dG8gdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwpAQCAtMzk1MCw3ICszOTUwLDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0QKIAogICAgICAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1h
dCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICBp
ZiAoIWludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0
ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFs
aWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgICAgIH0KIApAQCAtMzk2MSwyMSArMzk2MSwyMSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RAogICAgICAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKICAgICAgICAgLy8gVGhlIGRh
dGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KICAgICAgICAgLy8g
Tm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5k
IHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlv
biBpcyByZXF1aXJlZC4KLSAgICAgICAgaWYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmICFtX3Vu
cGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpCisgICAgICAgIGlmIChmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKQogICAgICAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMu
Z2V0KCksIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBkYXRhKSkgewotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0
YSIpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwogICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19B
TElHTk1FTlQsIDEpOwogCiAgICAgICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9y
bWF0LCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMt
PmRhdGEoKS0+ZGF0YSgpKTsKIAogICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
LSAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5w
YWNrQWxpZ25tZW50KTsKIAogICAgICAgICByZXR1cm4geyB9OwogICAgIH0gLCBbJl0oY29uc3Qg
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+JiBpbWFnZSkgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewpA
QCAtNDAwMCwxNCArNDAwMCwxNCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogCiAgICAgICAg
IEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFy
Z2V0LCBsZXZlbCk7CiAgICAgICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwg
InRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOwogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaW1hZ2VGb3JS
ZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBT
b3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgaW1h
Z2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRP
TVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdM
OjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SFRNTENh
bnZhc0VsZW1lbnQ+JiBjYW52YXMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKICAgICAgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKQEAgLTQwMjQsNyArNDAyNCw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNECiAKICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0
dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgaWYgKCFpbnRl
cm5hbEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0
YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1
cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9
CiAKQEAgLTQwMzUsNyArNDAzNSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAg
IGlmIChpbWFnZURhdGEpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgVGV4SW1hZ2VTb3VyY2UoaW1hZ2VEYXRh
LmdldCgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3Bp
ZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpDYW52YXMsIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgICAgICB0ZXhTdWJJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNh
bnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6Q2FudmFz
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KICNpZiBFTkFCTEUoVklERU8pCkBAIC00MDU0LDcgKzQwNTQsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRAogCiAgICAgICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0
ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIGlm
ICghaW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRl
eHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxp
ZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgfQogCkBAIC00MDY0LDcgKzQwNjQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAog
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0
KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKICAgICAgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFw
aGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAjZW5kaWYKQEAg
LTQwNzYsMzYgKzQwNzYsMzYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVBcnJheUJ1ZmZlclR5cGUoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0eXBlLCBPcHRpb25hbDxKU0M6OlR5cGVkQXJyYXlUeXBl
PiBhcnJheVR5cGUpCiB7CiAjZGVmaW5lIFRZUEVfVkFMSURBVElPTl9DQVNFKGFycmF5VHlwZU1h
Y3JvKSBpZiAoYXJyYXlUeXBlICYmIGFycmF5VHlwZS52YWx1ZSgpICE9IEpTQzo6YXJyYXlUeXBl
TWFjcm8pIHsgXAotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90
ICIgI2FycmF5VHlwZU1hY3JvKTsgXAorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1
ZmZlclZpZXcgbm90ICIgI2FycmF5VHlwZU1hY3JvKTsgXAogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOyBcCiAgICAgICAgIH0gXAogICAgICAgICBicmVhazsKIAogICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKICAgICAgICAgVFlQRV9WQUxJREFUSU9O
X0NBU0UoVHlwZVVpbnQ4KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6CiAgICAgICAgIFRZUEVfVkFMSURBVElPTl9D
QVNFKFR5cGVJbnQ4KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgogICAgICAgICBUWVBFX1ZBTElEQVRJT05fQ0FTRShUeXBlVWlu
dDE2KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTSE9SVDoKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZUlu
dDE2KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8x
MF9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEwRl8xMUZf
MTFGX1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfNV85Xzlf
OV9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9JTlQ6CiAgICAgICAgIFRZUEVfVkFMSURBVElPTl9DQVNFKFR5cGVVaW50
MzIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpJTlQ6CiAgICAgICAgIFRZUEVfVkFMSURBVElPTl9DQVNFKFR5cGVJbnQzMik7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0
CiAgICAgICAgIFRZUEVfVkFMSURBVElPTl9DQVNFKFR5cGVGbG9hdDMyKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9h
dAotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6CiAgICAgICAg
IFRZUEVfVkFMSURBVElPTl9DQVNFKFR5cGVVaW50MTYpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDEyMCw3ICs0MTIwLDcgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MKICAgICBpZiAoIXBpeGVscykgewogICAgICAgICBpZiAoZGlzcG9zaXRpb24g
PT0gTnVsbEFsbG93ZWQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIm5vIHBpeGVscyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQxMzMsMTIgKzQxMzMsMTIgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MKICAgICAKICAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQ7CiAg
ICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZv
cm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsIG51bGxwdHIpOwotICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9S
KSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgZGltZW5zaW9ucyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVx
dWVzdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVu
b3VnaCBmb3IgcmVxdWVzdCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwpAQCAtNDE1OCw0MiArNDE1OCw0MiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCiAgICAgR0MzRGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93
KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwogICAgIHN3aXRjaCAodGFyZ2V0
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEOgogICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0
dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgogICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlICYmIHdpZHRoICE9IGhl
aWdodCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdodCBmb3IgY3ViZSBt
YXAiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQgZm9yIGN1YmUgbWFw
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgLy8gTm8g
bmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9yIHRleEltYWdlIHdpZHRoID09IGhlaWdodC4K
ICAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRoYXQgd2lsbCBiZSBjaGVja2VkIHdoZW4gY2hl
Y2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiByYW5nZS4KICAgICAgICAgaWYgKHdpZHRoID4g
bWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9y
IGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAg
IGlmIChib3JkZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAwIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIApAQCAtNDIwMywyNyArNDIwMywyNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYQogYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBl
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCkKIHsKICAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSF9DT01QT05FTlQ6CiAgICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSAmJiBp
c1dlYkdMMSgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1hdHMg
bm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0
cyBub3QgZW5hYmxlZCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwg
bXVzdCBiZSAwIGZvciBkZXB0aCBmb3JtYXRzIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG11c3QgYmUgMCBmb3IgZGVwdGggZm9ybWF0cyIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpTUkdCX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdC
X0FMUEhBX0VYVDoKICAgICAgICAgaWYgKCFtX2V4dHNSR0IpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgInNSR0IgdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJzUkdCIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNDIzMSw0OSArNDIzMSw0
OSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3RpbwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAg
IGlmICghaXNXZWJHTDEoKSkgewogICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRDoKLSAgICAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Ukc6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRF
R0VSOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVI6Ci0g
ICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVI6CisgICAgICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdF
UjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAg
ICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAjZW5kaWYKICAgICAgICAgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZMT0FUOgogICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0ICYmIGlz
V2ViR0wxKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVF9PRVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzoKICAgICAgICAgaWYg
KCFtX29lc1RleHR1cmVIYWxmRmxvYXQgJiYgaXNXZWJHTDEoKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5U
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9JTlRfMjRfODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9S
VDoKICAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlICYmIGlzV2ViR0wxKCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNDI4MSwxMjMgKzQyODEsMTIzIEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlw
ZShjb25zdCBjaGFyKiBmdW5jdGlvCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgaWYgKCFp
c1dlYkdMMSgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTSE9SVDoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoK
LSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEwXzEw
XzEwX1JFVjoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VF8xMEZfMTFGXzExRl9SRVY6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9JTlRfNV85XzlfOV9SRVY6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6CisgICAgICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpCWVRFOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U0hPUlQ6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ6CisgICAg
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9S
RVY6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBG
XzExRl8xMUZfUkVWOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfSU5UXzVfOV85XzlfUkVWOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdHlwZSIpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0
eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UKICNlbmRpZgogICAgICAgICB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgotI2RlZmluZSBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZTAsIHR5cGUxLCB0eXBl
MiwgdHlwZTMsIHR5cGU0KSBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjppbnRlcm5hbEZvcm1hdE1h
Y3JvOiBcCi0gICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6Zm9ybWF0TWFjcm8p
IHsgXAotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0IGZvciBpbnRlcm5hbGZv
cm1hdCIpOyBcCisjZGVmaW5lIElOVEVSTkFMX0ZPUk1BVF9DQVNFKGludGVybmFsRm9ybWF0TWFj
cm8sIGZvcm1hdE1hY3JvLCB0eXBlMCwgdHlwZTEsIHR5cGUyLCB0eXBlMywgdHlwZTQpIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludGVybmFsRm9ybWF0TWFjcm86IFwKKyAgICBpZiAo
Zm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JtYXRNYWNybykgeyBcCisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQgZm9yIGludGVybmFsZm9ybWF0Iik7IFwK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCiAgICAgfSBcCiAgICAgaWYgKHR5cGUgIT0gdHlwZTAg
JiYgdHlwZSAhPSB0eXBlMSAmJiB0eXBlICE9IHR5cGUyICYmIHR5cGUgIT0gdHlwZTMgJiYgdHlw
ZSAhPSB0eXBlNCkgeyBcCi0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpI
QUxGX0ZMT0FUX09FUyB8fCAodHlwZTAgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQg
JiYgdHlwZTEgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgJiYgdHlwZTIgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgJiYgdHlwZTMgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVQpKSB7IFwKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBl
IGZvciBpbnRlcm5hbGZvcm1hdCIpOyBcCisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dEdMOjpIQUxGX0ZMT0FUX09FUyB8fCAodHlwZTAgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhB
TEZfRkxPQVQgJiYgdHlwZTEgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgJiYgdHlw
ZTIgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgJiYgdHlwZTMgIT0gR3JhcGhpY3ND
b250ZXh0R0w6OkhBTEZfRkxPQVQpKSB7IFwKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB0eXBlIGZvciBpbnRlcm5hbGZvcm1hdCIpOyBcCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IFwKICAgICAgICAgfSBcCiAgICAgfSBcCiAgICAgYnJlYWs7CiAgICAgc3dpdGNoIChpbnRl
cm5hbEZvcm1hdCkgewotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQiAgICAgICAgICAgICAg
ICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEgICAgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FU
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQpOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKExV
TUlOQU5DRV9BTFBIQSAgICwgTFVNSU5BTkNFX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9B
VCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKExVTUlOQU5DRSAgICAgICAgICwgTFVN
SU5BTkNFICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKEFMUEhBICAgICAgICAgICAgICwgQUxQSEEgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4ICAgICAg
ICAgICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4X1NOT1JNICAgICAgICAgICwgUkVEICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFIxNkYgICAgICAgICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMkYgICAgICAgICAg
ICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4VUkgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFI4SSAgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIxNlVJICAgICAgICAgICAgICwg
UkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFIxNkkgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMlVJ
ICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMkkgICAgICAgICAgICAgICwgUkVEX0lO
VEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHOCAgICAgICAgICAgICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOF9TTk9STSAg
ICAgICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwot
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZGICAgICAgICAgICAgICwgUkcgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFJHMzJGICAgICAgICAgICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOFVJICAgICAgICAgICAg
ICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHOEkgICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJH
MTZVSSAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZJICAgICAgICAgICAgICwgUkdf
SU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHMzJVSSAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMzJJICAg
ICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SU5UICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjggICAgICAgICAgICAgICwgUkdCICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFNSR0I4ICAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjU2NSAgICAgICAg
ICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhfU05PUk0gICAgICAgICwgUkdCICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFIxMUZfRzExRl9CMTBGICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjlfRTUgICAgICAgICAgICwg
UkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzVfOV85Xzlf
UkVWICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHQjE2RiAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjMy
RiAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhVSSAgICAgICAgICAgICwgUkdCX0lO
VEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHQjhJICAgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2VUkgICAg
ICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwot
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2SSAgICAgICAgICAgICwgUkdCX0lOVEVHRVIg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFJHQjMyVUkgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjMySSAgICAgICAgICAg
ICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4ICAgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFNS
R0I4X0FMUEhBOCAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4X1NOT1JNICAgICAgICwgUkdC
QSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6QllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHQjVfQTEgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFViAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE0ICAg
ICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NF80XzRfNCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjEwX0EyICAgICAgICAgICwgUkdCQSAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHQkExNkYgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEzMkYgICAgICAg
ICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4VUkgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHQkE4SSAgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjEwX0EyVUkgICAgICAgICwg
UkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBf
MTBfUkVWICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHQkExNlVJICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEx
NkkgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEzMkkgICAgICAgICAgICwgUkdCQV9J
TlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHQzRDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHQkEzMlVJICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBP
TkVOVCAgICwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlQgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwot
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVDE2ICwgREVQVEhfQ09NUE9O
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKERFUFRIX0NPTVBPTkVOVDI0ICwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVDMy
RiwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX1NURU5DSUwgICAgICwgREVQVEhfU1RFTkNJTCAgLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERF
UFRIMjRfU1RFTkNJTDggICwgREVQVEhfU1RFTkNJTCAgLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfSU5UXzI0XzggICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIMzJGX1NURU5DSUw4ICwgREVQ
VEhfU1RFTkNJTCAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0
XzhfUkVWLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpTUkdCX0VYVDoKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IgICAgICAg
ICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVf
Nl81ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBICAgICAgICAgICAgICAsIFJHQkEgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFM
Rl9GTE9BVCwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShMVU1JTkFOQ0VfQUxQSEEgICAsIExVTUlOQU5DRV9BTFBIQSwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkhB
TEZfRkxPQVQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShMVU1JTkFOQ0UgICAgICAg
ICAsIExVTUlOQU5DRSAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJ
TlRFUk5BTF9GT1JNQVRfQ0FTRShBTFBIQSAgICAgICAgICAgICAsIEFMUEhBICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpG
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShS
OCAgICAgICAgICAgICAgICAsIFJFRCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSOF9TTk9STSAgICAgICAgICAsIFJF
RCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5B
TF9GT1JNQVRfQ0FTRShSMTZGICAgICAgICAgICAgICAsIFJFRCAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSMzJGICAg
ICAgICAgICAgICAsIFJFRCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSOFVJICAgICAgICAgICAgICAsIFJFRF9JTlRF
R0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JN
QVRfQ0FTRShSOEkgICAgICAgICAgICAgICAsIFJFRF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSMTZVSSAgICAgICAg
ICAgICAsIFJFRF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSMTZJICAgICAgICAgICAgICAsIFJFRF9JTlRFR0VSICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FT
RShSMzJVSSAgICAgICAgICAgICAsIFJFRF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSMzJJICAgICAgICAgICAgICAs
IFJFRF9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OklOVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRF
Uk5BTF9GT1JNQVRfQ0FTRShSRzggICAgICAgICAgICAgICAsIFJHICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzhf
U05PUk0gICAgICAgICAsIFJHICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzE2RiAgICAgICAgICAgICAsIFJHICAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9G
T1JNQVRfQ0FTRShSRzMyRiAgICAgICAgICAgICAsIFJHICAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzhVSSAgICAg
ICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzhJICAgICAgICAgICAgICAsIFJHX0lOVEVHRVIg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShSRzE2VUkgICAgICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSRzE2SSAgICAgICAgICAg
ICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlNIT1JUICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJ
TlRFUk5BTF9GT1JNQVRfQ0FTRShSRzMyVUkgICAgICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShS
RzMySSAgICAgICAgICAgICAsIFJHX0lOVEVHRVIgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OklO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I4ICAgICAgICAgICAgICAsIFJH
QiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5B
TF9GT1JNQVRfQ0FTRShTUkdCOCAgICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I1NjUg
ICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JU
XzVfNl81ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I4X1NOT1JNICAgICAgICAsIFJHQiAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JN
QVRfQ0FTRShSMTFGX0cxMUZfQjEwRiAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgICwgR3JhcGhpY3NDb250ZXh0R0w6
OkhBTEZfRkxPQVQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I5X0U1ICAgICAg
ICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF81
XzlfOV85X1JFViAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxNkYgICAgICAgICAgICAsIFJHQiAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FT
RShSR0IzMkYgICAgICAgICAgICAsIFJHQiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I4VUkgICAgICAgICAgICAs
IFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRF
Uk5BTF9GT1JNQVRfQ0FTRShSR0I4SSAgICAgICAgICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0Ix
NlVJICAgICAgICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxNkkgICAgICAgICAgICAsIFJHQl9J
TlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlNIT1JUICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9G
T1JNQVRfQ0FTRShSR0IzMlVJICAgICAgICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IzMkkgICAg
ICAgICAgICAsIFJHQl9JTlRFR0VSICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OklOVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBOCAgICAgICAgICAgICAsIFJHQkEgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShTUkdCOF9BTFBIQTggICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBOF9TTk9STSAgICAg
ICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJ
TlRFUk5BTF9GT1JNQVRfQ0FTRShSR0I1X0ExICAgICAgICAgICAsIFJHQkEgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShS
R0JBNCAgICAgICAgICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X1NIT1JUXzRfNF80XzQsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxMF9BMiAgICAgICAgICAsIFJH
QkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEw
X1JFViAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5B
TF9GT1JNQVRfQ0FTRShSR0JBMTZGICAgICAgICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBMzJG
ICAgICAgICAgICAsIFJHQkEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBOFVJICAgICAgICAgICAsIFJHQkFfSU5U
RUdFUiAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JN
QVRfQ0FTRShSR0JBOEkgICAgICAgICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OkJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0IxMF9BMlVJICAg
ICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFViAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBMTZVSSAgICAgICAgICAsIFJHQkFfSU5URUdFUiAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FT
RShSR0JBMTZJICAgICAgICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShSR0JBMzJJICAgICAgICAgICAs
IFJHQkFfSU5URUdFUiAgICwgR3JhcGhpY3NDb250ZXh0R0w6OklOVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRF
Uk5BTF9GT1JNQVRfQ0FTRShSR0JBMzJVSSAgICAgICAgICAsIFJHQkFfSU5URUdFUiAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBU
SF9DT01QT05FTlQgICAsIERFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VCAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBUSF9DT01QT05FTlQxNiAsIERFUFRI
X0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUICAgICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVCAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9G
T1JNQVRfQ0FTRShERVBUSF9DT01QT05FTlQyNCAsIERFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBUSF9DT01Q
T05FTlQzMkYsIERFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBUSF9TVEVOQ0lMICAgICAsIERFUFRIX1NURU5D
SUwgICwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRf
Q0FTRShERVBUSDI0X1NURU5DSUw4ICAsIERFUFRIX1NURU5DSUwgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICBJTlRFUk5BTF9GT1JNQVRfQ0FTRShERVBUSDMyRl9TVEVOQ0lM
OCAsIERFUFRIX1NURU5DSUwgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVE
X0lOVF8yNF84X1JFViwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6CiAgICAgICAgIGlmIChmb3JtYXQgIT0gaW50ZXJu
YWxGb3JtYXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0IGFuZCBpbnRlcm5h
bGZvcm1hdCBtdXN0IG1hdGNoIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBh
bmQgaW50ZXJuYWxmb3JtYXQgbXVzdCBtYXRjaCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVf
Nl81ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBpbnRlcm5hbCBmb3JtYXQiKTsKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
U0hPUlRfNV82XzUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVMgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6SEFMRl9GTE9BVCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUgZm9yIGludGVybmFsIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FM
UEhBX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQ6CiAgICAgICAg
IGlmIChmb3JtYXQgIT0gaW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBtdXN0IG1hdGNoIik7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImZvcm1hdCBhbmQgaW50ZXJuYWxmb3JtYXQgbXVzdCBtYXRjaCIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlRfNV81XzVfMSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VCAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUyAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdHlwZSBmb3IgaW50ZXJuYWwgZm9ybWF0Iik7CisgICAgICAgIGlmICh0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpGTE9BVCAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUyAmJiB0
eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgaW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJVbmtub3duIGludGVybmFsIGZvcm1hdCIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgIlVua25vd24gaW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAjdW5kZWYgSU5URVJOQUxfRk9STUFUX0NBU0UKQEAgLTQ0MjgsNyAr
NDQyOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBDb3B5VGV4SW1hZ2UsIHRhcmdldCwgbGV2ZWws
IGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGludGVybmFsRm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1
bmNQYXJhbWV0ZXJzKCJjb3B5VGV4SW1hZ2UyRCIsIENvcHlUZXhJbWFnZSwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxGb3JtYXQs
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIs
IGludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQzNiwxNiArNDQzNiwxNiBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgRwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlk
KGludGVybmFsRm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1h
dCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGli
bGUgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFpc0dMRVMyTlBP
VFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiY29weVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCAiY29weVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGlu
Y29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICZyZWFzb24pKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgcmVhc29uKTsKKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGlj
c0NvbnRleHRHTCgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1h
Z2UyRCIsIHJlYXNvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKQEAgLTQ0NTQsNyArNDQ1NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHCiAg
ICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKICAgICBpZiAoY2xpcDJE
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3Vu
ZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRo
LCAmY2xpcHBlZEhlaWdodCkpIHsKICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3Vy
Y2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsCi0gICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGludGVybmFsRm9ybWF0
LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQpOwog
ICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgewogICAg
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlw
cGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKICAgICAgICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBl
ZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodCk7CkBAIC00NDYzLDIxICs0NDYzLDIxIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHCiAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7CiAKICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0
ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgotICAgIHRleC0+c2V0TGV2
ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9CWVRFKTsKIH0KIAogc3RhdGljIGJvb2wgaXNSR0JGb3JtYXQoR0MzRGVu
dW0gaW50ZXJuYWxGb3JtYXQpCiB7Ci0gICAgcmV0dXJuIGludGVybmFsRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IKLSAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEKLSAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjgKLSAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE4OworICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCCisgICAgICAgIHx8IGludGVybmFsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBCisgICAgICAgIHx8IGludGVybmFsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4
CisgICAgICAgIHx8IGludGVybmFsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODsK
IH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIE9wdGlvbmFsPFRleEltYWdlU291
cmNlPiBzb3VyY2UpCiB7CiAgICAgaWYgKCFzb3VyY2UpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInNv
dXJjZSBpcyBudWxsIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJzb3VyY2UgaXMgbnVsbCIpOwogICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIApAQCAtNDQ5Niw4ICs0NDk2LDggQEAgRXhjZXB0aW9u
T3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQKICAgICAgICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwg
UkdCQSkvVU5TSUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KICAgICAgICAgLy8gSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1bGx5
IGZ1bmN0aW9uYWwuCiAgICAgICAgIGlmICh0ZXh0dXJlCi0gICAgICAgICAgICAmJiAoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKQotICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSkgeworICAgICAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSkKKyAgICAgICAgICAgICYm
IHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAgICAg
IGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVy
bmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAg
ICAgICAgICAgIGlmIChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0Lmdl
dCgpLCB0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewpAQCAtNDUxMCw3ICs0NTEwLDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4K
ICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKICAgICAgICAgaWYgKGltYWdlKQotICAgICAgICAg
ICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkltYWdlLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAgICAgICAgdGV4
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9Owog
ICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SW1hZ2VEYXRhPiYgcGl4ZWxzKSAtPiBFeGNlcHRpb25P
cjx2b2lkPiB7CiAgICAgICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIFRleEltYWdlLCBTb3VyY2VJbWFnZURhdGEsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0
KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCkBAIC00NTE5LDE5ICs0NTE5LDE5IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwog
ICAgICAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0IFJH
QkE4LgogICAgICAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBm
b3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJl
bXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICAgICAgICBpZiAoIW1fdW5wYWNrRmxp
cFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkK
KyAgICAgICAgaWYgKCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEg
JiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpCiAgICAgICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZh
bHNlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0
SW1hZ2VEYXRhKHBpeGVscy5nZXQoKSwgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwg
ImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBk
YXRhIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOworICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRH
TDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CiAgICAgICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+
ZGF0YSgpLT5kYXRhKCkpOwogICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNr
QWxpZ25tZW50KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9LCBbJl0oY29uc3QgUmVmUHRy
PEhUTUxJbWFnZUVsZW1lbnQ+JiBpbWFnZSkgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQpAQCAtNDU1Miw3ICs0NTUyLDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgaWYgKCFpbWFnZUZvclJlbmRlciB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgVGV4SW1hZ2UsIFNvdXJjZUhUTUxJbWFnZUVsZW1l
bnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgo
KSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9LCBbJl0oY29u
c3QgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgY2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lk
PiB7CiAgICAgICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCkBAIC00NTcyLDggKzQ1
NzIsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICAvLyBGSVhNRTogcmVzdHJp
Y3Rpb24gb2YgKFJHQiB8fCBSR0JBKS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hl
bgogICAgICAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVu
dGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KICAgICAgICAgaWYgKHRleHR1cmUKLSAgICAg
ICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCi0gICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgICAgICAmJiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
KQorICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RSkgewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZv
cm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwg
bGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+
YnVmZmVyKCk7CkBAIC00NTg4LDcgKzQ1ODgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAog
ICAgICAgICBpZiAoaW1hZ2VEYXRhKQogICAgICAgICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBUZXhJbWFnZVNvdXJjZShpbWFnZURh
dGEuZ2V0KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpDYW52YXMsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgICAgICB0ZXhJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNv
cGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkNhbnZhcywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNDYwOCw5ICs0NjA4LDkgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQKICAgICAgICAgLy8gRklYTUU6IFRoZSBjdXJyZW50IHJlc3RyaWN0aW9u
cyByZXF1aXJlIHRoYXQgZm9ybWF0IHNob3VkIGJlIFJHQiBvciBSR0JBLAogICAgICAgICAvLyB0
eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5
IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgogICAgICAgICBhdXRvIHRleHR1cmUgPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICAgICAgaWYg
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlCi0gICAg
ICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQotICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICBpZiAoR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUKKyAgICAgICAgICAgICYmIChmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEpCisgICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFCiAgICAgICAgICAgICAmJiAhbGV2ZWwpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewpAQCAtNDYyNSw3ICs0NjI1LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKSk7CiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6Vmlk
ZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgIHRl
eEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9CiAjZW5kaWYKQEAgLTQ2NDAsNyArNDY0MCw3IEBAIFJlZlB0cjxJbWFnZT4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSYgaW1hZ2UsIGlu
dCB3CiAgICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgSW1hZ2VCdWZmZXIq
IGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKICAgICBpZiAo
IWJ1ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VU
X09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6T1VUX09GX01FTU9SWSwgInRleEltYWdl
MkQiLCAib3V0IG9mIG1lbW9yeSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
QEAgLTQ2NTcsNyArNDY1Nyw3IEBAIFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkCiAgICAgSW50U2l6
ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKICAgICBJ
bWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUp
OwogICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpPVVRfT0ZfTUVNT1JZ
LCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsKQEAgLTQ2NzYsMjUgKzQ2NzYsMjUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFX01BR19GSUxURVI6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICBpZiAoKGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQz
RDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFU
KQotICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVE
X1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIiKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFX1dSQVBfVDoKKyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0R0w6
Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFUEVBVCkK
KyAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dEdMOjpNSVJST1JFRF9S
RVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRVBFQVQpKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAi
dGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRV
UkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwogICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
ICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNGbG9hdCkgewpAQCAt
NDcyMiw3ICs0NzIyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
MWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDczNSw3ICs0NzM1LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yZiIsICJsb2NhdGlv
biBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmYiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNDc0OCw3ICs0NzQ4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLAogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInVuaWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9P
UEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDc2MSw3ICs0NzYxLDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2Nh
dGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGYiLCAibG9j
YXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNDc3NCwxMiArNDc3NCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dy
YW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidW5pZm9ybTFpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9n
cmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJv
Z3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKChsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4dHVy
ZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIp
OworICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExF
Ul8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVSX0NV
QkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWki
LCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NDc5Miw3ICs0NzkyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
MmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgInVuaWZvcm0yaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDgwNSw3ICs0ODA1LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlv
biBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNDgxOCw3ICs0ODE4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLAogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInVuaWZvcm00aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9P
UEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDg2NSwxMSArNDg2NSwxMSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLAogICAgIGF1dG8gZGF0YSA9IHYuZGF0YSgpOwogICAgIGF1dG8g
bGVuZ3RoID0gdi5sZW5ndGgoKTsKIAotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgeworICAgIGlmIChsb2NhdGlvbi0+dHlwZSgpID09IEdy
YXBoaWNzQ29udGV4dEdMOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlNBTVBMRVJfQ1VCRSkgewogICAgICAgICBmb3IgKGF1dG8gaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKGRhdGFbaV0gPj0gc3RhdGljX2Nhc3Q8
aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CiAgICAgICAgICAgICAgICAgTE9HKFdlYkdM
LCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFgu
IiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCBkYXRhW2ldLCBsb2NhdGlvbi0+dHlwZSgpKTsK
LSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9W
QUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ5MzEsMTIgKzQ5MzEs
MTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1c2VQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKICAgICBpZiAoZGVsZXRlZCkKICAgICAgICAgcHJvZ3JhbSA9IDA7CiAg
ICAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAi
cHJvZ3JhbSBub3QgdmFsaWQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7CiAgICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFt
KQotICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRl
eHQzRCgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3JhcGhp
Y3NDb250ZXh0R0woKSk7CiAgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwogICAg
ICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKICAgICAg
ICAgaWYgKHByb2dyYW0pCkBAIC00OTk2LDQ0ICs0OTk2LDQ0IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGlu
dCBzaXplCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RkxPQVQ6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhB
dHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBv
ZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChzaXplIDwgMSB8fCBz
aXplID4gNCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ2
ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBzaXplIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKHN0cmlkZSA8IDAgfHwgc3RyaWRlID4gMjU1KSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmli
UG9pbnRlciIsICJiYWQgc3RyaWRlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQg
c3RyaWRlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG9mZnNldCA8IDAgfHwg
b2Zmc2V0ID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0
ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBvZmZzZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgImJhZCBvZmZzZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIW1fYm91
bmRBcnJheUJ1ZmZlciAmJiBvZmZzZXQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJubyBib3VuZCBBUlJBWV9CVUZGRVIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJubyBib3VuZCBBUlJBWV9CVUZGRVIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAv
LyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBo
b2xkLCBnaXZlbiB0aGUgb2Zmc2V0LCBzaXplLCB0eXBlIGFuZCBzdHJpZGUKICAgICBhdXRvIHR5
cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7CiAgICAgaWYgKCF0eXBlU2l6ZSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVy
dGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50
ZXIiLCAiaW52YWxpZCB0eXBlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKChz
dHJpZGUgJSB0eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0
eXBlU2l6ZSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zm
c2V0IG5vdCB2YWxpZCBmb3IgdHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwg
InN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsK
QEAgLTUwNTQsNyArNTA1NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmll
d3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0
Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUwODYsMTEgKzUwODYsMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6TG9zdEMKICAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24g
aGFkIGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKICAgICAvLyBsYXJnZSBudW1iZXIgb2Yg
dGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJv
cigpID09IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJl
YWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5Db25zb2xlOiBEb250RGlzcGxheUluQ29uc29sZTsK
LSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dF
QkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBsb3N0IiwgZGlzcGxheSk7CisgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxvc2VD
b250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRpc3BsYXkpOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cg
cmVzdG9yYXRpb24gdW5sZXNzIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQgaGFzIGJvdGggYmVlbgog
ICAgIC8vIGRpc3BhdGNoZWQgYW5kIGl0cyBkZWZhdWx0IGJlaGF2aW9yIHByZXZlbnRlZC4KQEAg
LTUxMDQsMTMgKzUxMDQsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3Nl
Q29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdEMKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VSZXN0b3JlQ29udGV4dCgpCiB7CiAgICAgaWYgKCFp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29u
dGV4dCBub3QgbG9zdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBs
b3N0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIW1fcmVzdG9yZUFsbG93
ZWQpIHsKICAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RDb250
ZXh0KQotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBu
b3QgYWxsb3dlZCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0
b3JhdGlvbiBub3QgYWxsb3dlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTc3
LDcgKzUxNzcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0b3AoKQogewog
ICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
IHsKICAgICAgICAgZm9yY2VMb3N0Q29udGV4dChTeW50aGV0aWNMb3N0Q29udGV4dCk7Ci0gICAg
ICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBkZXN0cm95R3JhcGhpY3ND
b250ZXh0R0woKTsKICAgICB9CiB9CiAKQEAgLTUyMDUsNyArNTIwNSw3IEBAIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkK
IAogVmVjdG9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvb2xlYW5BcnJh
eVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKIHsKLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSykgeworICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6Q09MT1JfV1JJVEVNQVNLKSB7CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNTI1MSwxMyArNTI1MSwxMyBAQCBSZWZQdHI8
RmxvYXQzMkFycmF5PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEZsb2F0QXJy
YXlQYXJhbWV0ZXIoR0MzRAogICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX1JBTkdFOgogICAgICAgICBsZW5ndGggPSAyOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVO
RF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9DTEVBUl9WQUxVRToK
ICAgICAgICAgbGVuZ3RoID0gNDsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTUy
NzIsMTEgKzUyNzIsMTEgQEAgUmVmUHRyPEludDMyQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0KICAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAg
ICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZJRVdQT1JUX0RJTVM6
CiAgICAgICAgIGxlbmd0aCA9IDI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQ
T1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfQk9YOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlZJRVdQT1JUOgogICAgICAgICBsZW5ndGggPSA0OwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNTMwNiwxMCArNTMwNiwxMCBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbQogICAgICAgICB1c2VzQXRMZWFzdE9uZUJsYWNrVGV4dHVyZSA9IHRydWU7
CiAKICAgICAgICAgaWYgKGJhZFRleHR1cmUgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGJhZFRleHR1cmUgKyBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOworICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJl
KGJhZFRleHR1cmUgKyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTApOwogICAgICAgICAgICAg
cmVzZXRBY3RpdmVVbml0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVu
aXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShiYWRUZXh0dXJlICsg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YWN0
aXZlVGV4dHVyZShiYWRUZXh0dXJlICsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwKTsKICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIFJl
ZlB0cjxXZWJHTFRleHR1cmU+IHRleDJEOwpAQCAtNTMyNSwxMiArNTMyNSwxMiBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbQogICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IHRleHR1cmVVbml0LnRl
eHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAobmVlZHNU
b1VzZUJsYWNrMkRUZXh0dXJlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleDJELmdldCgpKSk7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQuZ2V0KCkpKTsKICAgICAgICAgaWYgKG5lZWRz
VG9Vc2VCbGFjazNEVGV4dHVyZSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJl
TWFwLmdldCgpKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3ViZU1hcC5nZXQo
KSkpOwogICAgIH0KICAgICBpZiAocmVzZXRBY3RpdmVVbml0KQotICAgICAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlVW5pdCArIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCk7CisgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1
cmVVbml0ICsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgcmVuZGVyYWJsZSA6IG5vTG9uZ2VyVW5yZW5kZXJhYmxlKQogICAgICAgICBtX3VucmVuZGVy
YWJsZVRleHR1cmVVbml0cy5yZW1vdmUocmVuZGVyYWJsZSk7CkBAIC01MzQyLDMxICs1MzQyLDMx
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlRmFsbGJhY2tCbGFja1Rl
eHR1cmVzMXgxKCkKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1
fTsKICAgICBtX2JsYWNrVGV4dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0
dXJlMkQtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVy
ZTJELT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV8yRCwgMCk7CiAgICAgbV9ibGFja1RleHR1cmVDdWJlTWFwID0gY3JlYXRl
VGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2JqZWN0KCkpOwotICAg
IG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEs
IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsK
LSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDApOworICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVAsIG1f
YmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2Uy
RChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQSwgMSwgMSwKKyAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUs
IGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIDEs
IDEsCisgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCAwLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQSwgMSwgMSwKKyAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1osIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNr
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsCisg
ICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVAsIDApOwogfQogCiBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFs
aWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0
KQogewotICAgIGF1dG8gbmVlZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5
Rm9ybWF0KHRleEludGVybmFsRm9ybWF0KTsKLSAgICBhdXRvIGhhdmUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7CisgICAgYXV0
byBuZWVkID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQo
dGV4SW50ZXJuYWxGb3JtYXQpOworICAgIGF1dG8gaGF2ZSA9IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKICAgICByZXR1
cm4gKG5lZWQgJiBoYXZlKSA9PSBuZWVkOwogfQogCkBAIC01Mzc1LDggKzUzNzUsOCBAQCBHQzNE
ZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JG
b3JtYXQoKQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
Q29sb3JCdWZmZXJGb3JtYXQoKTsKICAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0I7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTsKKyAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJHQjsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpCkBAIC01Mzk3LDMwICs1Mzk3
LDMwIEBAIFJlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhCiB7CiAgICAgUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gdGV4dHVyZTsKICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8y
RDoKICAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRd
LnRleHR1cmUyREJpbmRpbmc7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICBp
ZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IHRhcmdldCIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAg
ICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVD
dWJlTWFwQmluZGluZzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X0NVQkVfTUFQOgogICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQogICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVU
ZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nOwogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCkBAIC01NDI4LDcgKzU0MjgsNyBAQCBSZWZQdHI8V2ViR0xUZXh0dXJl
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0
IGNoYQogICAgICAgICBtX3VucmVuZGVyYWJsZVRleHR1cmVVbml0cy5hZGQobV9hY3RpdmVUZXh0
dXJlVW5pdCk7CiAKICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8g
dGV4dHVyZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKICAgICByZXR1
cm4gdGV4dHVyZTsKIH0KIApAQCAtNTQzNiw3ICs1NDM2LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwKIHsKICAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2
OwogICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwpAQCAtNTQ0NSw3ICs1NDQ1LDcgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTaXplKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpCiB7CiAgICAgaWYg
KHggPCAwIHx8IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzaXplIDwgMCIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAic2l6ZSA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTU0NTUsNyArNTQ1NSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBTCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkg
ewogICAgICAgICBpZiAoIXZhbGlkYXRlQ2hhcmFjdGVyKHN0cmluZ1tpXSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFTQ0lJIik7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
c3RyaW5nIG5vdCBBU0NJSSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgfQpAQCAtNTQ2NSwyNCArNTQ2NSwyNCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgUwog
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKIHsK
ICAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEOgogICAgICAg
ICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQg
b2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRl
eHR1cmVMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNTUxMSw3ICs1
NTExLDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjYWxjdWxhdGVCeXRlc0ZvckFTVEMoR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBBcnJheUJ1ZmZlclZpZXcmIHBpeGVscykKIHsKICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdo
dCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIApAQCAtNTUzNSwxNiArNTUzNSwxNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0
aQogICAgICAgICBCbG9ja1BhcmFtZXRlcnMgeyAxMiwgMTAsIGtBU1RDQmxvY2tTaXplIH0sCiAg
ICAgICAgIEJsb2NrUGFyYW1ldGVycyB7IDEyLCAxMiwga0FTVENCbG9ja1NpemUgfQogICAgIH07
Ci0gICAgY29uc3QgR0MzRGVudW0gQVNUQ0VudW1TdGFydFJHQkEgPSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7Ci0gICAgY29uc3QgR0MzRGVudW0gQVNUQ0VudW1T
dGFydFNSR0I4ID0gRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4
NF9LSFI7CisgICAgY29uc3QgR0MzRGVudW0gQVNUQ0VudW1TdGFydFJHQkEgPSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7CisgICAgY29uc3QgR0MzRGVudW0gQVNU
Q0VudW1TdGFydFNSR0I4ID0gRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzR4NF9LSFI7CiAKICAgICBjb25zdCBpbnQga0VBQ0FuZEVUQzJCbG9ja1NpemUgPSA0Owog
CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRD
X1JHQl9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkVUQzFfUkdCOF9PRVM6IHsKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQ6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkVUQzFfUkdCOF9PRVM6IHsKICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4Owog
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwogICAgICAgICBjb25zdCBpbnQga0Js
b2NrSGVpZ2h0ID0gNDsKQEAgLTU1NTMsMTAgKzU1NTMsMTAgQEAgYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBm
dW5jdGkKICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJsb2Nr
c0Rvd24gKiBrQmxvY2tTaXplOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRDoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FN
RDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFU
RURfQUxQSEFfQU1EOgogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6
ZSA9IDE2OwogICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKQEAgLTU1NjYs
OCArNTU2Niw4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21w
cmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3RpCiAgICAgICAgICAgICBieXRlc1Jl
cXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKICAgICAgICAgewogICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1NpemUgPSA4OwogICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0g
ODsKQEAgLTU1NzUsOCArNTU3NSw4IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3RpCiAgICAgICAg
ICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6
Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsgNykgLyBrQmxvY2tTaXplOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
Ql9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JBX1BWUlRDXzJCUFBWMV9JTUc6CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IGludCBr
QmxvY2tTaXplID0gODsKICAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDE2OwpA
QCAtNTU4NCw3NSArNTU4NCw3NSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aQogICAgICAgICAg
ICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjpt
YXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X0FTVENfNHg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FT
VENfNXg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
NXg1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng1
X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tI
UjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfOHg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfOHg2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JBX0FTVENfOHg4X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JB
X0FTVENfMTB4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9B
U1RDXzEweDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNU
Q18xMHg4X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
MTB4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18x
MngxMF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEy
eDEyX0tIUjoKICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IGNhbGN1bGF0ZUJ5dGVzRm9yQVNUQyh3
aWR0aCwgaGVpZ2h0LCBBU1RDUGFyYW1ldGVyc1tmb3JtYXQgLSBBU1RDRW51bVN0YXJ0UkdCQV0p
OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ180eDRfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4
NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FT
VENfMTB4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfMTB4OF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFI6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tI
UjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182
eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzh4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfOHg2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ184eDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJf
S0hSOgogICAgICAgICBieXRlc1JlcXVpcmVkID0gY2FsY3VsYXRlQnl0ZXNGb3JBU1RDKHdpZHRo
LCBoZWlnaHQsIEFTVENQYXJhbWV0ZXJzW2Zvcm1hdCAtIEFTVENFbnVtU3RhcnRTUkdCOF0pOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SMTFfRUFD
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjogeworICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCOF9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NSR0I4X0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURf
U1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOiB7CiAgICAgICAgIENoZWNrZWQ8dW5zaWdu
ZWQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQnl0ZXNSZXF1aXJlZCA9ICh3aWR0aCArIGtFQUNB
bmRFVEMyQmxvY2tTaXplIC0gMSkgLyBrRUFDQW5kRVRDMkJsb2NrU2l6ZTsKICAgICAgICAgY2hl
Y2tlZEJ5dGVzUmVxdWlyZWQgKj0gKGhlaWdodCArIGtFQUNBbmRFVEMyQmxvY2tTaXplIC0gMSkg
LyBrRUFDQW5kRVRDMkJsb2NrU2l6ZTsKICAgICAgICAgY2hlY2tlZEJ5dGVzUmVxdWlyZWQgKj0g
ODsKICAgICAgICAgaWYgKGNoZWNrZWRCeXRlc1JlcXVpcmVkLmhhc092ZXJmbG93ZWQoKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRvbyBsYXJnZSBkaW1lbnNpb25zIik7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAidG9vIGxhcmdlIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBieXRlc1JlcXVpcmVkID0gY2hlY2tlZEJ5dGVzUmVx
dWlyZWQudW5zYWZlR2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TSUdORURfUkcxMV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQThfRVRDMl9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0VUQzJfRUFDOiB7CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURf
UkcxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFf
RUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgor
ICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzog
ewogICAgICAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZEJ5dGVz
UmVxdWlyZWQgPSAod2lkdGggKyBrRUFDQW5kRVRDMkJsb2NrU2l6ZSAtIDEpIC8ga0VBQ0FuZEVU
QzJCbG9ja1NpemU7CiAgICAgICAgIGNoZWNrZWRCeXRlc1JlcXVpcmVkICo9IChoZWlnaHQgKyBr
RUFDQW5kRVRDMkJsb2NrU2l6ZSAtIDEpIC8ga0VBQ0FuZEVUQzJCbG9ja1NpemU7CiAgICAgICAg
IGNoZWNrZWRCeXRlc1JlcXVpcmVkICo9IDE2OwogICAgICAgICBpZiAoY2hlY2tlZEJ5dGVzUmVx
dWlyZWQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidG9vIGxhcmdl
IGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0b28gbGFyZ2UgZGltZW5zaW9u
cyIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJ5dGVz
UmVxdWlyZWQgPSBjaGVja2VkQnl0ZXNSZXF1aXJlZC51bnNhZmVHZXQoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0
Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBpZiAocGl4ZWxzLmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVp
cmVkKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5v
dCBjb3JyZWN0IGZvciBkaW1lbnNpb25zIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2Yg
QXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBkaW1lbnNpb25zIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTU2NjIsMTAgKzU2NjIsMTAgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25z
dCBjaGFyKiBmdW5jdGkKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVD
b21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogeworICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CiAgICAgICAgIGNvbnN0IEdDM0RzaXplaSBr
QmxvY2tXaWR0aCA9IDQ7CiAgICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tIZWlnaHQgPSA0
OwogICAgICAgICBjb25zdCBHQzNEaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0ID8gbV9tYXhU
ZXh0dXJlU2l6ZSA6IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwpAQCAtNTY3Myw2MCArNTY3Myw2
MCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRl
eERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuYwogICAgICAgICBib29sIHdpZHRoVmFsaWQgPSAo
bGV2ZWwgJiYgd2lkdGggPT0gMSkgfHwgKGxldmVsICYmIHdpZHRoID09IDIpIHx8ICghKHdpZHRo
ICUga0Jsb2NrV2lkdGgpICYmIHdpZHRoIDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOwogICAg
ICAgICBib29sIGhlaWdodFZhbGlkID0gKGxldmVsICYmIGhlaWdodCA9PSAxKSB8fCAobGV2ZWwg
JiYgaGVpZ2h0ID09IDIpIHx8ICghKGhlaWdodCAlIGtCbG9ja0hlaWdodCkgJiYgaGVpZ2h0IDw9
IG1heENvbXByZXNzZWREaW1lbnNpb24pOwogICAgICAgICBpZiAoIXdpZHRoVmFsaWQgfHwgIWhl
aWdodFZhbGlkKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBp
bnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgogICAgICAgICAvLyBIZWln
aHQgYW5kIHdpZHRoIG11c3QgYmUgcG93ZXJzIG9mIDIuCiAgICAgICAgIGlmICgod2lkdGggJiAo
d2lkdGggLSAxKSkgfHwgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkpIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9L
SFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
OHg4X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMHg1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ18xMHg2X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6RVRDMV9SR0I4X09FUzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJR05F
RF9SMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHMTFfRUFDOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ184eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ184eDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JH
QkFfQVNUQ18xMHg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JB
X0FTVENfMTB4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9B
U1RDXzEweDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNU
Q18xMHgxMF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RD
XzEyeDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENf
MTJ4MTJfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzR4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfNXg0X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUjoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2
X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMHg4X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ18xMHgxMF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
RVRDMV9SR0I4X09FUzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SMTFfRUFD
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHMTFfRUFDOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOgogICAgICAgICAvLyBObyBoZWlnaHQgYW5kIHdp
ZHRoIHJlc3RyaWN0aW9ucyBvbiBBU1RDLCBFVEMxIG9yIEVUQzIuCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGRlZmF1bHQ6CkBAIC01NzM4LDU4ICs1NzM4LDU4IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgV2ViR0xUZXh0dXJlKiB0ZXgpCiB7CiAgICAgaWYgKHhvZmZzZXQgPCAwIHx8
IHlvZmZzZXQgPCAwKSB7Ci0gICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIp
OwotICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zm
c2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgc3dpdGNoIChm
b3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhU
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDog
eworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgor
ICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CiAgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CiAgICAgICAgIGNvbnN0IGludCBrQmxvY2tI
ZWlnaHQgPSA0OwogICAgICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tXaWR0aCkgfHwgKHlvZmZz
ZXQgJSBrQmxvY2tIZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQg
b3IgeW9mZnNldCBub3QgbXVsdGlwbGUgb2YgNCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJ4b2Zmc2V0IG9yIHlvZmZzZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0ID4gdGV4
LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQogICAgICAgICAgICAgfHwgaGVpZ2h0IC0geW9mZnNl
dCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lv
bnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwog
ICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYx
X0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYx
X0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBW
MV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQ
VjFfSU1HOiB7CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRC
UFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJC
UFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180
QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUFZSVENf
MkJQUFYxX0lNRzogewogICAgICAgICBpZiAoeG9mZnNldCB8fCB5b2Zmc2V0KSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZzZXQgbXVzdCBiZSB6ZXJvIik7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZzZXQgbXVzdCBiZSB6ZXJv
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHdp
ZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKICAgICAgICAgICAgIHx8IGhlaWdo
dCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2ZWwiKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIGxldmVsIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHZh
bGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwogICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
RVRDMV9SR0I4X09FUzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6RVRDMV9SR0I4X09FUzoKICAg
ICAgICAgLy8gTm90IHN1cHBvcnRlZCBmb3IgRVRDMV9SR0I4X09FUyB0ZXh0dXJlcy4KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1IxMV9F
QUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkcxMV9FQUM6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9TUkdCOF9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQjhf
UFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6IHsKLSAgICAgICAgaWYgKHRhcmdldCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8zRCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJub3Qgc3VwcG9ydGVkIG9uIFRFWFRVUkVfM0QgdGV4dHVyZXMiKTsKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SMTFfRUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1NJR05FRF9SMTFfRUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHMTFfRUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NJR05FRF9SRzEx
X0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfRVRDMjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VU
QzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOiB7
CisgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfM0QpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm90IHN1cHBvcnRlZCBvbiBURVhUVVJFXzNEIHRl
eHR1cmVzIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja1NpemUgPSA0OwpAQCAtNTc5OCw3ICs1Nzk4LDcgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25z
KGNvbnN0IGNoYXIqIGYKICAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2NrU2l6ZSkgfHwgKHlv
ZmZzZXQgJSBrQmxvY2tTaXplKQogICAgICAgICAgICAgfHwgKCh3aWR0aCAlIGtCbG9ja1NpemUp
ICYmIHhvZmZzZXQgKyB3aWR0aCAhPSB0ZXhXaWR0aCkKICAgICAgICAgICAgIHx8ICgoaGVpZ2h0
ICUga0Jsb2NrU2l6ZSkgJiYgeW9mZnNldCArIGhlaWdodCAhPSB0ZXhIZWlnaHQpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBtYXRjaCBleGlzdGluZyB0ZXh0
dXJlIGxldmVsIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5z
aW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIHRleHR1cmUgbGV2ZWwgZGltZW5zaW9ucyIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTgxMSwxNiArNTgxMSwxNiBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZgogYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0lOVFM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TElORV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORVM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VFJJQU5HTEVfU1RSSVA6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVf
RkFOOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpQT0lOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElO
RV9TVFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FX0xPT1A6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TElORVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VFJJQU5HTEVfU1RSSVA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJJQU5HTEVfRkFO
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSSUFOR0xFUzoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIH0KQEAgLTU4MjgsNyArNTgyOCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbFNl
dHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKICAgICBpZiAobV9zdGVuY2lsTWFz
ayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1fc3RlbmNpbEZ1
bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNNYXNrQmFjaykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5jaWxzIHNldHRpbmdz
IGRvIG5vdCBtYXRjaCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0
ZW5jaWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtNTgzNywxNyArNTgzNywxNyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0
ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZnVuYykKIHsKICAg
ICBzd2l0Y2ggKGZ1bmMpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMRVNTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVBVEVSOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOT1RFUVVBTDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TkVWRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TEVTUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6R1JFQVRF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpHRVFVQUw6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Tk9URVFVQUw6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxXQVlTOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZnVuY3Rpb24iKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIH0KQEAgLTU4NzcsMTEgKzU4NzcsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpwcmludFRvQ29uc29sZShNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmlu
ZyYKIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJsZW5kRnVuY0Zh
Y3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRz
dCkKIHsKLSAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9S
IHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQot
ICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwg
ZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQotICAg
ICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0gICAgICAg
ICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBzcmMg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBhbmQgZHN0Iik7CisgICAgaWYgKCgo
c3JjID09IEdyYXBoaWNzQ29udGV4dEdMOjpDT05TVEFOVF9DT0xPUiB8fCBzcmMgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAgJiYgKGRzdCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQorICAgICAgICB8fCAoKGRzdCA9PSBH
cmFwaGljc0NvbnRleHRHTDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4
dEdMOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAgICAgICAmJiAoc3JjID09IEdy
YXBoaWNzQ29udGV4dEdMOjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0
R0w6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW5jb21wYXRpYmxlIHNyYyBhbmQgZHN0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgcmV0dXJuIHRydWU7CkBAIC01OTEyLDE5ICs1OTEyLDE5IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jCiAgICAgaWYgKCFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJsb2NhdGlvbiBpcyBub3QgZnJvbSBjdXJyZW50IHByb2dyYW0iKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBpcyBub3QgZnJvbSBjdXJyZW50IHByb2dyYW0i
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIXYpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh0cmFuc3Bvc2UpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFMU0UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5z
cG9zZSBub3QgRkFMU0UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAo
c2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCBzaXplIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CkBAIC01OTM0LDMyICs1OTM0LDMyIEBAIFdlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqCiB7CiAgICAg
T3B0aW9uYWw8V2ViR0xCdWZmZXIqPiBidWZmZXI7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKICAgICAgICAgYnVmZmVy
ID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUjoKICAgICAgICAgYnVmZmVy
ID0gbV9ib3VuZEFycmF5QnVmZmVyLmdldCgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIGlmIChpc1dlYkdMMigpKSB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkNPUFlfUkVBRF9CVUZGRVI6CiAgICAgICAgICAgICAgICAgYnVmZmVyID0gbV9ib3VuZENvcHlS
ZWFkQnVmZmVyLmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1dSSVRFX0JVRkZFUjoKICAgICAgICAgICAgICAgICBi
dWZmZXIgPSBtX2JvdW5kQ29weVdyaXRlQnVmZmVyLmdldCgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZG
RVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9QQUNLX0JVRkZF
UjoKICAgICAgICAgICAgICAgICBidWZmZXIgPSBtX2JvdW5kUGl4ZWxQYWNrQnVmZmVyLmdldCgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlBJWEVMX1VOUEFDS19CVUZGRVI6CiAgICAgICAgICAgICAgICAgYnVmZmVyID0gbV9i
b3VuZFBpeGVsVW5wYWNrQnVmZmVyLmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
UjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVI6CiAgICAgICAgICAgICAgICAgYnVmZmVyID0gbV9ib3VuZFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyLmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUjoKICAgICAgICAgICAgICAgICBidWZmZXIg
PSBtX2JvdW5kVW5pZm9ybUJ1ZmZlci5nZXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KQEAgLTU5NjcsMzIgKzU5NjcsMzIgQEAgV2ViR0xCdWZmZXIqIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hh
cioKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBpZiAoIWJ1ZmZlciB8fCAh
YnVmZmVyLnZhbHVlKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyBidWZmZXIiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJubyBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogICAgIHN3aXRjaCAodXNhZ2UpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVFJFQU1fRFJBVzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVzoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVc6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6U1RSRUFNX0RSQVc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U1RBVElDX0RSQVc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFlOQU1JQ19EUkFXOgog
ICAgICAgICByZXR1cm4gYnVmZmVyLnZhbHVlKCk7CiAgICAgfQotICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdXNhZ2UiKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHVzYWdlIik7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKIEV4Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlKQogewogICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJ
bWFnZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBjb25zdCBV
UkwmIHVybCA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5yZXNwb25zZSgpLnVybCgpOwogICAgIGlm
ICh1cmwuaXNOdWxsKCkgfHwgdXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBpbWFnZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCBpbWFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh3b3VsZFRh
aW50T3JpZ2luKGltYWdlKSkKQEAgLTYwMDMsNyArNjAwMyw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25z
dCBjaGFyCiBFeGNlcHRpb25Pcjxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcykKIHsKICAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIo
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gY2FudmFzIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBjYW52YXMiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAod291bGRU
YWludE9yaWdpbihjYW52YXMpKQpAQCAtNjAxNiw3ICs2MDE2LDcgQEAgRXhjZXB0aW9uT3I8Ym9v
bD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChj
b25zdCBjaGEKIEV4Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvKQogewogICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRo
KCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRl
byIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpCkBAIC02MDMxLDcgKzYw
MzEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRAogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhB
dHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCkBA
IC02MDY1LDE3ICs2MDY1LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzCiAgICAgCiAgICAg
YXV0byBkYXRhID0gbGlzdC5kYXRhKCk7CiAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBhcnJheSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKICAgICBpbnQgc2l6ZSA9IGxpc3QubGVuZ3RoKCk7CiAgICAg
aWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6
ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBzaXplIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBJbiBHTCwgd2Ug
c2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgpAQCAtNjEwNiwxMSArNjEwNiwxMSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRWZXJ0ZXhBdHRyaWIwKCkKICAg
ICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0g
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKICAgICAK
ICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlD
X0RSQVcpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dEdM
OjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpEWU5BTUlDX0RSQVcpOworICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQsIGZhbHNlLCAwLCAwKTsKICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCAwKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgMCk7CiAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSgwKTsKICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gMDsKICAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IDAuMGY7CkBAIC02MTU3LDcgKzYxNTcsNyBA
QCBPcHRpb25hbDxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaW11bGF0ZVZlcnRl
eEF0dHJpYjAoR0MzRHVpbnQgbnVtVmVydAogICAgIGlmICghdXNpbmdWZXJ0ZXhBdHRyaWIwICYm
ICFtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
bV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IHRydWU7Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZl
ci0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHRH
TDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKIAogICAg
IC8vIFdlIGtub3cgYnVmZmVyU2l6ZSBhbmQgYnVmZmVyRGF0YVNpemUgd29uJ3Qgb3ZlcmZsb3cg
b3IgZ28gbmVnYXRpdmUsIHRoYW5rcyB0byB2YWxpZGF0ZVNpbXVsYXRlZFZlcnRleEF0dHJpYjAK
ICAgICBHQzNEdWludCBidWZmZXJTaXplID0gKG51bVZlcnRleCArIDEpICogNDsKQEAgLTYxNjUs
OCArNjE2NSw4IEBAIE9wdGlvbmFsPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNp
bXVsYXRlVmVydGV4QXR0cmliMChHQzNEdWludCBudW1WZXJ0CiAKICAgICBpZiAoYnVmZmVyRGF0
YVNpemUgPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplKSB7CiAgICAgICAgIG1fY29udGV4dC0+
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+YnVm
ZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBidWZmZXJEYXRhU2l6ZSwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7Ci0gICAgICAgIGlmIChtX2NvbnRl
eHQtPmdldEVycm9yKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBi
dWZmZXJEYXRhU2l6ZSwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRZTkFNSUNfRFJBVyk7CisgICAg
ICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VS
Uk9SKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBjcmVhdGUgYSBidWZmZXIu
CiAgICAgICAgICAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gZmFsc2U7CiAgICAgICAg
ICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gMDsKQEAgLTYxOTgsOSArNjE5OCw5IEBA
IE9wdGlvbmFsPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpbXVsYXRlVmVydGV4
QXR0cmliMChHQzNEdWludCBudW1WZXJ0CiAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzJdID0gYXR0cmliVmFsdWUudmFsdWVbMl07CiAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1
ZmZlclZhbHVlWzNdID0gYXR0cmliVmFsdWUudmFsdWVbM107CiAgICAgICAgIG1fZm9yY2VBdHRy
aWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7Ci0gICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0
YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVm
ZmVyRGF0YS5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGlj
c0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5n
ZXQoKSk7CiAgICAgfQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQsIDAsIDAsIDApOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02MjA4LDEwICs2MjA4LDEwIEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVs
YXRpb24oKQogewogICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjpWZXJ0ZXhB
dHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApOwogICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0
cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0
KCkpKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpB
UlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhzdGF0ZS5idWZmZXJCaW5kaW5nLmdldCgpKSk7CiAg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCBzdGF0ZS5zaXplLCBzdGF0
ZS50eXBlLCBzdGF0ZS5ub3JtYWxpemVkLCBzdGF0ZS5vcmlnaW5hbFN0cmlkZSwgc3RhdGUub2Zm
c2V0KTsKICAgICB9Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsK
KyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZF
Uiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwogfQogCiB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCgpCkBAIC02
MjQ3LDIxICs2MjQ3LDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVS
ZXN0b3JlQ29udGV4dCgpCiAgICAgaW50IGNvbnRleHRMb3N0UmVhc29uID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCkuZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwogCiAgICAgc3dpdGNo
IChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VS
Uk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gbWln
aHQgbm90IGZ1bGx5CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I6CisgICAg
ICAgIC8vIFRoZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBtaWdodCBu
b3QgZnVsbHkKICAgICAgICAgLy8gc3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBzZW1hbnRpY3Mg
eWV0LiBBbHRlcm5hdGl2ZWx5LCB0aGUKICAgICAgICAgLy8gV0VCR0xfbG9zZV9jb250ZXh0IGV4
dGVuc2lvbiBtaWdodCBoYXZlIGJlZW4gdXNlZCB0byBmb3JjZQogICAgICAgICAvLyBhIGxvc3Qg
Y29udGV4dC4KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9D
T05URVhUX1JFU0VUX0FSQjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6R1VJTFRZX0NPTlRFWFRf
UkVTRVRfQVJCOgogICAgICAgICAvLyBUaGUgcmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3Rv
cmVkIGlmIHRoaXMgY29udGV4dCB3YXMKICAgICAgICAgLy8gZ3VpbHR5IG9mIGNhdXNpbmcgdGhl
IGdyYXBoaWNzIHJlc2V0LgogICAgICAgICBwcmludFRvQ29uc29sZShNZXNzYWdlTGV2ZWw6Oldh
cm5pbmcsICJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3Jh
cGhpY3MgY2FyZCB0byByZXNldDsgbm90IHJlc3RvcmluZyB0aGUgY29udGV4dCIpOwogICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRf
QVJCOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQjoK
ICAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0IHRvIGJlIHJlc3RvcmVkLgogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VU5LTk9XTl9DT05URVhUX1JFU0VU
X0FSQjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoK
ICAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0
aGF0IFdlYkdMCiAgICAgICAgIC8vIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVz
ZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KICAgICAgICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdo
ZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1bm5pbmcKQEAgLTYyOTIsMTMgKzYyOTIsMTMg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KCkK
ICAgICBpZiAoIWhvc3RXaW5kb3cpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKG1fYXR0cmli
dXRlcywgaG9zdFdpbmRvdykpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4g
Y29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKG1fYXR0cmlidXRlcywgaG9z
dFdpbmRvdykpOwogICAgIGlmICghY29udGV4dCkgewogICAgICAgICBpZiAobV9jb250ZXh0TG9z
dE1vZGUgPT0gUmVhbExvc3RDb250ZXh0KQogICAgICAgICAgICAgbV9yZXN0b3JlVGltZXIuc3Rh
cnRPbmVTaG90KHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcHRzKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgLy8gVGhpcyBsaWtlbHkgc2hvdWxkbid0IGhhcHBlbiBidXQgaXMgdGhlIGJl
c3Qgd2F5IHRvIHJlcG9ydCBpdCB0byB0aGUgV2ViR0wgYXBwLgotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiIiwgImVy
cm9yIHJlc3RvcmluZyBjb250ZXh0Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5n
IGNvbnRleHQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjM2NywxNyArNjM2Nywx
NyBAQCBuYW1lc3BhY2UgewogICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJv
cikKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU06CiAgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRU5VTSJfczsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRToKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRToKICAgICAgICAgICAgIHJldHVybiAi
SU5WQUxJRF9WQUxVRSJfczsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT046CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OOgogICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX09QRVJBVElPTiJfczsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6T1VUX09GX01FTU9SWToKICAgICAgICAgICAgIHJldHVybiAiT1VU
X09GX01FTU9SWSJfczsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgogICAgICAgICAgICAgcmV0dXJuICJJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiJfczsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
T05URVhUX0xPU1RfV0VCR0w6CiAgICAgICAgICAgICByZXR1cm4gIkNPTlRFWFRfTE9TVF9XRUJH
TCJfczsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJX
ZWJHTCBFUlJPUigiLCBoZXgoZXJyb3IsIDQsIExvd2VyY2FzZSksICcpJyk7CkBAIC02NDA2LDcg
KzY0MDYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFwcGx5U3RlbmNpbFRl
c3QoKQogICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyk7CiAgICAgICAgIGhhdmVTdGVuY2lsQnVm
ZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbDsKICAgICB9Ci0gICAgZW5hYmxlT3JEaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QsIG1fc3RlbmNpbEVuYWJsZWQgJiYgaGF2ZVN0
ZW5jaWxCdWZmZXIpOworICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9URVNULCBtX3N0ZW5jaWxFbmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKIH0KIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGVPckRpc2FibGUoR0MzRGVudW0g
Y2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCkBAIC02NDI4LDkgKzY0MjgsOSBAQCBHQzNEaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heERyYXdCdWZmZXJzKCkKICAgICBpZiAoIXN1
cHBvcnRzRHJhd0J1ZmZlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFtX21heERy
YXdCdWZmZXJzKQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6
TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICAgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9t
YXhEcmF3QnVmZmVycyk7CiAgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVO
VFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENv
bG9yQXR0YWNobWVudHMpOwogICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhf
Q09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KICAgICByZXR1cm4gc3RkOjpt
aW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKIH0KQEAgLTY0NDAs
NyArNjQ0MCw3IEBAIEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4Q29s
b3JBdHRhY2htZW50cygpCiAgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIGlmICghbV9tYXhDb2xvckF0dGFjaG1lbnRzKQotICAgICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VY
VCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoRXh0ZW5zaW9uc0dMOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0
dGFjaG1lbnRzKTsKICAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwogfQogCkBAIC02
NDUxLDEzICs2NDUxLDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2V0QmFj
a0RyYXdCdWZmZXIoR0MzRGVudW0gYnVmKQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKQogewotICAgIGJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
KTsKKyAgICBiaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKQogewogICAgIGF1dG8gdGV4dHVyZSA9
IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0
KCk7Ci0gICAgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1
cmUpOworICAgIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCB0ZXh0
dXJlKTsKICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUo
dGV4dHVyZUV4dGVuc2lvbkZsYWdzKCkpKQogICAgICAgICBtX3VucmVuZGVyYWJsZVRleHR1cmVV
bml0cy5hZGQobV9hY3RpdmVUZXh0dXJlVW5pdCk7CiB9CkBAIC02NDg4LDcgKzY0ODgsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRGludCBmaXJzdAogICAgICAgICBhdXRvIHNpbXVsYXRlVmVydGV4QXR0cmli
MFN0YXR1cyA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CiAgICAg
ICAgIGlmICghc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzKSB7CiAgICAgICAgICAgICAvLyBX
ZSB3ZXJlIHVuYWJsZSB0byBzaW11bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlci4KLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJp
YjAgYXJyYXkiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAidW5hYmxlIHRv
IHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhB
dHRyaWIwU3RhdHVzLnZhbHVlKCk7CkBAIC02NTI1LDcgKzY1MjUsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgYwogICAgICAgICBhdXRvIHNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cyA9IHNp
bXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CiAgICAgICAgIGlmICghc2ltdWxhdGVW
ZXJ0ZXhBdHRyaWIwU3RhdHVzKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBz
aW11bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlci4KLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdBcnJheXNJbnN0
YW5jZWQiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0
dHJpYjAgYXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzLnZhbHVl
KCk7CkBAIC02NTUzLDcgKzY1NTMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdgogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dmVydGV4QXR0cmliRGl2aXNvciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhB
dHRyaWJEaXZpc29yIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC02NjA3LDcgKzY2MDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnJlY3ljbGVDb250ZXh0KCkKICAgICAvLyBVc2luZyBTeW50aGV0aWNMb3N0Q29udGV4dCBt
ZWFucyB0aGUgZGV2ZWxvcGVyIHdvbid0IGJlIGFibGUgdG8gZm9yY2UgdGhlIHJlc3RvcmF0aW9u
CiAgICAgLy8gb2YgdGhlIGNvbnRleHQgYnkgY2FsbGluZyBwcmV2ZW50RGVmYXVsdCgpIGluIGEg
IndlYmdsY29udGV4dGxvc3QiIGV2ZW50IGhhbmRsZXIuCiAgICAgZm9yY2VMb3N0Q29udGV4dChT
eW50aGV0aWNMb3N0Q29udGV4dCk7Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Cisg
ICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dEdMKCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgKaW5kZXggY2I4NzJlMWYwNDg0ZTYwY2VjNjBiMTg1OGYyNzJhZjlhYzJlMzMzYS4uMGM0NDUy
YmI2MGM0MmI3MGQ3ZGU1Nzk5OTY5NDE1YWY0MjcxNDM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaApAQCAtMzAs
NyArMzAsNyBAQAogI2luY2x1ZGUgIkFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiR1BVQmFzZWRDYW52YXNSZW5kZXJpbmdD
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiU3VzcGVuZGFibGVUaW1lci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC0xMDMsNyArMTAz
LDcgQEAgdXNpbmcgV2ViR0xDYW52YXMgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEhUTUxDYW52YXNF
bGVtZW50PiwgUmVmUHRyPE9mZnNjcmVlbkNhbnYKIHVzaW5nIFdlYkdMQ2FudmFzID0gV1RGOjpW
YXJpYW50PFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OwogI2VuZGlmCiAKLWNsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0Q6OkNsaWVudCwg
cHVibGljIEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHJpdmF0ZSBBY3Rpdml0eVN0
YXRlQ2hhbmdlT2JzZXJ2ZXIgeworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSA6IHB1
YmxpYyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Q2xpZW50LCBwdWJsaWMgR1BVQmFzZWRDYW52
YXNSZW5kZXJpbmdDb250ZXh0LCBwcml2YXRlIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlciB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKTsK
IHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U+IGNyZWF0ZShDYW52YXNCYXNlJiwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYsIGNvbnN0
IFN0cmluZyYpOwpAQCAtMzQ0LDcgKzM0NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGxvc2VDb250
ZXh0SW1wbChMb3N0Q29udGV4dE1vZGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2ltdWxh
dGVDb250ZXh0Q2hhbmdlZCgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIGdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0LmdldCgpOyB9CiAgICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9CiAgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC0zNjcsNyArMzY3LDcgQEAgcHVibGlj
OgogICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcgb25seSwgZnJvbSBJbnRlcm5hbHMuCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCk7CiAKLSAgICAvLyBH
cmFwaGljc0NvbnRleHQzRDo6Q2xpZW50CisgICAgLy8gR3JhcGhpY3NDb250ZXh0R0w6OkNsaWVu
dAogICAgIHZvaWQgZGlkQ29tcG9zaXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmb3JjZUNvbnRl
eHRMb3N0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpIG92ZXJyaWRlOwpA
QCAtMzc4LDcgKzM3OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UoQ2FudmFzQmFzZSYsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpOwotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRl
eHQzRD4mJiwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZShDYW52YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmLCBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzKTsKIAogICAgIGZyaWVuZCBjbGFzcyBXZWJHTERyYXdCdWZmZXJz
OwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOwpAQCAtNDEwLDcgKzQxMCw3IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIGFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0
Jik7CiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICB2b2lkIGRl
c3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpOworICAgIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4
dEdMKCk7CiAgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKICAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZEFuZE5vdGlmeUNhbnZhc09ic2VydmVyKCk7CiAKQEAgLTQ1Nyw3ICs0NTcsNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIGVuYWJsZVN1cHBvcnRlZEV4dGVuc2lvbihBU0NJSUxp
dGVyYWwgZXh0ZW5zaW9uTmFtZUxpdGVyYWwpOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBtX2Nv
bnRleHQ7CiAgICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsKIAog
ICAgIC8vIERpc3BhdGNoZXMgYSBjb250ZXh0IGxvc3QgZXZlbnQgb25jZSBpdCBpcyBkZXRlcm1p
bmVkIHRoYXQgb25lIGlzIG5lZWRlZC4KQEAgLTY0NCw5ICs2NDQsOSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CiAKICAgICB2b2lkIHRleEltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLSAgICB2
b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2Uq
LCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRp
cGx5QWxwaGEpOworICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscyk7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZSwg
Ym9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICB2b2lkIHRleFN1YkltYWdl
MkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5
QWxwaGEpOwogCiAgICAgYm9vbCBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhcios
IGJvb2wpOwogCkBAIC04MjMsNyArODIzLDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgdmFsaWRh
dGVTaW11bGF0ZWRWZXJ0ZXhBdHRyaWIwKEdDM0R1aW50IG51bVZlcnRleCk7CiAgICAgdm9pZCBy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwogCi0gICAgLy8gV3Jh
cHBlciBmb3IgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMg
YSBtZXNzYWdlIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCisgICAgLy8gV3JhcHBlciBmb3Ig
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMgYSBt
ZXNzYWdlIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCiAgICAgZW51bSBDb25zb2xlRGlzcGxh
eVByZWZlcmVuY2UgeyBEaXNwbGF5SW5Db25zb2xlLCBEb250RGlzcGxheUluQ29uc29sZSB9Owog
ICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0sIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSA9
IERpc3BsYXlJbkNvbnNvbGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFNhbXBsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
YW1wbGVyLmNwcAppbmRleCBiN2UzZjZhOTM0YWNiOGY1M2M0YzZlYTBkY2FhMDgxYWMxYzE1ZmVk
Li5mMjRmYzRkNzNlNjJlN2IyZDNjNDMwNDAyZDE3MWRiZjJkZGFhOGI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5jcHAKQEAgLTQ2LDE0ICs0NiwxNCBAQCBX
ZWJHTFNhbXBsZXI6On5XZWJHTFNhbXBsZXIoKQogV2ViR0xTYW1wbGVyOjpXZWJHTFNhbXBsZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3Qo
Y3R4KQogewotICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVNhbXBsZXIgZnJvbSBHcmFwaGljc0Nv
bnRleHQzRC4KKyAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVTYW1wbGVyIGZyb20gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuCiB9CiAKLXZvaWQgV2ViR0xTYW1wbGVyOjpkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQor
dm9pZCBXZWJHTFNhbXBsZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQzZCk7CiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgLy8gRklYTUU6
IENhbGwgZGVsZXRlU2FtcGxlciBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1F
OiBDYWxsIGRlbGV0ZVNhbXBsZXIgZnJvbSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuaAppbmRleCA5NTQ4NzNj
ZjQzZjU0YmNjMjU4MzNlMWI5YjgxMGFiOGRiNjQ5ZDM5Li45MTJiYjhjMDIzYjFiMGJkZTIyMTZj
M2VkZjUzMjQxODZmZmJiMjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNhbXBsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNh
bXBsZXIuaApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBXZWJHTFNhbXBsZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwotICAgIHZvaWQg
ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIGZp
bmFsOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCmluZGV4IDdmYWVkMjQw
ODAzNGY4YmY4MGRjNzgxZTAyZTZlOWU0YzE3NDZjOTQuLmY3OTU3N2NmMWNkZTIyOGE4MDc0MDEz
ODYxNTgyYWVjYzJmNTYzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgV2ViR0xTaGFkZXI6OldlYkdMU2hhZGVyKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCwgR0MzRGVudW0gdHlwZSkKICAgICAsIG1fc291cmNl
KGVtcHR5U3RyaW5nKCkpCiAgICAgLCBtX2lzVmFsaWQoZmFsc2UpCiB7Ci0gICAgc2V0T2JqZWN0
KGN0eC5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIodHlwZSkpOworICAgIHNldE9i
amVjdChjdHguZ3JhcGhpY3NDb250ZXh0R0woKS0+Y3JlYXRlU2hhZGVyKHR5cGUpKTsKIH0KIAog
V2ViR0xTaGFkZXI6On5XZWJHTFNoYWRlcigpCkBAIC01Myw3ICs1Myw3IEBAIFdlYkdMU2hhZGVy
Ojp+V2ViR0xTaGFkZXIoKQogICAgIGRlbGV0ZU9iamVjdCgwKTsKIH0KIAotdm9pZCBXZWJHTFNo
YWRlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0
Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xTaGFkZXI6OmRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmpl
Y3QpCiB7CiAgICAgY29udGV4dDNkLT5kZWxldGVTaGFkZXIob2JqZWN0KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCmluZGV4IDlmNTcxYzljMGQ1ZmRkMGEwYzc1
NGMyZDIyZDIwMWFmOThkYmI5NjIuLjhlZGYwZTJjYmIxODZjM2UyNTE1Yzc0YWRjNzcwODUyOTFm
YmU5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaApAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdlYkdMU2hhZGVyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmLCBHQzNEZW51bSk7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRl
bGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0
KSBmaW5hbDsKIAogICAgIEdDM0RlbnVtIG1fdHlwZTsKICAgICBTdHJpbmcgbV9zb3VyY2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVjaXNp
b25Gb3JtYXQuaAppbmRleCAxZmU0NGI3OWYyOGYxMmYxZmEwZmQ5NjZjYmNiMWNiNzQxYjQxYzhh
Li44YzRlNjIxN2U2MDVkZTgwMTA1NGM2ZDIyYTZkMDQwMDMxZjZjYmUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0
LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAKaW5kZXgg
MWIyMjM2ZmJkNzEyYThiNzFjMDgyMGQxYzBhYTYyM2JjMzM4MjAwNC4uZDAyYmZhNGUyODZmYjFj
YmRjZDk5MzhhNGMyNDViZDI3MWE5NmExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcApAQCAtNTQsOSArNTQsOSBAQCB2b2lkIFdlYkdM
U2hhcmVkT2JqZWN0OjpkZXRhY2hDb250ZXh0R3JvdXAoKQogICAgIH0KIH0KIAotR3JhcGhpY3ND
b250ZXh0M0QqIFdlYkdMU2hhcmVkT2JqZWN0OjpnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBjb25z
dAorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIFdlYkdMU2hhcmVkT2JqZWN0OjpnZXRBR3JhcGhp
Y3NDb250ZXh0R0woKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRleHRHcm91cCA/ICZtX2Nv
bnRleHRHcm91cC0+Z2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgOiBudWxscHRyOworICAgIHJldHVy
biBtX2NvbnRleHRHcm91cCA/ICZtX2NvbnRleHRHcm91cC0+Z2V0QUdyYXBoaWNzQ29udGV4dEdM
KCkgOiBudWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTaGFyZWRPYmplY3QuaAppbmRleCAyZWE0OGQwNWM3OTI1YTBiN2M4ZjYzMWExOTFkMzA5M2Nj
ZmI1MzZlLi43ZjIzOWQ1MWM0M2MzOTI0ZmIxNzUzODViNGI5YmQ5Njk3ZmRiYzkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgKQEAgLTMxLDcg
KzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogY2xhc3MgV2ViR0xDb250ZXh0R3Jv
dXA7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCkBAIC02MCw3ICs2MCw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG1fY29udGV4dEdyb3VwOwogICAgIH0KIAotICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogZ2V0QUdyYXBoaWNzQ29udGV4dEdMKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xDb250ZXh0R3JvdXAqIG1fY29u
dGV4dEdyb3VwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
eW5jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5jcHAKaW5kZXgg
N2QxOGEyMmI1NGI1YzI4NmUxYmMxY2M1M2Q5NGIzODY5MTdmODViYS4uYjY1ZTI4YmY1YmEwNjM1
MTBmZjZiYTc4N2IyZWQwNzA1OTFhMzM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTeW5jLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFN5bmMuY3BwCkBAIC00NiwxNCArNDYsMTQgQEAgV2ViR0xTeW5jOjp+V2ViR0xTeW5jKCkK
IFdlYkdMU3luYzo6V2ViR0xTeW5jKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAg
ICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKIHsKLSAgICAvLyBGSVhNRTogQ2FsbCBmZW5jZVN5
bmMgZnJvbSBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAvLyBGSVhNRTogQ2FsbCBmZW5jZVN5bmMg
ZnJvbSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIH0KIAotdm9pZCBXZWJHTFN5bmM6OmRlbGV0
ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QpCit2b2lkIFdlYkdMU3luYzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0oY29udGV4dDNkKTsKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICAv
LyBGSVhNRTogQ2FsbCBkZWxldGVTeW5jIGZyb20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8g
RklYTUU6IENhbGwgZGVsZXRlU3luYyBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFN5bmMuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5oCmluZGV4IGE0MjIyYzM5ODA1
YmVlYjE3NDliZmZjZWUyZTVhNzk1M2U5MDc1YTkuLjBkMTJhODAwYjg3ZmFmZWNjZjE0YzI4M2I4
Yzg3MGZkNGJkYWU4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU3luYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5oCkBA
IC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTFN5bmMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAppbmRleCA5ZWJhOTcyZjU0Mzg4MjkzZWM3NDc5
ZGVmN2ZiMzZjZTgxMDdjZTY3Li43ZWEyMWQ5OWM3NjRhM2NkNGQwZDE3OTA4NWRmNDcyYWQzOTBi
N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKQEAg
LTQzLDEwICs0MywxMCBAQCBSZWY8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6OmNyZWF0ZShX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgpCiBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVy
ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVj
dChjdHgpCiAgICAgLCBtX3RhcmdldCgwKQotICAgICwgbV9taW5GaWx0ZXIoR3JhcGhpY3NDb250
ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUikKLSAgICAsIG1fbWFnRmlsdGVyKEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpCi0gICAgLCBtX3dyYXBTKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpCi0gICAgLCBtX3dyYXBUKEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpCisgICAgLCBtX21p
bkZpbHRlcihHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKQorICAgICwg
bV9tYWdGaWx0ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUikKKyAgICAsIG1fd3JhcFMoR3Jh
cGhpY3NDb250ZXh0R0w6OlJFUEVBVCkKKyAgICAsIG1fd3JhcFQoR3JhcGhpY3NDb250ZXh0R0w6
OlJFUEVBVCkKICAgICAsIG1faXNOUE9UKGZhbHNlKQogICAgICwgbV9pc0NvbXBsZXRlKGZhbHNl
KQogICAgICwgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUoZmFsc2UpCkBAIC01NSw3ICs1NSw3IEBA
IFdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0
eCkKICAgICAsIG1faXNIYWxmRmxvYXRUeXBlKGZhbHNlKQogICAgICwgbV9pc0ZvcldlYkdMMShj
dHguaXNXZWJHTDEoKSkKIHsKLSAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmNyZWF0ZVRleHR1cmUoKSk7CisgICAgc2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRleHRHTCgp
LT5jcmVhdGVUZXh0dXJlKCkpOwogfQogCiBXZWJHTFRleHR1cmU6On5XZWJHTFRleHR1cmUoKQpA
QCAtNzEsMTIgKzcxLDEyIEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpzZXRUYXJnZXQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IG1heExldmVsKQogICAgIGlmIChtX3RhcmdldCkKICAgICAgICAgcmV0
dXJuOwogICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEOgogICAg
ICAgICBtX3RhcmdldCA9IHRhcmdldDsKICAgICAgICAgbV9pbmZvLnJlc2l6ZSgxKTsKICAgICAg
ICAgbV9pbmZvWzBdLnJlc2l6ZShtYXhMZXZlbCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUDoKICAgICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7CiAg
ICAgICAgIG1faW5mby5yZXNpemUoNik7CiAgICAgICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCA2
OyArK2lpKQpAQCAtOTAsNDAgKzkwLDQwIEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpzZXRQYXJhbWV0
ZXJpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQogICAgIGlmICghb2JqZWN0KCkgfHwg
IW1fdGFyZ2V0KQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX01JTl9GSUxURVI6CiAgICAgICAgIHN3aXRjaCAocGFyYW0p
IHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDoKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
Ok5FQVJFU1Q6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUjoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUl9NSVBNQVBfTElORUFSOgogICAgICAgICAg
ICAgbV9taW5GaWx0ZXIgPSBwYXJhbTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01BR19GSUxURVI6CiAg
ICAgICAgIHN3aXRjaCAocGFyYW0pIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TkVBUkVTVDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSOgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpMSU5FQVI6CiAgICAgICAgICAgICBtX21hZ0ZpbHRlciA9IHBhcmFtOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9XUkFQX1M6CiAgICAgICAgIHN3aXRjaCAocGFyYW0pIHsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRVBFQVQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VE
R0U6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1JUlJPUkVEX1JFUEVBVDoKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVQRUFUOgogICAgICAgICAgICAgbV93cmFw
UyA9IHBhcmFtOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1Q6CiAgICAgICAgIHN3aXRjaCAocGFyYW0p
IHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRToKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUOgotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkNMQU1QX1RPX0VER0U6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1JUlJP
UkVEX1JFUEVBVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVQRUFUOgogICAg
ICAgICAgICAgbV93cmFwVCA9IHBhcmFtOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIFdlYkdMVGV4dHVyZTo6bmVlZFRvVXNlQmxhY2tUZXh0
dXJlKFRleHR1cmVFeHRlbnNpb25GbGFnIGV4dGVuc2lvbnMpIGNvbnN0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAobV9uZWVkVG9Vc2VCbGFja1RleHR1cmUpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmIChtX21hZ0ZpbHRlciA9PSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVT
VCAmJiAobV9taW5GaWx0ZXIgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QgfHwgbV9taW5G
aWx0ZXIgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQorICAg
IGlmIChtX21hZ0ZpbHRlciA9PSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVCAmJiAobV9taW5G
aWx0ZXIgPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1QgfHwgbV9taW5GaWx0ZXIgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6Ok5FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKG1faXNGb3JXZWJHTDEgJiYgbV9pc0hhbGZGbG9hdFR5cGUgJiYgIShl
eHRlbnNpb25zICYgVGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVhckVuYWJsZWQpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3NCwyOSArMjc0LDI5IEBAIHZvaWQgV2ViR0xUZXh0dXJl
OjpzZXRDb21wcmVzc2VkKCkKICAgICBtX2lzQ29tcHJlc3NlZCA9IHRydWU7CiB9CiAKLXZvaWQg
V2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFRleHR1cmU6OmRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9i
amVjdCBvYmplY3QpCiB7CiAgICAgY29udGV4dDNkLT5kZWxldGVUZXh0dXJlKG9iamVjdCk7CiB9
CiAKIGludCBXZWJHTFRleHR1cmU6Om1hcFRhcmdldFRvSW5kZXgoR0MzRGVudW0gdGFyZ2V0KSBj
b25zdAogewotICAgIGlmIChtX3RhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCkgewotICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
KQorICAgIGlmIChtX3RhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCkgewor
ICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSBlbHNlIGlmIChtX3RhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgIH0gZWxzZSBpZiAobV90YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVApIHsKICAgICAgICAgc3dpdGNoICh0
YXJnZXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CiAgICAg
ICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CiAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6CiAgICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICByZXR1cm4g
NDsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6CiAgICAgICAgICAgICByZXR1cm4gNTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM0MSwxMiArMzQxLDEyIEBAIEdDM0RpbnQgV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3Vu
dChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiBzdGF0aWMgYm9vbCBpbnRlcm5h
bEZvcm1hdElzRmxvYXRUeXBlKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogewogICAgIHN3aXRj
aCAoaW50ZXJuYWxGb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJGOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJGOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJGOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMy
RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzU2LDEyICszNTYsMTIgQEAgc3RhdGljIGJvb2wgaW50ZXJuYWxGb3JtYXRJc0Zsb2F0VHlwZShH
QzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKIHN0YXRpYyBib29sIGludGVybmFsRm9ybWF0SXNIYWxm
RmxvYXRUeXBlKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogewogICAgIHN3aXRjaCAoaW50ZXJu
YWxGb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZGOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIx
MUZfRzExRl9CMTBGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTU6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2RjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
MTFGX0cxMUZfQjEwRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I5X0U1OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBMTZGOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00MTIsMTIgKzQxMiwxMiBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6
dXBkYXRlKCkKICAgICBpZiAobV9pc0ZvcldlYkdMMSkgewogICAgICAgICBpZiAobV9pc0NvbXBs
ZXRlKSB7CiAgICAgICAgICAgICBpZiAobV9pc0ZvcldlYkdMMSkKLSAgICAgICAgICAgICAgICBt
X2lzRmxvYXRUeXBlID0gbV9pbmZvWzBdWzBdLnR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOworICAgICAgICAgICAgICAgIG1faXNGbG9hdFR5cGUgPSBtX2luZm9bMF1bMF0udHlwZSA9
PSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgbV9pc0Zsb2F0VHlwZSA9IGludGVybmFsRm9ybWF0SXNGbG9hdFR5cGUobV9pbmZvWzBd
WzBdLmludGVybmFsRm9ybWF0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGlpID0gMDsgaWkgPCBtX2luZm8uc2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKChtX2lzRm9yV2ViR0wxICYmIG1faW5mb1tpaV1bMF0udHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQpCisgICAgICAgICAgICAgICAgaWYgKChtX2lzRm9yV2ViR0wxICYmIG1f
aW5mb1tpaV1bMF0udHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQpCiAgICAgICAgICAg
ICAgICAgICAgIHx8ICghbV9pc0ZvcldlYkdMMSAmJiBpbnRlcm5hbEZvcm1hdElzRmxvYXRUeXBl
KG1faW5mb1tpaV1bMF0uaW50ZXJuYWxGb3JtYXQpKSkgewogICAgICAgICAgICAgICAgICAgICBt
X2lzRmxvYXRUeXBlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MzIs
MTAgKzQzMiwxMCBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6dXBkYXRlKCkKICAgICAgICAgICAgIGlm
IChtX2lzRm9yV2ViR0wxKQogICAgICAgICAgICAgICAgIG1faXNIYWxmRmxvYXRUeXBlID0gaW50
ZXJuYWxGb3JtYXRJc0hhbGZGbG9hdFR5cGUobV9pbmZvWzBdWzBdLmludGVybmFsRm9ybWF0KTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2lzSGFsZkZsb2F0VHlwZSA9IG1f
aW5mb1swXVswXS50eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzsKKyAg
ICAgICAgICAgICAgICBtX2lzSGFsZkZsb2F0VHlwZSA9IG1faW5mb1swXVswXS50eXBlID09IEdy
YXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBtX2luZm8uc2l6ZSgpOyArK2lpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKChtX2lzRm9yV2ViR0wxICYmIG1faW5mb1tpaV1bMF0udHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpCisgICAgICAgICAgICAgICAgaWYg
KChtX2lzRm9yV2ViR0wxICYmIG1faW5mb1tpaV1bMF0udHlwZSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6SEFMRl9GTE9BVF9PRVMpCiAgICAgICAgICAgICAgICAgICAgIHx8ICghbV9pc0ZvcldlYkdM
MSAmJiBpbnRlcm5hbEZvcm1hdElzSGFsZkZsb2F0VHlwZShtX2luZm9baWldWzBdLmludGVybmFs
Rm9ybWF0KSkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pc0hhbGZGbG9hdFR5cGUgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ0NiwxMSArNDQ2LDExIEBAIHZvaWQg
V2ViR0xUZXh0dXJlOjp1cGRhdGUoKQogCiAgICAgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUgPSBm
YWxzZTsKICAgICAvLyBOUE9UCi0gICAgaWYgKG1faXNOUE9UICYmICgobV9taW5GaWx0ZXIgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QgJiYgbV9taW5GaWx0ZXIgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUikKLSAgICAgICAgICAgICAgICAgICAgIHx8IG1fd3JhcFMgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgfHwgbV93cmFwVCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSkpCisgICAgaWYgKG1faXNOUE9UICYmICgobV9taW5GaWx0ZXIgIT0g
R3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1QgJiYgbV9taW5GaWx0ZXIgIT0gR3JhcGhpY3NDb250
ZXh0R0w6OkxJTkVBUikKKyAgICAgICAgfHwgbV93cmFwUyAhPSBHcmFwaGljc0NvbnRleHRHTDo6
Q0xBTVBfVE9fRURHRSB8fCBtX3dyYXBUICE9IEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19F
REdFKSkKICAgICAgICAgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUgPSB0cnVlOwogICAgIC8vIENv
bXBsZXRlbmVzcwotICAgIGlmICghbV9pc0NvbXBsZXRlICYmIG1fbWluRmlsdGVyICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpORUFSRVNUICYmIG1fbWluRmlsdGVyICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpCisgICAgaWYgKCFtX2lzQ29tcGxldGUgJiYgbV9taW5GaWx0ZXIgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6Ok5FQVJFU1QgJiYgbV9taW5GaWx0ZXIgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OkxJTkVBUikKICAgICAgICAgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUgPSB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCmluZGV4IDA5NjNiZjg5ZWZh
ZjJiZTVjMmU4ODNjZTg5MjNjODhkNzMzODhiZTguLmNmZDgyMzM2NWU0NTU3NzJlYjJjYmVkMzA0
MzExZWM3ZDVlODY2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oCkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViR0xUZXh0dXJl
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1w
bChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZv
aWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RP
YmplY3QpIG92ZXJyaWRlOwogCiAgICAgY2xhc3MgTGV2ZWxJbmZvIHsKICAgICBwdWJsaWM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRi
YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJh
Y2suY3BwCmluZGV4IGU1Mjc2YjhlMjA5OTQyN2UxNmU2YjRiMGFmMzgyOGRkYTBhNDk5MTEuLjE3
NDU5NDViNjk2NDZkZmVlYTEyMTc2ZDQwNWJmZjU5NmUwYjQ0ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwCkBAIC00
NiwxNCArNDYsMTQgQEAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6fldlYkdMVHJhbnNmb3JtRmVl
ZGJhY2soKQogV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6V2ViR0xUcmFuc2Zvcm1GZWVkYmFjayhX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChj
dHgpCiB7Ci0gICAgLy8gRklYTUU6IENhbGwgY3JlYXRlVHJhbnNmb3JtRmVlZGJhY2sgZnJvbSBH
cmFwaGljc0NvbnRleHQzRC4KKyAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVUcmFuc2Zvcm1GZWVk
YmFjayBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQogCi12b2lkIFdlYkdMVHJhbnNm
b3JtRmVlZGJhY2s6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6
OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQzZCk7CiAg
ICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7Ci0gICAgLy8gRklYTUU6IENhbGwgZGVsZXRlVHJhbnNm
b3JtRmVlZGJhY2sgZnJvbSBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAvLyBGSVhNRTogQ2FsbCBk
ZWxldGVUcmFuc2Zvcm1GZWVkYmFjayBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9y
bUZlZWRiYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZl
ZWRiYWNrLmgKaW5kZXggMTE0N2I1ZjZhZGU2MzZjZTMxZTY3N2NkMWRjMjYyMTYxZWE5MGU5OS4u
MTE0M2RmNGZjODBhY2YzYTM0MTgxYzdjNWM2MDJhM2U1ZmUzMTNlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaApAQCAtNDAs
NyArNDAsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdElt
cGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2
b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAK
aW5kZXggMWI0NmI3YjRlODZlMTZiYjZhZjgwM2FkYzVhMDFkMzY1Yzg2OWY5NC4uNWRiYjFhMDU1
M2I2ZWNkM2U0ZDczZWUyM2M1MmJkNDY3M2E4NTU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAKQEAgLTUyLDEwICs1
MiwxMCBAQCBXZWJHTFZlcnRleEFycmF5T2JqZWN0OjpXZWJHTFZlcnRleEFycmF5T2JqZWN0KFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleAogI2Vsc2UKICAgICBBU1NFUlQodHlwZSAh
PSBUeXBlOjpEZWZhdWx0IHx8ICEodGhpcy0+Y29udGV4dCgpLT5tX2RlZmF1bHRWZXJ0ZXhBcnJh
eU9iamVjdCkpOwogI2VuZGlmCi0gICAgc2V0T2JqZWN0KHRoaXMtPmNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+Y3JlYXRlVmVydGV4QXJyYXkoKSk7CisgICAgc2V0T2JqZWN0KHRoaXMt
PmNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKS0+Y3JlYXRlVmVydGV4QXJyYXkoKSk7CiB9
CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdDo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewogICAgIGNhc2UgVHlwZTo6RGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaAppbmRleCAyZjdlZDM1MDgx
NzIzZjBhYmFmMjUzYjJhYmNmZDAxMzk3MDM2NDBiLi43YTMwYjQ5MzgzNjQyOWQzMzg2NjBlNmQx
MDRjYWZjMWQ4ODk0ODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFZlcnRleEFycmF5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5XZWJHTFZlcnRleEFycmF5T2JqZWN0KCk7CiBwcml2YXRlOgogICAgIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFR5cGUpOwotICAgIHZv
aWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3Qp
IGZpbmFsOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2UuY3BwCmluZGV4IDEyNDRjNzdiOTkyMTQyMmVhZGM0NGJlYmUwNDY3NDdk
MDZiYjg1M2MuLjA3ZTE4NDQ1Yzc4ZWY3YmM5Y2RlZjE5NTBlZjUxODkwNmFhOTNmNzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZS5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZTo6c2V0RWxlbWVudEFycmF5QnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiAgICAg
aWYgKGJ1ZmZlcikKICAgICAgICAgYnVmZmVyLT5vbkF0dGFjaGVkKCk7CiAgICAgaWYgKG1fYm91
bmRFbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIt
Pm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9i
b3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dEdMKCkpOwogICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIgPSBidWZmZXI7CiAgICAg
CiB9CkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OnNl
dFZlcnRleEF0dHJpYlN0YXRlKEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkKICAgICBpZiAoYnVm
ZmVyKQogICAgICAgICBidWZmZXItPm9uQXR0YWNoZWQoKTsKICAgICBpZiAoc3RhdGUuYnVmZmVy
QmluZGluZykKLSAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZy0+b25EZXRhY2hlZChjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5v
bkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgCiAgICAgc3Rh
dGUuYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKICAgICBzdGF0ZS5ieXRlc1BlckVsZW1lbnQgPSBi
eXRlc1BlckVsZW1lbnQ7CkBAIC03MywyMSArNzMsMjEgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5
T2JqZWN0QmFzZTo6c2V0VmVydGV4QXR0cmliU3RhdGUoR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXpl
aQogdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6dW5iaW5kQnVmZmVyKFdlYkdMQnVm
ZmVyJiBidWZmZXIpCiB7CiAgICAgaWYgKG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIgPT0gJmJ1
ZmZlcikgewotICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFjaGVkKGNv
bnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIG1fYm91bmRFbGVtZW50QXJy
YXlCdWZmZXItPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgpKTsKICAg
ICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CiAgICAgfQogICAgIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICBhdXRvJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbaV07CiAgICAg
ICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nID09ICZidWZmZXIpIHsKLSAgICAgICAgICAgIGJ1
ZmZlci5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAg
ICAgICBidWZmZXIub25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdMKCkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWkgJiYgIWNvbnRleHQoKS0+aXNHTEVTMkNv
bXBsaWFudCgpKSB7CiAgICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IGNvbnRl
eHQoKS0+bV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOwogICAgICAgICAgICAgICAgIHN0YXRlLmJ1ZmZl
ckJpbmRpbmctPm9uQXR0YWNoZWQoKTsKICAgICAgICAgICAgICAgICBzdGF0ZS5ieXRlc1BlckVs
ZW1lbnQgPSAwOwogICAgICAgICAgICAgICAgIHN0YXRlLnNpemUgPSA0OwotICAgICAgICAgICAg
ICAgIHN0YXRlLnR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgICAgICAg
ICAgc3RhdGUudHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgICAgICAg
ICBzdGF0ZS5ub3JtYWxpemVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc3RhdGUuc3RyaWRl
ID0gMTY7CiAgICAgICAgICAgICAgICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RC
YXNlLmgKaW5kZXggMjA3MWYzNDQ4ZTIwODBjZjNhMTUxNmM4NjZlMDg5N2IwYWNlOTU3NC4uZTdh
YzQ4MWRlOGIwZmZhM2I2NzQ3NTg2MTc2MGM0OWVlYWRmZjgwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5j
bHVkZSAiV2ViR0xCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRPYmplY3QuaCIKIApA
QCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVm
ZmVyQmluZGluZzsKICAgICAgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCB7IDAgfTsKICAg
ICAgICAgR0MzRGludCBzaXplIHsgNCB9OwotICAgICAgICBHQzNEZW51bSB0eXBlIHsgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUIH07CisgICAgICAgIEdDM0RlbnVtIHR5cGUgeyBHcmFwaGljc0Nv
bnRleHRHTDo6RkxPQVQgfTsKICAgICAgICAgYm9vbCBub3JtYWxpemVkIHsgZmFsc2UgfTsKICAg
ICAgICAgR0MzRHNpemVpIHN0cmlkZSB7IDE2IH07CiAgICAgICAgIEdDM0RzaXplaSBvcmlnaW5h
bFN0cmlkZSB7IDAgfTsKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYs
IFR5cGUpOwotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBs
YXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9IDA7
CiAKICAgICBUeXBlIG1fdHlwZTsKICAgICBib29sIG1faGFzRXZlckJlZW5Cb3VuZCB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVMuY3BwCmluZGV4IGFmNTU2NWNkOTQ0NDI0YjUzYjgzNTdkYjJjMDE5MGJl
MWNlNWI0NjkuLmEwY2U1YjgwMDhiNmIzMDU3NjIyYTNiZWYzNWJlOTE2MTAyZjY0MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJF
eHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2LDcgKzQ2LDcgQEAgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlJgogICAgIGNhc2UgVHlwZTo6RGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBU
eXBlOjpVc2VyOgotICAgICAgICBzZXRPYmplY3QodGhpcy0+Y29udGV4dCgpLT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSk7CisgICAg
ICAgIHNldE9iamVjdCh0aGlzLT5jb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4
dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogfQpAQCAtNTYsNyArNTYsNyBAQCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjp+V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUygpCiAgICAgZGVsZXRlT2JqZWN0KG51bGxwdHIpOwogfQogCi12
b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgc3dpdGNo
IChtX3R5cGUpIHsKICAgICBjYXNlIFR5cGU6OkRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKaW5kZXggZDU1
ZDYwYmIwOWRmYjI5Y2RjYWJhZWY3YzZlMGIwYjZkMGU4MjZkZC4uMDgzMzk2MmQ2NjVlZjEyZjRj
Y2RmNWQ4ZjEyYjVjYWYwMGFjNmQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaApAQCAtMzcsNyArMzcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpOwogcHJpdmF0
ZToKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmLCBUeXBlKTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0Qq
LCBQbGF0Zm9ybTNET2JqZWN0KSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBmaW5hbDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAppbmRleCBlOTQyMzhiY2UyMjlhYmIxNzFmNTNhYmM4
MzE3MzhmODVkMzMzNDVkLi4yOTFiZDI0YjA2ZjM3ZDNiNDQ4ZTdiN2VjMzc4NjQ4NDE3OWFlZTU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJv
Z3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclBy
b2dyYW0uY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIldlYkdMUHJv
Z3JhbS5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRl
ICJXZWJHTFNoYWRlci5oIgpAQCAtMTEwLDEwICsxMTAsMTAgQEAgc3RhdGljIFdlYkdMU2hhZGVy
KiBzaGFkZXJGb3JUeXBlKFdlYkdMUHJvZ3JhbSYgcHJvZ3JhbSwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2EKIHsKICAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKICAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZTo6RnJhZ21lbnQ6Ci0gICAgICAgIHJldHVybiBw
cm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOworICAgICAgICByZXR1cm4gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0Nv
bnRleHRHTDo6RlJBR01FTlRfU0hBREVSKTsKIAogICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2FudmFzOjpTaGFkZXJUeXBlOjpWZXJ0ZXg6Ci0gICAgICAgIHJldHVybiBwcm9ncmFtLmdl
dEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICAg
ICAgcmV0dXJuIHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OlZF
UlRFWF9TSEFERVIpOwogCiAgICAgLy8gQ29tcHV0ZSBzaGFkZXJzIGFyZSBhIFdlYkdQVSBjb25j
ZXB0LgogICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlOjpD
b21wdXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCA4
MzhiMThmM2E4YmYzNjY1NDllYjNjZjk0NjNjMzAxYzZhNzBkY2Y1Li5kNDlmNDI4N2NkZDVkOWJl
NzBiM2VhM2UyODU3NDIwOTExNzM4YWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXJDbGllbnQuaApAQCAtMzM4LDcgKzMzOCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VC
R0wpCiAgICAgdmlydHVhbCBib29sIGFsbG93V2ViR0woYm9vbCBlbmFibGVkUGVyU2V0dGluZ3Mp
IHsgcmV0dXJuIGVuYWJsZWRQZXJTZXR0aW5nczsgfQogICAgIC8vIEluZm9ybXMgdGhlIGVtYmVk
ZGVyIHRoYXQgYSBXZWJHTCBjYW52YXMgaW5zaWRlIHRoaXMgZnJhbWUgcmVjZWl2ZWQgYSBsb3N0
IGNvbnRleHQKLSAgICAvLyBub3RpZmljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gR0xfQVJCX3JvYnVz
dG5lc3MgZ3VpbHQvaW5ub2NlbmNlIGNvZGUgKHNlZSBFeHRlbnNpb25zM0QuaCkuCisgICAgLy8g
bm90aWZpY2F0aW9uIHdpdGggdGhlIGdpdmVuIEdMX0FSQl9yb2J1c3RuZXNzIGd1aWx0L2lubm9j
ZW5jZSBjb2RlIChzZWUgRXh0ZW5zaW9uc0dMLmgpLgogICAgIHZpcnR1YWwgdm9pZCBkaWRMb3Nl
V2ViR0xDb250ZXh0KGludCkgeyB9CiAgICAgdmlydHVhbCBXZWJHTExvYWRQb2xpY3kgd2ViR0xQ
b2xpY3lGb3JVUkwoY29uc3QgVVJMJikgY29uc3QgeyByZXR1cm4gV2ViR0xBbGxvd0NyZWF0aW9u
OyB9CiAgICAgdmlydHVhbCBXZWJHTExvYWRQb2xpY3kgcmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJM
KGNvbnN0IFVSTCYpIGNvbnN0IHsgcmV0dXJuIFdlYkdMQWxsb3dDcmVhdGlvbjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCmluZGV4IDhiYzM1YTU3ZDZiZmY2OTIyOTY3MDBmMzUzZjhjNDQzMDVlYjE1
OTYuLmY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZhMWZiZmE3ZWZmZDdhZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAKQEAgLTYxLDggKzYxLDggQEAKICNpbmNsdWRlICJEYXRhTGlzdFN1Z2dlc3Rp
b25QaWNrZXIuaCIKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF8zRCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCIKKyNp
ZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTUxNiw4ICs1MTYsOCBAQCB2b2lkIENocm9tZTo6d2luZG93U2NyZWVuRGlk
Q2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKICNlbmRpZgogICAgIG1fcGFnZS5z
ZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYg
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0gICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkuc2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCwgdGhpcyk7CisjaWYg
UExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zY3JlZW5EaWRDaGFuZ2Uo
ZGlzcGxheUlELCB0aGlzKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291
cmNlc0NhaXJvLnR4dAppbmRleCAxNTk2OWY5MzVlZDgyMjRkZmQzMDUyMGY5YjY3OTk0NmQyNTg0
MmY5Li40MjFkZmJkOTU3NTRjNDYyNzU3Yjc4ZGJmYTQxMDI1NDMyYWYwYjdkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTI3LDcgKzI3LDcgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAotcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBl
ci5jbWFrZQppbmRleCAzNTNjMTQxZGRhNzk0OTYwMTdiNmFiNGZmZjllNDNkNDQwN2RiYjViLi5m
ZTI2NjljNDIzNDMzOWYxZTQwODFiYThlMDMzM2ZjYzlhODc0MTg4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTcsNyArNyw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YUFuaW1hdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVy
ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZVBvb2wuY3Bw
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dDNEVGV4dHVyZU1h
cHBlci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xU
ZXh0dXJlTWFwcGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyRlBT
Q291bnRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3Rh
dGVUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3RhdGVUcmFja2Vy
LmNwcAppbmRleCAzM2YxZDU4ZDlhMmY3MDViZTUxZjcyMDJmZDE3ZDNiYTJmOTE3OTMzLi42ZDc0
MjZkOGYxYzM3MmQ2ZjAxNWQwZGU2M2QzMjZhZGE0NmJjZTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuY3BwCkBAIC0zNiwxMCArMzYsMTAgQEAgV2Vi
R0xTdGF0ZVRyYWNrZXI6OldlYkdMU3RhdGVUcmFja2VyKFN0YXRlQ2hhbmdlSGFuZGxlciYmIGhh
bmRsZXIpCiB7CiB9CiAKLWF1dG8gV2ViR0xTdGF0ZVRyYWNrZXI6OnRva2VuKEdyYXBoaWNzQ29u
dGV4dDNEUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZSkgLT4gVG9rZW4KK2F1dG8gV2Vi
R0xTdGF0ZVRyYWNrZXI6OnRva2VuKEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlIHBv
d2VyUHJlZmVyZW5jZSkgLT4gVG9rZW4KIHsKICAgICAvLyBXZSBvbmx5IHRyYWNrIGhpZ2ggcGVy
Zm9ybWFuY2UgV2ViR0wgY29udGV4dHMgYXQgdGhlIG1vbWVudC4KLSAgICBpZiAocG93ZXJQcmVm
ZXJlbmNlICE9IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFu
Y2UpCisgICAgaWYgKHBvd2VyUHJlZmVyZW5jZSAhPSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJl
ZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVy
biBtX3dlYkdMQ29udGV4dENvdW50ZXIuY291bnQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3RhdGVUcmFja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5oCmluZGV4IGI0YzhjYzJkN2JlNGU4ZmMyOWFhMGFiM2Uz
NjQ5YmI2M2UzYzg0ZjAuLjg0NDY4MWU2OGU2YTA4MjAyZDIxMzFlNmVhMzIyYTM1YzNkNjI3NjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3RhdGVUcmFja2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuaApAQCAtMjcs
NyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
LmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZXIu
aD4KIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgV2ViR0xDb250ZXh0Q291
bnRlciA9IFJlZkNvdW50ZXI8V2ViR0xDb250ZXh0Q291bnRlclR5cGU+OwogICAgIHVzaW5nIFRv
a2VuID0gV2ViR0xDb250ZXh0Q291bnRlcjo6VG9rZW47CiAKLSAgICBUb2tlbiB0b2tlbihHcmFw
aGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZSk7CisgICAgVG9rZW4gdG9rZW4oR3JhcGhpY3ND
b250ZXh0R0xQb3dlclByZWZlcmVuY2UpOwogCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlV2Vi
R0xTdGF0ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJLaXRCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJLaXRCcmlkZ2UuY3BwCmluZGV4IGExM2ZkNmIxYmJhNDc3ODJiY2U5MjcxODQ0OGJj
OWYxMDM2ODdmNWEuLjg5MjdhYWNmNmM4NmI2YjI0MDQ4YjdmMmE2Njc2N2Q4ZGM1MmEyMDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJp
ZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktp
dEJyaWRnZS5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0j
aWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfR0wpCiAKICNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKQEAgLTIzMSw0ICsyMzEsNCBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdlOjphbmdsZUF2
YWlsYWJsZSgpCiAKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQor
I2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzhmMmEwMzg2MTk5NDIyNmM5MzRjYTY1MWEwZGIxYjkwYWQzMTI3OS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBFeHRlbnNpb25zM0RfaAotI2RlZmluZSBFeHRlbnNpb25z
M0RfaAotCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGlzIGEgYmFz
ZSBjbGFzcyBjb250YWluaW5nIG9ubHkgcHVyZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KLS8vIEltcGxl
bWVudGF0aW9ucyBtdXN0IHByb3ZpZGUgYSBzdWJjbGFzcy4KLS8vCi0vLyBUaGUgc3VwcG9ydGVk
IGV4dGVuc2lvbnMgYXJlIGRlZmluZWQgYmVsb3cgYW5kIGluIHN1YmNsYXNzZXMsCi0vLyBwb3Nz
aWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBvbmVzLgotLy8KLS8vIENhbGxpbmcgYW55IGV4dGVuc2lv
biBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGNvbnRleHQKLS8vIG11c3Qg
YmUgYSBuby1vcDsgaW4gcGFydGljdWxhciwgaXQgbWF5IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4g
SW4KLS8vIHRoaXMgc2l0dWF0aW9uLCBpZiB0aGUgZnVuY3Rpb24gaGFzIGEgcmV0dXJuIHZhbHVl
LCAwIGlzIHJldHVybmVkLgotY2xhc3MgRXh0ZW5zaW9uczNEIHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5FeHRlbnNpb25zM0QoKSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBTdXBwb3J0ZWQgZXh0ZW5z
aW9uczoKLSAgICAvLyAgIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAotICAgIC8vICAg
R0xfRVhUX3JlYWRfZm9ybWF0X2JncmEKLSAgICAvLyAgIEdMX0FSQl9yb2J1c3RuZXNzCi0gICAg
Ly8gICBHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIC8gR0xfT0VTX3RleHR1cmVfbnBv
dAotICAgIC8vICAgR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIC8gR0xfT0VTX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsCi0gICAgLy8gICBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IC8gR0xfQU5H
TEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKLSAgICAvLyAgIEdMX0lNR19tdWx0aXNhbXBsZWRf
cmVuZGVyX3RvX3RleHR1cmUKLSAgICAvLyAgIEdMX09FU190ZXh0dXJlX2Zsb2F0Ci0gICAgLy8g
ICBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIKLSAgICAvLyAgIEdMX09FU190ZXh0dXJlX2hh
bGZfZmxvYXQKLSAgICAvLyAgIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyCi0gICAg
Ly8gICBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAvLyAgIEdMX09FU19yZ2I4X3Jn
YmE4Ci0gICAgLy8gICBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAotICAgIC8vICAgR0xfT0VT
X2VsZW1lbnRfaW5kZXhfdWludAotICAgIC8vICAgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJf
c291cmNlCi0gICAgLy8gICBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUgKG9ubHkgdGhlIHN1YnNl
dCByZXF1aXJlZCB0bwotICAgIC8vICAgICBpbXBsZW1lbnQgSU9TdXJmYWNlIGJpbmRpbmc7IGl0
J3MgcmVjb21tZW5kZWQgdG8gc3VwcG9ydAotICAgIC8vICAgICB0aGlzIG9ubHkgb24gTWFjIE9T
IFggdG8gbGltaXQgdGhlIGFtb3VudCBvZiBjb2RlIGRlcGVuZGVudAotICAgIC8vICAgICBvbiB0
aGlzIGV4dGVuc2lvbikKLSAgICAvLyAgIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEK
LSAgICAvLyAgIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMKLSAgICAvLyAgIEdMX09F
U19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCi0gICAgLy8gICBHTF9JTUdfdGV4dHVyZV9j
b21wcmVzc2lvbl9wdnJ0YwotICAgIC8vICAgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0
Y19oZHIKLSAgICAvLyAgIEdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCi0gICAg
Ly8gICBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKLSAgICAvLyAgIEdMX0VYVF9kZWJ1
Z19tYXJrZXIKLSAgICAvLyAgIEdMX0FSQl9kcmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZm
ZXJzCi0gICAgLy8gICBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0KLSAgICAvLyBUYWtlcyBm
dWxsIG5hbWUgb2YgZXh0ZW5zaW9uOyBmb3IgZXhhbXBsZSwKLSAgICAvLyAiR0xfRVhUX3RleHR1
cmVfZm9ybWF0X0JHUkE4ODg4Ii4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3Ry
aW5nJikgPSAwOwotCi0gICAgLy8gQ2VydGFpbiBPcGVuR0wgYW5kIFdlYkdMIGltcGxlbWVudGF0
aW9ucyBtYXkgc3VwcG9ydCBlbmFibGluZwotICAgIC8vIGV4dGVuc2lvbnMgbGF6aWx5LiBUaGlz
IG1ldGhvZCBtYXkgb25seSBiZSBjYWxsZWQgd2l0aAotICAgIC8vIGV4dGVuc2lvbiBuYW1lcyBm
b3Igd2hpY2ggc3VwcG9ydHMgcmV0dXJucyB0cnVlLgotICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVF
bmFibGVkKGNvbnN0IFN0cmluZyYpID0gMDsKLQotICAgIC8vIFRha2VzIGZ1bGwgbmFtZSBvZiBl
eHRlbnNpb246IGZvciBleGFtcGxlLCAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ii4K
LSAgICAvLyBDaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIGdpdmVuIGV4dGVuc2lvbiBpcyBhY3R1
YWxseSBlbmFibGVkIChzZWUgZW5zdXJlRW5hYmxlZCkuCi0gICAgLy8gSGFzIG5vIG90aGVyIHNp
ZGUtZWZmZWN0cy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpID0g
MDsKLQotICAgIGVudW0gRXh0ZW5zaW9uc0VudW1UeXBlIHsKLSAgICAgICAgLy8gRVhUX3NSR0Ig
Zm9ybWF0cwotICAgICAgICBTUkdCX0VYVCA9IDB4OEM0MCwKLSAgICAgICAgU1JHQl9BTFBIQV9F
WFQgPSAweDhDNDIsCi0gICAgICAgIFNSR0I4X0FMUEhBOF9FWFQgPSAweDhDNDMsCi0gICAgICAg
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUID0gMHg4MjEwLAotCi0g
ICAgICAgIC8vIEVYVF9ibGVuZF9taW5tYXggZW51bXMKLSAgICAgICAgTUlOX0VYVCA9IDB4ODAw
NywKLSAgICAgICAgTUFYX0VYVCA9IDB4ODAwOCwKLQotICAgICAgICAvLyBHTF9FWFRfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODggZW51bXMKLSAgICAgICAgQkdSQV9FWFQgPSAweDgwRTEsCi0KLSAg
ICAgICAgLy8gR0xfQVJCX3JvYnVzdG5lc3MgZW51bXMKLSAgICAgICAgR1VJTFRZX0NPTlRFWFRf
UkVTRVRfQVJCID0gMHg4MjUzLAotICAgICAgICBJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQiA9
IDB4ODI1NCwKLSAgICAgICAgVU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1NSwKLSAg
ICAgICAgQ09OVEVYVF9ST0JVU1RfQUNDRVNTID0gMHg5MEYzLAotCi0gICAgICAgIC8vIEdMX0VY
VC9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgZW51bXMKLSAgICAgICAgREVQVEgyNF9TVEVOQ0lM
OCA9IDB4ODhGMCwKLSAgICAgICAgCi0gICAgICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2Js
aXQgbmFtZXMKLSAgICAgICAgUkVBRF9GUkFNRUJVRkZFUiA9IDB4OENBOCwKLSAgICAgICAgRFJB
V19GUkFNRUJVRkZFUiA9IDB4OENBOSwKLSAgICAgICAgRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5H
ID0gMHg4Q0E2LCAKLSAgICAgICAgUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0FBLAot
ICAgICAgICAKLSAgICAgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgbmFt
ZXMKLSAgICAgICAgUkVOREVSQlVGRkVSX1NBTVBMRVMgPSAweDhDQUIsCi0gICAgICAgIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEUgPSAweDhENTYsCi0gICAgICAgIE1BWF9TQU1Q
TEVTID0gMHg4RDU3LAotCi0gICAgICAgIC8vIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3Rv
X3RleHR1cmUKLSAgICAgICAgUkVOREVSQlVGRkVSX1NBTVBMRVNfSU1HID0gMHg5MTMzLAotICAg
ICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0lNRyA9IDB4OTEzNCwKLSAg
ICAgICAgTUFYX1NBTVBMRVNfSU1HID0gMHg5MTM1LAotICAgICAgICBURVhUVVJFX1NBTVBMRVNf
SU1HID0gMHg5MTM2LAotCi0gICAgICAgIC8vIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBu
YW1lcwotICAgICAgICBGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUyA9IDB4OEI4
QiwKLQotICAgICAgICAvLyBHTF9PRVNfcmdiOF9yZ2JhOCBuYW1lcwotICAgICAgICBSR0I4X09F
UyA9IDB4ODA1MSwKLSAgICAgICAgUkdCQThfT0VTID0gMHg4MDU4LAotICAgICAgICAKLSAgICAg
ICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgbmFtZXMKLSAgICAgICAgVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTID0gMHg4NUI1LAotCi0gICAgICAgIC8vIEdMX0FOR0xFX3RyYW5zbGF0
ZWRfc2hhZGVyX3NvdXJjZQotICAgICAgICBUUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RI
X0FOR0xFID0gMHg5M0EwLAotCi0gICAgICAgIC8vIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZQot
ICAgICAgICBURVhUVVJFX1JFQ1RBTkdMRV9BUkIgPSAgMHg4NEY1LAotICAgICAgICBURVhUVVJF
X0JJTkRJTkdfUkVDVEFOR0xFX0FSQiA9IDB4ODRGNiwKLQotICAgICAgICAvLyBHTF9FWFRfdGV4
dHVyZV9jb21wcmVzc2lvbl9keHQxCi0gICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNz
aW9uX3MzdGMKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMCwK
LSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAweDgzRjEsCi0gICAgICAg
IENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyLAotICAgICAgICBDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCA9IDB4ODNGMywKLQotICAgICAgICAvLyBHTF9PRVNfY29t
cHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZQotICAgICAgICBFVEMxX1JHQjhfT0VTID0gMHg4RDY0
LAotCi0gICAgICAgIC8vIFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMKLSAgICAgICAgQ09N
UFJFU1NFRF9SMTFfRUFDID0gMHg5MjcwLAotICAgICAgICBDT01QUkVTU0VEX1NJR05FRF9SMTFf
RUFDID0gMHg5MjcxLAotICAgICAgICBDT01QUkVTU0VEX1JHMTFfRUFDID0gMHg5MjcyLAotICAg
ICAgICBDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyA9IDB4OTI3MywKLSAgICAgICAgQ09NUFJF
U1NFRF9SR0I4X0VUQzIgPSAweDkyNzQsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfRVRDMiA9
IDB4OTI3NSwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRD
MiA9IDB4OTI3NiwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEEx
X0VUQzIgPSAweDkyNzcsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMgPSAweDky
NzgsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDID0gMHg5Mjc5LAot
Ci0gICAgICAgIC8vIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjCi0gICAgICAgIENP
TVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUcgPSAweDhDMDAsCi0gICAgICAgIENPTVBSRVNT
RURfUkdCX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDEsCi0gICAgICAgIENPTVBSRVNTRURfUkdC
QV9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAyLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfUFZS
VENfMkJQUFYxX0lNRyA9IDB4OEMwMywKLQotICAgICAgICAvLyBHTF9BTURfY29tcHJlc3NlZF9B
VENfdGV4dHVyZQotICAgICAgICBDT01QUkVTU0VEX0FUQ19SR0JfQU1EID0gMHg4QzkyLAotICAg
ICAgICBDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRCA9IDB4OEM5MywKLSAg
ICAgICAgQ09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EID0gMHg4N0VF
LAotICAgICAgICAKLSAgICAgICAgLy8gR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19o
ZHIKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiA9IDB4OTNCMCwKLSAgICAg
ICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUiA9IDB4OTNCMSwKLSAgICAgICAgQ09NUFJF
U1NFRF9SR0JBX0FTVENfNXg1X0tIUiA9IDB4OTNCMiwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JB
X0FTVENfNng1X0tIUiA9IDB4OTNCMywKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2
X0tIUiA9IDB4OTNCNCwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUiA9IDB4
OTNCNSwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUiA9IDB4OTNCNiwKLSAg
ICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiA9IDB4OTNCNywKLSAgICAgICAgQ09N
UFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIgPSAweDkzQjgsCi0gICAgICAgIENPTVBSRVNTRURf
UkdCQV9BU1RDXzEweDZfS0hSID0gMHg5M0I5LAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNU
Q18xMHg4X0tIUiA9IDB4OTNCQSwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBf
S0hSID0gMHg5M0JCLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFIgPSAw
eDkzQkMsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUiA9IDB4OTNCRCwK
LSAgICAgICAgCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiA9
IDB4OTNEMCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSID0g
MHg5M0QxLAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFIgPSAw
eDkzRDIsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiA9IDB4
OTNEMywKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSID0gMHg5
M0Q0LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFIgPSAweDkz
RDUsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiA9IDB4OTNE
NiwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSID0gMHg5M0Q3
LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSID0gMHg5M0Q4
LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSID0gMHg5M0Q5
LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSID0gMHg5M0RB
LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUiA9IDB4OTNE
QiwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgPSAweDkz
REMsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSID0gMHg5
M0RELAotCi0gICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAg
ICAgICBURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRSwKLSAgICAgICAgTUFYX1RF
WFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZGLAotCi0gICAgICAgIC8vIEdMX0FSQl9k
cmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZmZXJzCi0gICAgICAgIE1BWF9EUkFXX0JVRkZF
UlNfRVhUID0gMHg4ODI0LAotICAgICAgICBEUkFXX0JVRkZFUjBfRVhUID0gMHg4ODI1LAotICAg
ICAgICBEUkFXX0JVRkZFUjFfRVhUID0gMHg4ODI2LAotICAgICAgICBEUkFXX0JVRkZFUjJfRVhU
ID0gMHg4ODI3LAotICAgICAgICBEUkFXX0JVRkZFUjNfRVhUID0gMHg4ODI4LAotICAgICAgICBE
UkFXX0JVRkZFUjRfRVhUID0gMHg4ODI5LAotICAgICAgICBEUkFXX0JVRkZFUjVfRVhUID0gMHg4
ODJBLAotICAgICAgICBEUkFXX0JVRkZFUjZfRVhUID0gMHg4ODJCLAotICAgICAgICBEUkFXX0JV
RkZFUjdfRVhUID0gMHg4ODJDLAotICAgICAgICBEUkFXX0JVRkZFUjhfRVhUID0gMHg4ODJELAot
ICAgICAgICBEUkFXX0JVRkZFUjlfRVhUID0gMHg4ODJFLAotICAgICAgICBEUkFXX0JVRkZFUjEw
X0VYVCA9IDB4ODgyRiwKLSAgICAgICAgRFJBV19CVUZGRVIxMV9FWFQgPSAweDg4MzAsCi0gICAg
ICAgIERSQVdfQlVGRkVSMTJfRVhUID0gMHg4ODMxLAotICAgICAgICBEUkFXX0JVRkZFUjEzX0VY
VCA9IDB4ODgzMiwKLSAgICAgICAgRFJBV19CVUZGRVIxNF9FWFQgPSAweDg4MzMsCi0gICAgICAg
IERSQVdfQlVGRkVSMTVfRVhUID0gMHg4ODM0LAotICAgICAgICBNQVhfQ09MT1JfQVRUQUNITUVO
VFNfRVhUID0gMHg4Q0RGLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMF9FWFQgPSAweDhDRTAs
Ci0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQxX0VYVCA9IDB4OENFMSwKLSAgICAgICAgQ09MT1Jf
QVRUQUNITUVOVDJfRVhUID0gMHg4Q0UyLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UM19FWFQg
PSAweDhDRTMsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ0X0VYVCA9IDB4OENFNCwKLSAgICAg
ICAgQ09MT1JfQVRUQUNITUVOVDVfRVhUID0gMHg4Q0U1LAotICAgICAgICBDT0xPUl9BVFRBQ0hN
RU5UNl9FWFQgPSAweDhDRTYsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ3X0VYVCA9IDB4OENF
NywKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDhfRVhUID0gMHg4Q0U4LAotICAgICAgICBDT0xP
Ul9BVFRBQ0hNRU5UOV9FWFQgPSAweDhDRTksCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMF9F
WFQgPSAweDhDRUEsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMV9FWFQgPSAweDhDRUIsCi0g
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMl9FWFQgPSAweDhDRUMsCi0gICAgICAgIENPTE9SX0FU
VEFDSE1FTlQxM19FWFQgPSAweDhDRUQsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQxNF9FWFQg
PSAweDhDRUUsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQxNV9FWFQgPSAweDhDRUYKLSAgICB9
OwotCi0gICAgLy8gR0xfQVJCX3JvYnVzdG5lc3MKLSAgICAvLyBOb3RlOiBUaGlzIG1ldGhvZCdz
IGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MKLSAgICAvLyBzcGVj
aWZpY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlv
biBtdXN0IG5vdCByZXNldCB0aGUgZXJyb3Igc3RhdGUgZHVyaW5nIHRoaXMgY2FsbC4KLSAgICAv
LyBJZiBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCIHJldHVybnMgYW4gZXJyb3IsIGl0IHNob3Vs
ZCBjb250aW51ZQotICAgIC8vIHJldHVybmluZyB0aGUgc2FtZSBlcnJvci4gUmVzdG9yaW5nIHRo
ZSBHcmFwaGljc0NvbnRleHQzRCBpcyBoYW5kbGVkCi0gICAgLy8gZXh0ZXJuYWxseS4KLSAgICB2
aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPSAwOwotICAgIAotICAgIC8v
IEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKLSAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVm
ZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcg
ZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcg
bWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpID0gMDsKLSAgICAKLSAgICAvLyBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxl
cywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpID0gMDsKLSAgICAKLSAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5
X29iamVjdAotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0z
RE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICAvLyBHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0gICAgLy8gRVhUIFJvYnVzdG5lc3MgLSB1
c2VzIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZG5QaXhl
bHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRh
dGEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0blVuaWZvcm1mdkVYVChHQzNEdWludCBwcm9n
cmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpID0gMDsKLQotICAgIC8v
IEdMX0VYVF9kZWJ1Z19tYXJrZXIKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJF
WFQoY29uc3QgU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXNoR3JvdXBNYXJrZXJF
WFQoY29uc3QgU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwb3BHcm91cE1hcmtlckVY
VCh2b2lkKSA9IDA7Ci0KLSAgICAvLyBHTF9BUkJfZHJhd19idWZmZXJzIC8gR0xfRVhUX2RyYXdf
YnVmZmVycwotICAgIHZpcnR1YWwgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgbiwgY29u
c3QgR0MzRGVudW0qIGJ1ZnMpID0gMDsKLQotICAgIC8vIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVp
IHByaW1jb3VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdD
M0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNOVklESUEoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQU1EKCkgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBpc0ludGVsKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdpbmF0aW9uKCkg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZlbmRvcigpID0gMDsKLQotICAgIC8vIFNvbWUgY29u
ZmlndXJhdGlvbnMgaGF2ZSBidWdzIHJlZ2FyZGluZyBidWlsdC1pbiBmdW5jdGlvbnMgaW4gdGhl
aXIgT3BlbkdMIGRyaXZlcnMKLSAgICAvLyB0aGF0IG11c3QgYmUgYXZvaWRlZC4gUG9ydHMgc2hv
dWxkIGltcGxlbWVudCB0aGVzZSBmbGFncyBvbiBzdWNoIGNvbmZpZ3VyYXRpb25zLgotICAgIHZp
cnR1YWwgYm9vbCByZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbigpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkgPSAwOwot
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFeHRlbnNpb25zM0Rf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9u
c0dMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zR0wuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43YjRmZWYyNTIyYWI0ZmY1N2YxNzY0MGRlODE4M2E4MGZjZDBiZTYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9u
c0dMLmgKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMzRC5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgY29udGFpbmlu
ZyBvbmx5IHB1cmUgdmlydHVhbCBmdW5jdGlvbnMuCisvLyBJbXBsZW1lbnRhdGlvbnMgbXVzdCBw
cm92aWRlIGEgc3ViY2xhc3MuCisvLworLy8gVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGFyZSBk
ZWZpbmVkIGJlbG93IGFuZCBpbiBzdWJjbGFzc2VzLAorLy8gcG9zc2libHkgcGxhdGZvcm0tc3Bl
Y2lmaWMgb25lcy4KKy8vCisvLyBDYWxsaW5nIGFueSBleHRlbnNpb24gZnVuY3Rpb24gbm90IHN1
cHBvcnRlZCBieSB0aGUgY3VycmVudCBjb250ZXh0CisvLyBtdXN0IGJlIGEgbm8tb3A7IGluIHBh
cnRpY3VsYXIsIGl0IG1heSBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuIEluCisvLyB0aGlzIHNpdHVh
dGlvbiwgaWYgdGhlIGZ1bmN0aW9uIGhhcyBhIHJldHVybiB2YWx1ZSwgMCBpcyByZXR1cm5lZC4K
K2NsYXNzIEV4dGVuc2lvbnNHTCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dM
KCkgPSBkZWZhdWx0OworCisgICAgLy8gU3VwcG9ydGVkIGV4dGVuc2lvbnM6CisgICAgLy8gICBH
TF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICAvLyAgIEdMX0VYVF9yZWFkX2Zvcm1h
dF9iZ3JhCisgICAgLy8gICBHTF9BUkJfcm9idXN0bmVzcworICAgIC8vICAgR0xfQVJCX3RleHR1
cmVfbm9uX3Bvd2VyX29mX3R3byAvIEdMX09FU190ZXh0dXJlX25wb3QKKyAgICAvLyAgIEdMX0VY
VF9wYWNrZWRfZGVwdGhfc3RlbmNpbCAvIEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAorICAg
IC8vICAgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAvIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlCisgICAgLy8gICBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJl
CisgICAgLy8gICBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAgIC8vICAgR0xfT0VTX3RleHR1cmVf
ZmxvYXRfbGluZWFyCisgICAgLy8gICBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgLy8g
ICBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcgorICAgIC8vICAgR0xfT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzCisgICAgLy8gICBHTF9PRVNfcmdiOF9yZ2JhOAorICAgIC8vICAgR0xf
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICAvLyAgIEdMX09FU19lbGVtZW50X2luZGV4X3Vp
bnQKKyAgICAvLyAgIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQorICAgIC8vICAg
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIChvbmx5IHRoZSBzdWJzZXQgcmVxdWlyZWQgdG8KKyAg
ICAvLyAgICAgaW1wbGVtZW50IElPU3VyZmFjZSBiaW5kaW5nOyBpdCdzIHJlY29tbWVuZGVkIHRv
IHN1cHBvcnQKKyAgICAvLyAgICAgdGhpcyBvbmx5IG9uIE1hYyBPUyBYIHRvIGxpbWl0IHRoZSBh
bW91bnQgb2YgY29kZSBkZXBlbmRlbnQKKyAgICAvLyAgICAgb24gdGhpcyBleHRlbnNpb24pCisg
ICAgLy8gICBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8gICBHTF9FWFRf
dGV4dHVyZV9jb21wcmVzc2lvbl9zM3RjCisgICAgLy8gICBHTF9PRVNfY29tcHJlc3NlZF9FVEMx
X1JHQjhfdGV4dHVyZQorICAgIC8vICAgR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMK
KyAgICAvLyAgIEdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfaGRyCisgICAgLy8gICBH
TF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2xkcgorICAgIC8vICAgRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljCisgICAgLy8gICBHTF9FWFRfZGVidWdfbWFya2VyCisgICAgLy8g
ICBHTF9BUkJfZHJhd19idWZmZXJzIC8gR0xfRVhUX2RyYXdfYnVmZmVycworICAgIC8vICAgR0xf
QU5HTEVfaW5zdGFuY2VkX2FycmF5cworCisgICAgLy8gVGFrZXMgZnVsbCBuYW1lIG9mIGV4dGVu
c2lvbjsgZm9yIGV4YW1wbGUsCisgICAgLy8gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCIuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpID0gMDsKKworICAg
IC8vIENlcnRhaW4gT3BlbkdMIGFuZCBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgbWF5IHN1cHBvcnQg
ZW5hYmxpbmcKKyAgICAvLyBleHRlbnNpb25zIGxhemlseS4gVGhpcyBtZXRob2QgbWF5IG9ubHkg
YmUgY2FsbGVkIHdpdGgKKyAgICAvLyBleHRlbnNpb24gbmFtZXMgZm9yIHdoaWNoIHN1cHBvcnRz
IHJldHVybnMgdHJ1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJp
bmcmKSA9IDA7CisKKyAgICAvLyBUYWtlcyBmdWxsIG5hbWUgb2YgZXh0ZW5zaW9uOiBmb3IgZXhh
bXBsZSwgIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIuCisgICAgLy8gQ2hlY2tzIHRv
IHNlZSB3aGV0aGVyIHRoZSBnaXZlbiBleHRlbnNpb24gaXMgYWN0dWFsbHkgZW5hYmxlZCAoc2Vl
IGVuc3VyZUVuYWJsZWQpLgorICAgIC8vIEhhcyBubyBvdGhlciBzaWRlLWVmZmVjdHMuCisgICAg
dmlydHVhbCBib29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKSA9IDA7CisKKyAgICBlbnVtIEV4
dGVuc2lvbnNFbnVtVHlwZSB7CisgICAgICAgIC8vIEVYVF9zUkdCIGZvcm1hdHMKKyAgICAgICAg
U1JHQl9FWFQgPSAweDhDNDAsCisgICAgICAgIFNSR0JfQUxQSEFfRVhUID0gMHg4QzQyLAorICAg
ICAgICBTUkdCOF9BTFBIQThfRVhUID0gMHg4QzQzLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVCA9IDB4ODIxMCwKKworICAgICAgICAvLyBFWFRfYmxl
bmRfbWlubWF4IGVudW1zCisgICAgICAgIE1JTl9FWFQgPSAweDgwMDcsCisgICAgICAgIE1BWF9F
WFQgPSAweDgwMDgsCisKKyAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
IGVudW1zCisgICAgICAgIEJHUkFfRVhUID0gMHg4MEUxLAorCisgICAgICAgIC8vIEdMX0FSQl9y
b2J1c3RuZXNzIGVudW1zCisgICAgICAgIEdVSUxUWV9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1
MywKKyAgICAgICAgSU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTQsCisgICAgICAg
IFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTUsCisgICAgICAgIENPTlRFWFRfUk9C
VVNUX0FDQ0VTUyA9IDB4OTBGMywKKworICAgICAgICAvLyBHTF9FWFQvT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIGVudW1zCisgICAgICAgIERFUFRIMjRfU1RFTkNJTDggPSAweDg4RjAsCisKKyAg
ICAgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBuYW1lcworICAgICAgICBSRUFEX0ZS
QU1FQlVGRkVSID0gMHg4Q0E4LAorICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAor
ICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQTYsCisgICAgICAgIFJFQURf
RlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBQSwKKworICAgICAgICAvLyBHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSBuYW1lcworICAgICAgICBSRU5ERVJCVUZGRVJfU0FNUExFUyA9
IDB4OENBQiwKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSA9IDB4
OEQ1NiwKKyAgICAgICAgTUFYX1NBTVBMRVMgPSAweDhENTcsCisKKyAgICAgICAgLy8gR0xfSU1H
X211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQorICAgICAgICBSRU5ERVJCVUZGRVJfU0FN
UExFU19JTUcgPSAweDkxMzMsCisgICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElT
QU1QTEVfSU1HID0gMHg5MTM0LAorICAgICAgICBNQVhfU0FNUExFU19JTUcgPSAweDkxMzUsCisg
ICAgICAgIFRFWFRVUkVfU0FNUExFU19JTUcgPSAweDkxMzYsCisKKyAgICAgICAgLy8gR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIG5hbWVzCisgICAgICAgIEZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTID0gMHg4QjhCLAorCisgICAgICAgIC8vIEdMX09FU19yZ2I4X3JnYmE4
IG5hbWVzCisgICAgICAgIFJHQjhfT0VTID0gMHg4MDUxLAorICAgICAgICBSR0JBOF9PRVMgPSAw
eDgwNTgsCisKKyAgICAgICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgbmFtZXMKKyAg
ICAgICAgVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTID0gMHg4NUI1LAorCisgICAgICAgIC8vIEdM
X0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQorICAgICAgICBUUkFOU0xBVEVEX1NIQURF
Ul9TT1VSQ0VfTEVOR1RIX0FOR0xFID0gMHg5M0EwLAorCisgICAgICAgIC8vIEdMX0FSQl90ZXh0
dXJlX3JlY3RhbmdsZQorICAgICAgICBURVhUVVJFX1JFQ1RBTkdMRV9BUkIgPSAgMHg4NEY1LAor
ICAgICAgICBURVhUVVJFX0JJTkRJTkdfUkVDVEFOR0xFX0FSQiA9IDB4ODRGNiwKKworICAgICAg
ICAvLyBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgICAgIC8vIEdMX0VYVF90
ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVCA9IDB4ODNGMCwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAw
eDgzRjEsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyLAor
ICAgICAgICBDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCA9IDB4ODNGMywKKworICAgICAg
ICAvLyBHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZQorICAgICAgICBFVEMxX1JH
QjhfT0VTID0gMHg4RDY0LAorCisgICAgICAgIC8vIFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9l
dGMKKyAgICAgICAgQ09NUFJFU1NFRF9SMTFfRUFDID0gMHg5MjcwLAorICAgICAgICBDT01QUkVT
U0VEX1NJR05FRF9SMTFfRUFDID0gMHg5MjcxLAorICAgICAgICBDT01QUkVTU0VEX1JHMTFfRUFD
ID0gMHg5MjcyLAorICAgICAgICBDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyA9IDB4OTI3MywK
KyAgICAgICAgQ09NUFJFU1NFRF9SR0I4X0VUQzIgPSAweDkyNzQsCisgICAgICAgIENPTVBSRVNT
RURfU1JHQjhfRVRDMiA9IDB4OTI3NSwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhS
T1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3NiwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0VUQzIgPSAweDkyNzcsCisgICAgICAgIENPTVBSRVNTRURfUkdCQThf
RVRDMl9FQUMgPSAweDkyNzgsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJf
RUFDID0gMHg5Mjc5LAorCisgICAgICAgIC8vIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2
cnRjCisgICAgICAgIENPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUcgPSAweDhDMDAsCisg
ICAgICAgIENPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUcgPSAweDhDMDEsCisgICAgICAg
IENPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HID0gMHg4QzAyLAorICAgICAgICBDT01Q
UkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyA9IDB4OEMwMywKKworICAgICAgICAvLyBHTF9B
TURfY29tcHJlc3NlZF9BVENfdGV4dHVyZQorICAgICAgICBDT01QUkVTU0VEX0FUQ19SR0JfQU1E
ID0gMHg4QzkyLAorICAgICAgICBDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FN
RCA9IDB4OEM5MywKKyAgICAgICAgQ09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQ
SEFfQU1EID0gMHg4N0VFLAorCisgICAgICAgIC8vIEdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9u
X2FzdGNfaGRyCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFIgPSAweDkzQjAs
CisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFIgPSAweDkzQjEsCisgICAgICAg
IENPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIgPSAweDkzQjIsCisgICAgICAgIENPTVBSRVNT
RURfUkdCQV9BU1RDXzZ4NV9LSFIgPSAweDkzQjMsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9B
U1RDXzZ4Nl9LSFIgPSAweDkzQjQsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9L
SFIgPSAweDkzQjUsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIgPSAweDkz
QjYsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIgPSAweDkzQjcsCisgICAg
ICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSID0gMHg5M0I4LAorICAgICAgICBDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUiA9IDB4OTNCOSwKKyAgICAgICAgQ09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4OF9LSFIgPSAweDkzQkEsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RD
XzEweDEwX0tIUiA9IDB4OTNCQiwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBf
S0hSID0gMHg5M0JDLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFIgPSAw
eDkzQkQsCisKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSID0g
MHg5M0QwLAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFIgPSAw
eDkzRDEsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiA9IDB4
OTNEMiwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSID0gMHg5
M0QzLAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFIgPSAweDkz
RDQsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUiA9IDB4OTNE
NSwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSID0gMHg5M0Q2
LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFIgPSAweDkzRDcs
CisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFIgPSAweDkzRDgs
CisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFIgPSAweDkzRDks
CisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgPSAweDkzREEs
CisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSID0gMHg5M0RC
LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiA9IDB4OTNE
QywKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIgPSAweDkz
REQsCisKKyAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAg
ICAgIFRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZFLAorICAgICAgICBNQVhfVEVY
VFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgPSAweDg0RkYsCisKKyAgICAgICAgLy8gR0xfQVJCX2Ry
YXdfYnVmZmVycyAvIEdMX0VYVF9kcmF3X2J1ZmZlcnMKKyAgICAgICAgTUFYX0RSQVdfQlVGRkVS
U19FWFQgPSAweDg4MjQsCisgICAgICAgIERSQVdfQlVGRkVSMF9FWFQgPSAweDg4MjUsCisgICAg
ICAgIERSQVdfQlVGRkVSMV9FWFQgPSAweDg4MjYsCisgICAgICAgIERSQVdfQlVGRkVSMl9FWFQg
PSAweDg4MjcsCisgICAgICAgIERSQVdfQlVGRkVSM19FWFQgPSAweDg4MjgsCisgICAgICAgIERS
QVdfQlVGRkVSNF9FWFQgPSAweDg4MjksCisgICAgICAgIERSQVdfQlVGRkVSNV9FWFQgPSAweDg4
MkEsCisgICAgICAgIERSQVdfQlVGRkVSNl9FWFQgPSAweDg4MkIsCisgICAgICAgIERSQVdfQlVG
RkVSN19FWFQgPSAweDg4MkMsCisgICAgICAgIERSQVdfQlVGRkVSOF9FWFQgPSAweDg4MkQsCisg
ICAgICAgIERSQVdfQlVGRkVSOV9FWFQgPSAweDg4MkUsCisgICAgICAgIERSQVdfQlVGRkVSMTBf
RVhUID0gMHg4ODJGLAorICAgICAgICBEUkFXX0JVRkZFUjExX0VYVCA9IDB4ODgzMCwKKyAgICAg
ICAgRFJBV19CVUZGRVIxMl9FWFQgPSAweDg4MzEsCisgICAgICAgIERSQVdfQlVGRkVSMTNfRVhU
ID0gMHg4ODMyLAorICAgICAgICBEUkFXX0JVRkZFUjE0X0VYVCA9IDB4ODgzMywKKyAgICAgICAg
RFJBV19CVUZGRVIxNV9FWFQgPSAweDg4MzQsCisgICAgICAgIE1BWF9DT0xPUl9BVFRBQ0hNRU5U
U19FWFQgPSAweDhDREYsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQwX0VYVCA9IDB4OENFMCwK
KyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDFfRVhUID0gMHg4Q0UxLAorICAgICAgICBDT0xPUl9B
VFRBQ0hNRU5UMl9FWFQgPSAweDhDRTIsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQzX0VYVCA9
IDB4OENFMywKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDRfRVhUID0gMHg4Q0U0LAorICAgICAg
ICBDT0xPUl9BVFRBQ0hNRU5UNV9FWFQgPSAweDhDRTUsCisgICAgICAgIENPTE9SX0FUVEFDSE1F
TlQ2X0VYVCA9IDB4OENFNiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDdfRVhUID0gMHg4Q0U3
LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UOF9FWFQgPSAweDhDRTgsCisgICAgICAgIENPTE9S
X0FUVEFDSE1FTlQ5X0VYVCA9IDB4OENFOSwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEwX0VY
VCA9IDB4OENFQSwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDExX0VYVCA9IDB4OENFQiwKKyAg
ICAgICAgQ09MT1JfQVRUQUNITUVOVDEyX0VYVCA9IDB4OENFQywKKyAgICAgICAgQ09MT1JfQVRU
QUNITUVOVDEzX0VYVCA9IDB4OENFRCwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDE0X0VYVCA9
IDB4OENFRSwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDE1X0VYVCA9IDB4OENFRgorICAgIH07
CisKKyAgICAvLyBHTF9BUkJfcm9idXN0bmVzcworICAgIC8vIE5vdGU6IFRoaXMgbWV0aG9kJ3Mg
YmVoYXZpb3IgZGlmZmVycyBmcm9tIHRoZSBHTF9BUkJfcm9idXN0bmVzcworICAgIC8vIHNwZWNp
ZmljYXRpb24gaW4gdGhlIGZvbGxvd2luZyB3YXk6CisgICAgLy8gVGhlIGltcGxlbWVudGF0aW9u
IG11c3Qgbm90IHJlc2V0IHRoZSBlcnJvciBzdGF0ZSBkdXJpbmcgdGhpcyBjYWxsLgorICAgIC8v
IElmIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIgcmV0dXJucyBhbiBlcnJvciwgaXQgc2hvdWxk
IGNvbnRpbnVlCisgICAgLy8gcmV0dXJuaW5nIHRoZSBzYW1lIGVycm9yLiBSZXN0b3JpbmcgdGhl
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGlzIGhhbmRsZWQKKyAgICAvLyBleHRlcm5hbGx5Lgor
ICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9IDA7CisKKyAgICAv
LyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CisgICAgdmlydHVhbCB2b2lkIGJsaXRGcmFtZWJ1
ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25n
IGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25n
IG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSA9IDA7CisKKyAgICAvLyBHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpID0gMDsKKworICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
CisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3Jt
M0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpID0gMDsKKworICAgIC8vIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3Nv
dXJjZQorICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQ
bGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICAvLyBFWFQgUm9idXN0bmVzcyAtIHVzZXMgZ2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQgorICAgIHZpcnR1YWwgdm9pZCByZWFkblBpeGVsc0VYVChp
bnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgPSAwOworCisgICAgLy8gR0xfRVhU
X2RlYnVnX21hcmtlcgorICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25z
dCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25z
dCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQp
ID0gMDsKKworICAgIC8vIEdMX0FSQl9kcmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZmZXJz
CisgICAgdmlydHVhbCB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNE
ZW51bSogYnVmcykgPSAwOworCisgICAgLy8gR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cworICAg
IHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQg
Zmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQg
aW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc05WSURJ
QSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBTUQoKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGlzSW50ZWwoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzSW1hZ2luYXRpb24oKSA9IDA7Cisg
ICAgdmlydHVhbCBTdHJpbmcgdmVuZG9yKCkgPSAwOworCisgICAgLy8gU29tZSBjb25maWd1cmF0
aW9ucyBoYXZlIGJ1Z3MgcmVnYXJkaW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBpbiB0aGVpciBPcGVu
R0wgZHJpdmVycworICAgIC8vIHRoYXQgbXVzdCBiZSBhdm9pZGVkLiBQb3J0cyBzaG91bGQgaW1w
bGVtZW50IHRoZXNlIGZsYWdzIG9uIHN1Y2ggY29uZmlndXJhdGlvbnMuCisgICAgdmlydHVhbCBi
b29sIHJlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCByZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSA9IDA7CisKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3BwCmluZGV4IDA5ZWVjNzhiYWRkMDdlODc5NDE3
NzQwNTMwZWE1YzUzYTlkZDYwNmQuLmI2YzYxOGU5NjE4ZmRkZjBkOGMwYTNmN2Y2OTkxMzdmYzRh
ZThlNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zvcm1h
dENvbnZlcnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9y
bWF0Q29udmVydGVyLmNwcApAQCAtMjcsMTIgKzI3LDEyIEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQorI2lmIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKQogCiAjaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCiAKICNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RORU9OLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xORU9OLmgiCiAjZW5kaWYKIAogI2lmIFVTRShB
Q0NFTEVSQVRFKQpAQCAtMTczLDEzICsxNzMsMTMgQEAgaW5saW5lIHVuc2lnbmVkIHNob3J0IGNv
bnZlcnRGbG9hdFRvSGFsZkZsb2F0KGZsb2F0IGYpCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gUGl4
ZWwgdW5wYWNraW5nIHJvdXRpbmVzLgotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQgZm9ybWF0LCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBlPgordGVt
cGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZm9ybWF0LCB0eXBlbmFtZSBTb3Vy
Y2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIHVucGFjayhjb25z
dCBTb3VyY2VUeXBlKiwgRHN0VHlwZSosIHVuc2lnbmVkKQogewogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC0xOTEsNyArMTkxLDcgQEAgdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0I4LCB1aW50OF8KICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSOCwgdWludDhfdCwg
dWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4LCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVsyXTsKQEAgLTIwMyw3
ICsyMDMsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4XwogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpBUkdCOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCOCwg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBz
b3VyY2VbMV07CkBAIC0yMTUsNyArMjE1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCOCwgdWludDgKICAg
ICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QUJHUjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QUJHUjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzNdOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHRlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QUJHUjgsIHVpbnQ4CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4LCB1aW50OF90LCB1
aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4LCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgY29uc3QgdWludDMyX3QqIHNvdXJjZTMyID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8Y29uc3QgdWludDMyX3QqPihzb3VyY2UpOwogICAgIHVpbnQzMl90KiBkZXN0aW5h
dGlvbjMyID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dWludDMyX3QqPihkZXN0aW5hdGlvbik7CkBA
IC0yNDUsNyArMjQ1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1JBOCwgdWludDgKICAgICB9CiB9CiAKLXRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTU1NTEsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBNTU1MSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCQTU1NTFU
b1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC0yNjQsNyArMjY0
LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgdWkKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
QTQ0NDQsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0
NCwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVPTl9J
TlRSSU5TSUNTKQogICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4KHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC0yODQsNyArMjg0LDcgQEAgdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0JBNDQ0NCwgdWkKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1LCB1aW50MTZf
dCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTY1LCB1aW50MTZfdCwgdWlu
dDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAg
U0lNRDo6dW5wYWNrT25lUm93T2ZSR0I1NjVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBp
eGVsc1BlclJvdyk7CkBAIC0zMDMsNyArMzAzLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUsIHVpbnQK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtMzE1LDcgKzMxNSw3IEBAIHRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjgsIHVpbnQ4X3QsCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgdWludDhfdCwgdWludDhf
dD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytp
KSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtMzI3LDcgKzMyNyw3
IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkE4LCB1aW50OF90CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSOCwg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjgsIHVpbnQ4X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzFdOwpA
QCAtMzM5LDcgKzMzOSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVI4LCB1aW50OF90CiAgICAgfQogfQogCi10
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkE4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4
LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9
IDB4MDsKQEAgLTM1MSw3ICszNTEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4LCB1aW50OF90LAogICAgIH0K
IH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkE4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291cmNlLCBmbG9hdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBjb25zdCBmbG9hdCBz
Y2FsZUZhY3RvciA9IDEuMGYgLyAyNTUuMGY7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewpAQCAtMzY0LDcgKzM2NCw3IEBAIHRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCQTgsIHVpbnQ4CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4LCB1aW50OF90LCBmbG9h
dD4oY29uc3QgdWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50
OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC0zNzcsNyAr
Mzc3LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpCR1JBOCwgdWludDgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
QUJHUjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBQkdSOCwgdWludDhf
dCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBm
IC8gMjU1LjBmOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewpAQCAtMzkwLDcgKzM5MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QUJHUjgsIHVpbnQ4CiAgICAgfQog
fQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6QVJHQjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNvbnN0IGZsb2F0IHNj
YWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKQEAgLTQwMyw3ICs0MDMsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4
LCB1aW50OAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCB1aW50OF90LCBmbG9hdD4oY29u
c3QgdWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Y29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gMjU1LjBmOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewpAQCAtNDE2LDcgKzQxNiw3IEBAIHRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCOCwgdWludDhfCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4
X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4LCB1aW50OF90LCBmbG9hdD4oY29u
c3QgdWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAyNTUuMGY7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC00Mjks
NyArNDI5LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1I4LCB1aW50OF8KICAgICB9CiB9CiAKLXRlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkYsIGZsb2F0
LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAg
LTQ0MSw3ICs0NDEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgZmxvYQogICAgIH0KIH0KIAotdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGLCBmbG9h
dCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBA
IC00NTMsNyArNDUzLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGLCBmbG9hdCwKICAgICB9CiB9CiAKLXRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkEzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGLCBm
bG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07
CkBAIC00NjUsNyArNDY1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgZmxvYXQKICAgICB9CiB9CiAK
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6QTMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRiwg
ZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gMDsKQEAgLTQ4
MSwxMyArNDgxLDEzIEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTMyRiwgZmxvYXQsCiAvLyBQaXhlbCBwYWNraW5n
IHJvdXRpbmVzLgogLy8KIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQg
Zm9ybWF0LCBpbnQgYWxwaGFPcCwgdHlwZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRHN0VHlw
ZT4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGZvcm1hdCwgaW50IGFs
cGhhT3AsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIERzdFR5cGU+CiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjayhjb25zdCBTb3VyY2VUeXBlKiwgRHN0VHlwZSosIHVuc2lnbmVkKQogewog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBOCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4
X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNl
WzNdOwpAQCAtNDk2LDcgKzQ5Niw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4LCBHcmFwaGljc0NvCiAgICAgfQog
fQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjgsIEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNTA1LDcgKzUwNSw3IEBAIHRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlI4LCBHcmFwaGljc0NvCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlI4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0
aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC01MTcsNyArNTE3LDcgQEAgdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjgsIEdyYXBoaWNzQ28KIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQg
bXVzdCBiZSByZW1vdmVkLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9w
OjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4
LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50
OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/
IDI1NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC01MjgsNyArNTI4LDcgQEAgdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjgsIEdyYXBoaWNzQ28KICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkE4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90
LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVsw
XTsKQEAgLTUzOCw3ICs1MzgsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQwogICAgIH0KIH0K
IAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkE4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBs
eSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4LCBHcmFwaGljc0Nv
bnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBA
IC01NTEsNyArNTUxLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4LCBHcmFwaGljc0MKIH0KIAogLy8gRklYTUU6
IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50
OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9w
OjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMjU1LjBmIC8gc291cmNlWzNdIDogMS4wZjsK
QEAgLTU2Myw3ICs1NjMsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQwogICAgIH0KIH0KIAot
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWlu
dDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCOCwgR3JhcGhpY3NDb250ZXh0
R0w6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAg
ICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC01NzQsNyArNTc0LDcgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCOCwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVt
dWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC01OTAsNyArNTkwLDcgQEAgdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCOCwgR3JhcGhpY3MKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBh
bmQgbXVzdCBiZSByZW1vdmVkLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhf
dCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3Vy
Y2VbM10gPyAyNTUuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtNjA2LDEyICs2MDYsMTIgQEAg
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCOCwgR3JhcGhpY3MKIH0KIAogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcs
IHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBtZW1jcHkoZGVzdGluYXRpb24s
IHNvdXJjZSwgcGl4ZWxzUGVyUm93ICogNCk7CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1By
ZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTYyOCw3ICs2MjgsNyBAQCB0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0JBOCwgR3JhcGhpYwogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5
IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVp
bnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
c291cmNlWzNdID8gMjU1LjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTY0NCw3ICs2NDQsNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpYwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQs
IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBo
YU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhB
VkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjpwYWNrT25lUm93T2ZSR0JBOFRvVW5z
aWduZWRTaG9ydDQ0NDQoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTY1
OSw3ICs2NTksNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcAogICAgIH0KIH0KIAotdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1
aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4w
ZjsKQEAgLTY3Niw3ICs2NzYsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcAogfQogCiAvLyBG
SVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi10ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBNDQ0NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWlu
dDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcGhpY3ND
b250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAv
IHNvdXJjZVszXSA6IDEuMGY7CkBAIC02OTIsNyArNjkyLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQs
IEdyYXAKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50
OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJ
Q1MpCiAgICAgU0lNRDo6cGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxKHNvdXJj
ZSwgZGVzdGluYXRpb24sIHBpeGVsc1BlclJvdyk7CkBAIC03MDcsNyArNzA3LDcgQEAgdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTU1NTEsIEdyYXAKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6
OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC03MjQsNyArNzI0LDcg
QEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXAKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBp
cyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpE
b1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxv
YXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAyNTUuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpA
QCAtNzQwLDcgKzc0MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwCiAgICAgfQogfQogCi10
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0I1NjUsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVp
bnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTY1LCBHcmFwaGljc0Nv
bnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6cGFja09uZVJv
d09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjUoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVy
Um93KTsKQEAgLTc1NCw3ICs3NTQsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUsIEdyYXBoaQogICAgIH0K
IH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCNTY1LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVt
dWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUs
IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50
MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNd
IC8gMjU1LjBmOwpAQCAtNzcwLDcgKzc3MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgR3JhcGhpCiB9
CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4K
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQjU2NSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBs
eSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUsIEdyYXBo
aWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAyNTUu
MGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtNzg1LDcgKzc4NSw3IEBAIHRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2
NSwgR3JhcGhpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYsIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0Iz
MkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTc5Niw3ICs3
OTYsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYsIEdyYXBoaQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
MzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZs
b2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6
OkRvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IHNvdXJjZVszXTsKQEAgLTgwOCw3ICs4MDgsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYs
IEdyYXBoaQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
MzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxv
YXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBm
IC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTgyMSwxMiArODIxLDEyIEBAIHRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMy
RiwgR3JhcGhpCiB9CiAKIC8vIFVzZWQgb25seSBkdXJpbmcgUkdCQTggb3IgQkdSQTggLT4gZmxv
YXRpbmctcG9pbnQgdXBsb2Fkcy4KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBwaXhlbHNQZXJSb3cg
KiA0ICogc2l6ZW9mKGZsb2F0KSk7CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0
KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHks
IGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJj
ZVszXTsKQEAgLTgzOSw3ICs4MzksNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGLCBHcmFwaAogICAgIH0K
IH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5t
dWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBoaWNz
Q29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10g
OiAxLjBmOwpAQCAtODUyLDcgKzg1Miw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBoCiAgICAg
fQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3Ro
aW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRiwgR3JhcGhpY3NDb250ZXh0
R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gc291cmNlWzNdOwpAQCAtODYxLDcgKzg2MSw3IEBAIHRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEz
MkYsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMy
RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihj
b25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtODcwLDcgKzg3
MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJG
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0
Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1By
ZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0
b3IgPSBzb3VyY2VbM107CkBAIC04ODAsNyArODgwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRiwgR3JhcGhp
Y3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9w
OjpEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFw
aGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0
IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNl
WzNdIDogMS4wZjsKQEAgLTg5MCw3ICs4OTAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFwaGljcwog
ICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpE
b05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpY3ND
b250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAg
ICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJBMzJGLCBHcmFwaGljCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSQTMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHks
IGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJj
ZVszXTsKQEAgLTkxMSw3ICs5MTEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpYwogICAgIH0K
IH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVs
dGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpY3NDb250
ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCog
c291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAg
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6IDEu
MGY7CkBAIC05MjIsNyArOTIyLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkEzMkYsIEdyYXBoaWMKICAgICB9CiB9
CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhp
bmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZs
b2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRGbG9hdFRvSGFsZkZsb2F0KHNvdXJjZVsw
XSk7CkBAIC05MzQsNyArOTM0LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGgKICAgICB9CiB9
CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11
bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3Jh
cGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtOTQ3LDcg
Kzk0Nyw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBoCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0JBMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwg
dWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGhpY3NDb250ZXh0R0w6
OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291
cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4wZjsK
QEAgLTk2MCw3ICs5NjAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaAogICAgIH0KIH0KIAot
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBm
bG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGljc0NvbnRl
eHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAg
ICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRGbG9hdFRvSGFsZkZsb2F0KHNvdXJjZVswXSk7CkBA
IC05NzEsNyArOTcxLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGkKICAgICB9CiB9CiAKLXRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQjE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHks
IGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaWNzQ29u
dGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZs
b2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXTsKQEAgLTk4Myw3ICs5ODMsNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGLCBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6
RG9Vbm11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtOTk1LDcg
Kzk5NSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RiwgR3JhcGhpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
QTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQx
Nl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFP
cDo6RG9Ob3RoaW5nLCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlv
blswXSA9IGNvbnZlcnRGbG9hdFRvSGFsZkZsb2F0KHNvdXJjZVswXSk7CkBAIC0xMDA1LDcgKzEw
MDUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpYwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkEx
NkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgdWlu
dDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBo
YU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXTsKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHRlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJBMTZGLCBHcmFwaGljCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9h
dCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5
LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNv
dXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAg
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkExNkYsIEdyYXBoaWMKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkYsIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3Qg
ZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5n
LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZl
cnRGbG9hdFRvSGFsZkZsb2F0KHNvdXJjZVswXSk7CkBAIC0xMDM2LDcgKzEwMzYsNyBAQCB0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSMTZGLCBHcmFwaGljcwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2RiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3Qg
ZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0
aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBzb3VyY2VbM107CkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZGLCBHcmFwaGlj
cwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6
OkRvVW5tdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkYs
IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZf
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAv
IHNvdXJjZVszXSA6IDEuMGY7CkBAIC0xMDU2LDcgKzEwNTYsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZGLCBH
cmFwaGljcwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1
aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEx
NkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZf
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydEZsb2F0VG9IYWxmRmxv
YXQoc291cmNlWzNdKTsKQEAgLTEwNjUsMTE5ICsxMDY1LDExOSBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZGLCBH
cmFwaGljcwogICAgIH0KIH0KIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0
Pgogc3RydWN0IElzRmxvYXRGb3JtYXQgewogICAgIHN0YXRpYyBjb25zdCBib29sIFZhbHVlID0K
LSAgICAgICAgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJG
Ci0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
MzJGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkEzMkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSMzJGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QTMyRjsKKyAgICAgICAgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBMzJGCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCMzJGCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkEzMkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSMzJGCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QTMyRjsKIH07CiAKLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0IEZvcm1hdD4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IEZv
cm1hdD4KIHN0cnVjdCBJc0hhbGZGbG9hdEZvcm1hdCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wg
VmFsdWUgPQotICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJHQkExNkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0IxNkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSQTE2RgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlIxNkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpBMTZGOworICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkExNkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0IxNkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTE2RgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZGOwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQgRm9ybWF0Pgogc3RydWN0IElzMTZicHBGb3JtYXQgewogICAgIHN0YXRpYyBjb25zdCBi
b29sIFZhbHVlID0KLSAgICAgICAgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0JBNTU1MQotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQkE0NDQ0Ci0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCNTY1OworICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjU7CiB9OwogCi10ZW1wbGF0ZTxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdCBGb3JtYXQsIGJvb2wgSXNGbG9hdCA9IElzRmxvYXRGb3Jt
YXQ8Rm9ybWF0Pjo6VmFsdWUsIGJvb2wgSXNIYWxmRmxvYXQgPSBJc0hhbGZGbG9hdEZvcm1hdDxG
b3JtYXQ+OjpWYWx1ZSwgYm9vbCBJczE2YnBwID0gSXMxNmJwcEZvcm1hdDxGb3JtYXQ+OjpWYWx1
ZT4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IEZvcm1hdCwgYm9vbCBJ
c0Zsb2F0ID0gSXNGbG9hdEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZSwgYm9vbCBJc0hhbGZGbG9hdCA9
IElzSGFsZkZsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlLCBib29sIElzMTZicHAgPSBJczE2YnBw
Rm9ybWF0PEZvcm1hdD46OlZhbHVlPgogc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0IHsKICAgICB0
eXBlZGVmIHVpbnQ4X3QgVHlwZTsKIH07CiAKLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0IEZvcm1hdD4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IEZvcm1hdD4KIHN0cnVjdCBEYXRhVHlwZUZvckZvcm1hdDxGb3JtYXQsIHRydWUsIGZhbHNlLCBm
YWxzZT4gewogICAgIHR5cGVkZWYgZmxvYXQgVHlwZTsKIH07CiAKLXRlbXBsYXRlPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0IEZvcm1hdD4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0IEZvcm1hdD4KIHN0cnVjdCBEYXRhVHlwZUZvckZvcm1hdDxGb3JtYXQsIGZh
bHNlLCB0cnVlLCBmYWxzZT4gewogICAgIHR5cGVkZWYgdWludDE2X3QgVHlwZTsKIH07CiAKLXRl
bXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IEZvcm1hdD4KK3RlbXBsYXRlPEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IEZvcm1hdD4KIHN0cnVjdCBEYXRhVHlwZUZvckZv
cm1hdDxGb3JtYXQsIGZhbHNlLCBmYWxzZSwgdHJ1ZT4gewogICAgIHR5cGVkZWYgdWludDE2X3Qg
VHlwZTsKIH07CiAKLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IEZvcm1h
dD4KK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IEZvcm1hdD4KIHN0cnVj
dCBJbnRlcm1lZGlhdGVGb3JtYXQgewotICAgIHN0YXRpYyBjb25zdCBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBWYWx1ZSA9IChJc0Zsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlIHx8IElz
SGFsZkZsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0JBMzJGIDogR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4Owor
ICAgIHN0YXRpYyBjb25zdCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBWYWx1ZSA9IChJ
c0Zsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlIHx8IElzSGFsZkZsb2F0Rm9ybWF0PEZvcm1hdD46
OlZhbHVlKSA/IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGIDogR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OwogfTsKIAogCiAvKiBFTkQgQ09ERSBTSEFS
RUQgV0lUSCBNT1pJTExBIEZJUkVGT1ggKi8KIAotdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZl
cnQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc3JjRm9ybWF0LCBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFs
cGhhT3ApCit2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGRzdEZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxwaGFPcCkKIHsKICNkZWZpbmUgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKFNyY0Zvcm1hdCkgXAogICAgIGNhc2UgU3JjRm9y
bWF0OiBcCiAgICAgICAgIHJldHVybiBjb252ZXJ0PFNyY0Zvcm1hdD4oZHN0Rm9ybWF0LCBhbHBo
YU9wKTsKIAogICAgICAgICBzd2l0Y2ggKHNyY0Zvcm1hdCkgewotICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
OCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QTgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYpCi0gICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkEzMkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JN
QVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCkKLSAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkEzMkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUjgpCi0g
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NSkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGKQotICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0JBOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZP
Uk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjgpCi0gICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OkFCR1I4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjgpCi0gICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4
KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQp
Ci0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4KQorICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpBOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1B
VChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRikKKyAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QTMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRikKKyAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NS
Q0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSOCkKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCNTY1KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkYpCisgICAgICAgICAgICBGT1JN
QVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZF
UlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QUJHUjgp
CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTgpCisgICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE1NTUxKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JD
Rk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCkKKyAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTMyRikKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAjdW5kZWYgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JD
Rk9STUFUCiB9CiAKLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zv
cm1hdD4KLUFMV0FZU19JTkxJTkUgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcCBhbHBoYU9wKQordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgU3Jj
Rm9ybWF0PgorQUxXQVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpB
bHBoYU9wIGFscGhhT3ApCiB7CiAjZGVmaW5lIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1B
VChEc3RGb3JtYXQpIFwKICAgICBjYXNlIERzdEZvcm1hdDogXAogICAgICAgICByZXR1cm4gY29u
dmVydDxTcmNGb3JtYXQsIERzdEZvcm1hdD4oYWxwaGFPcCk7CiAKICAgICAgICAgc3dpdGNoIChk
c3RGb3JtYXQpIHsKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjgpCi0gICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkYp
Ci0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4KQotICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpBMTZGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMzJGKQotICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
QTgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRikKLSAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RT
VEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1KQotICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0IxNkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JN
QVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRikKLSAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxKQotICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0JBNDQ0NCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RikKLSAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
QTMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkYpCisgICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlIzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RG
T1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4KQorICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBMTZGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgpCisg
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJBMTZGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0Vf
RFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRikKKyAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1B
VChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTY1KQorICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0IxNkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRikKKyAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxKQorICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0
NCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRikK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CkBAIC0xMTg1LDE3ICsxMTg1LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGb3JtYXRD
b252ZXJ0ZXI6OmNvbnZlcnQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZHN0Rm9yCiAj
dW5kZWYgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUCiB9CiAKLXRlbXBsYXRlPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQgRHN0Rm9ybWF0PgotQUxXQVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6
Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wKQordGVtcGxhdGU8R3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBEc3RGb3JtYXQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVydGVy
Ojpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wIGFscGhhT3ApCiB7CiAjZGVmaW5l
IEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoYWxwaGFPcCkgXAogICAgIGNhc2UgYWxwaGFP
cDogXAogICAgICAgICByZXR1cm4gY29udmVydDxTcmNGb3JtYXQsIERzdEZvcm1hdCwgYWxwaGFP
cD4oKTsKIAogICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKLSAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGlu
ZykKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHkpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHkp
CisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5KQorICAg
ICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFPUChHcmFwaGljc0NvbnRleHRHTDo6
QWxwaGFPcDo6RG9Vbm11bHRpcGx5KQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KQEAgLTEyMDMsMTIgKzEyMDMsMTIgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcCBhbHBoYU9wKQogfQogCiAvLyBWaXN1YWwgU3R1ZGlvIGNyYXNoZXMgd2l0aCBh
IEMxMDYzIEZhdGFsIEVycm9yIGlmIGV2ZXJ5dGhpbmcgaXMgaW5saW5lZC4KLXRlbXBsYXRlPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQgRHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9w
PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpB
bHBoYU9wIGFscGhhT3A+CiBBTFdBWVNfSU5MSU5FX0VYQ0VQVF9NU1ZDIHZvaWQgRm9ybWF0Q29u
dmVydGVyOjpjb252ZXJ0KCkKIHsKICAgICAvLyBNYW55IGluc3RhbnRpYXRpb25zIG9mIHRoaXMg
dGVtcGxhdGUgZnVuY3Rpb24gd2lsbCBuZXZlciBiZSBlbnRlcmVkLCBzbyB3ZSB0cnkKICAgICAv
LyB0byByZXR1cm4gaW1tZWRpYXRlbHkgaW4gdGhlc2UgY2FzZXMgdG8gYXZvaWQgdGhlIGNvbXBp
bGVyIHRvIGdlbmVyYXRlIHVzZWxlc3MgY29kZS4KLSAgICBpZiAoU3JjRm9ybWF0ID09IERzdEZv
cm1hdCAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcp
IHsKKyAgICBpZiAoU3JjRm9ybWF0ID09IERzdEZvcm1hdCAmJiBhbHBoYU9wID09IEdyYXBoaWNz
Q29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjE4LDI5ICsxMjE4LDI5IEBAIEFM
V0FZU19JTkxJTkVfRVhDRVBUX01TVkMgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQoKQog
ICAgIH0KIAogICAgIC8vIE9ubHkgdGV4dHVyZXMgdXBsb2FkZWQgZnJvbSBET00gZWxlbWVudHMg
b3IgSW1hZ2VEYXRhIGNhbiBhbGxvdyBEc3RGb3JtYXQgIT0gU3JjRm9ybWF0LgotICAgIGNvbnN0
IGJvb2wgc3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhID0gR3JhcGhpY3ND
b250ZXh0M0Q6OnNyY0Zvcm1hdENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YShTcmNGb3Jt
YXQpOworICAgIGNvbnN0IGJvb2wgc3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VE
YXRhID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNyY0Zvcm1hdENvbWVzRnJvbURPTUVsZW1l
bnRPckltYWdlRGF0YShTcmNGb3JtYXQpOwogICAgIGlmICghc3JjRm9ybWF0Q29tZXNGcm9tRE9N
RWxlbWVudE9ySW1hZ2VEYXRhICYmIFNyY0Zvcm1hdCAhPSBEc3RGb3JtYXQpIHsKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gTGlr
ZXdpc2UsIG9ubHkgdGV4dHVyZXMgdXBsb2FkZWQgZnJvbSBET00gZWxlbWVudHMgb3IgSW1hZ2VE
YXRhIGNhbiBwb3NzaWJseSBoYXZlIHRvIGJlIHVucHJlbXVsdGlwbGllZC4KLSAgICBpZiAoIXNy
Y0Zvcm1hdENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YSAmJiBhbHBoYU9wID09IEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHkpIHsKKyAgICBpZiAoIXNyY0Zvcm1h
dENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCghR3JhcGhpY3NDb250ZXh0
M0Q6Omhhc0FscGhhKFNyY0Zvcm1hdCkgfHwgIUdyYXBoaWNzQ29udGV4dDNEOjpoYXNDb2xvcihT
cmNGb3JtYXQpIHx8ICFHcmFwaGljc0NvbnRleHQzRDo6aGFzQ29sb3IoRHN0Rm9ybWF0KSkgJiYg
YWxwaGFPcCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nKSB7CisgICAg
aWYgKCghR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omhhc0FscGhhKFNyY0Zvcm1hdCkgfHwgIUdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoYXNDb2xvcihTcmNGb3JtYXQpIHx8ICFHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aGFzQ29sb3IoRHN0Rm9ybWF0KSkgJiYgYWxwaGFPcCAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBE
YXRhVHlwZUZvckZvcm1hdDxTcmNGb3JtYXQ+OjpUeXBlIFNyY1R5cGU7CiAgICAgdHlwZWRlZiB0
eXBlbmFtZSBEYXRhVHlwZUZvckZvcm1hdDxEc3RGb3JtYXQ+OjpUeXBlIERzdFR5cGU7Ci0gICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgSW50ZXJtZWRpYXRlU3JjRm9ybWF0
ID0gSW50ZXJtZWRpYXRlRm9ybWF0PERzdEZvcm1hdD46OlZhbHVlOworICAgIGNvbnN0IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IEludGVybWVkaWF0ZVNyY0Zvcm1hdCA9IEludGVybWVk
aWF0ZUZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIERhdGFU
eXBlRm9yRm9ybWF0PEludGVybWVkaWF0ZVNyY0Zvcm1hdD46OlR5cGUgSW50ZXJtZWRpYXRlU3Jj
VHlwZTsKICAgICBjb25zdCBwdHJkaWZmX3Qgc3JjU3RyaWRlSW5FbGVtZW50cyA9IG1fc3JjU3Ry
aWRlIC8gc2l6ZW9mKFNyY1R5cGUpOwogICAgIGNvbnN0IHB0cmRpZmZfdCBkc3RTdHJpZGVJbkVs
ZW1lbnRzID0gbV9kc3RTdHJpZGUgLyBzaXplb2YoRHN0VHlwZSk7Ci0gICAgY29uc3QgYm9vbCB0
cml2aWFsVW5wYWNrID0gKFNyY0Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTggJiYgIUlzRmxvYXRGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWUgJiYgIUlzSGFsZkZs
b2F0Rm9ybWF0PERzdEZvcm1hdD46OlZhbHVlKSB8fCBTcmNGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7Ci0gICAgY29uc3QgYm9vbCB0cml2aWFsUGFjayA9
IChEc3RGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4IHx8IERz
dEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRikgJiYgYWxw
aGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nICYmIG1fZHN0U3Ry
aWRlID4gMDsKKyAgICBjb25zdCBib29sIHRyaXZpYWxVbnBhY2sgPSAoU3JjRm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCAmJiAhSXNGbG9hdEZvcm1hdDxEc3RG
b3JtYXQ+OjpWYWx1ZSAmJiAhSXNIYWxmRmxvYXRGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWUpIHx8
IFNyY0Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKKyAg
ICBjb25zdCBib29sIHRyaXZpYWxQYWNrID0gKERzdEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTggfHwgRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBMzJGKSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBo
YU9wOjpEb05vdGhpbmcgJiYgbV9kc3RTdHJpZGUgPiAwOwogICAgIEFTU0VSVCghdHJpdmlhbFVu
cGFjayB8fCAhdHJpdmlhbFBhY2spOwogCiAgICAgY29uc3QgU3JjVHlwZSAqc3JjUm93U3RhcnQg
PSBzdGF0aWNfY2FzdDxjb25zdCBTcmNUeXBlKj4obV9zcmNTdGFydCk7CkBAIC0xMjYzLDkgKzEy
NjMsOSBAQCBBTFdBWVNfSU5MSU5FX0VYQ0VQVF9NU1ZDIHZvaWQgRm9ybWF0Q29udmVydGVyOjpj
b252ZXJ0KCkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgICAgIGlmIChTcmNGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QkE4Ci0gICAgICAgICAgICAmJiBEc3RGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQkE4Ci0gICAgICAgICAgICAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYU9wOjpEb1VubXVsdGlwbHkpIHsKKyAgICAgICAgaWYgKFNyY0Zvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTgKKyAgICAgICAgICAgICYmIERzdEZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTgKKyAgICAgICAgICAgICYm
IGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSkgewog
ICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7CiAgICAgICAgICAgICBzcmMud2lkdGggPSBt
X3dpZHRoOwogICAgICAgICAgICAgc3JjLmhlaWdodCA9IG1faGVpZ2h0OwpAQCAtMTI5Myw0ICsx
MjkzLDQgQEAgQUxXQVlTX0lOTElORV9FWENFUFRfTVNWQyB2b2lkIEZvcm1hdENvbnZlcnRlcjo6
Y29udmVydCgpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShH
UkFQSElDU19DT05URVhUXzNEKQorI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dM
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9ybWF0Q29u
dmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0
ZXIuaAppbmRleCA1OGZjZTBmNTRlMzFhMjEwZTZlMmE0ODAxZTJlNWY4YjljMDIxNzExLi4zMDQy
MTViYWJkMjRmMjhhMjY0ZWFiOTY0NWUwZWY0Yzk2OTEzY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuaApAQCAtMjUsOSArMjUs
OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhU
XzNEKQorI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQogCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4K
IApAQCAtNTEsMTcgKzUxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fdW5wYWNrZWRJ
bnRlcm1lZGlhdGVTcmNEYXRhLmdldCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbnZlcnQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wKTsKKyAgICB2
b2lkIGNvbnZlcnQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc3JjRm9ybWF0LCBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpB
bHBoYU9wKTsKICAgICBib29sIHN1Y2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3M7IH0K
IAogcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBT
cmNGb3JtYXQ+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCk7Cisg
ICAgdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgU3JjRm9ybWF0PgorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3ApOwogCi0gICAgdGVtcGxhdGU8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQ+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQo
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3ApOworICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQg
RHN0Rm9ybWF0PgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0KEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wKTsKIAotICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRHN0Rm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wPgorICAgIHRlbXBsYXRlPEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQgRHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wPgogICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0KCk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBtX3dp
ZHRoLCBtX2hlaWdodDsKQEAgLTc0LDQgKzc0LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCisjZW5k
aWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAppbmRleCAyN2ZiMjA2MjczY2EwNThkMWY5MzEz
ZTcxNmJlNzRiOGI4YjE5OTExLi5iMjE3OTg4Yjk5MGUxYTA2YTNjMWY3ZDcyMWNhNjU5MTU1Njgw
OWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKQEAgLTE4LDcgKzE4LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfM0QpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAj
aW5jbHVkZSAiR0xDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmgKaW5kZXggOWE0
NGVmY2ExMTIwNDczMDQ3NzlkZDdiYThjNWI3MDliODY3ZThhZC4uODkwZmMyOTRiYzQ3ZGQxMjVj
OGJlN2FkOWQwMTU3ZGY3OGY4MDBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR0xDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR0xDb250ZXh0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgdHlwZWRlZiB1aW50NjRfdCBHTE5h
dGl2ZVdpbmRvd1R5cGU7CiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fZGV2aWNlIGNhaXJvX2Rldmlj
ZV90OwogI2VuZGlmCiAKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsK
K3R5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNhaXJvX2Rl
dmljZV90KiBjYWlyb0RldmljZSgpID0gMDsKICNlbmRpZgogCi0jaWYgRU5BQkxFKEdSQVBISUNT
X0NPTlRFWFRfM0QpCi0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRm
b3JtQ29udGV4dCgpID0gMDsKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgPSAwOwog
I2VuZGlmCiAKICNpZiBQTEFURk9STShYMTEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGFmMWRiMWU0YzA4ZDQxMmUzNWQ4
YWYyZjRmNzkyYTQyMzAxMDJkZDYuLmY1ODZkZDRiMmFmOTFmNDU2NTUzNWE3MDI5MzkyM2FmMmJh
YWRiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFJv
dW5kZWRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDsKIGNsYXNzIFBhdGg7CiBjbGFzcyBUZXh0UnVuOwogY2xhc3MgVHJhbnNmb3Jt
YXRpb25NYXRyaXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2
MWM1NzFlOWMzNDI5OTY5MjNhYWFhZDUyYjlhNTY2M2ZmYmIzNjQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTM2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhU
XzNEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgotI2luY2x1ZGUgIkZvcm1hdENvbnZlcnRlci5oIgotI2luY2x1ZGUgIkltYWdl
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgot
I2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5h
bWVzcGFjZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGdldERhdGFGb3JtYXQo
R0MzRGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdDM0RlbnVtIGRlc3RpbmF0aW9uVHlwZSkKLXsK
LSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTg7Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICBz
d2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0I4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCQTg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgICAgICAgICAgZHN0Rm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTg7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjoK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0I4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNSR0JfQUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCQTg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
Ci0gICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JB
NDQ0NDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hh
bGZfZmxvYXQKLSAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgewotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZGOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCX0FMUEhBOgotICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkY7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAotICAgICAgICBzd2l0Y2ggKGRl
c3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoK
LSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0IzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkY7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I6
Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNSR0JfQUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotICAgIHJldHVybiBkc3RGb3JtYXQ7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGlnbm1lbnQpCi17Ci0gICAgQVNT
RVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVucGFj
a0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKLSAgICBVbmlxdWVBcnJh
eTx1bnNpZ25lZCBjaGFyPiB6ZXJvOwotICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkg
ewotICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKLSAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBj
b21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIHVucGFj
a0FsaWdubWVudCwgJnNpemUsIG51bGxwdHIpOwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihl
cnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgemVy
byA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPihzaXplKTsKLSAgICAgICAgaWYgKCF6
ZXJvKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwotICAgIH0KLSAgICByZXR1cm4gdGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQqIGNvbXBvbmVudHNQZXJQaXhlbCwgdW5zaWduZWQgaW50
KiBieXRlc1BlckNvbXBvbmVudCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURf
SU5URUdFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQ09NUE9ORU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5D
SUw6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR19JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBI
QToKLSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JfSU5URUdFUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgICAg
ICpjb21wb25lbnRzUGVyUGl4ZWwgPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5U
RUdFUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJl
X2Zvcm1hdF9CR1JBODg4OAotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoK
LSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICAq
Ynl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVieXRlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9u
ZW50ID0gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9
IHNpemVvZihHQzNEdXNob3J0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNE
c2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNV81XzE6Ci0gICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICAqYnl0
ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKLSAgICAgICAgKmNv
bXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVv
ZihHQzNEdWludCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1
aW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgot
ICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGludCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9m
bG9hdAotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGZsb2F0KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVf
aGFsZl9mbG9hdAotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGhhbGZm
bG9hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0g
c2l6ZW9mKEdDM0RmbG9hdCkgKyBzaXplb2YoR0MzRHVpbnQpOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJ
bnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0mIGZvcm1hdCwg
R0MzRGVudW0mIHR5cGUpCi17Ci0jZGVmaW5lIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoaW50
ZXJuYWxGb3JtYXRNYWNybywgZm9ybWF0TWFjcm8sIHR5cGVNYWNybykgY2FzZSBpbnRlcm5hbEZv
cm1hdE1hY3JvOiBcCi0gICAgICAgIGZvcm1hdCA9IGZvcm1hdE1hY3JvOyBcCi0gICAgICAgIHR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6dHlwZU1hY3JvOyBcCi0gICAgICAgIGJyZWFrOwotCi0g
ICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBICAgLCBHcmFwaGljc0NvbnRleHQzRDo6TFVN
SU5BTkNFX0FMUEhBLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSAgICAgICwgVU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFBIQSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQSAgICAg
ICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjggICAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6UkVEICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6
OlI4X1NOT1JNICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCAgICAgICAgICAgICwg
QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSMTZGICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRUQgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjMyRiAg
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkVEICAgICAgICAgICAgLCBGTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0M0Q6OlI4VUkgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSOEkgICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUiAgICAsIEJZVEUgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHQzRDo6UjE2VUkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lO
VEVHRVIgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkkgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSICAgICwgU0hPUlQgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dDNEOjpSMzJVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUiAg
ICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjMySSAgICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkVEX0lOVEVHRVIgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJH
OCAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHICAgICAgICAgICAgICwgVU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk0gICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRyAgICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkcxNkYgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkcgICAgICAgICAgICAgLCBIQUxGX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHMzJGICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
ICAgICAgICAgICAgICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSRzhVSSAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICAgICAsIFVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHQzRDo6Ukc4SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdF
UiAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSSAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURfU0hPUlQgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNE
OjpSRzE2SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICAgICAs
IFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkczMlVJICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJ
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVIgICAgICwgSU5UICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4ICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6U1JHQjggICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjU2NSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAg
ICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4X1NOT1JNICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHQzRDo6UjExRl9HMTFGX0IxMEYgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCICAgICAgICAg
ICAgLCBVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTUgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfSU5UXzVfOV85XzlfUkVWICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpS
R0IxNkYgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIEhB
TEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJGICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhVSSAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSICAgICwgVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I4SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JfSU5URUdFUiAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZVSSAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9TSE9SVCAg
ICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjE2SSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRF
R0VSICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMlVJICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUiAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQz
RDo6UkdCMzJJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgICAg
LCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4ICAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpTUkdC
OF9BTFBIQTggICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICAgICAgICAgICAsIFVOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHQzRDo6UkdCQThfU05PUk0gICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTEgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfU0hP
UlRfNV81XzVfMSAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBNCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
ICAgICAgICAgICAsIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTIgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfMl8xMF8x
MF8xMF9SRVYgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkExNkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAg
ICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJGICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6
UkdCQThVSSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSICAgLCBV
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SSAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkFfSU5URUdFUiAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9B
MlVJICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFViAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUkgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkkgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUiAgICwgU0hPUlQgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBMzJJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lO
VEVHRVIgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUkgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVDE2ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVO
VCwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5UMjQgLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJ
R05FRF9JTlQgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVCwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMICAsIFVOU0lHTkVEX0lO
VF8yNF84ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMOCAgLCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfU1RFTkNJTCAgLCBVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwgICwgRkxPQVRfMzJfVU5TSUdORURf
SU5UXzI0XzhfUkVWKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnMz
RDo6U1JHQl9FWFQgICAgICAgICAgICAgICAsIEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQgICAgICAg
ICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUICAgICAgICAgLCBFeHRl
bnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0jdW5k
ZWYgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUdD
M0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBhbGlnbm1lbnQsIHVuc2lnbmVkIGludCogaW1hZ2VTaXplSW5CeXRlcywgdW5z
aWduZWQgaW50KiBwYWRkaW5nSW5CeXRlcykKLXsKLSAgICBBU1NFUlQoaW1hZ2VTaXplSW5CeXRl
cyk7Ci0gICAgQVNTRVJUKGFsaWdubWVudCA9PSAxIHx8IGFsaWdubWVudCA9PSAyIHx8IGFsaWdu
bWVudCA9PSA0IHx8IGFsaWdubWVudCA9PSA4KTsKLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdo
dCA8IDApCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsK
LSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQsIGNvbXBvbmVudHNQZXJQaXhlbDsK
LSAgICBpZiAoIWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZj
b21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNOwotICAgIGlmICghd2lkdGggfHwgIWhlaWdo
dCkgewotICAgICAgICAqaW1hZ2VTaXplSW5CeXRlcyA9IDA7Ci0gICAgICAgIGlmIChwYWRkaW5n
SW5CeXRlcykKLSAgICAgICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IDA7Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci0gICAgfQotICAgIENoZWNrZWQ8dWludDMy
X3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkVmFsdWUgPSBieXRlc1BlckNvbXBvbmVudCAqIGNv
bXBvbmVudHNQZXJQaXhlbDsKLSAgICBjaGVja2VkVmFsdWUgKj0gIHdpZHRoOwotICAgIGlmIChj
aGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUU7Ci0gICAgdW5zaWduZWQgaW50IHZhbGlkUm93U2l6ZSA9IGNo
ZWNrZWRWYWx1ZS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9IDA7Ci0g
ICAgdW5zaWduZWQgaW50IHJlc2lkdWFsID0gdmFsaWRSb3dTaXplICUgYWxpZ25tZW50OwotICAg
IGlmIChyZXNpZHVhbCkgewotICAgICAgICBwYWRkaW5nID0gYWxpZ25tZW50IC0gcmVzaWR1YWw7
Ci0gICAgICAgIGNoZWNrZWRWYWx1ZSArPSBwYWRkaW5nOwotICAgIH0KLSAgICAvLyBMYXN0IHJv
dyBuZWVkcyBubyBwYWRkaW5nLgotICAgIGNoZWNrZWRWYWx1ZSAqPSAoaGVpZ2h0IC0gMSk7Ci0g
ICAgY2hlY2tlZFZhbHVlICs9IHZhbGlkUm93U2l6ZTsKLSAgICBpZiAoY2hlY2tlZFZhbHVlLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFOwotICAgICppbWFnZVNpemVJbkJ5dGVzID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgp
OwotICAgIGlmIChwYWRkaW5nSW5CeXRlcykKLSAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gcGFk
ZGluZzsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotfQotCi1HcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OkltYWdlRXh0cmFjdG9yKEltYWdlKiBpbWFn
ZSwgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQotewotICAgIG1faW1hZ2UgPSBpbWFnZTsK
LSAgICBtX2ltYWdlSHRtbERvbVNvdXJjZSA9IGltYWdlSHRtbERvbVNvdXJjZTsKLSAgICBtX2V4
dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0SW1hZ2UocHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWNrSW1h
Z2VEYXRhKEltYWdlKiBpbWFnZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AgYWxwaGFPcCwgRGF0YUZvcm1hdCBz
b3VyY2VGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIHNv
dXJjZVVucGFja0FsaWdubWVudCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIGlmICgh
aW1hZ2UgfHwgIXBpeGVscykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQg
cGFja2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25t
ZW50ID09IDEpLgotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUs
IHdpZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkYXRhLnJlc2l6ZShw
YWNrZWRTaXplKTsKLQotICAgIGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHNvdXJjZVVu
cGFja0FsaWdubWVudCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBkYXRhLmRhdGEoKSwgZmxpcFkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVy
ID0gaW1hZ2UtPmltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgb2JzZXJ2ZXItPmRpZERyYXcoKmlt
YWdlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0
cmFjdEltYWdlRGF0YShJbWFnZURhdGEqIGltYWdlRGF0YSwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIFZlY3Rvcjx1aW50
OF90PiYgZGF0YSkKLXsKLSAgICBpZiAoIWltYWdlRGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGludCB3aWR0aCA9IGltYWdlRGF0YS0+d2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0g
aW1hZ2VEYXRhLT5oZWlnaHQoKTsKLQotICAgIHVuc2lnbmVkIGludCBwYWNrZWRTaXplOwotICAg
IC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAg
aWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwg
MSwgJnBhY2tlZFNpemUsIG51bGxwdHIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOwotCi0g
ICAgaWYgKCFwYWNrUGl4ZWxzKGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBl
LCBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRv
Tm90aGluZywgZGF0YS5kYXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RUZXh0
dXJlRGF0YSh1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdW5zaWduZWQgaW50IHVucGFja0FsaWdubWVudCwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBjb25zdCB2b2lkKiBwaXhlbHMsIFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkKLXsKLSAgICAvLyBBc3N1bWVzIGZvcm1hdCwgdHlwZSwgZXRjLiBo
YXZlIGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCi0gICAgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9y
bWF0ID0gZ2V0RGF0YUZvcm1hdChmb3JtYXQsIHR5cGUpOwotCi0gICAgLy8gUmVzaXplIHRoZSBv
dXRwdXQgYnVmZmVyLgotICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVz
UGVyQ29tcG9uZW50OwotICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZv
cm1hdCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIGludCBieXRlc1BlclBpeGVsID0gY29t
cG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgZGF0YS5yZXNpemUod2lk
dGggKiBoZWlnaHQgKiBieXRlc1BlclBpeGVsKTsKLQotICAgIGlmICghcGFja1BpeGVscyhzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwgc291cmNlRGF0YUZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgdW5wYWNrQWxpZ25tZW50LCBmb3JtYXQsIHR5cGUsIChwcmVtdWx0aXBseUFscGhh
ID8gQWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZyksIGRhdGEuZGF0
YSgpLCBmbGlwWSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIFRleGVsQnl0ZXNGb3JGb3JtYXQoR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6Ujg6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTg6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBODoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCQTU1NTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCQTQ0NDQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2RjoKLSAgICAgICAgcmV0
dXJuIDI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1I4OgotICAgICAgICByZXR1
cm4gMzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBQkdSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpCR1JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkY6Ci0g
ICAgICAgIHJldHVybiA0OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJHQjE2RjoKLSAgICAgICAgcmV0dXJuIDY7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTE2RjoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCMzJGOgotICAgICAgICByZXR1cm4gMTI7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRjoKLSAgICAgICAgcmV0dXJuIDE2Owot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLCBEYXRhRm9y
bWF0IHNvdXJjZURhdGFGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVu
c2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgdW5zaWduZWQgZGVzdGluYXRpb25Gb3JtYXQs
IHVuc2lnbmVkIGRlc3RpbmF0aW9uVHlwZSwgQWxwaGFPcCBhbHBoYU9wLCB2b2lkKiBkZXN0aW5h
dGlvbkRhdGEsIGJvb2wgZmxpcFkpCi17Ci0gICAgaW50IHZhbGlkU3JjID0gd2lkdGggKiBUZXhl
bEJ5dGVzRm9yRm9ybWF0KHNvdXJjZURhdGFGb3JtYXQpOwotICAgIGludCByZW1haW5kZXIgPSBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQgPyAodmFsaWRTcmMgJSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQp
IDogMDsKLSAgICBpbnQgc3JjU3RyaWRlID0gcmVtYWluZGVyID8gKHZhbGlkU3JjICsgc291cmNl
VW5wYWNrQWxpZ25tZW50IC0gcmVtYWluZGVyKSA6IHZhbGlkU3JjOwotCi0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBwYWNraW5nIHBpeGVscyB0byBXZWJHTCAyIGZvcm1hdHMKLSAgICBzd2l0Y2gg
KGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVI6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAoZGVzdGluYXRp
b25UeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVW
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9S
RVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVW
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRGF0YUZvcm1hdCBkc3REYXRhRm9ybWF0ID0g
Z2V0RGF0YUZvcm1hdChkZXN0aW5hdGlvbkZvcm1hdCwgZGVzdGluYXRpb25UeXBlKTsKLSAgICBp
bnQgZHN0U3RyaWRlID0gd2lkdGggKiBUZXhlbEJ5dGVzRm9yRm9ybWF0KGRzdERhdGFGb3JtYXQp
OwotICAgIGlmIChmbGlwWSkgewotICAgICAgICBkZXN0aW5hdGlvbkRhdGEgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKSArIGRzdFN0cmlkZSooaGVpZ2h0IC0gMSk7Ci0g
ICAgICAgIGRzdFN0cmlkZSA9IC1kc3RTdHJpZGU7Ci0gICAgfQotICAgIGlmICghaGFzQWxwaGEo
c291cmNlRGF0YUZvcm1hdCkgfHwgIWhhc0NvbG9yKHNvdXJjZURhdGFGb3JtYXQpIHx8ICFoYXND
b2xvcihkc3REYXRhRm9ybWF0KSkKLSAgICAgICAgYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90aGlu
ZzsKLQotICAgIGlmIChzb3VyY2VEYXRhRm9ybWF0ID09IGRzdERhdGFGb3JtYXQgJiYgYWxwaGFP
cCA9PSBBbHBoYU9wOjpEb05vdGhpbmcpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogcHRyID0g
c291cmNlRGF0YTsKLSAgICAgICAgY29uc3QgdWludDhfdCogcHRyRW5kID0gc291cmNlRGF0YSAr
IHNyY1N0cmlkZSAqIGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQgcm93U2l6ZSA9IChkc3RTdHJp
ZGUgPiAwKSA/IGRzdFN0cmlkZTogLWRzdFN0cmlkZTsKLSAgICAgICAgdWludDhfdCogZHN0ID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uRGF0YSk7Ci0gICAgICAgIHdoaWxlIChw
dHIgPCBwdHJFbmQpIHsKLSAgICAgICAgICAgIG1lbWNweShkc3QsIHB0ciwgcm93U2l6ZSk7Ci0g
ICAgICAgICAgICBwdHIgKz0gc3JjU3RyaWRlOwotICAgICAgICAgICAgZHN0ICs9IGRzdFN0cmlk
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBGb3JtYXRD
b252ZXJ0ZXIgY29udmVydGVyKHdpZHRoLCBoZWlnaHQsIHNvdXJjZURhdGEsIGRlc3RpbmF0aW9u
RGF0YSwgc3JjU3RyaWRlLCBkc3RTdHJpZGUpOwotICAgIGNvbnZlcnRlci5jb252ZXJ0KHNvdXJj
ZURhdGFGb3JtYXQsIGRzdERhdGFGb3JtYXQsIGFscGhhT3ApOwotICAgIGlmICghY29udmVydGVy
LnN1Y2Nlc3MoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci0jaWYgIShQTEFURk9STShDT0NPQSkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpKQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCkKLXsKLX0K
LSNlbmRpZgotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpCi17Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE2ZjRmNjg5MmU0YTc0MDQzNmY3ODQzMGZj
ZDEzY2FlY2U4NDNjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNzQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKFdFQkdMKQotCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzREJhc2UuaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hDb3VudGVkU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3
dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLSNpZiBVU0UoQ0EpCi0jaW5jbHVkZSAiUGxhdGZvcm1DQUxh
eWVyLmgiCi0jZW5kaWYKLQotLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGF2b2lkIHRo
ZSBuYW1lIGNvbmZsaWN0aW9uIGZvciBOT19FUlJPUi4KLSNpZiBQTEFURk9STShXSU4pCi0jdW5k
ZWYgTk9fRVJST1IKLSNlbGlmIFBMQVRGT1JNKEdUSykKLS8vIFRoaXMgZGVmaW5lIGlzIGZyb20g
dGhlIFgxMSBoZWFkZXJzLCBidXQgaXQncyB1c2VkIGJlbG93LCBzbyB3ZSBtdXN0IHVuZGVmaW5l
IGl0LgotI3VuZGVmIFZFUlNJT04KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxPcGVuR0xFUy9FUzIvZ2wuaD4KLSNpZmRlZiBfX09C
SkNfXwotI2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgotI2VuZGlmIC8vIF9fT0JKQ19fCi0jZW5k
aWYgLy8gVVNFKE9QRU5HTF9FUykKLU9CSkNfQ0xBU1MgQ0FMYXllcjsKLU9CSkNfQ0xBU1MgV2Vi
R0xMYXllcjsKLXR5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlKiBJT1N1cmZhY2VSZWY7Ci0jZW5k
aWYgLy8gUExBVEZPUk0oQ09DT0EpCi0KLSNpZiBVU0UoTklDT1NJQSkKLW5hbWVzcGFjZSBOaWNv
c2lhIHsKLWNsYXNzIEdDM0RMYXllcjsKLX0KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBFeHRlbnNpb25zM0Q7Ci0jaWYgVVNFKEFOR0xFKQotY2xhc3MgRXh0ZW5zaW9uczNE
QU5HTEU7Ci0jZWxpZiAhUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCi1jbGFzcyBF
eHRlbnNpb25zM0RPcGVuR0xFUzsKLSNlbGlmIFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NP
QSkgJiYgVVNFKE9QRU5HTF9FUykpCi1jbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7Ci0jZW5kaWYK
LWNsYXNzIEhvc3RXaW5kb3c7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsK
LSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi1jbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3Jt
TGF5ZXI7Ci0jZW5kaWYKLQotdHlwZWRlZiBXVEY6Okhhc2hNYXA8Q1N0cmluZywgdWludDY0X3Q+
IFNoYWRlck5hbWVIYXNoOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU7Ci0KLWNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEIDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEQmFzZSB7Ci1w
dWJsaWM6Ci0gICAgY2xhc3MgQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
fkNsaWVudCgpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcG9zaXRlKCkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VDb250ZXh0TG9zdCgpID0gMDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHJlY3ljbGVDb250ZXh0KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpID0gMDsKLSAgICB9OwotCi0gICAgc3Rh
dGljIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0
cmlidXRlcywgSG9zdFdpbmRvdyosIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVl
bik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0QoKTsKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIHN0YXRpYyBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZVNoYXJlZChHcmFw
aGljc0NvbnRleHQzRCYgc2hhcmVkQ29udGV4dCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29udGV4dE9iajsgfQotICAgIFBsYXRm
b3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90
ZXh0dXJlOyB9Ci0gICAgQ0FMYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0FMYXllcio+KG1fd2ViR0xMYXllci5nZXQoKSk7IH0K
LSNpZiBVU0UoQU5HTEUpCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRERpc3BsYXkgcGxh
dGZvcm1EaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5T2JqOyB9Ci0gICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRENvbmZpZyBwbGF0Zm9ybUNvbmZpZygpIGNvbnN0IHsgcmV0dXJu
IG1fY29uZmlnT2JqOyB9Ci0jZW5kaWYgLy8gVVNFKEFOR0xFKQotI2Vsc2UKLSAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsK
LSNlbmRpZgotCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZvaWQgYWRk
Q2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50cy5hZGQoJmNsaWVudCk7IH0KLSAgICB2
b2lkIHJlbW92ZUNsaWVudChDbGllbnQmIGNsaWVudCkgeyBtX2NsaWVudHMucmVtb3ZlKCZjbGll
bnQpOyB9Ci0KLSAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNh
bXBsZUZCTyB0byByZWd1bGFyIEZCTy4KLSAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7Ci0KLSAg
ICAvLyBFcXVpdmFsZW50IHRvIDo6Z2xUZXhJbWFnZTJEKCkuIEFsbG93cyBwaXhlbHM9PTAgd2l0
aCBubyBhbGxvY2F0aW9uLgotICAgIHZvaWQgdGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0KLSAgICAvLyBHZXQgYW4gYXR0cmli
dXRlIGxvY2F0aW9uIHdpdGhvdXQgY2hlY2tpbmcgdGhlIG5hbWUgLT4gbWFuZ2xlZG5hbWUgbWFw
cGluZy4KLSAgICBpbnQgZ2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgLy8gQ29tcGlsZSBhIHNoYWRlciB3
aXRob3V0IGdvaW5nIHRocm91Z2ggQU5HTEUuCi0gICAgdm9pZCBjb21waWxlU2hhZGVyRGlyZWN0
KFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAgLy8gSGVscGVyIHRvIHRleEltYWdlMkQgd2l0aCBw
aXhlbD09MCBjYXNlOiBwaXhlbHMgYXJlIGluaXRpYWxpemVkIHRvIDAuCi0gICAgLy8gUmV0dXJu
IHRydWUgaWYgbm8gR0wgZXJyb3IgaXMgc3ludGhlc2l6ZWQuCi0gICAgLy8gQnkgZGVmYXVsdCwg
YWxpZ25tZW50IGlzIDQsIHRoZSBPcGVuR0wgZGVmYXVsdCBzZXR0aW5nLgotICAgIGJvb2wgdGV4
SW1hZ2UyRFJlc291cmNlU2FmZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgYWxp
Z25tZW50ID0gNCk7Ci0KLSAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKLQotICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nIGFu
ZCBwaXhlbCByZWFkYmFjay4KLSAgICAvLwotCi0gICAgLy8gQ29tcHV0ZXMgdGhlIGNvbXBvbmVu
dHMgcGVyIHBpeGVsIGFuZCBieXRlcyBwZXIgY29tcG9uZW50Ci0gICAgLy8gZm9yIHRoZSBnaXZl
biBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uIFJldHVybnMgZmFsc2UgaWYKLSAgICAvLyBl
aXRoZXIgd2FzIGFuIGludmFsaWQgZW51bS4KLSAgICBzdGF0aWMgYm9vbCBjb21wdXRlRm9ybWF0
QW5kVHlwZVBhcmFtZXRlcnMoR0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGNvbXBvbmVudHNQ
ZXJQaXhlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50KiBieXRlc1BlckNvbXBvbmVudCk7Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUg
aW1hZ2Ugc2l6ZSBpbiBieXRlcy4gSWYgcGFkZGluZ0luQnl0ZXMgaXMgbm90IG51bGwsIHBhZGRp
bmcKLSAgICAvLyBpcyBhbHNvIGNhbGN1bGF0ZWQgaW4gcmV0dXJuLiBSZXR1cm5zIE5PX0VSUk9S
IGlmIHN1Y2NlZWQsIG90aGVyd2lzZQotICAgIC8vIHJldHVybiB0aGUgc3VnZ2VzdGVkIEdMIGVy
cm9yIGluZGljYXRpbmcgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlOgotICAgIC8vICAgSU5WQUxJ
RF9WQUxVRSBpZiB3aWR0aC9oZWlnaHQgaXMgbmVnYXRpdmUgb3Igb3ZlcmZsb3cgaGFwcGVucy4K
LSAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgotICAgIHN0
YXRpYyBHQzNEZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQzNEZW51bSBmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEaW50IGFsaWdubWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGltYWdlU2l6ZUluQnl0
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBw
YWRkaW5nSW5CeXRlcyk7Ci0KLSAgICBzdGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5cGVG
b3JJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0mIGZvcm1h
dCwgR0MzRGVudW0mIHR5cGUpOwotCi0gICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBnaXZlbiBJbWFnZURhdGEgaW50byB0aGUgcGFzc2VkIFZlY3RvciwKLSAgICAvLyBwYWNraW5n
IHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAot
ICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4g
UmV0dXJucyB0cnVlCi0gICAgLy8gdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4dHJh
Y3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZXh0
cmFjdHMgdGhlIHVzZXItc3VwcGxpZWQgdGV4dHVyZQotICAgIC8vIGRhdGEsIGFwcGx5aW5nIHRo
ZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBwYXJhbWV0ZXJzLgotICAgIC8vIElmIHRoZSBk
YXRhIGlzIG5vdCB0aWdodGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZAotICAgIC8v
IHVucGFja0FsaWdubWVudCwgdGhlIG91dHB1dCBkYXRhIHdpbGwgYmUgdGlnaHRseSBwYWNrZWQu
Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGFueSBlcnJvciBv
Y2N1cnJlZC4KLSAgICBzdGF0aWMgYm9vbCBleHRyYWN0VGV4dHVyZURhdGEodW5zaWduZWQgaW50
IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkKiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
IC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCi0gICAgLy8KLQotICAgIHZvaWQgYWN0aXZlVGV4
dHVyZShHQzNEZW51bSB0ZXh0dXJlKSBvdmVycmlkZTsKLSAgICB2b2lkIGF0dGFjaFNoYWRlcihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRCdWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJsZW5kQ29sb3IoR0MzRGNs
YW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBh
bHBoYSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpIG92
ZXJyaWRlOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0Is
IEdDM0RlbnVtIG1vZGVBbHBoYSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVu
dW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rvcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBibGVuZEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3Jj
QWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRy
IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0Mz
RHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRlOwotCi0gICAgdm9pZCog
bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNp
emVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2Vzcykgb3ZlcnJpZGU7Ci0gICAgR0MzRGJv
b2xlYW4gdW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIGNv
cHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0
LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXpl
aXB0cikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGdldEludGVybmFsZm9ybWF0aXYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RzaXpl
aSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIHNhbXBsZXMs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2b2lkIHRleFN0b3JhZ2UzRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1l
LCBWZWN0b3I8R0MzRGludD4mIHBhcmFtcykgb3ZlcnJpZGU7Ci0KLSAgICBHQzNEZW51bSBjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGVhcihHQzNEYml0ZmllbGQgbWFzaykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhckNvbG9yKEdD
M0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFt
cGYgYWxwaGEpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50IHMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdD
M0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKSBvdmVycmlkZTsKLSAgICB2b2lkIGNv
bXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNvbXBy
ZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRl
OwotICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRlOwotICAgIHZvaWQgY29weVRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIpIG92ZXJyaWRlOwotICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcHRoUmFu
Z2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNp
emVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApIG92ZXJyaWRlOwotICAgIHZvaWQgZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlu
aXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmbHVzaCgpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rp
bnQgbGV2ZWwpIG92ZXJyaWRlOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpIG92
ZXJyaWRlOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlk
ZTsKLQotICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBvdmVycmlkZTsKLSAgICBib29sIGdldEFjdGl2
ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0
aXZlSW5mbyYpOwotICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBn
ZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJik7Ci0gICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBs
YXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpIG92ZXJyaWRlOwotICAgIEdDM0RpbnQgZ2V0QXR0cmli
TG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsK
LSAgICB2b2lkIGdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUp
IG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIEdDM0RlbnVt
IGdldEVycm9yKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUs
IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0SW50
ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSNpZiAhVVNFKEFOR0xFKQotICAg
IHZvaWQgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSNlbmRpZiAvLyAhVVNFKEFO
R0xFKQotICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKLSAgICBTdHJpbmcgZ2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0WzJd
LCBHQzNEc2l6ZWksIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
IG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBl
LCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKSBvdmVycmlkZTsKLSAgICBTdHJp
bmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIFN0cmlu
ZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRUZXhQYXJh
bWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFVu
aWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRl
OwotICAgIEdDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihHQzNE
dWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZ2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0
dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkgb3ZlcnJpZGU7Ci0g
ICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAg
R0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7Ci0gICAgR0MzRGJv
b2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNE
Ym9vbGVhbiBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgR0MzRGJv
b2xlYW4gaXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgR0Mz
RGJvb2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgR0MzRGJv
b2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgbGlu
ZVdpZHRoKEdDM0RmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsaW5rUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50IHBhcmFtKSBvdmVycmlkZTsKLSAgICB2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZs
b2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVhZFBp
eGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLQotICAgIHZvaWQgcmVuZGVy
YnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2Ft
cGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaGFkZXJTb3VyY2UoUGxh
dGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spIG92
ZXJyaWRlOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpw
YXNzKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2
b2lkKiBwaXhlbHMpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pIG92ZXJyaWRlOwotICAgIHZv
aWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
IHBhcmFtKSBvdmVycmlkZTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVuaWZvcm0xZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3Jt
MWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpIG92
ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTJmKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1
bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2
KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHgsIEdDM0RpbnQgeSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtMml2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1
bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNE
ZmxvYXQgeikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZv
cm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KSBv
dmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
LCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm00ZihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxv
YXQgdykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm00
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNE
aW50IHcpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtTWF0
cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm1NYXRy
aXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB1c2VQcm9ncmFt
KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotI2lmICFVU0UoQU5HTEUpCi0gICAgYm9vbCBjaGVj
a1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0z
RE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7Ci0gICAgYm9vbCBwcmVjaXNpb25zTWF0Y2go
UGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0OwotI2VuZGlmCi0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgeCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYo
R0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHkpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBj
b25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIz
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0
IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNE
ZmxvYXQgdykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5k
ZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0
dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwg
R0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZz
ZXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLQotICAgIHZvaWQg
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5z
dGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
cHRyIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0
ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlk
ZTsKLQotICAgIC8vIFZlcnRleEFycmF5T2plY3QgY2FsbHMKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZVZlcnRleEFycmF5KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJh
eShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFy
cmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFZlcnRleEFycmF5
KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBwYWludFRvQ2FudmFzKGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYpOwotCi0gICAgdm9p
ZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsK
LSAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OwotICAgIHZvaWQgZm9yY2VDb250ZXh0
TG9zdCgpOwotICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hD
b250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOwotICAgIHZvaWQgc2ltdWxhdGVDb250ZXh0Q2hh
bmdlZCgpOwotCi0gICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciopOwotICAgIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKCk7Ci0gICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VC
dWZmZXIqKTsKLQotI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCi0gICAgdm9pZCBw
cmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBib29sIHRleEltYWdlSU9TdXJmYWNlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiwgR0Mz
RHVpbnQgcGxhbmUpOwotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICB2b2lkIHByZXNlbnRSZW5k
ZXJidWZmZXIoKTsKLSNlbmRpZgotCi0jaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQotICAg
IHZvaWQgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSk7Ci0gICAgdm9pZCB1
cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsKLSNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIHZvaWQgdXBkYXRlQ0dMQ29u
dGV4dCgpOwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQotICAg
IHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQz
RFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbjsgfQotCi0gICAgLy8gU3Vw
cG9ydCBmb3IgYnVmZmVyIGNyZWF0aW9uIGFuZCBkZWxldGlvbgotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgY3JlYXRlQnVmZmVyKCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVG
cmFtZWJ1ZmZlcigpIG92ZXJyaWRlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUHJvZ3Jh
bSgpIG92ZXJyaWRlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCkg
b3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVudW0pIG92
ZXJyaWRlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
ZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
ZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotCi0gICAgLy8gU3ludGhlc2l6ZXMg
YW4gT3BlbkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBhCi0gICAgLy8gbGF0
ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBpcyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCi0g
ICAgLy8gMi4wIGJlaGF2aW9yIG9uIHRoZSBkZXNrdG9wIGFuZCB0byBlbmZvcmNlIGFkZGl0aW9u
YWwgZXJyb3IKLSAgICAvLyBjaGVja2luZyBtYW5kYXRlZCBieSBXZWJHTC4KLSAgICAvLwotICAg
IC8vIFBlciB0aGUgYmVoYXZpb3Igb2YgZ2xHZXRFcnJvciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBv
bmUKLSAgICAvLyBpbnN0YW5jZSBvZiBhbnkgZ2l2ZW4gZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0g
ZnJvbSBjYWxscyB0bwotICAgIC8vIGdldEVycm9yIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRk
ZWQuCi0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcik7Ci0KLSAgICAv
LyBSZWFkIHJlYWwgT3BlbkdMIGVycm9ycywgYW5kIG1vdmUgdGhlbSB0byB0aGUgc3ludGhldGlj
Ci0gICAgLy8gZXJyb3IgbGlzdC4gUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGVycm9yIGlz
IG1vdmVkLgotICAgIGJvb2wgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0KLSAg
ICAvLyBTdXBwb3J0IGZvciBleHRlbnNpb25zLiBSZXR1cm5zIGEgbm9uLW51bGwgb2JqZWN0LCB0
aG91Z2ggbm90Ci0gICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFpbnMgbWF5IG5lY2Vzc2FyaWx5
IGJlIHN1cHBvcnRlZCBvbiB0aGUKLSAgICAvLyBjdXJyZW50IGhhcmR3YXJlLiBNdXN0IGNhbGwg
RXh0ZW5zaW9uczNEOjpzdXBwb3J0cygpIHRvCi0gICAgLy8gZGV0ZXJtaW5lIHRoaXMuCi0gICAg
RXh0ZW5zaW9uczNEJiBnZXRFeHRlbnNpb25zKCkgb3ZlcnJpZGU7Ci0KLSAgICBJbnRTaXplIGdl
dEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3Q7Ci0KLSAgICAvLyBQYWNrcyB0aGUgY29u
dGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIHdoaWNoIGlzIHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRv
IHRoZSBwYXNzZWQgVmVjdG9yCi0gICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQg
YW5kIHR5cGUsIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgQWxwaGFPcCBmbGFncy4KLSAgICAv
LyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIHBhY2tJbWFnZURh
dGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVu
dCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQotICAgIGNsYXNzIEltYWdlRXh0cmFjdG9yIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlRXh0cmFjdG9yKEltYWdlKiwgRE9NU291cmNlLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwot
Ci0gICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9u
IG9mIHRoaXMgbWV0aG9kIHRvIGRlYWxsb2NhdGUgb3IgcmVsZWFzZSByZXNvdXJjZXMKLSAgICAg
ICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZSBpZiBuZWVkZWQuCi0gICAgICAgIH5JbWFn
ZUV4dHJhY3RvcigpOwotCi0gICAgICAgIGJvb2wgZXh0cmFjdFN1Y2NlZWRlZCgpIHsgcmV0dXJu
IG1fZXh0cmFjdFN1Y2NlZWRlZDsgfQotICAgICAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0
YSgpIHsgcmV0dXJuIG1faW1hZ2VQaXhlbERhdGE7IH0KLSAgICAgICAgdW5zaWduZWQgaW1hZ2VX
aWR0aCgpIHsgcmV0dXJuIG1faW1hZ2VXaWR0aDsgfQotICAgICAgICB1bnNpZ25lZCBpbWFnZUhl
aWdodCgpIHsgcmV0dXJuIG1faW1hZ2VIZWlnaHQ7IH0KLSAgICAgICAgRGF0YUZvcm1hdCBpbWFn
ZVNvdXJjZUZvcm1hdCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VGb3JtYXQ7IH0KLSAgICAgICAg
QWxwaGFPcCBpbWFnZUFscGhhT3AoKSB7IHJldHVybiBtX2FscGhhT3A7IH0KLSAgICAgICAgdW5z
aWduZWQgaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2ltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50OyB9Ci0gICAgICAgIERPTVNvdXJjZSBpbWFnZUh0bWxEb21Tb3VyY2Uo
KSB7IHJldHVybiBtX2ltYWdlSHRtbERvbVNvdXJjZTsgfQotICAgIHByaXZhdGU6Ci0gICAgICAg
IC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMg
bWV0aG9kLgotICAgICAgICAvLyBFeHRyYWN0cyB0aGUgaW1hZ2UgYW5kIGtlZXBzIHRyYWNrIG9m
IGl0cyBzdGF0dXMsIHN1Y2ggYXMgd2lkdGgsIGhlaWdodCwgU291cmNlIEFsaWdubWVudCwgZm9y
bWF0IGFuZCBBbHBoYU9wIGV0YywKLSAgICAgICAgLy8gbmVlZHMgdG8gbG9jayB0aGUgcmVzb3Vy
Y2VzIG9yIHJlbGV2YW50IGRhdGEgaWYgbmVlZGVkIGFuZCByZXR1cm5zIHRydWUgdXBvbiBzdWNj
ZXNzCi0gICAgICAgIGJvb2wgZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOwotI2VsaWYgVVNFKENHKQot
ICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOwotICAgICAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gbV9kZWNvZGVkSW1hZ2U7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IG1fcGl4ZWxEYXRhOwotICAgICAgICBVbmlxdWVBcnJheTx1aW50OF90PiBtX2Zvcm1hbGl6
ZWRSR0JBOERhdGE7Ci0jZW5kaWYKLSAgICAgICAgSW1hZ2UqIG1faW1hZ2U7Ci0gICAgICAgIERP
TVNvdXJjZSBtX2ltYWdlSHRtbERvbVNvdXJjZTsKLSAgICAgICAgYm9vbCBtX2V4dHJhY3RTdWNj
ZWVkZWQ7Ci0gICAgICAgIGNvbnN0IHZvaWQqIG1faW1hZ2VQaXhlbERhdGE7Ci0gICAgICAgIHVu
c2lnbmVkIG1faW1hZ2VXaWR0aDsKLSAgICAgICAgdW5zaWduZWQgbV9pbWFnZUhlaWdodDsKLSAg
ICAgICAgRGF0YUZvcm1hdCBtX2ltYWdlU291cmNlRm9ybWF0OwotICAgICAgICBBbHBoYU9wIG1f
YWxwaGFPcDsKLSAgICAgICAgdW5zaWduZWQgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsK
LSAgICB9OwotCi0gICAgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkgeyBtX2ZhaWxO
ZXh0U3RhdHVzQ2hlY2sgPSB0cnVlOyB9Ci0KLSAgICBHQzNEZW51bSBhY3RpdmVUZXh0dXJlVW5p
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQ7IH0KLSAgICBHQzNE
ZW51bSBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCk7IH0KLSAgICBHQzNEZW51bSBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmN1cnJlbnRCb3VuZFRhcmdldCgpOyB9Ci0gICAgdW5zaWduZWQg
dGV4dHVyZVNlZWQoR0MzRHVpbnQgdGV4dHVyZSkgeyByZXR1cm4gbV9zdGF0ZS50ZXh0dXJlU2Vl
ZENvdW50LmNvdW50KHRleHR1cmUpOyB9Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdXNpbmcg
UGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKLSAgICB2b2lkIHNjcmVlbkRpZENoYW5nZShQ
bGF0Zm9ybURpc3BsYXlJRCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlv
biA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRDb250
ZXh0ID0gbnVsbHB0cik7Ci0KLSAgICAvLyBIZWxwZXIgZm9yIHBhY2tJbWFnZURhdGEvZXh0cmFj
dEltYWdlRGF0YS9leHRyYWN0VGV4dHVyZURhdGEgd2hpY2ggaW1wbGVtZW50IHBhY2tpbmcgb2Yg
cGl4ZWwKLSAgICAvLyBkYXRhIGludG8gdGhlIHNwZWNpZmllZCBPcGVuR0wgZGVzdGluYXRpb24g
Zm9ybWF0IGFuZCB0eXBlLgotICAgIC8vIEEgc291cmNlVW5wYWNrQWxpZ25tZW50IG9mIHplcm8g
aW5kaWNhdGVzIHRoYXQgdGhlIHNvdXJjZQotICAgIC8vIGRhdGEgaXMgdGlnaHRseSBwYWNrZWQu
IE5vbi16ZXJvIHZhbHVlcyBtYXkgdGFrZSBhIHNsb3cgcGF0aC4KLSAgICAvLyBEZXN0aW5hdGlv
biBkYXRhIHdpbGwgaGF2ZSBubyBnYXBzIGJldHdlZW4gcm93cy4KLSAgICBzdGF0aWMgYm9vbCBw
YWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0
YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5zaWduZWQgZGVz
dGluYXRpb25UeXBlLCBBbHBoYU9wLCB2b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkp
OwotCi0gICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4
dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAotICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQg
YW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCi0gICAgLy8gY291bGQgbm90
IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCi0gICAg
Ly8gaW1wbGVtZW50YXRpb24uCi0gICAgdm9pZCB2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwotICAgIHZvaWQgdmFsaWRhdGVBdHRy
aWJ1dGVzKCk7Ci0gICAgCi0gICAgLy8gRGlkIHRoZSBtb3N0IHJlY2VudCBkcmF3aW5nIG9wZXJh
dGlvbiBsZWF2ZSB0aGUgR1BVIGluIGFuIGFjY2VwdGFibGUgc3RhdGU/Ci0gICAgdm9pZCBjaGVj
a0dQVVN0YXR1cygpOwotCi0gICAgLy8gUmVhZCByZW5kZXJpbmcgcmVzdWx0cyBpbnRvIGEgcGl4
ZWwgYXJyYXkgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlCi0gICAgLy8gYmFja2J1ZmZlci4K
LSAgICB2b2lkIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgaW50
IHBpeGVsc1NpemUpOwotICAgIHZvaWQgcmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vz
c2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciog
cGl4ZWxzKTsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgdm9pZCBzZXRSZW5kZXJidWZmZXJT
dG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0j
ZW5kaWYKLQotICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQg
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiA9IEludFJlY3Qo
KSk7Ci0gICAgdm9pZCBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQg
aW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGFsbG93T2ZmbGluZVJlbmRlcmVycygpIGNvbnN0
OwotI2VuZGlmCi0KLSAgICBpbnQgbV9jdXJyZW50V2lkdGggeyAwIH07Ci0gICAgaW50IG1fY3Vy
cmVudEhlaWdodCB7IDAgfTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFJldGFpblB0cjxX
ZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBt
X2NvbnRleHRPYmogeyBudWxscHRyIH07Ci0jaWYgVVNFKEFOR0xFKQotICAgIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0REaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51bGxwdHIgfTsKLSAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEQ29uZmlnIG1fY29uZmlnT2JqIHsgbnVsbHB0ciB9OwotI2Vu
ZGlmIC8vIFVTRShBTkdMRSkKLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQotI2lmIFBMQVRG
T1JNKFdJTikgJiYgVVNFKENBKQotICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fd2ViR0xM
YXllcjsKLSNlbmRpZgotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZh
cmlhYmxlPiBTaGFkZXJTeW1ib2xNYXA7Ci0KLSAgICBzdHJ1Y3QgU2hhZGVyU291cmNlRW50cnkg
ewotICAgICAgICBHQzNEZW51bSB0eXBlOwotICAgICAgICBTdHJpbmcgc291cmNlOwotICAgICAg
ICBTdHJpbmcgdHJhbnNsYXRlZFNvdXJjZTsKLSAgICAgICAgU3RyaW5nIGxvZzsKLSAgICAgICAg
Ym9vbCBpc1ZhbGlkOwotICAgICAgICBTaGFkZXJTeW1ib2xNYXAgYXR0cmlidXRlTWFwOwotICAg
ICAgICBTaGFkZXJTeW1ib2xNYXAgdW5pZm9ybU1hcDsKLSAgICAgICAgU2hhZGVyU3ltYm9sTWFw
IHZhcnlpbmdNYXA7Ci0gICAgICAgIFNoYWRlclNvdXJjZUVudHJ5KCkKLSAgICAgICAgICAgIDog
dHlwZShWRVJURVhfU0hBREVSKQotICAgICAgICAgICAgLCBpc1ZhbGlkKGZhbHNlKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNoYWRlclN5bWJvbE1hcCYgc3ltYm9s
TWFwKGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJV
VEUgfHwgc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSB8fCBzeW1ib2xU
eXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5HKTsKLSAgICAgICAgICAgIGlmIChzeW1i
b2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGF0dHJpYnV0ZU1hcDsKLSAgICAgICAgICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURF
Ul9TWU1CT0xfVFlQRV9WQVJZSU5HKQotICAgICAgICAgICAgICAgIHJldHVybiB2YXJ5aW5nTWFw
OwotICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm1NYXA7Ci0gICAgICAgIH0KLSAgICB9OwotCi0j
aWYgIVVTRShBTkdMRSkKLSAgICAvLyBGSVhNRTogU2hhZGVycyBhcmUgbmV2ZXIgcmVtb3ZlZCBm
cm9tIHRoaXMgbWFwLCBldmVuIGlmIHRoZXkgYW5kIHRoZWlyIHByb2dyYW0gYXJlIGRlbGV0ZWQu
Ci0gICAgLy8gVGhpcyBpcyBiYWQsIGFuZCBpdCBhbHNvIHJlbGllcyBvbiB0aGUgZmFjdCB3ZSBu
ZXZlciByZXVzZSBQbGF0Zm9ybTNET2JqZWN0IG51bWJlcnMuCi0gICAgdHlwZWRlZiBIYXNoTWFw
PFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5PiBTaGFkZXJTb3VyY2VNYXA7Ci0g
ICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291cmNlTWFwOwotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFBsYXRmb3JtM0RPYmplY3QsIHN0ZDo6cGFpcjxQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9y
bTNET2JqZWN0Pj4gTGlua2VkU2hhZGVyTWFwOwotICAgIExpbmtlZFNoYWRlck1hcCBtX2xpbmtl
ZFNoYWRlck1hcDsKLQotICAgIHN0cnVjdCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMgewotICAg
ICAgICBWZWN0b3I8R0MzRGludD4gZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwOwot
ICAgICAgICBWZWN0b3I8R0MzRGludD4gZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcDsK
LQotICAgICAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBHQzNEaW50IGNvdW50Rm9yVHlwZShHQzNEZW51bSBhY3RpdmVUeXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoYWN0aXZlVHlwZSA9PSBBQ1RJVkVfQVRUUklC
VVRFUyB8fCBhY3RpdmVUeXBlID09IEFDVElWRV9VTklGT1JNUyk7Ci0gICAgICAgICAgICBpZiAo
YWN0aXZlVHlwZSA9PSBBQ1RJVkVfQVRUUklCVVRFUykKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKTsKLQotICAgICAgICAgICAg
cmV0dXJuIGZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpOwotICAgICAgICB9
Ci0gICAgfTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzPiBTaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXA7Ci0gICAgU2hhZGVy
UHJvZ3JhbVN5bWJvbENvdW50TWFwIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwOwotCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBIYXNoZWRTeW1ib2xNYXA7Ci0gICAg
SGFzaGVkU3ltYm9sTWFwIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXA7Ci0KLSAgICBTdHJp
bmcgbWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVy
U3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBTdHJpbmcgbWFwcGVkU3ltYm9s
TmFtZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKLSAgICBTdHJpbmcgb3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwot
ICAgIE9wdGlvbmFsPFN0cmluZz4gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VN
YXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJOYW1lSGFzaD4gbmFt
ZUhhc2hNYXBGb3JTaGFkZXJzOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoQU5H
TEUpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzREFOR0xFOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFeHRlbnNpb25zM0RBTkdMRT4gbV9leHRlbnNpb25zOwotI2VsaWYgIVBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVu
R0xFUzsKLSAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0xFUz4gbV9leHRlbnNpb25zOwotI2VsaWYg
VVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLSAgICBm
cmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnMzRE9wZW5H
TD4gbV9leHRlbnNpb25zOwotI2VuZGlmCi0KLSAgICBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJl
ZmVyZW5jZSBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiB7IEdyYXBoaWNzQ29udGV4
dDNEUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0IH07Ci0gICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4+
IG1fdmVydGV4QXJyYXk7Ci0KLSNpZiAhVVNFKEFOR0xFKQotICAgIEFOR0xFV2ViS2l0QnJpZGdl
IG1fY29tcGlsZXI7Ci0jZW5kaWYKLQotICAgIEdDM0R1aW50IG1fdGV4dHVyZSB7IDAgfTsKLSAg
ICBHQzNEdWludCBtX2ZibyB7IDAgfTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgR0MzRHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKLSAgICBHQzNEdWludCBtX2lu
dGVybWVkaWF0ZVRleHR1cmUgeyAwIH07Ci0jZW5kaWYKLQotICAgIEdDM0R1aW50IG1fZGVwdGhC
dWZmZXIgeyAwIH07Ci0gICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyIHsgMCB9OwotICAgIEdD
M0R1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9OwotCi0gICAgYm9vbCBtX2xheWVyQ29t
cG9zaXRlZCB7IGZhbHNlIH07Ci0gICAgR0MzRHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0IHsg
MCB9OwotCi0jaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEU3VyZmFjZSBtX3BidWZmZXI7Ci0jZW5kaWYKLQotICAgIHN0cnVjdCBH
cmFwaGljc0NvbnRleHQzRFN0YXRlIHsKLSAgICAgICAgR0MzRHVpbnQgYm91bmRGQk8geyAwIH07
Ci0gICAgICAgIEdDM0RlbnVtIGFjdGl2ZVRleHR1cmVVbml0IHsgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwIH07Ci0KLSAgICAgICAgdXNpbmcgQm91bmRUZXh0dXJlTWFwID0gSGFzaE1hcDxH
QzNEZW51bSwKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxHQzNEdWludCwgR0MzRGVudW0+LAotICAg
ICAgICAgICAgV1RGOjpJbnRIYXNoPEdDM0RlbnVtPiwgCi0gICAgICAgICAgICBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50PiwKLSAgICAgICAgICAgIFdURjo6UGFp
ckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWludD4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+PgotICAgICAgICA+
OwotICAgICAgICBCb3VuZFRleHR1cmVNYXAgYm91bmRUZXh0dXJlTWFwOwotICAgICAgICBHQzNE
dWludCBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gYm91bmRUZXh0dXJlKGFj
dGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAgICBHQzNEdWludCBib3VuZFRleHR1cmUoR0MzRGVu
dW0gdGV4dHVyZVVuaXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXRlcmF0
b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7Ci0gICAgICAgICAgICBpZiAo
aXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBpdGVyYXRvci0+dmFsdWUuZmlyc3Q7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIEdDM0R1aW50IGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IGJvdW5kVGFyZ2V0KGFjdGl2ZVRleHR1cmVVbml0KTsgfQotICAgICAgICBHQzNEZW51bSBib3Vu
ZFRhcmdldChHQzNEZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKLSAg
ICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7Ci0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmVVbml0LCBHQzNEdWludCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGJvdW5kVGV4dHVyZU1hcC5zZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFr
ZV9wYWlyKHRleHR1cmUsIHRhcmdldCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdXNpbmcgVGV4
dHVyZVNlZWRDb3VudCA9IEhhc2hDb3VudGVkU2V0PEdDM0R1aW50LCBXVEY6OkludEhhc2g8R0Mz
RHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50Pj47Ci0g
ICAgICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNlZWRDb3VudDsKLSAgICB9OwotCi0gICAg
R3JhcGhpY3NDb250ZXh0M0RTdGF0ZSBtX3N0YXRlOwotCi0gICAgLy8gRm9yIG11bHRpc2FtcGxp
bmcKLSAgICBHQzNEdWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OwotICAgIEdDM0R1aW50IG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07Ci0gICAgR0MzRHVpbnQgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OwotCi0gICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50
aGVzaXplR0xFcnJvcigpLgotICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vy
cm9yczsKLQotI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgZnJp
ZW5kIGNsYXNzIE5pY29zaWE6OkdDM0RMYXllcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3Np
YTo6R0MzRExheWVyPiBtX25pY29zaWFMYXllcjsKLSNlbGlmIFVTRShURVhUVVJFX01BUFBFUikK
LSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI+IG1fdGV4bWFwTGF5
ZXI7Ci0jZWxzZQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2YXRlOwot
I2VuZGlmCi0KLSAgICBIYXNoU2V0PENsaWVudCo+IG1fY2xpZW50czsKLQotICAgIGJvb2wgbV9p
c0ZvcldlYkdMMiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3VzaW5nQ29yZVByb2ZpbGUgeyBmYWxz
ZSB9OwotCi0gICAgdW5zaWduZWQgbV9zdGF0dXNDaGVja0NvdW50IHsgMCB9OwotICAgIGJvb2wg
bV9mYWlsTmV4dFN0YXR1c0NoZWNrIHsgZmFsc2UgfTsKLQotI2lmIFVTRShDQUlSTykKLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1fdmFvIHsgMCB9OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NP
QSkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCi0gICAgYm9vbCBtX2hhc1N3aXRjaGVk
VG9IaWdoUGVyZm9ybWFuY2VHUFUgeyBmYWxzZSB9OwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmZjE3YzFmZTI5MjFhMjI5MTNmMmZiYjY0MjAyMGE4
ODFmZTNjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREF0dHJpYnV0
ZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEUG93ZXJQcmVmZXJlbmNlIHsKLSAgICBEZWZhdWx0LAotICAgIExvd1Bvd2VyLAotICAgIEhp
Z2hQZXJmb3JtYW5jZQotfTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyB7
Ci0gICAgLy8gV2ViR0xDb250ZXh0QXR0cmlidXRlcwotICAgIGJvb2wgYWxwaGEgeyB0cnVlIH07
Ci0gICAgYm9vbCBkZXB0aCB7IHRydWUgfTsKLSAgICBib29sIHN0ZW5jaWwgeyBmYWxzZSB9Owot
ICAgIGJvb2wgYW50aWFsaWFzIHsgdHJ1ZSB9OwotICAgIGJvb2wgcHJlbXVsdGlwbGllZEFscGhh
IHsgdHJ1ZSB9OwotICAgIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHsgZmFsc2UgfTsKLSAg
ICBib29sIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgeyBmYWxzZSB9OwotICAgIHVzaW5n
IFBvd2VyUHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOwotICAg
IFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2UgeyBQb3dlclByZWZlcmVuY2U6OkRlZmF1
bHQgfTsKLQotICAgIC8vIEFkZGl0aW9uYWwgYXR0cmlidXRlcy4KLSAgICBib29sIHNoYXJlUmVz
b3VyY2VzIHsgdHJ1ZSB9OwotICAgIGJvb2wgaXNXZWJHTDIgeyBmYWxzZSB9OwotICAgIGJvb2wg
bm9FeHRlbnNpb25zIHsgZmFsc2UgfTsKLSAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvIHsgMSB9
OwotICAgIFBvd2VyUHJlZmVyZW5jZSBpbml0aWFsUG93ZXJQcmVmZXJlbmNlIHsgUG93ZXJQcmVm
ZXJlbmNlOjpEZWZhdWx0IH07Ci19OwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlYWE2MTVhZmNkOGFkNDAzMzI5NmQ5YTU2NDUwMzY3Zjk2
NmU3ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzREJhc2UuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQot
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBo
aWNzQ29udGV4dDNEQmFzZTo6R3JhcGhpY3NDb250ZXh0M0RCYXNlKEdyYXBoaWNzQ29udGV4dDNE
QXR0cmlidXRlcyBhdHRycywgRGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdyYXBoaWNzQ29udGV4
dDNEQmFzZSopCi0gICAgOiBtX2F0dHJzKGF0dHJzKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0
aW5hdGlvbikKLXsKLX0KLQotdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpnZXRDbGVh
ckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDM0RlbnVtIGF0dGFjaG1lbnQpCi17Ci0gICAgc3dpdGNo
IChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkNPTE9SX0FU
VEFDSE1FTlQwOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMV9FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQyX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT0xPUl9BVFRBQ0hNRU5UNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9S
X0FUVEFDSE1FTlQ1X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVO
VDZfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UN19FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ4X0VYVDoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDlfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT0xPUl9BVFRBQ0hNRU5UMTBfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9B
VFRBQ0hNRU5UMTFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5U
MTJfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMTNfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMTRfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UMTVfRVhUOgotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0RCYXNlOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0RCYXNlOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0RCYXNlOjpERVBUSF9CVUZGRVJfQklUOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzREJhc2U6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0RCYXNlOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpT
VEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotfQotCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzREJhc2U6OmdldENsZWFyQml0c0J5Rm9y
bWF0KEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlJHQkE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkxVTUlOQU5DRV9BTFBI
QToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6TFVNSU5BTkNFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlI4X1NOT1JNOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0RCYXNlOjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSOFVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSOEk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OlIxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSMTZJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSMzJVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEQmFzZTo6UjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6
Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzhfU05PUk06Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpSRzMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Ukc4VUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHOEk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OlJHMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Ukcx
Nkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHMzJVSToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6UkczMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNSR0I4OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzREJhc2U6OlJHQjhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlIx
MUZfRzExRl9CMTBGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I5X0U1Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0IxNkY6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzREJhc2U6OlJHQjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6
UkdCOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I4SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6UkdCMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0IzMlVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0IzMkk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNl
OjpTUkdCOF9BTFBIQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkE4X1NO
T1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I1X0ExOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkExNkY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkEzMkY6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlJHQkE4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCMTBfQTJVSToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTE2VUk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlJHQkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlJHQkEzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkEzMlVJOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
U1JHQl9BTFBIQV9FWFQ6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzREJhc2U6OkNP
TE9SX0JVRkZFUl9CSVQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0NP
TVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9DT01QT05F
TlQyNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQ09NUE9ORU5UMzJG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9DT01QT05FTlQ6Ci0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNURU5DSUxfSU5ERVg4OgotICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX1NURU5DSUw6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OkRFUFRIMjRfU1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
REJhc2U6OkRFUFRIMzJGX1NURU5DSUw4OgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpTVEVOQ0lM
X0JVRkZFUl9CSVQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
Ci11aW50OF90IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChH
QzNEZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEQmFzZTo6QUxQSEE6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90PihDaGFubmVsQml0czo6QWxwaGEpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNl
OjpMVU1JTkFOQ0U6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVs
Qml0czo6UkdCKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6TFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OlJH
QkEpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlJHQjU2NToKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9F
WFQ6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdC
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEQmFzZTo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6
OlJHQjVfQTE6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OlJHQkEpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQ09NUE9ORU5UOgotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OkRlcHRoKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6U1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90PihDaGFubmVsQml0czo6U3RlbmNpbCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzREJhc2U6OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90PihDaGFubmVsQml0czo6RGVwdGhTdGVuY2lsKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDJlMDM4MDVjMjE4Yzc5ODcwNDljZGQ4MGE2ZjA3MGNjYTE4MTM5NzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNEQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIE9TKFdJTkRPV1MpCi0v
LyBEZWZpbmVkIGluIHdpbmVycm9yLmgKLSNpZmRlZiBOT19FUlJPUgotI3VuZGVmIE5PX0VSUk9S
Ci0jZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0Q7Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0REaXNwbGF5OwotdHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEU3VyZmFjZTsKLXR5cGVkZWYgdm9p
ZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRENvbmZpZzsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgRXh0ZW5zaW9uczNEOwotY2xhc3MgSG9zdFdpbmRvdzsKLWNsYXNzIEltYWdlQnVm
ZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzREJhc2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxHcmFwaGljc0NvbnRleHQzREJhc2U+IHsKLXB1YmxpYzoKLSAgICBl
bnVtIHsKLSAgICAgICAgLy8gV2ViR0wgMSBjb25zdGFudHMuCi0gICAgICAgIERFUFRIX0JVRkZF
Ul9CSVQgPSAweDAwMDAwMTAwLAotICAgICAgICBTVEVOQ0lMX0JVRkZFUl9CSVQgPSAweDAwMDAw
NDAwLAotICAgICAgICBDT0xPUl9CVUZGRVJfQklUID0gMHgwMDAwNDAwMCwKLSAgICAgICAgUE9J
TlRTID0gMHgwMDAwLAotICAgICAgICBMSU5FUyA9IDB4MDAwMSwKLSAgICAgICAgTElORV9MT09Q
ID0gMHgwMDAyLAotICAgICAgICBMSU5FX1NUUklQID0gMHgwMDAzLAotICAgICAgICBUUklBTkdM
RVMgPSAweDAwMDQsCi0gICAgICAgIFRSSUFOR0xFX1NUUklQID0gMHgwMDA1LAotICAgICAgICBU
UklBTkdMRV9GQU4gPSAweDAwMDYsCi0gICAgICAgIFpFUk8gPSAwLAotICAgICAgICBPTkUgPSAx
LAotICAgICAgICBTUkNfQ09MT1IgPSAweDAzMDAsCi0gICAgICAgIE9ORV9NSU5VU19TUkNfQ09M
T1IgPSAweDAzMDEsCi0gICAgICAgIFNSQ19BTFBIQSA9IDB4MDMwMiwKLSAgICAgICAgT05FX01J
TlVTX1NSQ19BTFBIQSA9IDB4MDMwMywKLSAgICAgICAgRFNUX0FMUEhBID0gMHgwMzA0LAotICAg
ICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBID0gMHgwMzA1LAotICAgICAgICBEU1RfQ09MT1IgPSAw
eDAzMDYsCi0gICAgICAgIE9ORV9NSU5VU19EU1RfQ09MT1IgPSAweDAzMDcsCi0gICAgICAgIFNS
Q19BTFBIQV9TQVRVUkFURSA9IDB4MDMwOCwKLSAgICAgICAgRlVOQ19BREQgPSAweDgwMDYsCi0g
ICAgICAgIEJMRU5EX0VRVUFUSU9OID0gMHg4MDA5LAotICAgICAgICBCTEVORF9FUVVBVElPTl9S
R0IgPSAweDgwMDksCi0gICAgICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhBID0gMHg4ODNELAotICAg
ICAgICBGVU5DX1NVQlRSQUNUID0gMHg4MDBBLAotICAgICAgICBGVU5DX1JFVkVSU0VfU1VCVFJB
Q1QgPSAweDgwMEIsCi0gICAgICAgIEJMRU5EX0RTVF9SR0IgPSAweDgwQzgsCi0gICAgICAgIEJM
RU5EX1NSQ19SR0IgPSAweDgwQzksCi0gICAgICAgIEJMRU5EX0RTVF9BTFBIQSA9IDB4ODBDQSwK
LSAgICAgICAgQkxFTkRfU1JDX0FMUEhBID0gMHg4MENCLAotICAgICAgICBDT05TVEFOVF9DT0xP
UiA9IDB4ODAwMSwKLSAgICAgICAgT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SID0gMHg4MDAyLAot
ICAgICAgICBDT05TVEFOVF9BTFBIQSA9IDB4ODAwMywKLSAgICAgICAgT05FX01JTlVTX0NPTlNU
QU5UX0FMUEhBID0gMHg4MDA0LAotICAgICAgICBCTEVORF9DT0xPUiA9IDB4ODAwNSwKLSAgICAg
ICAgQVJSQVlfQlVGRkVSID0gMHg4ODkyLAotICAgICAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUiA9
IDB4ODg5MywKLSAgICAgICAgQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAweDg4OTQsCi0gICAgICAg
IEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAweDg4OTUsCi0gICAgICAgIFNUUkVBTV9E
UkFXID0gMHg4OEUwLAotICAgICAgICBTVEFUSUNfRFJBVyA9IDB4ODhFNCwKLSAgICAgICAgRFlO
QU1JQ19EUkFXID0gMHg4OEU4LAotICAgICAgICBCVUZGRVJfU0laRSA9IDB4ODc2NCwKLSAgICAg
ICAgQlVGRkVSX1VTQUdFID0gMHg4NzY1LAotICAgICAgICBDVVJSRU5UX1ZFUlRFWF9BVFRSSUIg
PSAweDg2MjYsCi0gICAgICAgIEZST05UID0gMHgwNDA0LAotICAgICAgICBCQUNLID0gMHgwNDA1
LAotICAgICAgICBGUk9OVF9BTkRfQkFDSyA9IDB4MDQwOCwKLSAgICAgICAgVEVYVFVSRV8yRCA9
IDB4MERFMSwKLSAgICAgICAgQ1VMTF9GQUNFID0gMHgwQjQ0LAotICAgICAgICBCTEVORCA9IDB4
MEJFMiwKLSAgICAgICAgRElUSEVSID0gMHgwQkQwLAotICAgICAgICBTVEVOQ0lMX1RFU1QgPSAw
eDBCOTAsCi0gICAgICAgIERFUFRIX1RFU1QgPSAweDBCNzEsCi0gICAgICAgIFNDSVNTT1JfVEVT
VCA9IDB4MEMxMSwKLSAgICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCA9IDB4ODAzNywKLSAgICAg
ICAgU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFID0gMHg4MDlFLAotICAgICAgICBTQU1QTEVfQ09W
RVJBR0UgPSAweDgwQTAsCi0gICAgICAgIE5PX0VSUk9SID0gMCwKLSAgICAgICAgSU5WQUxJRF9F
TlVNID0gMHgwNTAwLAotICAgICAgICBJTlZBTElEX1ZBTFVFID0gMHgwNTAxLAotICAgICAgICBJ
TlZBTElEX09QRVJBVElPTiA9IDB4MDUwMiwKLSAgICAgICAgT1VUX09GX01FTU9SWSA9IDB4MDUw
NSwKLSAgICAgICAgQ1cgPSAweDA5MDAsCi0gICAgICAgIENDVyA9IDB4MDkwMSwKLSAgICAgICAg
TElORV9XSURUSCA9IDB4MEIyMSwKLSAgICAgICAgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFID0g
MHg4NDZELAotICAgICAgICBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgPSAweDg0NkUsCi0gICAg
ICAgIENVTExfRkFDRV9NT0RFID0gMHgwQjQ1LAotICAgICAgICBGUk9OVF9GQUNFID0gMHgwQjQ2
LAotICAgICAgICBERVBUSF9SQU5HRSA9IDB4MEI3MCwKLSAgICAgICAgREVQVEhfV1JJVEVNQVNL
ID0gMHgwQjcyLAotICAgICAgICBERVBUSF9DTEVBUl9WQUxVRSA9IDB4MEI3MywKLSAgICAgICAg
REVQVEhfRlVOQyA9IDB4MEI3NCwKLSAgICAgICAgU1RFTkNJTF9DTEVBUl9WQUxVRSA9IDB4MEI5
MSwKLSAgICAgICAgU1RFTkNJTF9GVU5DID0gMHgwQjkyLAotICAgICAgICBTVEVOQ0lMX0ZBSUwg
PSAweDBCOTQsCi0gICAgICAgIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMID0gMHgwQjk1LAotICAg
ICAgICBTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyA9IDB4MEI5NiwKLSAgICAgICAgU1RFTkNJTF9S
RUYgPSAweDBCOTcsCi0gICAgICAgIFNURU5DSUxfVkFMVUVfTUFTSyA9IDB4MEI5MywKLSAgICAg
ICAgU1RFTkNJTF9XUklURU1BU0sgPSAweDBCOTgsCi0gICAgICAgIFNURU5DSUxfQkFDS19GVU5D
ID0gMHg4ODAwLAotICAgICAgICBTVEVOQ0lMX0JBQ0tfRkFJTCA9IDB4ODgwMSwKLSAgICAgICAg
U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCA9IDB4ODgwMiwKLSAgICAgICAgU1RFTkNJTF9C
QUNLX1BBU1NfREVQVEhfUEFTUyA9IDB4ODgwMywKLSAgICAgICAgU1RFTkNJTF9CQUNLX1JFRiA9
IDB4OENBMywKLSAgICAgICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgPSAweDhDQTQsCi0gICAg
ICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgPSAweDhDQTUsCi0gICAgICAgIFZJRVdQT1JUID0g
MHgwQkEyLAotICAgICAgICBTQ0lTU09SX0JPWCA9IDB4MEMxMCwKLSAgICAgICAgQ09MT1JfQ0xF
QVJfVkFMVUUgPSAweDBDMjIsCi0gICAgICAgIENPTE9SX1dSSVRFTUFTSyA9IDB4MEMyMywKLSAg
ICAgICAgVU5QQUNLX0FMSUdOTUVOVCA9IDB4MENGNSwKLSAgICAgICAgUEFDS19BTElHTk1FTlQg
PSAweDBEMDUsCi0gICAgICAgIE1BWF9URVhUVVJFX1NJWkUgPSAweDBEMzMsCi0gICAgICAgIE1B
WF9WSUVXUE9SVF9ESU1TID0gMHgwRDNBLAotICAgICAgICBTVUJQSVhFTF9CSVRTID0gMHgwRDUw
LAotICAgICAgICBSRURfQklUUyA9IDB4MEQ1MiwKLSAgICAgICAgR1JFRU5fQklUUyA9IDB4MEQ1
MywKLSAgICAgICAgQkxVRV9CSVRTID0gMHgwRDU0LAotICAgICAgICBBTFBIQV9CSVRTID0gMHgw
RDU1LAotICAgICAgICBERVBUSF9CSVRTID0gMHgwRDU2LAotICAgICAgICBTVEVOQ0lMX0JJVFMg
PSAweDBENTcsCi0gICAgICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTID0gMHgyQTAwLAotICAgICAg
ICBQT0xZR09OX09GRlNFVF9GQUNUT1IgPSAweDgwMzgsCi0gICAgICAgIFRFWFRVUkVfQklORElO
R18yRCA9IDB4ODA2OSwKLSAgICAgICAgU0FNUExFX0JVRkZFUlMgPSAweDgwQTgsCi0gICAgICAg
IFNBTVBMRVMgPSAweDgwQTksCi0gICAgICAgIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSA9IDB4ODBB
QSwKLSAgICAgICAgU0FNUExFX0NPVkVSQUdFX0lOVkVSVCA9IDB4ODBBQiwKLSAgICAgICAgTlVN
X0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTID0gMHg4NkEyLAotICAgICAgICBDT01QUkVTU0VE
X1RFWFRVUkVfRk9STUFUUyA9IDB4ODZBMywKLSAgICAgICAgRE9OVF9DQVJFID0gMHgxMTAwLAot
ICAgICAgICBGQVNURVNUID0gMHgxMTAxLAotICAgICAgICBOSUNFU1QgPSAweDExMDIsCi0gICAg
ICAgIEdFTkVSQVRFX01JUE1BUF9ISU5UID0gMHg4MTkyLAotICAgICAgICBCWVRFID0gMHgxNDAw
LAotICAgICAgICBVTlNJR05FRF9CWVRFID0gMHgxNDAxLAotICAgICAgICBTSE9SVCA9IDB4MTQw
MiwKLSAgICAgICAgVU5TSUdORURfU0hPUlQgPSAweDE0MDMsCi0gICAgICAgIElOVCA9IDB4MTQw
NCwKLSAgICAgICAgVU5TSUdORURfSU5UID0gMHgxNDA1LAotICAgICAgICBGTE9BVCA9IDB4MTQw
NiwKLSAgICAgICAgSEFMRl9GTE9BVF9PRVMgPSAweDhENjEsCi0gICAgICAgIEZJWEVEID0gMHgx
NDBDLAotICAgICAgICBERVBUSF9DT01QT05FTlQgPSAweDE5MDIsCi0gICAgICAgIEFMUEhBID0g
MHgxOTA2LAotICAgICAgICBSR0IgPSAweDE5MDcsCi0gICAgICAgIFJHQkEgPSAweDE5MDgsCi0g
ICAgICAgIEJHUkEgPSAweDgwRTEsCi0gICAgICAgIExVTUlOQU5DRSA9IDB4MTkwOSwKLSAgICAg
ICAgTFVNSU5BTkNFX0FMUEhBID0gMHgxOTBBLAotICAgICAgICBVTlNJR05FRF9TSE9SVF80XzRf
NF80ID0gMHg4MDMzLAotICAgICAgICBVTlNJR05FRF9TSE9SVF81XzVfNV8xID0gMHg4MDM0LAot
ICAgICAgICBVTlNJR05FRF9TSE9SVF81XzZfNSA9IDB4ODM2MywKLSAgICAgICAgRlJBR01FTlRf
U0hBREVSID0gMHg4QjMwLAotICAgICAgICBWRVJURVhfU0hBREVSID0gMHg4QjMxLAotICAgICAg
ICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAweDg4NjksCi0gICAgICAgIE1BWF9WRVJURVhfVU5JRk9S
TV9WRUNUT1JTID0gMHg4REZCLAotICAgICAgICBNQVhfVkFSWUlOR19WRUNUT1JTID0gMHg4REZD
LAotICAgICAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RCwKLSAg
ICAgICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4QjRDLAotICAgICAgICBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4ODg3MiwKLSAgICAgICAgTUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SUyA9IDB4OERGRCwKLSAgICAgICAgU0hBREVSX1RZUEUgPSAweDhCNEYsCi0g
ICAgICAgIERFTEVURV9TVEFUVVMgPSAweDhCODAsCi0gICAgICAgIExJTktfU1RBVFVTID0gMHg4
QjgyLAotICAgICAgICBWQUxJREFURV9TVEFUVVMgPSAweDhCODMsCi0gICAgICAgIEFUVEFDSEVE
X1NIQURFUlMgPSAweDhCODUsCi0gICAgICAgIEFDVElWRV9VTklGT1JNUyA9IDB4OEI4NiwKLSAg
ICAgICAgQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCA9IDB4OEI4NywKLSAgICAgICAgQUNUSVZF
X0FUVFJJQlVURVMgPSAweDhCODksCi0gICAgICAgIEFDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCA9IDB4OEI4QSwKLSAgICAgICAgU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OID0gMHg4QjhDLAot
ICAgICAgICBDVVJSRU5UX1BST0dSQU0gPSAweDhCOEQsCi0gICAgICAgIE5FVkVSID0gMHgwMjAw
LAotICAgICAgICBMRVNTID0gMHgwMjAxLAotICAgICAgICBFUVVBTCA9IDB4MDIwMiwKLSAgICAg
ICAgTEVRVUFMID0gMHgwMjAzLAotICAgICAgICBHUkVBVEVSID0gMHgwMjA0LAotICAgICAgICBO
T1RFUVVBTCA9IDB4MDIwNSwKLSAgICAgICAgR0VRVUFMID0gMHgwMjA2LAotICAgICAgICBBTFdB
WVMgPSAweDAyMDcsCi0gICAgICAgIEtFRVAgPSAweDFFMDAsCi0gICAgICAgIFJFUExBQ0UgPSAw
eDFFMDEsCi0gICAgICAgIElOQ1IgPSAweDFFMDIsCi0gICAgICAgIERFQ1IgPSAweDFFMDMsCi0g
ICAgICAgIElOVkVSVCA9IDB4MTUwQSwKLSAgICAgICAgSU5DUl9XUkFQID0gMHg4NTA3LAotICAg
ICAgICBERUNSX1dSQVAgPSAweDg1MDgsCi0gICAgICAgIFZFTkRPUiA9IDB4MUYwMCwKLSAgICAg
ICAgUkVOREVSRVIgPSAweDFGMDEsCi0gICAgICAgIFZFUlNJT04gPSAweDFGMDIsCi0gICAgICAg
IEVYVEVOU0lPTlMgPSAweDFGMDMsCi0gICAgICAgIE5FQVJFU1QgPSAweDI2MDAsCi0gICAgICAg
IExJTkVBUiA9IDB4MjYwMSwKLSAgICAgICAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IDB4Mjcw
MCwKLSAgICAgICAgTElORUFSX01JUE1BUF9ORUFSRVNUID0gMHgyNzAxLAotICAgICAgICBORUFS
RVNUX01JUE1BUF9MSU5FQVIgPSAweDI3MDIsCi0gICAgICAgIExJTkVBUl9NSVBNQVBfTElORUFS
ID0gMHgyNzAzLAotICAgICAgICBURVhUVVJFX01BR19GSUxURVIgPSAweDI4MDAsCi0gICAgICAg
IFRFWFRVUkVfTUlOX0ZJTFRFUiA9IDB4MjgwMSwKLSAgICAgICAgVEVYVFVSRV9XUkFQX1MgPSAw
eDI4MDIsCi0gICAgICAgIFRFWFRVUkVfV1JBUF9UID0gMHgyODAzLAotICAgICAgICBURVhUVVJF
ID0gMHgxNzAyLAotICAgICAgICBURVhUVVJFX0NVQkVfTUFQID0gMHg4NTEzLAotICAgICAgICBU
RVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAgPSAweDg1MTQsCi0gICAgICAgIFRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCA9IDB4ODUxNSwKLSAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YID0gMHg4NTE2LAotICAgICAgICBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgPSAweDg1
MTcsCi0gICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSA9IDB4ODUxOCwKLSAgICAg
ICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aID0gMHg4NTE5LAotICAgICAgICBURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1ogPSAweDg1MUEsCi0gICAgICAgIE1BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkUgPSAweDg1MUMsCi0gICAgICAgIFRFWFRVUkUwID0gMHg4NEMwLAotICAgICAgICBU
RVhUVVJFMSA9IDB4ODRDMSwKLSAgICAgICAgVEVYVFVSRTIgPSAweDg0QzIsCi0gICAgICAgIFRF
WFRVUkUzID0gMHg4NEMzLAotICAgICAgICBURVhUVVJFNCA9IDB4ODRDNCwKLSAgICAgICAgVEVY
VFVSRTUgPSAweDg0QzUsCi0gICAgICAgIFRFWFRVUkU2ID0gMHg4NEM2LAotICAgICAgICBURVhU
VVJFNyA9IDB4ODRDNywKLSAgICAgICAgVEVYVFVSRTggPSAweDg0QzgsCi0gICAgICAgIFRFWFRV
UkU5ID0gMHg4NEM5LAotICAgICAgICBURVhUVVJFMTAgPSAweDg0Q0EsCi0gICAgICAgIFRFWFRV
UkUxMSA9IDB4ODRDQiwKLSAgICAgICAgVEVYVFVSRTEyID0gMHg4NENDLAotICAgICAgICBURVhU
VVJFMTMgPSAweDg0Q0QsCi0gICAgICAgIFRFWFRVUkUxNCA9IDB4ODRDRSwKLSAgICAgICAgVEVY
VFVSRTE1ID0gMHg4NENGLAotICAgICAgICBURVhUVVJFMTYgPSAweDg0RDAsCi0gICAgICAgIFRF
WFRVUkUxNyA9IDB4ODREMSwKLSAgICAgICAgVEVYVFVSRTE4ID0gMHg4NEQyLAotICAgICAgICBU
RVhUVVJFMTkgPSAweDg0RDMsCi0gICAgICAgIFRFWFRVUkUyMCA9IDB4ODRENCwKLSAgICAgICAg
VEVYVFVSRTIxID0gMHg4NEQ1LAotICAgICAgICBURVhUVVJFMjIgPSAweDg0RDYsCi0gICAgICAg
IFRFWFRVUkUyMyA9IDB4ODRENywKLSAgICAgICAgVEVYVFVSRTI0ID0gMHg4NEQ4LAotICAgICAg
ICBURVhUVVJFMjUgPSAweDg0RDksCi0gICAgICAgIFRFWFRVUkUyNiA9IDB4ODREQSwKLSAgICAg
ICAgVEVYVFVSRTI3ID0gMHg4NERCLAotICAgICAgICBURVhUVVJFMjggPSAweDg0REMsCi0gICAg
ICAgIFRFWFRVUkUyOSA9IDB4ODRERCwKLSAgICAgICAgVEVYVFVSRTMwID0gMHg4NERFLAotICAg
ICAgICBURVhUVVJFMzEgPSAweDg0REYsCi0gICAgICAgIEFDVElWRV9URVhUVVJFID0gMHg4NEUw
LAotICAgICAgICBSRVBFQVQgPSAweDI5MDEsCi0gICAgICAgIENMQU1QX1RPX0VER0UgPSAweDgx
MkYsCi0gICAgICAgIE1JUlJPUkVEX1JFUEVBVCA9IDB4ODM3MCwKLSAgICAgICAgRkxPQVRfVkVD
MiA9IDB4OEI1MCwKLSAgICAgICAgRkxPQVRfVkVDMyA9IDB4OEI1MSwKLSAgICAgICAgRkxPQVRf
VkVDNCA9IDB4OEI1MiwKLSAgICAgICAgSU5UX1ZFQzIgPSAweDhCNTMsCi0gICAgICAgIElOVF9W
RUMzID0gMHg4QjU0LAotICAgICAgICBJTlRfVkVDNCA9IDB4OEI1NSwKLSAgICAgICAgQk9PTCA9
IDB4OEI1NiwKLSAgICAgICAgQk9PTF9WRUMyID0gMHg4QjU3LAotICAgICAgICBCT09MX1ZFQzMg
PSAweDhCNTgsCi0gICAgICAgIEJPT0xfVkVDNCA9IDB4OEI1OSwKLSAgICAgICAgRkxPQVRfTUFU
MiA9IDB4OEI1QSwKLSAgICAgICAgRkxPQVRfTUFUMyA9IDB4OEI1QiwKLSAgICAgICAgRkxPQVRf
TUFUNCA9IDB4OEI1QywKLSAgICAgICAgU0FNUExFUl8yRCA9IDB4OEI1RSwKLSAgICAgICAgU0FN
UExFUl9DVUJFID0gMHg4QjYwLAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQg
PSAweDg2MjIsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSA9IDB4ODYyMywKLSAg
ICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgPSAweDg2MjQsCi0gICAgICAgIFZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRSA9IDB4ODYyNSwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJB
WV9OT1JNQUxJWkVEID0gMHg4ODZBLAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5U
RVIgPSAweDg2NDUsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcg
PSAweDg4OUYsCi0gICAgICAgIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRSA9IDB4OEI5
QSwKLSAgICAgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgPSAweDhCOUIsCi0g
ICAgICAgIENPTVBJTEVfU1RBVFVTID0gMHg4QjgxLAotICAgICAgICBJTkZPX0xPR19MRU5HVEgg
PSAweDhCODQsCi0gICAgICAgIFNIQURFUl9TT1VSQ0VfTEVOR1RIID0gMHg4Qjg4LAotICAgICAg
ICBTSEFERVJfQ09NUElMRVIgPSAweDhERkEsCi0gICAgICAgIFNIQURFUl9CSU5BUllfRk9STUFU
UyA9IDB4OERGOCwKLSAgICAgICAgTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyA9IDB4OERGOSwK
LSAgICAgICAgTE9XX0ZMT0FUID0gMHg4REYwLAotICAgICAgICBNRURJVU1fRkxPQVQgPSAweDhE
RjEsCi0gICAgICAgIEhJR0hfRkxPQVQgPSAweDhERjIsCi0gICAgICAgIExPV19JTlQgPSAweDhE
RjMsCi0gICAgICAgIE1FRElVTV9JTlQgPSAweDhERjQsCi0gICAgICAgIEhJR0hfSU5UID0gMHg4
REY1LAotICAgICAgICBGUkFNRUJVRkZFUiA9IDB4OEQ0MCwKLSAgICAgICAgUkVOREVSQlVGRkVS
ID0gMHg4RDQxLAotICAgICAgICBSR0JBNCA9IDB4ODA1NiwKLSAgICAgICAgUkdCNV9BMSA9IDB4
ODA1NywKLSAgICAgICAgUkdCNTY1ID0gMHg4RDYyLAotICAgICAgICBERVBUSF9DT01QT05FTlQx
NiA9IDB4ODFBNSwKLSAgICAgICAgU1RFTkNJTF9JTkRFWCA9IDB4MTkwMSwKLSAgICAgICAgU1RF
TkNJTF9JTkRFWDggPSAweDhENDgsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9XSURUSCA9IDB4OEQ0
MiwKLSAgICAgICAgUkVOREVSQlVGRkVSX0hFSUdIVCA9IDB4OEQ0MywKLSAgICAgICAgUkVOREVS
QlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCA9IDB4OEQ0NCwKLSAgICAgICAgUkVOREVSQlVGRkVSX1JF
RF9TSVpFID0gMHg4RDUwLAotICAgICAgICBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSA9IDB4OEQ1
MSwKLSAgICAgICAgUkVOREVSQlVGRkVSX0JMVUVfU0laRSA9IDB4OEQ1MiwKLSAgICAgICAgUkVO
REVSQlVGRkVSX0FMUEhBX1NJWkUgPSAweDhENTMsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9ERVBU
SF9TSVpFID0gMHg4RDU0LAotICAgICAgICBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFID0gMHg4
RDU1LAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFID0gMHg4Q0Qw
LAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FID0gMHg4Q0QxLAot
ICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgPSAweDhDRDIsCi0g
ICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4
Q0QzLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMCA9IDB4OENFMCwKLSAgICAgICAgREVQVEhf
QVRUQUNITUVOVCA9IDB4OEQwMCwKLSAgICAgICAgU1RFTkNJTF9BVFRBQ0hNRU5UID0gMHg4RDIw
LAotICAgICAgICBOT05FID0gMCwKLSAgICAgICAgRlJBTUVCVUZGRVJfQ09NUExFVEUgPSAweDhD
RDUsCi0gICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCA9IDB4OENENiwK
LSAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhD
RDcsCi0gICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyA9IDB4OENEOSwK
LSAgICAgICAgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgPSAweDhDREQsCi0gICAgICAgIEZSQU1F
QlVGRkVSX0JJTkRJTkcgPSAweDhDQTYsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9CSU5ESU5HID0g
MHg4Q0E3LAotICAgICAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgPSAweDg0RTgsCi0gICAgICAg
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OID0gMHgwNTA2LAotCi0gICAgICAgIC8vIFdl
YkdMLXNwZWNpZmljIGVudW1zCi0gICAgICAgIFVOUEFDS19GTElQX1lfV0VCR0wgPSAweDkyNDAs
Ci0gICAgICAgIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCA9IDB4OTI0MSwKLSAgICAg
ICAgQ09OVEVYVF9MT1NUX1dFQkdMID0gMHg5MjQyLAotICAgICAgICBVTlBBQ0tfQ09MT1JTUEFD
RV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzLAotICAgICAgICBCUk9XU0VSX0RFRkFVTFRfV0VC
R0wgPSAweDkyNDQsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSA9
IDB4ODhGRSwKLSAgICAgICAgCi0gICAgICAgIC8vIFdlYkdMMiBjb25zdGFudHMKLSAgICAgICAg
UkVBRF9CVUZGRVIgPSAweDBDMDIsCi0gICAgICAgIFVOUEFDS19ST1dfTEVOR1RIID0gMHgwQ0Yy
LAotICAgICAgICBVTlBBQ0tfU0tJUF9ST1dTID0gMHgwQ0YzLAotICAgICAgICBVTlBBQ0tfU0tJ
UF9QSVhFTFMgPSAweDBDRjQsCi0gICAgICAgIFBBQ0tfUk9XX0xFTkdUSCA9IDB4MEQwMiwKLSAg
ICAgICAgUEFDS19TS0lQX1JPV1MgPSAweDBEMDMsCi0gICAgICAgIFBBQ0tfU0tJUF9QSVhFTFMg
PSAweDBEMDQsCi0gICAgICAgIENPTE9SID0gMHgxODAwLAotICAgICAgICBERVBUSCA9IDB4MTgw
MSwKLSAgICAgICAgU1RFTkNJTCA9IDB4MTgwMiwKLSAgICAgICAgUkVEID0gMHgxOTAzLAotICAg
ICAgICBSR0I4ID0gMHg4MDUxLAotICAgICAgICBSR0JBOCA9IDB4ODA1OCwKLSAgICAgICAgUkdC
MTBfQTIgPSAweDgwNTksCi0gICAgICAgIFRFWFRVUkVfQklORElOR18zRCA9IDB4ODA2QSwKLSAg
ICAgICAgVU5QQUNLX1NLSVBfSU1BR0VTID0gMHg4MDZELAotICAgICAgICBVTlBBQ0tfSU1BR0Vf
SEVJR0hUID0gMHg4MDZFLAotICAgICAgICBURVhUVVJFXzNEID0gMHg4MDZGLAotICAgICAgICBU
RVhUVVJFX1dSQVBfUiA9IDB4ODA3MiwKLSAgICAgICAgTUFYXzNEX1RFWFRVUkVfU0laRSA9IDB4
ODA3MywKLSAgICAgICAgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWID0gMHg4MzY4LAotICAg
ICAgICBNQVhfRUxFTUVOVFNfVkVSVElDRVMgPSAweDgwRTgsCi0gICAgICAgIE1BWF9FTEVNRU5U
U19JTkRJQ0VTID0gMHg4MEU5LAotICAgICAgICBURVhUVVJFX01JTl9MT0QgPSAweDgxM0EsCi0g
ICAgICAgIFRFWFRVUkVfTUFYX0xPRCA9IDB4ODEzQiwKLSAgICAgICAgVEVYVFVSRV9CQVNFX0xF
VkVMID0gMHg4MTNDLAotICAgICAgICBURVhUVVJFX01BWF9MRVZFTCA9IDB4ODEzRCwKLSAgICAg
ICAgTUlOID0gMHg4MDA3LAotICAgICAgICBNQVggPSAweDgwMDgsCi0gICAgICAgIERFUFRIX0NP
TVBPTkVOVDI0ID0gMHg4MUE2LAotICAgICAgICBNQVhfVEVYVFVSRV9MT0RfQklBUyA9IDB4ODRG
RCwKLSAgICAgICAgVEVYVFVSRV9DT01QQVJFX01PREUgPSAweDg4NEMsCi0gICAgICAgIFRFWFRV
UkVfQ09NUEFSRV9GVU5DID0gMHg4ODRELAotICAgICAgICBDVVJSRU5UX1FVRVJZID0gMHg4ODY1
LAotICAgICAgICBRVUVSWV9SRVNVTFQgPSAweDg4NjYsCi0gICAgICAgIFFVRVJZX1JFU1VMVF9B
VkFJTEFCTEUgPSAweDg4NjcsCi0gICAgICAgIFNUUkVBTV9SRUFEID0gMHg4OEUxLAotICAgICAg
ICBTVFJFQU1fQ09QWSA9IDB4ODhFMiwKLSAgICAgICAgU1RBVElDX1JFQUQgPSAweDg4RTUsCi0g
ICAgICAgIFNUQVRJQ19DT1BZID0gMHg4OEU2LAotICAgICAgICBEWU5BTUlDX1JFQUQgPSAweDg4
RTksCi0gICAgICAgIERZTkFNSUNfQ09QWSA9IDB4ODhFQSwKLSAgICAgICAgTUFYX0RSQVdfQlVG
RkVSUyA9IDB4ODgyNCwKLSAgICAgICAgRFJBV19CVUZGRVIwID0gMHg4ODI1LAotICAgICAgICBE
UkFXX0JVRkZFUjEgPSAweDg4MjYsCi0gICAgICAgIERSQVdfQlVGRkVSMiA9IDB4ODgyNywKLSAg
ICAgICAgRFJBV19CVUZGRVIzID0gMHg4ODI4LAotICAgICAgICBEUkFXX0JVRkZFUjQgPSAweDg4
MjksCi0gICAgICAgIERSQVdfQlVGRkVSNSA9IDB4ODgyQSwKLSAgICAgICAgRFJBV19CVUZGRVI2
ID0gMHg4ODJCLAotICAgICAgICBEUkFXX0JVRkZFUjcgPSAweDg4MkMsCi0gICAgICAgIERSQVdf
QlVGRkVSOCA9IDB4ODgyRCwKLSAgICAgICAgRFJBV19CVUZGRVI5ID0gMHg4ODJFLAotICAgICAg
ICBEUkFXX0JVRkZFUjEwID0gMHg4ODJGLAotICAgICAgICBEUkFXX0JVRkZFUjExID0gMHg4ODMw
LAotICAgICAgICBEUkFXX0JVRkZFUjEyID0gMHg4ODMxLAotICAgICAgICBEUkFXX0JVRkZFUjEz
ID0gMHg4ODMyLAotICAgICAgICBEUkFXX0JVRkZFUjE0ID0gMHg4ODMzLAotICAgICAgICBEUkFX
X0JVRkZFUjE1ID0gMHg4ODM0LAotICAgICAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05F
TlRTID0gMHg4QjQ5LAotICAgICAgICBNQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4
OEI0QSwKLSAgICAgICAgU0FNUExFUl8zRCA9IDB4OEI1RiwKLSAgICAgICAgU0FNUExFUl8yRF9T
SEFET1cgPSAweDhCNjIsCi0gICAgICAgIEZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQg
PSAweDhCOEIsCi0gICAgICAgIFBJWEVMX1BBQ0tfQlVGRkVSID0gMHg4OEVCLAotICAgICAgICBQ
SVhFTF9VTlBBQ0tfQlVGRkVSID0gMHg4OEVDLAotICAgICAgICBQSVhFTF9QQUNLX0JVRkZFUl9C
SU5ESU5HID0gMHg4OEVELAotICAgICAgICBQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkcgPSAw
eDg4RUYsCi0gICAgICAgIEZMT0FUX01BVDJ4MyA9IDB4OEI2NSwKLSAgICAgICAgRkxPQVRfTUFU
Mng0ID0gMHg4QjY2LAotICAgICAgICBGTE9BVF9NQVQzeDIgPSAweDhCNjcsCi0gICAgICAgIEZM
T0FUX01BVDN4NCA9IDB4OEI2OCwKLSAgICAgICAgRkxPQVRfTUFUNHgyID0gMHg4QjY5LAotICAg
ICAgICBGTE9BVF9NQVQ0eDMgPSAweDhCNkEsCi0gICAgICAgIFNSR0IgPSAweDhDNDAsCi0gICAg
ICAgIFNSR0I4ID0gMHg4QzQxLAotICAgICAgICBTUkdCX0FMUEhBID0gMHg4QzQyLAotICAgICAg
ICBTUkdCOF9BTFBIQTggPSAweDhDNDMsCi0gICAgICAgIENPTVBBUkVfUkVGX1RPX1RFWFRVUkUg
PSAweDg4NEUsCi0gICAgICAgIFJHQkEzMkYgPSAweDg4MTQsCi0gICAgICAgIFJHQjMyRiA9IDB4
ODgxNSwKLSAgICAgICAgUkdCQTE2RiA9IDB4ODgxQSwKLSAgICAgICAgUkdCMTZGID0gMHg4ODFC
LAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVIgPSAweDg4RkQsCi0gICAgICAg
IE1BWF9BUlJBWV9URVhUVVJFX0xBWUVSUyA9IDB4ODhGRiwKLSAgICAgICAgTUlOX1BST0dSQU1f
VEVYRUxfT0ZGU0VUID0gMHg4OTA0LAotICAgICAgICBNQVhfUFJPR1JBTV9URVhFTF9PRkZTRVQg
PSAweDg5MDUsCi0gICAgICAgIE1BWF9WQVJZSU5HX0NPTVBPTkVOVFMgPSAweDhCNEIsCi0gICAg
ICAgIFRFWFRVUkVfMkRfQVJSQVkgPSAweDhDMUEsCi0gICAgICAgIFRFWFRVUkVfQklORElOR18y
RF9BUlJBWSA9IDB4OEMxRCwKLSAgICAgICAgUjExRl9HMTFGX0IxMEYgPSAweDhDM0EsCi0gICAg
ICAgIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgPSAweDhDM0IsCi0gICAgICAgIFJHQjlf
RTUgPSAweDhDM0QsCi0gICAgICAgIFVOU0lHTkVEX0lOVF81XzlfOV85X1JFViA9IDB4OEMzRSwK
LSAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9NT0RFID0gMHg4QzdGLAotICAgICAg
ICBNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFMgPSAweDhDODAsCi0g
ICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUyA9IDB4OEM4MywKLSAgICAgICAgVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVCA9IDB4OEM4NCwKLSAgICAgICAgVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUl9TSVpFID0gMHg4Qzg1LAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJB
Q0tfUFJJTUlUSVZFU19XUklUVEVOID0gMHg4Qzg4LAotICAgICAgICBSQVNURVJJWkVSX0RJU0NB
UkQgPSAweDhDODksCi0gICAgICAgIE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURf
Q09NUE9ORU5UUyA9IDB4OEM4QSwKLSAgICAgICAgTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBB
UkFURV9BVFRSSUJTID0gMHg4QzhCLAotICAgICAgICBJTlRFUkxFQVZFRF9BVFRSSUJTID0gMHg4
QzhDLAotICAgICAgICBTRVBBUkFURV9BVFRSSUJTID0gMHg4QzhELAotICAgICAgICBUUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSID0gMHg4QzhFLAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX0JJTkRJTkcgPSAweDhDOEYsCi0gICAgICAgIFJHQkEzMlVJID0gMHg4RDcwLAotICAg
ICAgICBSR0IzMlVJID0gMHg4RDcxLAotICAgICAgICBSR0JBMTZVSSA9IDB4OEQ3NiwKLSAgICAg
ICAgUkdCMTZVSSA9IDB4OEQ3NywKLSAgICAgICAgUkdCQThVSSA9IDB4OEQ3QywKLSAgICAgICAg
UkdCOFVJID0gMHg4RDdELAotICAgICAgICBSR0JBMzJJID0gMHg4RDgyLAotICAgICAgICBSR0Iz
MkkgPSAweDhEODMsCi0gICAgICAgIFJHQkExNkkgPSAweDhEODgsCi0gICAgICAgIFJHQjE2SSA9
IDB4OEQ4OSwKLSAgICAgICAgUkdCQThJID0gMHg4RDhFLAotICAgICAgICBSR0I4SSA9IDB4OEQ4
RiwKLSAgICAgICAgUkVEX0lOVEVHRVIgPSAweDhEOTQsCi0gICAgICAgIFJHQl9JTlRFR0VSID0g
MHg4RDk4LAotICAgICAgICBSR0JBX0lOVEVHRVIgPSAweDhEOTksCi0gICAgICAgIFNBTVBMRVJf
MkRfQVJSQVkgPSAweDhEQzEsCi0gICAgICAgIFNBTVBMRVJfMkRfQVJSQVlfU0hBRE9XID0gMHg4
REM0LAotICAgICAgICBTQU1QTEVSX0NVQkVfU0hBRE9XID0gMHg4REM1LAotICAgICAgICBVTlNJ
R05FRF9JTlRfVkVDMiA9IDB4OERDNiwKLSAgICAgICAgVU5TSUdORURfSU5UX1ZFQzMgPSAweDhE
QzcsCi0gICAgICAgIFVOU0lHTkVEX0lOVF9WRUM0ID0gMHg4REM4LAotICAgICAgICBJTlRfU0FN
UExFUl8yRCA9IDB4OERDQSwKLSAgICAgICAgSU5UX1NBTVBMRVJfM0QgPSAweDhEQ0IsCi0gICAg
ICAgIElOVF9TQU1QTEVSX0NVQkUgPSAweDhEQ0MsCi0gICAgICAgIElOVF9TQU1QTEVSXzJEX0FS
UkFZID0gMHg4RENGLAotICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExFUl8yRCA9IDB4OEREMiwK
LSAgICAgICAgVU5TSUdORURfSU5UX1NBTVBMRVJfM0QgPSAweDhERDMsCi0gICAgICAgIFVOU0lH
TkVEX0lOVF9TQU1QTEVSX0NVQkUgPSAweDhERDQsCi0gICAgICAgIFVOU0lHTkVEX0lOVF9TQU1Q
TEVSXzJEX0FSUkFZID0gMHg4REQ3LAotICAgICAgICBERVBUSF9DT01QT05FTlQzMkYgPSAweDhD
QUMsCi0gICAgICAgIERFUFRIMzJGX1NURU5DSUw4ID0gMHg4Q0FELAotICAgICAgICBGTE9BVF8z
Ml9VTlNJR05FRF9JTlRfMjRfOF9SRVYgPSAweDhEQUQsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQ09MT1JfRU5DT0RJTkcgPSAweDgyMTAsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQ09NUE9ORU5UX1RZUEUgPSAweDgyMTEsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfUkVEX1NJWkUgPSAweDgyMTIsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfR1JFRU5fU0laRSA9IDB4ODIxMywKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9C
TFVFX1NJWkUgPSAweDgyMTQsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFf
U0laRSA9IDB4ODIxNSwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpF
ID0gMHg4MjE2LAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRSA9
IDB4ODIxNywKLSAgICAgICAgRlJBTUVCVUZGRVJfREVGQVVMVCA9IDB4ODIxOCwKLSAgICAgICAg
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UID0gMHg4MjFBLAotICAgICAgICBERVBUSF9TVEVOQ0lM
ID0gMHg4NEY5LAotICAgICAgICBVTlNJR05FRF9JTlRfMjRfOCA9IDB4ODRGQSwKLSAgICAgICAg
REVQVEgyNF9TVEVOQ0lMOCA9IDB4ODhGMCwKLSAgICAgICAgVU5TSUdORURfTk9STUFMSVpFRCA9
IDB4OEMxNywKLSAgICAgICAgRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0E2LCAvKiBT
YW1lIGFzIEZSQU1FQlVGRkVSX0JJTkRJTkcgKi8KLSAgICAgICAgUkVBRF9GUkFNRUJVRkZFUiA9
IDB4OENBOCwKLSAgICAgICAgRFJBV19GUkFNRUJVRkZFUiA9IDB4OENBOSwKLSAgICAgICAgUkVB
RF9GUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0FBLAotICAgICAgICBSRU5ERVJCVUZGRVJfU0FN
UExFUyA9IDB4OENBQiwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xB
WUVSID0gMHg4Q0Q0LAotICAgICAgICBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPSAweDhDREYsCi0g
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQxID0gMHg4Q0UxLAotICAgICAgICBDT0xPUl9BVFRBQ0hN
RU5UMiA9IDB4OENFMiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDMgPSAweDhDRTMsCi0gICAg
ICAgIENPTE9SX0FUVEFDSE1FTlQ0ID0gMHg4Q0U0LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5U
NSA9IDB4OENFNSwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDYgPSAweDhDRTYsCi0gICAgICAg
IENPTE9SX0FUVEFDSE1FTlQ3ID0gMHg4Q0U3LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UOCA9
IDB4OENFOCwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDkgPSAweDhDRTksCi0gICAgICAgIENP
TE9SX0FUVEFDSE1FTlQxMCA9IDB4OENFQSwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDExID0g
MHg4Q0VCLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTIgPSAweDhDRUMsCi0gICAgICAgIENP
TE9SX0FUVEFDSE1FTlQxMyA9IDB4OENFRCwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDE0ID0g
MHg4Q0VFLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTUgPSAweDhDRUYsCi0gICAgICAgIEZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEUgPSAweDhENTYsCi0gICAgICAgIE1BWF9T
QU1QTEVTID0gMHg4RDU3LAotICAgICAgICBIQUxGX0ZMT0FUID0gMHgxNDBCLAotICAgICAgICBS
RyA9IDB4ODIyNywKLSAgICAgICAgUkdfSU5URUdFUiA9IDB4ODIyOCwKLSAgICAgICAgUjggPSAw
eDgyMjksCi0gICAgICAgIFJHOCA9IDB4ODIyQiwKLSAgICAgICAgUjE2RiA9IDB4ODIyRCwKLSAg
ICAgICAgUjMyRiA9IDB4ODIyRSwKLSAgICAgICAgUkcxNkYgPSAweDgyMkYsCi0gICAgICAgIFJH
MzJGID0gMHg4MjMwLAotICAgICAgICBSOEkgPSAweDgyMzEsCi0gICAgICAgIFI4VUkgPSAweDgy
MzIsCi0gICAgICAgIFIxNkkgPSAweDgyMzMsCi0gICAgICAgIFIxNlVJID0gMHg4MjM0LAotICAg
ICAgICBSMzJJID0gMHg4MjM1LAotICAgICAgICBSMzJVSSA9IDB4ODIzNiwKLSAgICAgICAgUkc4
SSA9IDB4ODIzNywKLSAgICAgICAgUkc4VUkgPSAweDgyMzgsCi0gICAgICAgIFJHMTZJID0gMHg4
MjM5LAotICAgICAgICBSRzE2VUkgPSAweDgyM0EsCi0gICAgICAgIFJHMzJJID0gMHg4MjNCLAot
ICAgICAgICBSRzMyVUkgPSAweDgyM0MsCi0gICAgICAgIFZFUlRFWF9BUlJBWV9CSU5ESU5HID0g
MHg4NUI1LAotICAgICAgICBSOF9TTk9STSA9IDB4OEY5NCwKLSAgICAgICAgUkc4X1NOT1JNID0g
MHg4Rjk1LAotICAgICAgICBSR0I4X1NOT1JNID0gMHg4Rjk2LAotICAgICAgICBSR0JBOF9TTk9S
TSA9IDB4OEY5NywKLSAgICAgICAgU0lHTkVEX05PUk1BTElaRUQgPSAweDhGOUMsCi0gICAgICAg
IENPUFlfUkVBRF9CVUZGRVIgPSAweDhGMzYsCi0gICAgICAgIENPUFlfV1JJVEVfQlVGRkVSID0g
MHg4RjM3LAotICAgICAgICBDT1BZX1JFQURfQlVGRkVSX0JJTkRJTkcgPSAweDhGMzYsIC8qIFNh
bWUgYXMgQ09QWV9SRUFEX0JVRkZFUiAqLwotICAgICAgICBDT1BZX1dSSVRFX0JVRkZFUl9CSU5E
SU5HID0gMHg4RjM3LCAvKiBTYW1lIGFzIENPUFlfV1JJVEVfQlVGRkVSICovCi0gICAgICAgIFVO
SUZPUk1fQlVGRkVSID0gMHg4QTExLAotICAgICAgICBVTklGT1JNX0JVRkZFUl9CSU5ESU5HID0g
MHg4QTI4LAotICAgICAgICBVTklGT1JNX0JVRkZFUl9TVEFSVCA9IDB4OEEyOSwKLSAgICAgICAg
VU5JRk9STV9CVUZGRVJfU0laRSA9IDB4OEEyQSwKLSAgICAgICAgTUFYX1ZFUlRFWF9VTklGT1JN
X0JMT0NLUyA9IDB4OEEyQiwKLSAgICAgICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTID0g
MHg4QTJELAotICAgICAgICBNQVhfQ09NQklORURfVU5JRk9STV9CTE9DS1MgPSAweDhBMkUsCi0g
ICAgICAgIE1BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUyA9IDB4OEEyRiwKLSAgICAgICAgTUFY
X1VOSUZPUk1fQkxPQ0tfU0laRSA9IDB4OEEzMCwKLSAgICAgICAgTUFYX0NPTUJJTkVEX1ZFUlRF
WF9VTklGT1JNX0NPTVBPTkVOVFMgPSAweDhBMzEsCi0gICAgICAgIE1BWF9DT01CSU5FRF9GUkFH
TUVOVF9VTklGT1JNX0NPTVBPTkVOVFMgPSAweDhBMzMsCi0gICAgICAgIFVOSUZPUk1fQlVGRkVS
X09GRlNFVF9BTElHTk1FTlQgPSAweDhBMzQsCi0gICAgICAgIEFDVElWRV9VTklGT1JNX0JMT0NL
UyA9IDB4OEEzNiwKLSAgICAgICAgVU5JRk9STV9UWVBFID0gMHg4QTM3LAotICAgICAgICBVTklG
T1JNX1NJWkUgPSAweDhBMzgsCi0gICAgICAgIFVOSUZPUk1fQkxPQ0tfSU5ERVggPSAweDhBM0Es
Ci0gICAgICAgIFVOSUZPUk1fT0ZGU0VUID0gMHg4QTNCLAotICAgICAgICBVTklGT1JNX0FSUkFZ
X1NUUklERSA9IDB4OEEzQywKLSAgICAgICAgVU5JRk9STV9NQVRSSVhfU1RSSURFID0gMHg4QTNE
LAotICAgICAgICBVTklGT1JNX0lTX1JPV19NQUpPUiA9IDB4OEEzRSwKLSAgICAgICAgVU5JRk9S
TV9CTE9DS19CSU5ESU5HID0gMHg4QTNGLAotICAgICAgICBVTklGT1JNX0JMT0NLX0RBVEFfU0la
RSA9IDB4OEE0MCwKLSAgICAgICAgVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STVMgPSAweDhB
NDIsCi0gICAgICAgIFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUyA9IDB4OEE0
MywKLSAgICAgICAgVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVIgPSAw
eDhBNDQsCi0gICAgICAgIFVOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFE
RVIgPSAweDhBNDYsCi0gICAgICAgIElOVkFMSURfSU5ERVggPSAweEZGRkZGRkZGLAotICAgICAg
ICBNQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTID0gMHg5MTIyLAotICAgICAgICBNQVhfRlJB
R01FTlRfSU5QVVRfQ09NUE9ORU5UUyA9IDB4OTEyNSwKLSAgICAgICAgTUFYX1NFUlZFUl9XQUlU
X1RJTUVPVVQgPSAweDkxMTEsCi0gICAgICAgIE9CSkVDVF9UWVBFID0gMHg5MTEyLAotICAgICAg
ICBTWU5DX0NPTkRJVElPTiA9IDB4OTExMywKLSAgICAgICAgU1lOQ19TVEFUVVMgPSAweDkxMTQs
Ci0gICAgICAgIFNZTkNfRkxBR1MgPSAweDkxMTUsCi0gICAgICAgIFNZTkNfRkVOQ0UgPSAweDkx
MTYsCi0gICAgICAgIFNZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFID0gMHg5MTE3LAotICAgICAg
ICBVTlNJR05BTEVEID0gMHg5MTE4LAotICAgICAgICBTSUdOQUxFRCA9IDB4OTExOSwKLSAgICAg
ICAgQUxSRUFEWV9TSUdOQUxFRCA9IDB4OTExQSwKLSAgICAgICAgVElNRU9VVF9FWFBJUkVEID0g
MHg5MTFCLAotICAgICAgICBDT05ESVRJT05fU0FUSVNGSUVEID0gMHg5MTFDLAotI2lmIFBMQVRG
T1JNKFdJTikKLSAgICAgICAgV0FJVF9GQUlMRURfV0lOID0gMHg5MTFELAotI2Vsc2UKLSAgICAg
ICAgV0FJVF9GQUlMRUQgPSAweDkxMUQsCi0jZW5kaWYKLSAgICAgICAgU1lOQ19GTFVTSF9DT01N
QU5EU19CSVQgPSAweDAwMDAwMDAxLAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX0RJVklT
T1IgPSAweDg4RkUsCi0gICAgICAgIEFOWV9TQU1QTEVTX1BBU1NFRCA9IDB4OEMyRiwKLSAgICAg
ICAgQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSA9IDB4OEQ2QSwKLSAgICAgICAgU0FN
UExFUl9CSU5ESU5HID0gMHg4OTE5LAotICAgICAgICBSR0IxMF9BMlVJID0gMHg5MDZGLAotICAg
ICAgICBURVhUVVJFX1NXSVpaTEVfUiA9IDB4OEU0MiwKLSAgICAgICAgVEVYVFVSRV9TV0laWkxF
X0cgPSAweDhFNDMsCi0gICAgICAgIFRFWFRVUkVfU1dJWlpMRV9CID0gMHg4RTQ0LAotICAgICAg
ICBURVhUVVJFX1NXSVpaTEVfQSA9IDB4OEU0NSwKLSAgICAgICAgR1JFRU4gPSAweDE5MDQsCi0g
ICAgICAgIEJMVUUgPSAweDE5MDUsCi0gICAgICAgIElOVF8yXzEwXzEwXzEwX1JFViA9IDB4OEQ5
RiwKLSAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLID0gMHg4RTIyLAotICAgICAgICBUUkFOU0ZP
Uk1fRkVFREJBQ0tfUEFVU0VEID0gMHg4RTIzLAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tf
QUNUSVZFID0gMHg4RTI0LAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQklORElORyA9IDB4
OEUyNSwKLSAgICAgICAgQ09NUFJFU1NFRF9SMTFfRUFDID0gMHg5MjcwLAotICAgICAgICBDT01Q
UkVTU0VEX1NJR05FRF9SMTFfRUFDID0gMHg5MjcxLAotICAgICAgICBDT01QUkVTU0VEX1JHMTFf
RUFDID0gMHg5MjcyLAotICAgICAgICBDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyA9IDB4OTI3
MywKLSAgICAgICAgQ09NUFJFU1NFRF9SR0I4X0VUQzIgPSAweDkyNzQsCi0gICAgICAgIENPTVBS
RVNTRURfU1JHQjhfRVRDMiA9IDB4OTI3NSwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0I4X1BVTkNI
VEhST1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3NiwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgPSAweDkyNzcsCi0gICAgICAgIENPTVBSRVNTRURfUkdC
QThfRVRDMl9FQUMgPSAweDkyNzgsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VU
QzJfRUFDID0gMHg5Mjc5LAotICAgICAgICBURVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQgPSAweDkx
MkYsCi0gICAgICAgIE1BWF9FTEVNRU5UX0lOREVYID0gMHg4RDZCLAotICAgICAgICBOVU1fU0FN
UExFX0NPVU5UUyA9IDB4OTM4MCwKLSAgICAgICAgVEVYVFVSRV9JTU1VVEFCTEVfTEVWRUxTID0g
MHg4MkRGLAotICAgICAgICBQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCA9IDB4OEQ2OSwK
LSAgICAgICAgUFJJTUlUSVZFX1JFU1RBUlQgPSAweDhGOUQsCi0KLSAgICAgICAgLy8gT3BlbkdM
IEVTIDMgY29uc3RhbnRzLgotICAgICAgICBNQVBfUkVBRF9CSVQgPSAweDAwMDEsCi0KLSAgICAg
ICAgLy8gTmVjZXNzYXJ5IGRlc2t0b3AgT3BlbkdMIGNvbnN0YW50cy4KLSAgICAgICAgVEVYVFVS
RV9SRUNUQU5HTEVfQVJCID0gMHg4NEY1Ci0gICAgfTsKLQotICAgIGVudW0gY2xhc3MgRGF0YUZv
cm1hdCA6IHVpbnQ4X3QgewotICAgICAgICBSR0JBOCA9IDAsCi0gICAgICAgIFJHQkExNkxpdHRs
ZSwKLSAgICAgICAgUkdCQTE2QmlnLAotICAgICAgICBSR0JBMTZGLAotICAgICAgICBSR0JBMzJG
LAotICAgICAgICBSR0I4LAotICAgICAgICBSR0IxNkxpdHRsZSwKLSAgICAgICAgUkdCMTZCaWcs
Ci0gICAgICAgIFJHQjE2RiwKLSAgICAgICAgUkdCMzJGLAotICAgICAgICBCR1I4LAotICAgICAg
ICBCR1JBOCwKLSAgICAgICAgQkdSQTE2TGl0dGxlLAotICAgICAgICBCR1JBMTZCaWcsCi0gICAg
ICAgIEFSR0I4LAotICAgICAgICBBUkdCMTZMaXR0bGUsCi0gICAgICAgIEFSR0IxNkJpZywKLSAg
ICAgICAgQUJHUjgsCi0gICAgICAgIFJHQkE1NTUxLAotICAgICAgICBSR0JBNDQ0NCwKLSAgICAg
ICAgUkdCNTY1LAotICAgICAgICBSOCwKLSAgICAgICAgUjE2TGl0dGxlLAotICAgICAgICBSMTZC
aWcsCi0gICAgICAgIFIxNkYsCi0gICAgICAgIFIzMkYsCi0gICAgICAgIFJBOCwKLSAgICAgICAg
UkExNkxpdHRsZSwKLSAgICAgICAgUkExNkJpZywKLSAgICAgICAgUkExNkYsCi0gICAgICAgIFJB
MzJGLAotICAgICAgICBBUjgsCi0gICAgICAgIEFSMTZMaXR0bGUsCi0gICAgICAgIEFSMTZCaWcs
Ci0gICAgICAgIEE4LAotICAgICAgICBBMTZMaXR0bGUsCi0gICAgICAgIEExNkJpZywKLSAgICAg
ICAgQTE2RiwKLSAgICAgICAgQTMyRiwKLSAgICAgICAgTnVtRm9ybWF0cwotICAgIH07Ci0KLSAg
ICBlbnVtIGNsYXNzIERlc3RpbmF0aW9uIDogdWludDhfdCB7Ci0gICAgICAgIE9mZnNjcmVlbiwK
LSAgICAgICAgRGlyZWN0bHlUb0hvc3RXaW5kb3csCi0gICAgfTsKLQotICAgIGVudW0gY2xhc3Mg
Q2hhbm5lbEJpdHMgOiB1aW50OF90IHsKLSAgICAgICAgUmVkID0gMSwKLSAgICAgICAgR3JlZW4g
PSAyLAotICAgICAgICBCbHVlID0gNCwKLSAgICAgICAgQWxwaGEgPSA4LAotICAgICAgICBEZXB0
aCA9IDE2LAotICAgICAgICBTdGVuY2lsID0gMzIsCi0gICAgICAgIFJHQiA9IFJlZCB8IEdyZWVu
IHwgQmx1ZSwKLSAgICAgICAgUkdCQSA9IFJHQiB8IEFscGhhLAotICAgICAgICBEZXB0aFN0ZW5j
aWwgPSBEZXB0aCB8IFN0ZW5jaWwsCi0gICAgfTsKLQotICAgIC8vIFBvc3NpYmxlIGFscGhhIG9w
ZXJhdGlvbnMgdGhhdCBtYXkgbmVlZCB0byBvY2N1ciBkdXJpbmcKLSAgICAvLyBwaXhlbCBwYWNr
aW5nLiBGSVhNRToga0FscGhhRG9Vbm11bHRpcGx5IGlzIGxvc3N5IGFuZCBtdXN0Ci0gICAgLy8g
YmUgcmVtb3ZlZC4KLSAgICBlbnVtIEFscGhhT3AgOiB1aW50OF90IHsKLSAgICAgICAgRG9Ob3Ro
aW5nLAotICAgICAgICBEb1ByZW11bHRpcGx5LAotICAgICAgICBEb1VubXVsdGlwbHksCi0gICAg
fTsKLQotICAgIGVudW0gY2xhc3MgRE9NU291cmNlIDogdWludDhfdCB7Ci0gICAgICAgIEltYWdl
LAotICAgICAgICBDYW52YXMsCi0gICAgICAgIFZpZGVvLAotICAgICAgICBOb25lLAotICAgIH07
Ci0KLSNpZiBVU0UoQU5HTEUpCi0gICAgZW51bSB7Ci0gICAgICAgIC8vIFRoZXNlIGNvbnN0YW50
cyBhcmUgcmVkZWZpbmVkIGhlcmUgZnJvbSBBTkdMRSdzIE9wZW5HTCBFUyBoZWFkZXJzIHRvCi0g
ICAgICAgIC8vIHByb3ZpZGUgYSBzaW5nbGUgcGxhY2Ugd2hlcmUgbXVsdGlwbGUgcG9ydGlvbnMg
b2YgcGxhdGZvcm0gY29kZSBjYW4KLSAgICAgICAgLy8gcmVmZXJlbmNlIHRoZW0uCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgICAgICBJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0ID0gVEVYVFVSRV9SRUNU
QU5HTEVfQVJCLCAvLyBhbHNvIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFCi0gICAgICAgIEVH
TElPU3VyZmFjZVRleHR1cmVUYXJnZXQgPSAweDM0NUIsIC8vIEVHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BTkdMRQotI2Vsc2UKLSAgICAgICAgSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9IFRFWFRVUkVf
MkQsCi0gICAgICAgIEVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQgPSAweDMwNUYsIC8vIEVHTF9U
RVhUVVJFXzJECi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotICAgIH07Ci0jZW5kaWYgLy8gVVNF
KEFOR0xFKQotCi0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2Jq
ZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRp
YyBib29sIGhhc0FscGhhKERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBODoKLSAgICAgICAgY2FzZSBE
YXRhRm9ybWF0OjpBMTZGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkEzMkY6Ci0gICAgICAg
IGNhc2UgRGF0YUZvcm1hdDo6UkE4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSODoKLSAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTE2RjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpS
QTMyRjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBODoKLSAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0OjpCR1JBODoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBUkdCODoKLSAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0OjpBQkdSODoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBMTZG
OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkEzMkY6Ci0gICAgICAgIGNhc2UgRGF0YUZv
cm1hdDo6UkdCQTQ0NDQ6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTU1NTE6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGJv
b2wgaGFzQ29sb3IoRGF0YUZvcm1hdCBmb3JtYXQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGZv
cm1hdCkgewotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE4OgotICAgICAgICBjYXNlIERh
dGFGb3JtYXQ6OlJHQkExNkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTMyRjoKLSAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0I4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJH
QjE2RjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0IzMkY6Ci0gICAgICAgIGNhc2UgRGF0
YUZvcm1hdDo6QkdSODoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpCR1JBODoKLSAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0OjpBUkdCODoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBQkdSODoK
LSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBNTU1MToKLSAgICAgICAgY2FzZSBEYXRhRm9y
bWF0OjpSR0JBNDQ0NDoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0I1NjU6Ci0gICAgICAg
IGNhc2UgRGF0YUZvcm1hdDo6Ujg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UjE2RjoKLSAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSMzJGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJB
ODoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTE2RjoKLSAgICAgICAgY2FzZSBEYXRhRm9y
bWF0OjpSQTMyRjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBUjg6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZSBmb3JtYXQgaXMgb25lIG9m
IHRoZSBmb3JtYXRzIGZyb20gdGhlIEltYWdlRGF0YSBvciBET00gZWxlbWVudHMuCi0gICAgLy8g
VGhlIGZvcm1hdHMgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIFJHQkE4LgotICAgIC8vIFRoZSBm
b3JtYXRzIGZyb20gRE9NIGVsZW1lbnRzIHZhcnkgd2l0aCBHcmFwaGljcyBwb3J0cy4gSXQgY2Fu
IG9ubHkgYmUgUkdCQTggb3IgQkdSQTggZm9yIG5vbi1DRyBwb3J0IHdoaWxlIGEgbGl0dGxlIG1v
cmUgZm9yIENHIHBvcnQuCi0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBzcmNGb3JtYXRD
b21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEoRGF0YUZvcm1hdCBTcmNGb3JtYXQpCi0gICAg
ewotI2lmIFVTRShDRykKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1cm4gU3JjRm9ybWF0
ID09IERhdGFGb3JtYXQ6OlJHQkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBUkdCOCB8
fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCOAotICAgICAgICB8fCBTcmNGb3JtYXQgPT0g
RGF0YUZvcm1hdDo6UkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBUjggfHwgU3JjRm9y
bWF0ID09IERhdGFGb3JtYXQ6OlI4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBODsKLSNl
bHNlCi0gICAgLy8gVGhhdCBMSVRUTEVfRU5ESUFOIGNhc2UgaGFzIG1vcmUgcG9zc2libGUgZm9y
bWF0cyB0aGFuIEJJR19FTkRJQU4gY2FzZSBpcyBiZWNhdXNlIHNvbWUgZGVjb2RlZCBpbWFnZSBk
YXRhIGlzIGFjdHVhbGx5IGJpZyBlbmRpYW4KLSAgICAvLyBldmVuIG9uIGxpdHRsZSBlbmRpYW4g
YXJjaGl0ZWN0dXJlcy4KLSAgICByZXR1cm4gU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkJHUkE4
IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBQkdSOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdDo6QkdSOAotICAgICAgICB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCQTggfHwg
U3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFSR0I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0
OjpSR0I4Ci0gICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSOCB8fCBTcmNGb3Jt
YXQgPT0gRGF0YUZvcm1hdDo6QTgKLSAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6
OlJBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QVI4OwotI2VuZGlmCi0jZWxzZQotICAg
IHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QkdSQTggfHwgU3JjRm9ybWF0ID09IERh
dGFGb3JtYXQ6OlJHQkE4OwotI2VuZGlmCi0gICAgfQotCi0gICAgc3RydWN0IEFjdGl2ZUluZm8g
ewotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgR0MzRGVudW0gdHlwZTsKLSAgICAgICAg
R0MzRGludCBzaXplOwotICAgIH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzREJhc2UoR3JhcGhp
Y3NDb250ZXh0M0RBdHRyaWJ1dGVzLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpPZmZzY3Jl
ZW4sIEdyYXBoaWNzQ29udGV4dDNEQmFzZSogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOwotICAg
IHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dDNEQmFzZSgpID0gZGVmYXVsdDsKLQotICAgIC8vID09
PT09PT09PT0gV2ViR0wgMSBlbnRyeSBwb2ludHMuCi0KLSAgICB2aXJ0dWFsIHZvaWQgYWN0aXZl
VGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0Rj
bGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVu
ZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZh
Y3RvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBz
cmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFs
cGhhKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R0MzRGVudW0gdGFyZ2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKEdDM0RiaXRmaWVs
ZCBtYXNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQs
IEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgcykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJv
b2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29t
cGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwotCi0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZUJ1ZmZlcigpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRl
RnJhbWVidWZmZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVBy
b2dyYW0oKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVJlbmRlcmJ1
ZmZlcigpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlU2hhZGVyKEdD
M0RlbnVtKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1cmUo
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UoR0MzRGVudW0gbW9kZSkgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2Jq
ZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQg
Zmlyc3QsIEdDM0RzaXplaSBjb3VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVu
dHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
cHRyIG9mZnNldCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXAp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQg
aW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBmbHVzaCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBH
QzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpID0gMDsKLQotICAgIHZp
cnR1YWwgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
dWludCBpbmRleCwgQWN0aXZlSW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0aXZl
VW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJ
bmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBs
YXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpID0gMDsKLQotICAgIHZpcnR1YWwgR0MzRGludCBnZXRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsK
LQotICAgIHZpcnR1YWwgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgPSAwOwotCi0gICAgLy8gZ2V0UGFyYW1l
dGVyCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VyNjR2KEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50NjQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb2dy
YW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwg
R0MzRGJvb2xlYW4qIHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdDM0RlbnVtIGdldEVycm9y
KCkgPSAwOwotCi0gICAgLy8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyCi0gICAg
dmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKSA9IDA7Ci0KLSAgICAvLyBnZXRQcm9ncmFtUGFyYW1ldGVyCi0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0gICAgLy8gZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyCi0gICAgdmlydHVhbCB2b2lkIGdldFJlbmRlcmJ1ZmZlclBh
cmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KSA9IDA7Ci0KLSAgICAvLyBnZXRTaGFkZXJQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdD
M0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdl
LCBHQzNEaW50KiBwcmVjaXNpb24pID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGdldFNoYWRl
clNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICAvLyBnZXRUZXhQYXJhbWV0ZXIK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRU
ZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkgPSAwOwotCi0gICAgLy8gZ2V0VW5pZm9ybQotICAgIHZpcnR1YWwgdm9pZCBnZXRVbmlm
b3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIEdDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwotCi0gICAgLy8gZ2V0VmVydGV4QXR0cmliCi0gICAg
dmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0ZXhB
dHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIEdDM0RzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGlu
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Ri
b29sZWFuIGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Ri
b29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29s
ZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgR0Mz
RGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIEdD
M0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0
dWFsIEdDM0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0
dWFsIEdDM0Rib29sZWFuIGlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbGlu
a1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwaXhlbFN0
b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUs
IEdDM0Rib29sZWFuIGludmVydCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2lzc29yKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsK
LQotICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuYyhHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdD
M0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxN
YXNrKEdDM0R1aW50IG1hc2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2tTZXBh
cmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwg
R0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQgcGFyYW0pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVy
aShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZv
cm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9h
dCB6KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5p
Zm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEdDM0RmbG9hdCB3KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEaW50IHosIEdDM0RpbnQgdykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
eCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgs
IGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0
dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNE
ZmxvYXQqIHZhbHVlcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdD
M0RmbG9hdCogdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNE
ZmxvYXQgdykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQg
aW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51
bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50
cHRyIG9mZnNldCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNp
emUsIEdDM0RlbnVtIHVzYWdlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVu
dW0gdXNhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIHRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogcGl4ZWxzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5c0luc3RhbmNl
ZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXpl
aSBwcmltY291bnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0
ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikgPSAwOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGNvbnRleHRBdHRyaWJ1dGVzKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyczsgfQotICAgIHZvaWQgc2V0Q29udGV4dEF0dHJpYnV0ZXMoY29u
c3QgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzJiBhdHRycykgeyBtX2F0dHJzID0gYXR0cnM7
IH0KLQotICAgIC8vIFZlcnRleEFycmF5T2plY3QgY2FsbHMKLSAgICB2aXJ0dWFsIFBsYXRmb3Jt
M0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXkoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZVZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29s
ZWFuIGlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotCi0jaWYgVVNFKE9QRU5H
TCkgJiYgRU5BQkxFKFdFQkdMMikKLSAgICB2aXJ0dWFsIHZvaWQgcHJpbWl0aXZlUmVzdGFydElu
ZGV4KEdDM0R1aW50KSA9IDA7Ci0jZW5kaWYKLQotICAgIC8vIFN1cHBvcnQgZm9yIGV4dGVuc2lv
bnMuIFJldHVybnMgYSBub24tbnVsbCBvYmplY3QsIHRob3VnaCBub3QKLSAgICAvLyBhbGwgbWV0
aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJpbHkgYmUgc3VwcG9ydGVkIG9uIHRoZQotICAg
IC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2FsbCBFeHRlbnNpb25zM0Q6OnN1cHBvcnRzKCkg
dG8KLSAgICAvLyBkZXRlcm1pbmUgdGhpcy4KLSAgICB2aXJ0dWFsIEV4dGVuc2lvbnMzRCYgZ2V0
RXh0ZW5zaW9ucygpID0gMDsKLQotICAgIC8vID09PT09PT09PT0gV2ViR0wgMiBlbnRyeSBwb2lu
dHMuCi0KLSAgICB2aXJ0dWFsIHZvaWQqIG1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nl
c3MpID0gMDsKLSAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIHVubWFwQnVmZmVyKEdDM0RlbnVtIHRh
cmdldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51bSBy
ZWFkVGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciByZWFkT2Zmc2V0LCBH
QzNEaW50cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIpID0gMDsKLQotICAgIC8vIGdldElu
dGVybmFsRm9ybWF0UGFyYW1ldGVyCi0gICAgdmlydHVhbCB2b2lkIGdldEludGVybmFsZm9ybWF0
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRleFN0b3JhZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRHNpemVpIGRlcHRoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QWN0aXZlVW5pZm9y
bXMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlm
b3JtSW5kaWNlcywgR0MzRGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKSA9IDA7
Ci0KLSAgICAvLyA9PT09PT09PT09IE5vbi1XZWJHTCBiYXNlZCBlbnRyeSBwb2ludHMuCi0KLSAg
ICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQzNEZW51bSk7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGdldENsZWFyQml0c0J5Rm9ybWF0KEdDM0RlbnVtKTsKLQot
ICAgIHN0YXRpYyB1aW50OF90IGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwotCi0g
ICAgRGVzdGluYXRpb24gZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIG1fYXR0cnM7
Ci0gICAgRGVzdGluYXRpb24gbV9kZXN0aW5hdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjE4NjFkZmJlYzEyOWYyOTQ4MGFiODc5NzhiMThhYjE1NDg2MjM5Yy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRE1hbmFnZXIuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotCi0jaWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9MKQot
I2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAo
VVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKLSNpbmNsdWRlICJTd2l0Y2hpbmdHUFVDbGllbnQu
aCIKLSNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0jaWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9MKQotCi1lbnVtIHsKLSAgICBr
QUdDT3BlbiwKLSAgICBrQUdDQ2xvc2UKLX07Ci0KLXN0YXRpYyBpb19jb25uZWN0X3QgYXR0YWNo
VG9BcHBsZUdyYXBoaWNzQ29udHJvbCgpCi17Ci0gICAgbWFjaF9wb3J0X3QgbWFzdGVyUG9ydCA9
IE1BQ0hfUE9SVF9OVUxMOwotICAgIAotICAgIGlmIChJT01hc3RlclBvcnQoTUFDSF9QT1JUX05V
TEwsICZtYXN0ZXJQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBNQUNIX1BP
UlRfTlVMTDsKLSAgICAKLSAgICBDRkRpY3Rpb25hcnlSZWYgY2xhc3NUb01hdGNoID0gSU9TZXJ2
aWNlTWF0Y2hpbmcoIkFwcGxlR3JhcGhpY3NDb250cm9sIik7Ci0gICAgaWYgKCFjbGFzc1RvTWF0
Y2gpCi0gICAgICAgIHJldHVybiBNQUNIX1BPUlRfTlVMTDsKLSAgICAKLSAgICBrZXJuX3JldHVy
bl90IGtlcm5SZXN1bHQ7Ci0gICAgaW9faXRlcmF0b3JfdCBpdGVyYXRvcjsKLSAgICBpZiAoKGtl
cm5SZXN1bHQgPSBJT1NlcnZpY2VHZXRNYXRjaGluZ1NlcnZpY2VzKG1hc3RlclBvcnQsIGNsYXNz
VG9NYXRjaCwgJml0ZXJhdG9yKSkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gTUFD
SF9QT1JUX05VTEw7Ci0gICAgCi0gICAgaW9fc2VydmljZV90IHNlcnZpY2VPYmplY3QgPSBJT0l0
ZXJhdG9yTmV4dChpdGVyYXRvcik7Ci0gICAgSU9PYmplY3RSZWxlYXNlKGl0ZXJhdG9yKTsKLSAg
ICBpZiAoIXNlcnZpY2VPYmplY3QpCi0gICAgICAgIHJldHVybiBNQUNIX1BPUlRfTlVMTDsKLSAg
ICAKLSAgICBpb19jb25uZWN0X3QgZGF0YVBvcnQ7Ci0gICAgSU9PYmplY3RSZXRhaW4oc2Vydmlj
ZU9iamVjdCk7Ci0gICAga2VyblJlc3VsdCA9IElPU2VydmljZU9wZW4oc2VydmljZU9iamVjdCwg
bWFjaF90YXNrX3NlbGYoKSwgMCwgJmRhdGFQb3J0KTsKLSAgICBJT09iamVjdFJlbGVhc2Uoc2Vy
dmljZU9iamVjdCk7Ci0gICAgCi0gICAgcmV0dXJuIChrZXJuUmVzdWx0ID09IEtFUk5fU1VDQ0VT
UykgPyBkYXRhUG9ydCA6IE1BQ0hfUE9SVF9OVUxMOwotfQotCi1zdGF0aWMgYm9vbCBoYXNNdXhD
YXBhYmlsaXR5KCkKLXsKLSAgICBpb19jb25uZWN0X3QgZGF0YVBvcnQgPSBhdHRhY2hUb0FwcGxl
R3JhcGhpY3NDb250cm9sKCk7Ci0gICAgCi0gICAgaWYgKGRhdGFQb3J0ID09IE1BQ0hfUE9SVF9O
VUxMKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgYm9vbCByZXN1bHQ7Ci0gICAg
aWYgKElPQ29ubmVjdENhbGxTY2FsYXJNZXRob2QoZGF0YVBvcnQsIGtBR0NPcGVuLCBudWxscHRy
LCAwLCBudWxscHRyLCBudWxscHRyKSA9PSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgSU9Db25u
ZWN0Q2FsbFNjYWxhck1ldGhvZChkYXRhUG9ydCwga0FHQ0Nsb3NlLCBudWxscHRyLCAwLCBudWxs
cHRyLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgCi0gICAgSU9TZXJ2aWNlQ2xvc2UoZGF0YVBvcnQpOwot
ICAgIAotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBkZXRlY3RpbmcgTWFj
IGhhcmR3YXJlIHdpdGggYW4gSW50ZWwgZzU3NSBHUFUsIHdoaWNoCi0gICAgICAgIC8vIHdlIGRv
bid0IHdhbnQgdG8gbWFrZSBhdmFpbGFibGUgdG8gbXV4aW5nLgotICAgICAgICAvLyBCYXNlZCBv
biBpbmZvcm1hdGlvbiBmcm9tIEFwcGxlJ3MgT3BlbkdMIHRlYW0sIHN1Y2ggZGV2aWNlcwotICAg
ICAgICAvLyBoYXZlIGZvdXIgb3IgZmV3ZXIgcHJvY2Vzc29ycy4KLSAgICAgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzMwMDYwMzc4PgotICAgICAgICBpbnQgbmFtZXNbMl0gPSB7IENUTF9IVywgSFdf
TkNQVSB9OwotICAgICAgICBpbnQgY3B1Q291bnQ7Ci0gICAgICAgIHNpemVfdCBjcHVDb3VudExl
bmd0aCA9IHNpemVvZihjcHVDb3VudCk7Ci0gICAgICAgIHN5c2N0bChuYW1lcywgMiwgJmNwdUNv
dW50LCAmY3B1Q291bnRMZW5ndGgsIG51bGxwdHIsIDApOwotICAgICAgICByZXN1bHQgPSBjcHVD
b3VudCA+IDQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgaGFz
TG93QW5kSGlnaFBvd2VyR1BVcygpCi17Ci0gICAgc3RhdGljIGJvb2wgY2FuTXV4ID0gaGFzTXV4
Q2FwYWJpbGl0eSgpOwotICAgIHJldHVybiBjYW5NdXg7Ci19Ci0jZW5kaWYgLy8gSEFWRShBUFBM
RV9HUkFQSElDU19DT05UUk9MKQotCi1HcmFwaGljc0NvbnRleHQzRE1hbmFnZXImIEdyYXBoaWNz
Q29udGV4dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcj4gc19tYW5hZ2VyOwotICAgIHJldHVybiBz
X21hbmFnZXI7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
TWFuYWdlcjo6ZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNw
bGF5Q2hhbmdlU3VtbWFyeUZsYWdzIGZsYWdzLCB2b2lkKikKLXsKLSAgICBMT0coV2ViR0wsICJH
cmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQiKTsKLSAgICBp
ZiAoZmxhZ3MgJiBrQ0dEaXNwbGF5U2V0TW9kZUZsYWcpCi0gICAgICAgIEdyYXBoaWNzQ29udGV4
dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnVwZGF0ZUFsbENvbnRleHRzKCk7Ci19Ci0jZW5k
aWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnVwZGF0ZUFsbENvbnRleHRzKCkK
LXsKLSNpZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQotICAg
IGZvciAoY29uc3QgYXV0byYgY29udGV4dCA6IG1fY29udGV4dHMpIHsKLSAgICAgICAgY29udGV4
dC0+dXBkYXRlQ0dMQ29udGV4dCgpOwotICAgICAgICBjb250ZXh0LT5kaXNwYXRjaENvbnRleHRD
aGFuZ2VkTm90aWZpY2F0aW9uKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLSNpZiBQTEFURk9STShN
QUMpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6c2NyZWVuRGlkQ2hhbmdlKFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCwgY29uc3QgSG9zdFdpbmRvdyogd2luZG93KQotewotICAg
IGZvciAoY29uc3QgYXV0byYgY29udGV4dEFuZFdpbmRvdyA6IG1fY29udGV4dFdpbmRvd01hcCkg
ewotICAgICAgICBpZiAoY29udGV4dEFuZFdpbmRvdy52YWx1ZSA9PSB3aW5kb3cpIHsKLSAgICAg
ICAgICAgIGNvbnRleHRBbmRXaW5kb3cua2V5LT5zY3JlZW5EaWRDaGFuZ2UoZGlzcGxheUlEKTsK
LSAgICAgICAgICAgIExPRyhXZWJHTCwgIkNoYW5naW5nIGNvbnRleHQgKCVwKSB0byBkaXNwbGF5
ICglZCkuIiwgY29udGV4dEFuZFdpbmRvdy5rZXksIGRpc3BsYXlJRCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmFkZENvbnRl
eHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIHdpbmRvdykKLXsKLSAg
ICBBU1NFUlQoY29udGV4dCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBQTEFURk9STShNQUMpICYmICFFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxP
Q0tJTkcpCi0gICAgaWYgKCFtX2NvbnRleHRzLnNpemUoKSkKLSAgICAgICAgQ0dEaXNwbGF5UmVn
aXN0ZXJSZWNvbmZpZ3VyYXRpb25DYWxsYmFjayhkaXNwbGF5V2FzUmVjb25maWd1cmVkLCBudWxs
cHRyKTsKLSNlbmRpZgotCi0gICAgQVNTRVJUKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQp
KTsKLSAgICBtX2NvbnRleHRzLmFwcGVuZChjb250ZXh0KTsKLSAgICBtX2NvbnRleHRXaW5kb3dN
YXAuc2V0KGNvbnRleHQsIHdpbmRvdyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5h
Z2VyOjpyZW1vdmVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAgIGlm
ICghbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
Y29udGV4dHMucmVtb3ZlRmlyc3QoY29udGV4dCk7Ci0gICAgbV9jb250ZXh0V2luZG93TWFwLnJl
bW92ZShjb250ZXh0KTsKLSAgICByZW1vdmVDb250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNl
KGNvbnRleHQpOwotICAgIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIUVOQUJMRShXRUJQUk9DRVNT
X1dJTkRPV1NFUlZFUl9CTE9DS0lORykKLSAgICBpZiAoIW1fY29udGV4dHMuc2l6ZSgpKQotICAg
ICAgICBDR0Rpc3BsYXlSZW1vdmVSZWNvbmZpZ3VyYXRpb25DYWxsYmFjayhkaXNwbGF5V2FzUmVj
b25maWd1cmVkLCBudWxscHRyKTsKLSNlbmRpZgotfQotCi1Ib3N0V2luZG93KiBHcmFwaGljc0Nv
bnRleHQzRE1hbmFnZXI6Omhvc3RXaW5kb3dGb3JDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KSBjb25zdAotewotICAgIEFTU0VSVChtX2NvbnRleHRXaW5kb3dNYXAuY29udGFpbnMo
Y29udGV4dCkpOwotICAgIHJldHVybiBtX2NvbnRleHRXaW5kb3dNYXAuZ2V0KGNvbnRleHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6YWRkQ29udGV4dFJlcXVpcmluZ0hp
Z2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQo
Y29udGV4dCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
QVNTRVJUKG1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkpOwotICAgIEFTU0VSVCghbV9jb250
ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5jb250YWlucyhjb250ZXh0KSk7Ci0gICAgCi0g
ICAgTE9HKFdlYkdMLCAiVGhpcyBjb250ZXh0ICglcCkgcmVxdWlyZXMgdGhlIGhpZ2gtcGVyZm9y
bWFuY2UgR1BVLiIsIGNvbnRleHQpOwotICAgIG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9y
bWFuY2UuYWRkKGNvbnRleHQpOwotICAgIAotICAgIHVwZGF0ZUhpZ2hQZXJmb3JtYW5jZVN0YXRl
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpyZW1vdmVDb250ZXh0UmVx
dWlyaW5nSGlnaFBlcmZvcm1hbmNlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2NvbnRleHRzUmVx
dWlyaW5nSGlnaFBlcmZvcm1hbmNlLmNvbnRhaW5zKGNvbnRleHQpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgTE9HKFdlYkdMLCAiVGhpcyBjb250ZXh0ICglcCkgbm8gbG9uZ2VyIHJlcXVp
cmVzIHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iLCBjb250ZXh0KTsKLSAgICBtX2NvbnRleHRz
UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLnJlbW92ZShjb250ZXh0KTsKLSAgICAKLSAgICB1cGRh
dGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFu
YWdlcjo6dXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKQotewotI2lmIFBMQVRGT1JNKE1BQykg
JiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCi0gICAgaWYgKCFoYXNMb3dBbmRIaWdoUG93
ZXJHUFVzKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobV9jb250ZXh0c1JlcXVp
cmluZ0hpZ2hQZXJmb3JtYW5jZS5zaXplKCkpIHsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2Rp
c2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBM
T0coV2ViR0wsICJDYW5jZWwgcGVuZGluZyB0aW1lciBmb3IgdHVybmluZyBvZmYgaGlnaC1wZXJm
b3JtYW5jZSBHUFUuIik7Ci0gICAgICAgICAgICBtX2Rpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVU
aW1lci5zdG9wKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fcmVxdWVzdGluZ0hpZ2hQ
ZXJmb3JtYW5jZSkgewotICAgICAgICAgICAgTE9HKFdlYkdMLCAiUmVxdWVzdCB0aGUgaGlnaC1w
ZXJmb3JtYW5jZSBHUFUuIik7Ci0gICAgICAgICAgICBtX3JlcXVlc3RpbmdIaWdoUGVyZm9ybWFu
Y2UgPSB0cnVlOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgIFN3aXRjaGluZ0dQVUNs
aWVudDo6c2luZ2xldG9uKCkucmVxdWVzdEhpZ2hQZXJmb3JtYW5jZUdQVSgpOwotI2VuZGlmCi0g
ICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERvbid0IGltbWVkaWF0ZWx5IHR1
cm4gb2ZmIHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4gVGhlIHVzZXIgbWlnaHQgYmUKLSAgICAg
ICAgLy8gc3dhcHBpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0YWJzIG9yIHdpbmRvd3MsIGFu
ZCB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCi0gICAgICAgIC8vIGNodXJuIGlmIHdlIGNhbiBhdm9p
ZCBpdC4KLSAgICAgICAgaWYgKCFtX2Rpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lci5pc0Fj
dGl2ZSgpKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJTZXQgYSB0aW1lciB0byByZWxlYXNl
IHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBFeHBv
c2UgdGhpcyB2YWx1ZSBhcyBhIFNldHRpbmcsIHdoaWNoIHdvdWxkIHJlcXVpcmUgdGhpcyBjbGFz
cwotICAgICAgICAgICAgLy8gdG8gcmVmZXJlbmNlIGEgZnJhbWUsIHBhZ2Ugb3IgZG9jdW1lbnQu
Ci0gICAgICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyB0aW1lVG9LZWVwSGlnaFBlcmZvcm1h
bmNlR1BVQWxpdmUgeyAxMF9zIH07Ci0gICAgICAgICAgICBtX2Rpc2FibGVIaWdoUGVyZm9ybWFu
Y2VHUFVUaW1lci5zdGFydE9uZVNob3QodGltZVRvS2VlcEhpZ2hQZXJmb3JtYW5jZUdQVUFsaXZl
KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
TWFuYWdlcjo6ZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyRmlyZWQoKQotewotICAgIGlm
IChtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNlID0gZmFsc2U7Ci0jaWYgUExB
VEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKLSAgICBTd2l0Y2hpbmdH
UFVDbGllbnQ6OnNpbmdsZXRvbigpLnJlbGVhc2VIaWdoUGVyZm9ybWFuY2VHUFUoKTsKLSNlbmRp
ZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6cmVjeWNsZUNvbnRleHRJZk5l
Y2Vzc2FyeSgpCi17Ci0gICAgaWYgKGhhc1Rvb01hbnlDb250ZXh0cygpKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dDNETWFuYWdlciByZWN5Y2xlZCBjb250ZXh0ICglcCku
IiwgbV9jb250ZXh0c1swXSk7Ci0gICAgICAgIG1fY29udGV4dHNbMF0tPnJlY3ljbGVDb250ZXh0
KCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGZlNmZhODI1M2ZjZjNjMzdkM2FlMTNlYTc1YmQ1NTc0NGU4MWYz
ZTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgotI2luY2x1ZGUgPE9wZW5HTC9DR0xUeXBlcy5o
PgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgdW5zaWduZWQgTWF4Q29u
dGV4dHMgPSAxNjsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBIb3N0V2luZG93
OwotCi11c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OwotCi0jaWYgSEFWRShBUFBM
RV9HUkFQSElDU19DT05UUk9MKQotV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNMb3dBbmRIaWdoUG93
ZXJHUFVzKCk7Ci0jZW5kaWYKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyIHsKLSAg
ICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyPjsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyJiBzaGFyZWRNYW5hZ2VyKCk7
Ci0gICAgCi0gICAgdm9pZCBhZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiwgSG9zdFdpbmRv
dyopOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopOwotCi0gICAg
SG9zdFdpbmRvdyogaG9zdFdpbmRvd0ZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKSBjb25z
dDsKLSAgICAKLSAgICB2b2lkIGFkZENvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVy
Zm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICAKLSAgICB2b2lkIHJlY3ljbGVDb250
ZXh0SWZOZWNlc3NhcnkoKTsKLSAgICBib29sIGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dHMuc2l6ZSgpID49IE1heENvbnRleHRzOyB9Ci0gICAgCi0gICAgdm9p
ZCB1cGRhdGVBbGxDb250ZXh0cygpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgc2Ny
ZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlELCBjb25zdCBIb3N0V2luZG93Kik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVj
dERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKik7Ci0jZW5kaWYK
LSAgICAKLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyKCkKLSAgICAgICAg
OiBtX2Rpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lcigqdGhpcywgJkdyYXBoaWNzQ29udGV4
dDNETWFuYWdlcjo6ZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyRmlyZWQpCi0gICAgewot
ICAgIH0KLQotICAgIHZvaWQgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKLSAgICB2b2lk
IGRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKCk7Ci0KLSAgICBWZWN0b3I8R3Jh
cGhpY3NDb250ZXh0M0QqPiBtX2NvbnRleHRzOwotICAgIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0
M0QqLCBIb3N0V2luZG93Kj4gbV9jb250ZXh0V2luZG93TWFwOwotICAgIEhhc2hTZXQ8R3JhcGhp
Y3NDb250ZXh0M0QqPiBtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlOwotICAgIAot
ICAgIFRpbWVyIG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyOwotICAgIGJvb2wgbV9y
ZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNlIHsgZmFsc2UgfTsKLX07Ci0KLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2U2ZDI1ODIxNDVk
ZThjMTYwOTBiZDBlYzhjMGZlMzQwZjQyZWRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAqICBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aCIKLQotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxlcG94eS9nbC5oPgotI2VsaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNpbmNsdWRlIDxHTEVTMi9n
bDJleHQuaD4KLSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBHcmFwaGljc0NvbnRleHQzRDo6RGVz
dGluYXRpb24gZGVzdGluYXRpb24pCi17Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvbikgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46Ci0gICAgICAg
IG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0
V2luZG93OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtl
Q29udGV4dEN1cnJlbnQoKQotewotICAgIHJldHVybiBtX2dsQ29udGV4dCA/IG1fZ2xDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSA6IGZhbHNlOwotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGxhdGZvcm1Db250ZXh0KCkKLXsKLSAg
ICByZXR1cm4gbV9nbENvbnRleHQgPyBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBH
TENvbnRleHQ6OmN1cnJlbnQoKS0+cGxhdGZvcm1Db250ZXh0KCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMyNTRhODA1
OWI1NjJhMTU2YTdjNTZiNmExODY4N2NlMzQ3ZTcyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKLSNk
ZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKLQotI2luY2x1ZGUgIkdMQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQml0bWFwVGV4dHVyZUdMOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEdyYXBoaWNzQ29udGV4dDNEOjpE
ZXN0aW5hdGlvbik7Ci0gICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpOwotICAgIGJvb2wg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0
Zm9ybUNvbnRleHQoKTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0
PiBtX2dsQ29udGV4dDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJjYmVkMDY4MTYxY2QxZmFhNTIzMDFiMmFh
YWYzNGZiYTkwZjBkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcApAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBNb3ppbGxhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgiCisKKyNpZiBF
TkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHcmFwaGljc0NvbnRleHRHTDo6R3JhcGhpY3NDb250ZXh0R0woR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzLCBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhp
Y3NDb250ZXh0R0wqKQorICAgIDogbV9hdHRycyhhdHRycykKKyAgICAsIG1fZGVzdGluYXRpb24o
ZGVzdGluYXRpb24pCit7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dEdMOjpnZXRDbGVh
ckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDM0RlbnVtIGF0dGFjaG1lbnQpCit7CisgICAgc3dpdGNo
IChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNI
TUVOVDA6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQxX0VYVDoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDJfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTE9SX0FUVEFDSE1FTlQ0X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRU
QUNITUVOVDVfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UNl9F
WFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQ3X0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDhfRVhUOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UOV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TE9SX0FUVEFDSE1FTlQxMF9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFD
SE1FTlQxMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQxMl9F
WFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQxM19FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQxNF9FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQxNV9FWFQ6CisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0JVRkZFUl9CSVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRB
Q0hNRU5UOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVS
X0JJVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHRHTDo6
Z2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9y
bWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNF
X0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
ODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOF9TTk9STToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk06Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkczMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6U1JHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UjExRl9HMTFGX0IxMEY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
OV9FNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQThfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
NV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
MTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQThVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
OEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUk6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0Jf
RVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0NPTVBPTkVOVDMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05F
TlQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVDsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0lOREVYODoKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJG
X1NURU5DSUw4OgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0JVRkZF
Ul9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordWludDhfdCBHcmFwaGljc0NvbnRl
eHRHTDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgc3dp
dGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpBbHBoYSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OlJHQik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhf
dD4oQ2hhbm5lbEJpdHM6OlJHQkEpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OlNSR0JfRVhUOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5l
bEJpdHM6OlJHQik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I1X0ExOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpSR0JBKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50OF90PihDaGFubmVsQml0czo6RGVwdGgpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUxfSU5ERVg4OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hh
bm5lbEJpdHM6OlN0ZW5jaWwpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NU
RU5DSUw6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6
RGVwdGhTdGVuY2lsKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRH
TC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAzOTM0ODU0Njk5MzE5MzdlZWUyNGFkZjhkNzE4ODBhYzExYjc2OWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRHTC5oCkBAIC0wLDAgKzEsMTA5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdM
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCisjaWYgT1MoV0lORE9XUykKKy8vIERlZmluZWQgaW4gd2luZXJyb3IuaAorI2lmZGVmIE5P
X0VSUk9SCisjdW5kZWYgTk9fRVJST1IKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgdm9pZCog
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTDsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTERpc3BsYXk7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0xTdXJmYWNlOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmln
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBFeHRlbnNpb25zR0w7CitjbGFzcyBIb3N0
V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbWFnZURhdGE7CisKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMIDogcHVibGljIFJlZkNvdW50ZWQ8R3JhcGhpY3NDb250ZXh0R0w+IHsK
K3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgLy8gV2ViR0wgMSBjb25zdGFudHMuCisgICAg
ICAgIERFUFRIX0JVRkZFUl9CSVQgPSAweDAwMDAwMTAwLAorICAgICAgICBTVEVOQ0lMX0JVRkZF
Ul9CSVQgPSAweDAwMDAwNDAwLAorICAgICAgICBDT0xPUl9CVUZGRVJfQklUID0gMHgwMDAwNDAw
MCwKKyAgICAgICAgUE9JTlRTID0gMHgwMDAwLAorICAgICAgICBMSU5FUyA9IDB4MDAwMSwKKyAg
ICAgICAgTElORV9MT09QID0gMHgwMDAyLAorICAgICAgICBMSU5FX1NUUklQID0gMHgwMDAzLAor
ICAgICAgICBUUklBTkdMRVMgPSAweDAwMDQsCisgICAgICAgIFRSSUFOR0xFX1NUUklQID0gMHgw
MDA1LAorICAgICAgICBUUklBTkdMRV9GQU4gPSAweDAwMDYsCisgICAgICAgIFpFUk8gPSAwLAor
ICAgICAgICBPTkUgPSAxLAorICAgICAgICBTUkNfQ09MT1IgPSAweDAzMDAsCisgICAgICAgIE9O
RV9NSU5VU19TUkNfQ09MT1IgPSAweDAzMDEsCisgICAgICAgIFNSQ19BTFBIQSA9IDB4MDMwMiwK
KyAgICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSA9IDB4MDMwMywKKyAgICAgICAgRFNUX0FMUEhB
ID0gMHgwMzA0LAorICAgICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBID0gMHgwMzA1LAorICAgICAg
ICBEU1RfQ09MT1IgPSAweDAzMDYsCisgICAgICAgIE9ORV9NSU5VU19EU1RfQ09MT1IgPSAweDAz
MDcsCisgICAgICAgIFNSQ19BTFBIQV9TQVRVUkFURSA9IDB4MDMwOCwKKyAgICAgICAgRlVOQ19B
REQgPSAweDgwMDYsCisgICAgICAgIEJMRU5EX0VRVUFUSU9OID0gMHg4MDA5LAorICAgICAgICBC
TEVORF9FUVVBVElPTl9SR0IgPSAweDgwMDksCisgICAgICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhB
ID0gMHg4ODNELAorICAgICAgICBGVU5DX1NVQlRSQUNUID0gMHg4MDBBLAorICAgICAgICBGVU5D
X1JFVkVSU0VfU1VCVFJBQ1QgPSAweDgwMEIsCisgICAgICAgIEJMRU5EX0RTVF9SR0IgPSAweDgw
QzgsCisgICAgICAgIEJMRU5EX1NSQ19SR0IgPSAweDgwQzksCisgICAgICAgIEJMRU5EX0RTVF9B
TFBIQSA9IDB4ODBDQSwKKyAgICAgICAgQkxFTkRfU1JDX0FMUEhBID0gMHg4MENCLAorICAgICAg
ICBDT05TVEFOVF9DT0xPUiA9IDB4ODAwMSwKKyAgICAgICAgT05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SID0gMHg4MDAyLAorICAgICAgICBDT05TVEFOVF9BTFBIQSA9IDB4ODAwMywKKyAgICAgICAg
T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBID0gMHg4MDA0LAorICAgICAgICBCTEVORF9DT0xPUiA9
IDB4ODAwNSwKKyAgICAgICAgQVJSQVlfQlVGRkVSID0gMHg4ODkyLAorICAgICAgICBFTEVNRU5U
X0FSUkFZX0JVRkZFUiA9IDB4ODg5MywKKyAgICAgICAgQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAw
eDg4OTQsCisgICAgICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAweDg4OTUsCisg
ICAgICAgIFNUUkVBTV9EUkFXID0gMHg4OEUwLAorICAgICAgICBTVEFUSUNfRFJBVyA9IDB4ODhF
NCwKKyAgICAgICAgRFlOQU1JQ19EUkFXID0gMHg4OEU4LAorICAgICAgICBCVUZGRVJfU0laRSA9
IDB4ODc2NCwKKyAgICAgICAgQlVGRkVSX1VTQUdFID0gMHg4NzY1LAorICAgICAgICBDVVJSRU5U
X1ZFUlRFWF9BVFRSSUIgPSAweDg2MjYsCisgICAgICAgIEZST05UID0gMHgwNDA0LAorICAgICAg
ICBCQUNLID0gMHgwNDA1LAorICAgICAgICBGUk9OVF9BTkRfQkFDSyA9IDB4MDQwOCwKKyAgICAg
ICAgVEVYVFVSRV8yRCA9IDB4MERFMSwKKyAgICAgICAgQ1VMTF9GQUNFID0gMHgwQjQ0LAorICAg
ICAgICBCTEVORCA9IDB4MEJFMiwKKyAgICAgICAgRElUSEVSID0gMHgwQkQwLAorICAgICAgICBT
VEVOQ0lMX1RFU1QgPSAweDBCOTAsCisgICAgICAgIERFUFRIX1RFU1QgPSAweDBCNzEsCisgICAg
ICAgIFNDSVNTT1JfVEVTVCA9IDB4MEMxMSwKKyAgICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCA9
IDB4ODAzNywKKyAgICAgICAgU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFID0gMHg4MDlFLAorICAg
ICAgICBTQU1QTEVfQ09WRVJBR0UgPSAweDgwQTAsCisgICAgICAgIE5PX0VSUk9SID0gMCwKKyAg
ICAgICAgSU5WQUxJRF9FTlVNID0gMHgwNTAwLAorICAgICAgICBJTlZBTElEX1ZBTFVFID0gMHgw
NTAxLAorICAgICAgICBJTlZBTElEX09QRVJBVElPTiA9IDB4MDUwMiwKKyAgICAgICAgT1VUX09G
X01FTU9SWSA9IDB4MDUwNSwKKyAgICAgICAgQ1cgPSAweDA5MDAsCisgICAgICAgIENDVyA9IDB4
MDkwMSwKKyAgICAgICAgTElORV9XSURUSCA9IDB4MEIyMSwKKyAgICAgICAgQUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFID0gMHg4NDZELAorICAgICAgICBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0Ug
PSAweDg0NkUsCisgICAgICAgIENVTExfRkFDRV9NT0RFID0gMHgwQjQ1LAorICAgICAgICBGUk9O
VF9GQUNFID0gMHgwQjQ2LAorICAgICAgICBERVBUSF9SQU5HRSA9IDB4MEI3MCwKKyAgICAgICAg
REVQVEhfV1JJVEVNQVNLID0gMHgwQjcyLAorICAgICAgICBERVBUSF9DTEVBUl9WQUxVRSA9IDB4
MEI3MywKKyAgICAgICAgREVQVEhfRlVOQyA9IDB4MEI3NCwKKyAgICAgICAgU1RFTkNJTF9DTEVB
Ul9WQUxVRSA9IDB4MEI5MSwKKyAgICAgICAgU1RFTkNJTF9GVU5DID0gMHgwQjkyLAorICAgICAg
ICBTVEVOQ0lMX0ZBSUwgPSAweDBCOTQsCisgICAgICAgIFNURU5DSUxfUEFTU19ERVBUSF9GQUlM
ID0gMHgwQjk1LAorICAgICAgICBTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyA9IDB4MEI5NiwKKyAg
ICAgICAgU1RFTkNJTF9SRUYgPSAweDBCOTcsCisgICAgICAgIFNURU5DSUxfVkFMVUVfTUFTSyA9
IDB4MEI5MywKKyAgICAgICAgU1RFTkNJTF9XUklURU1BU0sgPSAweDBCOTgsCisgICAgICAgIFNU
RU5DSUxfQkFDS19GVU5DID0gMHg4ODAwLAorICAgICAgICBTVEVOQ0lMX0JBQ0tfRkFJTCA9IDB4
ODgwMSwKKyAgICAgICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCA9IDB4ODgwMiwKKyAg
ICAgICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyA9IDB4ODgwMywKKyAgICAgICAgU1RF
TkNJTF9CQUNLX1JFRiA9IDB4OENBMywKKyAgICAgICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sg
PSAweDhDQTQsCisgICAgICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgPSAweDhDQTUsCisgICAg
ICAgIFZJRVdQT1JUID0gMHgwQkEyLAorICAgICAgICBTQ0lTU09SX0JPWCA9IDB4MEMxMCwKKyAg
ICAgICAgQ09MT1JfQ0xFQVJfVkFMVUUgPSAweDBDMjIsCisgICAgICAgIENPTE9SX1dSSVRFTUFT
SyA9IDB4MEMyMywKKyAgICAgICAgVU5QQUNLX0FMSUdOTUVOVCA9IDB4MENGNSwKKyAgICAgICAg
UEFDS19BTElHTk1FTlQgPSAweDBEMDUsCisgICAgICAgIE1BWF9URVhUVVJFX1NJWkUgPSAweDBE
MzMsCisgICAgICAgIE1BWF9WSUVXUE9SVF9ESU1TID0gMHgwRDNBLAorICAgICAgICBTVUJQSVhF
TF9CSVRTID0gMHgwRDUwLAorICAgICAgICBSRURfQklUUyA9IDB4MEQ1MiwKKyAgICAgICAgR1JF
RU5fQklUUyA9IDB4MEQ1MywKKyAgICAgICAgQkxVRV9CSVRTID0gMHgwRDU0LAorICAgICAgICBB
TFBIQV9CSVRTID0gMHgwRDU1LAorICAgICAgICBERVBUSF9CSVRTID0gMHgwRDU2LAorICAgICAg
ICBTVEVOQ0lMX0JJVFMgPSAweDBENTcsCisgICAgICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTID0g
MHgyQTAwLAorICAgICAgICBQT0xZR09OX09GRlNFVF9GQUNUT1IgPSAweDgwMzgsCisgICAgICAg
IFRFWFRVUkVfQklORElOR18yRCA9IDB4ODA2OSwKKyAgICAgICAgU0FNUExFX0JVRkZFUlMgPSAw
eDgwQTgsCisgICAgICAgIFNBTVBMRVMgPSAweDgwQTksCisgICAgICAgIFNBTVBMRV9DT1ZFUkFH
RV9WQUxVRSA9IDB4ODBBQSwKKyAgICAgICAgU0FNUExFX0NPVkVSQUdFX0lOVkVSVCA9IDB4ODBB
QiwKKyAgICAgICAgTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTID0gMHg4NkEyLAorICAg
ICAgICBDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyA9IDB4ODZBMywKKyAgICAgICAgRE9OVF9D
QVJFID0gMHgxMTAwLAorICAgICAgICBGQVNURVNUID0gMHgxMTAxLAorICAgICAgICBOSUNFU1Qg
PSAweDExMDIsCisgICAgICAgIEdFTkVSQVRFX01JUE1BUF9ISU5UID0gMHg4MTkyLAorICAgICAg
ICBCWVRFID0gMHgxNDAwLAorICAgICAgICBVTlNJR05FRF9CWVRFID0gMHgxNDAxLAorICAgICAg
ICBTSE9SVCA9IDB4MTQwMiwKKyAgICAgICAgVU5TSUdORURfU0hPUlQgPSAweDE0MDMsCisgICAg
ICAgIElOVCA9IDB4MTQwNCwKKyAgICAgICAgVU5TSUdORURfSU5UID0gMHgxNDA1LAorICAgICAg
ICBGTE9BVCA9IDB4MTQwNiwKKyAgICAgICAgSEFMRl9GTE9BVF9PRVMgPSAweDhENjEsCisgICAg
ICAgIEZJWEVEID0gMHgxNDBDLAorICAgICAgICBERVBUSF9DT01QT05FTlQgPSAweDE5MDIsCisg
ICAgICAgIEFMUEhBID0gMHgxOTA2LAorICAgICAgICBSR0IgPSAweDE5MDcsCisgICAgICAgIFJH
QkEgPSAweDE5MDgsCisgICAgICAgIEJHUkEgPSAweDgwRTEsCisgICAgICAgIExVTUlOQU5DRSA9
IDB4MTkwOSwKKyAgICAgICAgTFVNSU5BTkNFX0FMUEhBID0gMHgxOTBBLAorICAgICAgICBVTlNJ
R05FRF9TSE9SVF80XzRfNF80ID0gMHg4MDMzLAorICAgICAgICBVTlNJR05FRF9TSE9SVF81XzVf
NV8xID0gMHg4MDM0LAorICAgICAgICBVTlNJR05FRF9TSE9SVF81XzZfNSA9IDB4ODM2MywKKyAg
ICAgICAgRlJBR01FTlRfU0hBREVSID0gMHg4QjMwLAorICAgICAgICBWRVJURVhfU0hBREVSID0g
MHg4QjMxLAorICAgICAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAweDg4NjksCisgICAgICAgIE1B
WF9WRVJURVhfVU5JRk9STV9WRUNUT1JTID0gMHg4REZCLAorICAgICAgICBNQVhfVkFSWUlOR19W
RUNUT1JTID0gMHg4REZDLAorICAgICAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UyA9IDB4OEI0RCwKKyAgICAgICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4
QjRDLAorICAgICAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4ODg3MiwKKyAgICAgICAg
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGRCwKKyAgICAgICAgU0hBREVSX1RZ
UEUgPSAweDhCNEYsCisgICAgICAgIERFTEVURV9TVEFUVVMgPSAweDhCODAsCisgICAgICAgIExJ
TktfU1RBVFVTID0gMHg4QjgyLAorICAgICAgICBWQUxJREFURV9TVEFUVVMgPSAweDhCODMsCisg
ICAgICAgIEFUVEFDSEVEX1NIQURFUlMgPSAweDhCODUsCisgICAgICAgIEFDVElWRV9VTklGT1JN
UyA9IDB4OEI4NiwKKyAgICAgICAgQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCA9IDB4OEI4NywK
KyAgICAgICAgQUNUSVZFX0FUVFJJQlVURVMgPSAweDhCODksCisgICAgICAgIEFDVElWRV9BVFRS
SUJVVEVfTUFYX0xFTkdUSCA9IDB4OEI4QSwKKyAgICAgICAgU0hBRElOR19MQU5HVUFHRV9WRVJT
SU9OID0gMHg4QjhDLAorICAgICAgICBDVVJSRU5UX1BST0dSQU0gPSAweDhCOEQsCisgICAgICAg
IE5FVkVSID0gMHgwMjAwLAorICAgICAgICBMRVNTID0gMHgwMjAxLAorICAgICAgICBFUVVBTCA9
IDB4MDIwMiwKKyAgICAgICAgTEVRVUFMID0gMHgwMjAzLAorICAgICAgICBHUkVBVEVSID0gMHgw
MjA0LAorICAgICAgICBOT1RFUVVBTCA9IDB4MDIwNSwKKyAgICAgICAgR0VRVUFMID0gMHgwMjA2
LAorICAgICAgICBBTFdBWVMgPSAweDAyMDcsCisgICAgICAgIEtFRVAgPSAweDFFMDAsCisgICAg
ICAgIFJFUExBQ0UgPSAweDFFMDEsCisgICAgICAgIElOQ1IgPSAweDFFMDIsCisgICAgICAgIERF
Q1IgPSAweDFFMDMsCisgICAgICAgIElOVkVSVCA9IDB4MTUwQSwKKyAgICAgICAgSU5DUl9XUkFQ
ID0gMHg4NTA3LAorICAgICAgICBERUNSX1dSQVAgPSAweDg1MDgsCisgICAgICAgIFZFTkRPUiA9
IDB4MUYwMCwKKyAgICAgICAgUkVOREVSRVIgPSAweDFGMDEsCisgICAgICAgIFZFUlNJT04gPSAw
eDFGMDIsCisgICAgICAgIEVYVEVOU0lPTlMgPSAweDFGMDMsCisgICAgICAgIE5FQVJFU1QgPSAw
eDI2MDAsCisgICAgICAgIExJTkVBUiA9IDB4MjYwMSwKKyAgICAgICAgTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVCA9IDB4MjcwMCwKKyAgICAgICAgTElORUFSX01JUE1BUF9ORUFSRVNUID0gMHgyNzAx
LAorICAgICAgICBORUFSRVNUX01JUE1BUF9MSU5FQVIgPSAweDI3MDIsCisgICAgICAgIExJTkVB
Ul9NSVBNQVBfTElORUFSID0gMHgyNzAzLAorICAgICAgICBURVhUVVJFX01BR19GSUxURVIgPSAw
eDI4MDAsCisgICAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiA9IDB4MjgwMSwKKyAgICAgICAgVEVY
VFVSRV9XUkFQX1MgPSAweDI4MDIsCisgICAgICAgIFRFWFRVUkVfV1JBUF9UID0gMHgyODAzLAor
ICAgICAgICBURVhUVVJFID0gMHgxNzAyLAorICAgICAgICBURVhUVVJFX0NVQkVfTUFQID0gMHg4
NTEzLAorICAgICAgICBURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAgPSAweDg1MTQsCisgICAgICAg
IFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9IDB4ODUxNSwKKyAgICAgICAgVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YID0gMHg4NTE2LAorICAgICAgICBURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1kgPSAweDg1MTcsCisgICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSA9
IDB4ODUxOCwKKyAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aID0gMHg4NTE5LAor
ICAgICAgICBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogPSAweDg1MUEsCisgICAgICAgIE1B
WF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAweDg1MUMsCisgICAgICAgIFRFWFRVUkUwID0gMHg4
NEMwLAorICAgICAgICBURVhUVVJFMSA9IDB4ODRDMSwKKyAgICAgICAgVEVYVFVSRTIgPSAweDg0
QzIsCisgICAgICAgIFRFWFRVUkUzID0gMHg4NEMzLAorICAgICAgICBURVhUVVJFNCA9IDB4ODRD
NCwKKyAgICAgICAgVEVYVFVSRTUgPSAweDg0QzUsCisgICAgICAgIFRFWFRVUkU2ID0gMHg4NEM2
LAorICAgICAgICBURVhUVVJFNyA9IDB4ODRDNywKKyAgICAgICAgVEVYVFVSRTggPSAweDg0Qzgs
CisgICAgICAgIFRFWFRVUkU5ID0gMHg4NEM5LAorICAgICAgICBURVhUVVJFMTAgPSAweDg0Q0Es
CisgICAgICAgIFRFWFRVUkUxMSA9IDB4ODRDQiwKKyAgICAgICAgVEVYVFVSRTEyID0gMHg4NEND
LAorICAgICAgICBURVhUVVJFMTMgPSAweDg0Q0QsCisgICAgICAgIFRFWFRVUkUxNCA9IDB4ODRD
RSwKKyAgICAgICAgVEVYVFVSRTE1ID0gMHg4NENGLAorICAgICAgICBURVhUVVJFMTYgPSAweDg0
RDAsCisgICAgICAgIFRFWFRVUkUxNyA9IDB4ODREMSwKKyAgICAgICAgVEVYVFVSRTE4ID0gMHg4
NEQyLAorICAgICAgICBURVhUVVJFMTkgPSAweDg0RDMsCisgICAgICAgIFRFWFRVUkUyMCA9IDB4
ODRENCwKKyAgICAgICAgVEVYVFVSRTIxID0gMHg4NEQ1LAorICAgICAgICBURVhUVVJFMjIgPSAw
eDg0RDYsCisgICAgICAgIFRFWFRVUkUyMyA9IDB4ODRENywKKyAgICAgICAgVEVYVFVSRTI0ID0g
MHg4NEQ4LAorICAgICAgICBURVhUVVJFMjUgPSAweDg0RDksCisgICAgICAgIFRFWFRVUkUyNiA9
IDB4ODREQSwKKyAgICAgICAgVEVYVFVSRTI3ID0gMHg4NERCLAorICAgICAgICBURVhUVVJFMjgg
PSAweDg0REMsCisgICAgICAgIFRFWFRVUkUyOSA9IDB4ODRERCwKKyAgICAgICAgVEVYVFVSRTMw
ID0gMHg4NERFLAorICAgICAgICBURVhUVVJFMzEgPSAweDg0REYsCisgICAgICAgIEFDVElWRV9U
RVhUVVJFID0gMHg4NEUwLAorICAgICAgICBSRVBFQVQgPSAweDI5MDEsCisgICAgICAgIENMQU1Q
X1RPX0VER0UgPSAweDgxMkYsCisgICAgICAgIE1JUlJPUkVEX1JFUEVBVCA9IDB4ODM3MCwKKyAg
ICAgICAgRkxPQVRfVkVDMiA9IDB4OEI1MCwKKyAgICAgICAgRkxPQVRfVkVDMyA9IDB4OEI1MSwK
KyAgICAgICAgRkxPQVRfVkVDNCA9IDB4OEI1MiwKKyAgICAgICAgSU5UX1ZFQzIgPSAweDhCNTMs
CisgICAgICAgIElOVF9WRUMzID0gMHg4QjU0LAorICAgICAgICBJTlRfVkVDNCA9IDB4OEI1NSwK
KyAgICAgICAgQk9PTCA9IDB4OEI1NiwKKyAgICAgICAgQk9PTF9WRUMyID0gMHg4QjU3LAorICAg
ICAgICBCT09MX1ZFQzMgPSAweDhCNTgsCisgICAgICAgIEJPT0xfVkVDNCA9IDB4OEI1OSwKKyAg
ICAgICAgRkxPQVRfTUFUMiA9IDB4OEI1QSwKKyAgICAgICAgRkxPQVRfTUFUMyA9IDB4OEI1QiwK
KyAgICAgICAgRkxPQVRfTUFUNCA9IDB4OEI1QywKKyAgICAgICAgU0FNUExFUl8yRCA9IDB4OEI1
RSwKKyAgICAgICAgU0FNUExFUl9DVUJFID0gMHg4QjYwLAorICAgICAgICBWRVJURVhfQVRUUklC
X0FSUkFZX0VOQUJMRUQgPSAweDg2MjIsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RSA9IDB4ODYyMywKKyAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgPSAweDg2MjQs
CisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSA9IDB4ODYyNSwKKyAgICAgICAgVkVS
VEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEID0gMHg4ODZBLAorICAgICAgICBWRVJURVhfQVRU
UklCX0FSUkFZX1BPSU5URVIgPSAweDg2NDUsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgPSAweDg4OUYsCisgICAgICAgIElNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfVFlQRSA9IDB4OEI5QSwKKyAgICAgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQgPSAweDhCOUIsCisgICAgICAgIENPTVBJTEVfU1RBVFVTID0gMHg4QjgxLAorICAgICAgICBJ
TkZPX0xPR19MRU5HVEggPSAweDhCODQsCisgICAgICAgIFNIQURFUl9TT1VSQ0VfTEVOR1RIID0g
MHg4Qjg4LAorICAgICAgICBTSEFERVJfQ09NUElMRVIgPSAweDhERkEsCisgICAgICAgIFNIQURF
Ul9CSU5BUllfRk9STUFUUyA9IDB4OERGOCwKKyAgICAgICAgTlVNX1NIQURFUl9CSU5BUllfRk9S
TUFUUyA9IDB4OERGOSwKKyAgICAgICAgTE9XX0ZMT0FUID0gMHg4REYwLAorICAgICAgICBNRURJ
VU1fRkxPQVQgPSAweDhERjEsCisgICAgICAgIEhJR0hfRkxPQVQgPSAweDhERjIsCisgICAgICAg
IExPV19JTlQgPSAweDhERjMsCisgICAgICAgIE1FRElVTV9JTlQgPSAweDhERjQsCisgICAgICAg
IEhJR0hfSU5UID0gMHg4REY1LAorICAgICAgICBGUkFNRUJVRkZFUiA9IDB4OEQ0MCwKKyAgICAg
ICAgUkVOREVSQlVGRkVSID0gMHg4RDQxLAorICAgICAgICBSR0JBNCA9IDB4ODA1NiwKKyAgICAg
ICAgUkdCNV9BMSA9IDB4ODA1NywKKyAgICAgICAgUkdCNTY1ID0gMHg4RDYyLAorICAgICAgICBE
RVBUSF9DT01QT05FTlQxNiA9IDB4ODFBNSwKKyAgICAgICAgU1RFTkNJTF9JTkRFWCA9IDB4MTkw
MSwKKyAgICAgICAgU1RFTkNJTF9JTkRFWDggPSAweDhENDgsCisgICAgICAgIFJFTkRFUkJVRkZF
Ul9XSURUSCA9IDB4OEQ0MiwKKyAgICAgICAgUkVOREVSQlVGRkVSX0hFSUdIVCA9IDB4OEQ0MywK
KyAgICAgICAgUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCA9IDB4OEQ0NCwKKyAgICAgICAg
UkVOREVSQlVGRkVSX1JFRF9TSVpFID0gMHg4RDUwLAorICAgICAgICBSRU5ERVJCVUZGRVJfR1JF
RU5fU0laRSA9IDB4OEQ1MSwKKyAgICAgICAgUkVOREVSQlVGRkVSX0JMVUVfU0laRSA9IDB4OEQ1
MiwKKyAgICAgICAgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgPSAweDhENTMsCisgICAgICAgIFJF
TkRFUkJVRkZFUl9ERVBUSF9TSVpFID0gMHg4RDU0LAorICAgICAgICBSRU5ERVJCVUZGRVJfU1RF
TkNJTF9TSVpFID0gMHg4RDU1LAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVD
VF9UWVBFID0gMHg4Q0QwLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9O
QU1FID0gMHg4Q0QxLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVW
RUwgPSAweDhDRDIsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJF
X01BUF9GQUNFID0gMHg4Q0QzLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMCA9IDB4OENFMCwK
KyAgICAgICAgREVQVEhfQVRUQUNITUVOVCA9IDB4OEQwMCwKKyAgICAgICAgU1RFTkNJTF9BVFRB
Q0hNRU5UID0gMHg4RDIwLAorICAgICAgICBOT05FID0gMCwKKyAgICAgICAgRlJBTUVCVUZGRVJf
Q09NUExFVEUgPSAweDhDRDUsCisgICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVCA9IDB4OENENiwKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FU
VEFDSE1FTlQgPSAweDhDRDcsCisgICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5T
SU9OUyA9IDB4OENEOSwKKyAgICAgICAgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgPSAweDhDREQs
CisgICAgICAgIEZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQTYsCisgICAgICAgIFJFTkRFUkJV
RkZFUl9CSU5ESU5HID0gMHg4Q0E3LAorICAgICAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgPSAw
eDg0RTgsCisgICAgICAgIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OID0gMHgwNTA2LAor
CisgICAgICAgIC8vIFdlYkdMLXNwZWNpZmljIGVudW1zCisgICAgICAgIFVOUEFDS19GTElQX1lf
V0VCR0wgPSAweDkyNDAsCisgICAgICAgIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCA9
IDB4OTI0MSwKKyAgICAgICAgQ09OVEVYVF9MT1NUX1dFQkdMID0gMHg5MjQyLAorICAgICAgICBV
TlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzLAorICAgICAgICBCUk9X
U0VSX0RFRkFVTFRfV0VCR0wgPSAweDkyNDQsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlf
RElWSVNPUl9BTkdMRSA9IDB4ODhGRSwKKyAgICAgICAgCisgICAgICAgIC8vIFdlYkdMMiBjb25z
dGFudHMKKyAgICAgICAgUkVBRF9CVUZGRVIgPSAweDBDMDIsCisgICAgICAgIFVOUEFDS19ST1df
TEVOR1RIID0gMHgwQ0YyLAorICAgICAgICBVTlBBQ0tfU0tJUF9ST1dTID0gMHgwQ0YzLAorICAg
ICAgICBVTlBBQ0tfU0tJUF9QSVhFTFMgPSAweDBDRjQsCisgICAgICAgIFBBQ0tfUk9XX0xFTkdU
SCA9IDB4MEQwMiwKKyAgICAgICAgUEFDS19TS0lQX1JPV1MgPSAweDBEMDMsCisgICAgICAgIFBB
Q0tfU0tJUF9QSVhFTFMgPSAweDBEMDQsCisgICAgICAgIENPTE9SID0gMHgxODAwLAorICAgICAg
ICBERVBUSCA9IDB4MTgwMSwKKyAgICAgICAgU1RFTkNJTCA9IDB4MTgwMiwKKyAgICAgICAgUkVE
ID0gMHgxOTAzLAorICAgICAgICBSR0I4ID0gMHg4MDUxLAorICAgICAgICBSR0JBOCA9IDB4ODA1
OCwKKyAgICAgICAgUkdCMTBfQTIgPSAweDgwNTksCisgICAgICAgIFRFWFRVUkVfQklORElOR18z
RCA9IDB4ODA2QSwKKyAgICAgICAgVU5QQUNLX1NLSVBfSU1BR0VTID0gMHg4MDZELAorICAgICAg
ICBVTlBBQ0tfSU1BR0VfSEVJR0hUID0gMHg4MDZFLAorICAgICAgICBURVhUVVJFXzNEID0gMHg4
MDZGLAorICAgICAgICBURVhUVVJFX1dSQVBfUiA9IDB4ODA3MiwKKyAgICAgICAgTUFYXzNEX1RF
WFRVUkVfU0laRSA9IDB4ODA3MywKKyAgICAgICAgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVW
ID0gMHg4MzY4LAorICAgICAgICBNQVhfRUxFTUVOVFNfVkVSVElDRVMgPSAweDgwRTgsCisgICAg
ICAgIE1BWF9FTEVNRU5UU19JTkRJQ0VTID0gMHg4MEU5LAorICAgICAgICBURVhUVVJFX01JTl9M
T0QgPSAweDgxM0EsCisgICAgICAgIFRFWFRVUkVfTUFYX0xPRCA9IDB4ODEzQiwKKyAgICAgICAg
VEVYVFVSRV9CQVNFX0xFVkVMID0gMHg4MTNDLAorICAgICAgICBURVhUVVJFX01BWF9MRVZFTCA9
IDB4ODEzRCwKKyAgICAgICAgTUlOID0gMHg4MDA3LAorICAgICAgICBNQVggPSAweDgwMDgsCisg
ICAgICAgIERFUFRIX0NPTVBPTkVOVDI0ID0gMHg4MUE2LAorICAgICAgICBNQVhfVEVYVFVSRV9M
T0RfQklBUyA9IDB4ODRGRCwKKyAgICAgICAgVEVYVFVSRV9DT01QQVJFX01PREUgPSAweDg4NEMs
CisgICAgICAgIFRFWFRVUkVfQ09NUEFSRV9GVU5DID0gMHg4ODRELAorICAgICAgICBDVVJSRU5U
X1FVRVJZID0gMHg4ODY1LAorICAgICAgICBRVUVSWV9SRVNVTFQgPSAweDg4NjYsCisgICAgICAg
IFFVRVJZX1JFU1VMVF9BVkFJTEFCTEUgPSAweDg4NjcsCisgICAgICAgIFNUUkVBTV9SRUFEID0g
MHg4OEUxLAorICAgICAgICBTVFJFQU1fQ09QWSA9IDB4ODhFMiwKKyAgICAgICAgU1RBVElDX1JF
QUQgPSAweDg4RTUsCisgICAgICAgIFNUQVRJQ19DT1BZID0gMHg4OEU2LAorICAgICAgICBEWU5B
TUlDX1JFQUQgPSAweDg4RTksCisgICAgICAgIERZTkFNSUNfQ09QWSA9IDB4ODhFQSwKKyAgICAg
ICAgTUFYX0RSQVdfQlVGRkVSUyA9IDB4ODgyNCwKKyAgICAgICAgRFJBV19CVUZGRVIwID0gMHg4
ODI1LAorICAgICAgICBEUkFXX0JVRkZFUjEgPSAweDg4MjYsCisgICAgICAgIERSQVdfQlVGRkVS
MiA9IDB4ODgyNywKKyAgICAgICAgRFJBV19CVUZGRVIzID0gMHg4ODI4LAorICAgICAgICBEUkFX
X0JVRkZFUjQgPSAweDg4MjksCisgICAgICAgIERSQVdfQlVGRkVSNSA9IDB4ODgyQSwKKyAgICAg
ICAgRFJBV19CVUZGRVI2ID0gMHg4ODJCLAorICAgICAgICBEUkFXX0JVRkZFUjcgPSAweDg4MkMs
CisgICAgICAgIERSQVdfQlVGRkVSOCA9IDB4ODgyRCwKKyAgICAgICAgRFJBV19CVUZGRVI5ID0g
MHg4ODJFLAorICAgICAgICBEUkFXX0JVRkZFUjEwID0gMHg4ODJGLAorICAgICAgICBEUkFXX0JV
RkZFUjExID0gMHg4ODMwLAorICAgICAgICBEUkFXX0JVRkZFUjEyID0gMHg4ODMxLAorICAgICAg
ICBEUkFXX0JVRkZFUjEzID0gMHg4ODMyLAorICAgICAgICBEUkFXX0JVRkZFUjE0ID0gMHg4ODMz
LAorICAgICAgICBEUkFXX0JVRkZFUjE1ID0gMHg4ODM0LAorICAgICAgICBNQVhfRlJBR01FTlRf
VU5JRk9STV9DT01QT05FTlRTID0gMHg4QjQ5LAorICAgICAgICBNQVhfVkVSVEVYX1VOSUZPUk1f
Q09NUE9ORU5UUyA9IDB4OEI0QSwKKyAgICAgICAgU0FNUExFUl8zRCA9IDB4OEI1RiwKKyAgICAg
ICAgU0FNUExFUl8yRF9TSEFET1cgPSAweDhCNjIsCisgICAgICAgIEZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlQgPSAweDhCOEIsCisgICAgICAgIFBJWEVMX1BBQ0tfQlVGRkVSID0gMHg4
OEVCLAorICAgICAgICBQSVhFTF9VTlBBQ0tfQlVGRkVSID0gMHg4OEVDLAorICAgICAgICBQSVhF
TF9QQUNLX0JVRkZFUl9CSU5ESU5HID0gMHg4OEVELAorICAgICAgICBQSVhFTF9VTlBBQ0tfQlVG
RkVSX0JJTkRJTkcgPSAweDg4RUYsCisgICAgICAgIEZMT0FUX01BVDJ4MyA9IDB4OEI2NSwKKyAg
ICAgICAgRkxPQVRfTUFUMng0ID0gMHg4QjY2LAorICAgICAgICBGTE9BVF9NQVQzeDIgPSAweDhC
NjcsCisgICAgICAgIEZMT0FUX01BVDN4NCA9IDB4OEI2OCwKKyAgICAgICAgRkxPQVRfTUFUNHgy
ID0gMHg4QjY5LAorICAgICAgICBGTE9BVF9NQVQ0eDMgPSAweDhCNkEsCisgICAgICAgIFNSR0Ig
PSAweDhDNDAsCisgICAgICAgIFNSR0I4ID0gMHg4QzQxLAorICAgICAgICBTUkdCX0FMUEhBID0g
MHg4QzQyLAorICAgICAgICBTUkdCOF9BTFBIQTggPSAweDhDNDMsCisgICAgICAgIENPTVBBUkVf
UkVGX1RPX1RFWFRVUkUgPSAweDg4NEUsCisgICAgICAgIFJHQkEzMkYgPSAweDg4MTQsCisgICAg
ICAgIFJHQjMyRiA9IDB4ODgxNSwKKyAgICAgICAgUkdCQTE2RiA9IDB4ODgxQSwKKyAgICAgICAg
UkdCMTZGID0gMHg4ODFCLAorICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVIgPSAw
eDg4RkQsCisgICAgICAgIE1BWF9BUlJBWV9URVhUVVJFX0xBWUVSUyA9IDB4ODhGRiwKKyAgICAg
ICAgTUlOX1BST0dSQU1fVEVYRUxfT0ZGU0VUID0gMHg4OTA0LAorICAgICAgICBNQVhfUFJPR1JB
TV9URVhFTF9PRkZTRVQgPSAweDg5MDUsCisgICAgICAgIE1BWF9WQVJZSU5HX0NPTVBPTkVOVFMg
PSAweDhCNEIsCisgICAgICAgIFRFWFRVUkVfMkRfQVJSQVkgPSAweDhDMUEsCisgICAgICAgIFRF
WFRVUkVfQklORElOR18yRF9BUlJBWSA9IDB4OEMxRCwKKyAgICAgICAgUjExRl9HMTFGX0IxMEYg
PSAweDhDM0EsCisgICAgICAgIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgPSAweDhDM0Is
CisgICAgICAgIFJHQjlfRTUgPSAweDhDM0QsCisgICAgICAgIFVOU0lHTkVEX0lOVF81XzlfOV85
X1JFViA9IDB4OEMzRSwKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9NT0RFID0g
MHg4QzdGLAorICAgICAgICBNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVO
VFMgPSAweDhDODAsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUyA9IDB4OEM4
MywKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVCA9IDB4OEM4NCwKKyAg
ICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFID0gMHg4Qzg1LAorICAgICAgICBU
UkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOID0gMHg4Qzg4LAorICAgICAgICBS
QVNURVJJWkVSX0RJU0NBUkQgPSAweDhDODksCisgICAgICAgIE1BWF9UUkFOU0ZPUk1fRkVFREJB
Q0tfSU5URVJMRUFWRURfQ09NUE9ORU5UUyA9IDB4OEM4QSwKKyAgICAgICAgTUFYX1RSQU5TRk9S
TV9GRUVEQkFDS19TRVBBUkFURV9BVFRSSUJTID0gMHg4QzhCLAorICAgICAgICBJTlRFUkxFQVZF
RF9BVFRSSUJTID0gMHg4QzhDLAorICAgICAgICBTRVBBUkFURV9BVFRSSUJTID0gMHg4QzhELAor
ICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSID0gMHg4QzhFLAorICAgICAgICBUUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkcgPSAweDhDOEYsCisgICAgICAgIFJHQkEzMlVJ
ID0gMHg4RDcwLAorICAgICAgICBSR0IzMlVJID0gMHg4RDcxLAorICAgICAgICBSR0JBMTZVSSA9
IDB4OEQ3NiwKKyAgICAgICAgUkdCMTZVSSA9IDB4OEQ3NywKKyAgICAgICAgUkdCQThVSSA9IDB4
OEQ3QywKKyAgICAgICAgUkdCOFVJID0gMHg4RDdELAorICAgICAgICBSR0JBMzJJID0gMHg4RDgy
LAorICAgICAgICBSR0IzMkkgPSAweDhEODMsCisgICAgICAgIFJHQkExNkkgPSAweDhEODgsCisg
ICAgICAgIFJHQjE2SSA9IDB4OEQ4OSwKKyAgICAgICAgUkdCQThJID0gMHg4RDhFLAorICAgICAg
ICBSR0I4SSA9IDB4OEQ4RiwKKyAgICAgICAgUkVEX0lOVEVHRVIgPSAweDhEOTQsCisgICAgICAg
IFJHQl9JTlRFR0VSID0gMHg4RDk4LAorICAgICAgICBSR0JBX0lOVEVHRVIgPSAweDhEOTksCisg
ICAgICAgIFNBTVBMRVJfMkRfQVJSQVkgPSAweDhEQzEsCisgICAgICAgIFNBTVBMRVJfMkRfQVJS
QVlfU0hBRE9XID0gMHg4REM0LAorICAgICAgICBTQU1QTEVSX0NVQkVfU0hBRE9XID0gMHg4REM1
LAorICAgICAgICBVTlNJR05FRF9JTlRfVkVDMiA9IDB4OERDNiwKKyAgICAgICAgVU5TSUdORURf
SU5UX1ZFQzMgPSAweDhEQzcsCisgICAgICAgIFVOU0lHTkVEX0lOVF9WRUM0ID0gMHg4REM4LAor
ICAgICAgICBJTlRfU0FNUExFUl8yRCA9IDB4OERDQSwKKyAgICAgICAgSU5UX1NBTVBMRVJfM0Qg
PSAweDhEQ0IsCisgICAgICAgIElOVF9TQU1QTEVSX0NVQkUgPSAweDhEQ0MsCisgICAgICAgIElO
VF9TQU1QTEVSXzJEX0FSUkFZID0gMHg4RENGLAorICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExF
Ul8yRCA9IDB4OEREMiwKKyAgICAgICAgVU5TSUdORURfSU5UX1NBTVBMRVJfM0QgPSAweDhERDMs
CisgICAgICAgIFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkUgPSAweDhERDQsCisgICAgICAgIFVO
U0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZID0gMHg4REQ3LAorICAgICAgICBERVBUSF9DT01Q
T05FTlQzMkYgPSAweDhDQUMsCisgICAgICAgIERFUFRIMzJGX1NURU5DSUw4ID0gMHg4Q0FELAor
ICAgICAgICBGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYgPSAweDhEQUQsCisgICAgICAg
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkcgPSAweDgyMTAsCisgICAgICAg
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEUgPSAweDgyMTEsCisgICAgICAg
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkUgPSAweDgyMTIsCisgICAgICAgIEZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRSA9IDB4ODIxMywKKyAgICAgICAgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9CTFVFX1NJWkUgPSAweDgyMTQsCisgICAgICAgIEZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQUxQSEFfU0laRSA9IDB4ODIxNSwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9ERVBUSF9TSVpFID0gMHg4MjE2LAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X1NURU5DSUxfU0laRSA9IDB4ODIxNywKKyAgICAgICAgRlJBTUVCVUZGRVJfREVGQVVMVCA9IDB4
ODIxOCwKKyAgICAgICAgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UID0gMHg4MjFBLAorICAgICAg
ICBERVBUSF9TVEVOQ0lMID0gMHg4NEY5LAorICAgICAgICBVTlNJR05FRF9JTlRfMjRfOCA9IDB4
ODRGQSwKKyAgICAgICAgREVQVEgyNF9TVEVOQ0lMOCA9IDB4ODhGMCwKKyAgICAgICAgVU5TSUdO
RURfTk9STUFMSVpFRCA9IDB4OEMxNywKKyAgICAgICAgRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5H
ID0gMHg4Q0E2LCAvKiBTYW1lIGFzIEZSQU1FQlVGRkVSX0JJTkRJTkcgKi8KKyAgICAgICAgUkVB
RF9GUkFNRUJVRkZFUiA9IDB4OENBOCwKKyAgICAgICAgRFJBV19GUkFNRUJVRkZFUiA9IDB4OENB
OSwKKyAgICAgICAgUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0FBLAorICAgICAgICBS
RU5ERVJCVUZGRVJfU0FNUExFUyA9IDB4OENBQiwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9URVhUVVJFX0xBWUVSID0gMHg4Q0Q0LAorICAgICAgICBNQVhfQ09MT1JfQVRUQUNITUVO
VFMgPSAweDhDREYsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxID0gMHg4Q0UxLAorICAgICAg
ICBDT0xPUl9BVFRBQ0hNRU5UMiA9IDB4OENFMiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDMg
PSAweDhDRTMsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQ0ID0gMHg4Q0U0LAorICAgICAgICBD
T0xPUl9BVFRBQ0hNRU5UNSA9IDB4OENFNSwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDYgPSAw
eDhDRTYsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQ3ID0gMHg4Q0U3LAorICAgICAgICBDT0xP
Ul9BVFRBQ0hNRU5UOCA9IDB4OENFOCwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDkgPSAweDhD
RTksCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMCA9IDB4OENFQSwKKyAgICAgICAgQ09MT1Jf
QVRUQUNITUVOVDExID0gMHg4Q0VCLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTIgPSAweDhD
RUMsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMyA9IDB4OENFRCwKKyAgICAgICAgQ09MT1Jf
QVRUQUNITUVOVDE0ID0gMHg4Q0VFLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTUgPSAweDhD
RUYsCisgICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEUgPSAweDhENTYs
CisgICAgICAgIE1BWF9TQU1QTEVTID0gMHg4RDU3LAorICAgICAgICBIQUxGX0ZMT0FUID0gMHgx
NDBCLAorICAgICAgICBSRyA9IDB4ODIyNywKKyAgICAgICAgUkdfSU5URUdFUiA9IDB4ODIyOCwK
KyAgICAgICAgUjggPSAweDgyMjksCisgICAgICAgIFJHOCA9IDB4ODIyQiwKKyAgICAgICAgUjE2
RiA9IDB4ODIyRCwKKyAgICAgICAgUjMyRiA9IDB4ODIyRSwKKyAgICAgICAgUkcxNkYgPSAweDgy
MkYsCisgICAgICAgIFJHMzJGID0gMHg4MjMwLAorICAgICAgICBSOEkgPSAweDgyMzEsCisgICAg
ICAgIFI4VUkgPSAweDgyMzIsCisgICAgICAgIFIxNkkgPSAweDgyMzMsCisgICAgICAgIFIxNlVJ
ID0gMHg4MjM0LAorICAgICAgICBSMzJJID0gMHg4MjM1LAorICAgICAgICBSMzJVSSA9IDB4ODIz
NiwKKyAgICAgICAgUkc4SSA9IDB4ODIzNywKKyAgICAgICAgUkc4VUkgPSAweDgyMzgsCisgICAg
ICAgIFJHMTZJID0gMHg4MjM5LAorICAgICAgICBSRzE2VUkgPSAweDgyM0EsCisgICAgICAgIFJH
MzJJID0gMHg4MjNCLAorICAgICAgICBSRzMyVUkgPSAweDgyM0MsCisgICAgICAgIFZFUlRFWF9B
UlJBWV9CSU5ESU5HID0gMHg4NUI1LAorICAgICAgICBSOF9TTk9STSA9IDB4OEY5NCwKKyAgICAg
ICAgUkc4X1NOT1JNID0gMHg4Rjk1LAorICAgICAgICBSR0I4X1NOT1JNID0gMHg4Rjk2LAorICAg
ICAgICBSR0JBOF9TTk9STSA9IDB4OEY5NywKKyAgICAgICAgU0lHTkVEX05PUk1BTElaRUQgPSAw
eDhGOUMsCisgICAgICAgIENPUFlfUkVBRF9CVUZGRVIgPSAweDhGMzYsCisgICAgICAgIENPUFlf
V1JJVEVfQlVGRkVSID0gMHg4RjM3LAorICAgICAgICBDT1BZX1JFQURfQlVGRkVSX0JJTkRJTkcg
PSAweDhGMzYsIC8qIFNhbWUgYXMgQ09QWV9SRUFEX0JVRkZFUiAqLworICAgICAgICBDT1BZX1dS
SVRFX0JVRkZFUl9CSU5ESU5HID0gMHg4RjM3LCAvKiBTYW1lIGFzIENPUFlfV1JJVEVfQlVGRkVS
ICovCisgICAgICAgIFVOSUZPUk1fQlVGRkVSID0gMHg4QTExLAorICAgICAgICBVTklGT1JNX0JV
RkZFUl9CSU5ESU5HID0gMHg4QTI4LAorICAgICAgICBVTklGT1JNX0JVRkZFUl9TVEFSVCA9IDB4
OEEyOSwKKyAgICAgICAgVU5JRk9STV9CVUZGRVJfU0laRSA9IDB4OEEyQSwKKyAgICAgICAgTUFY
X1ZFUlRFWF9VTklGT1JNX0JMT0NLUyA9IDB4OEEyQiwKKyAgICAgICAgTUFYX0ZSQUdNRU5UX1VO
SUZPUk1fQkxPQ0tTID0gMHg4QTJELAorICAgICAgICBNQVhfQ09NQklORURfVU5JRk9STV9CTE9D
S1MgPSAweDhBMkUsCisgICAgICAgIE1BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUyA9IDB4OEEy
RiwKKyAgICAgICAgTUFYX1VOSUZPUk1fQkxPQ0tfU0laRSA9IDB4OEEzMCwKKyAgICAgICAgTUFY
X0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMgPSAweDhBMzEsCisgICAgICAgIE1B
WF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFMgPSAweDhBMzMsCisgICAgICAg
IFVOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQgPSAweDhBMzQsCisgICAgICAgIEFDVElW
RV9VTklGT1JNX0JMT0NLUyA9IDB4OEEzNiwKKyAgICAgICAgVU5JRk9STV9UWVBFID0gMHg4QTM3
LAorICAgICAgICBVTklGT1JNX1NJWkUgPSAweDhBMzgsCisgICAgICAgIFVOSUZPUk1fQkxPQ0tf
SU5ERVggPSAweDhBM0EsCisgICAgICAgIFVOSUZPUk1fT0ZGU0VUID0gMHg4QTNCLAorICAgICAg
ICBVTklGT1JNX0FSUkFZX1NUUklERSA9IDB4OEEzQywKKyAgICAgICAgVU5JRk9STV9NQVRSSVhf
U1RSSURFID0gMHg4QTNELAorICAgICAgICBVTklGT1JNX0lTX1JPV19NQUpPUiA9IDB4OEEzRSwK
KyAgICAgICAgVU5JRk9STV9CTE9DS19CSU5ESU5HID0gMHg4QTNGLAorICAgICAgICBVTklGT1JN
X0JMT0NLX0RBVEFfU0laRSA9IDB4OEE0MCwKKyAgICAgICAgVU5JRk9STV9CTE9DS19BQ1RJVkVf
VU5JRk9STVMgPSAweDhBNDIsCisgICAgICAgIFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1f
SU5ESUNFUyA9IDB4OEE0MywKKyAgICAgICAgVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZF
UlRFWF9TSEFERVIgPSAweDhBNDQsCisgICAgICAgIFVOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9C
WV9GUkFHTUVOVF9TSEFERVIgPSAweDhBNDYsCisgICAgICAgIElOVkFMSURfSU5ERVggPSAweEZG
RkZGRkZGLAorICAgICAgICBNQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTID0gMHg5MTIyLAor
ICAgICAgICBNQVhfRlJBR01FTlRfSU5QVVRfQ09NUE9ORU5UUyA9IDB4OTEyNSwKKyAgICAgICAg
TUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQgPSAweDkxMTEsCisgICAgICAgIE9CSkVDVF9UWVBFID0g
MHg5MTEyLAorICAgICAgICBTWU5DX0NPTkRJVElPTiA9IDB4OTExMywKKyAgICAgICAgU1lOQ19T
VEFUVVMgPSAweDkxMTQsCisgICAgICAgIFNZTkNfRkxBR1MgPSAweDkxMTUsCisgICAgICAgIFNZ
TkNfRkVOQ0UgPSAweDkxMTYsCisgICAgICAgIFNZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFID0g
MHg5MTE3LAorICAgICAgICBVTlNJR05BTEVEID0gMHg5MTE4LAorICAgICAgICBTSUdOQUxFRCA9
IDB4OTExOSwKKyAgICAgICAgQUxSRUFEWV9TSUdOQUxFRCA9IDB4OTExQSwKKyAgICAgICAgVElN
RU9VVF9FWFBJUkVEID0gMHg5MTFCLAorICAgICAgICBDT05ESVRJT05fU0FUSVNGSUVEID0gMHg5
MTFDLAorI2lmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgV0FJVF9GQUlMRURfV0lOID0gMHg5MTFE
LAorI2Vsc2UKKyAgICAgICAgV0FJVF9GQUlMRUQgPSAweDkxMUQsCisjZW5kaWYKKyAgICAgICAg
U1lOQ19GTFVTSF9DT01NQU5EU19CSVQgPSAweDAwMDAwMDAxLAorICAgICAgICBWRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1IgPSAweDg4RkUsCisgICAgICAgIEFOWV9TQU1QTEVTX1BBU1NFRCA9
IDB4OEMyRiwKKyAgICAgICAgQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSA9IDB4OEQ2
QSwKKyAgICAgICAgU0FNUExFUl9CSU5ESU5HID0gMHg4OTE5LAorICAgICAgICBSR0IxMF9BMlVJ
ID0gMHg5MDZGLAorICAgICAgICBURVhUVVJFX1NXSVpaTEVfUiA9IDB4OEU0MiwKKyAgICAgICAg
VEVYVFVSRV9TV0laWkxFX0cgPSAweDhFNDMsCisgICAgICAgIFRFWFRVUkVfU1dJWlpMRV9CID0g
MHg4RTQ0LAorICAgICAgICBURVhUVVJFX1NXSVpaTEVfQSA9IDB4OEU0NSwKKyAgICAgICAgR1JF
RU4gPSAweDE5MDQsCisgICAgICAgIEJMVUUgPSAweDE5MDUsCisgICAgICAgIElOVF8yXzEwXzEw
XzEwX1JFViA9IDB4OEQ5RiwKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLID0gMHg4RTIyLAor
ICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEID0gMHg4RTIzLAorICAgICAgICBUUkFO
U0ZPUk1fRkVFREJBQ0tfQUNUSVZFID0gMHg4RTI0LAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJB
Q0tfQklORElORyA9IDB4OEUyNSwKKyAgICAgICAgQ09NUFJFU1NFRF9SMTFfRUFDID0gMHg5Mjcw
LAorICAgICAgICBDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDID0gMHg5MjcxLAorICAgICAgICBD
T01QUkVTU0VEX1JHMTFfRUFDID0gMHg5MjcyLAorICAgICAgICBDT01QUkVTU0VEX1NJR05FRF9S
RzExX0VBQyA9IDB4OTI3MywKKyAgICAgICAgQ09NUFJFU1NFRF9SR0I4X0VUQzIgPSAweDkyNzQs
CisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfRVRDMiA9IDB4OTI3NSwKKyAgICAgICAgQ09NUFJF
U1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3NiwKKyAgICAgICAgQ09N
UFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgPSAweDkyNzcsCisgICAgICAg
IENPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMgPSAweDkyNzgsCisgICAgICAgIENPTVBSRVNTRURf
U1JHQjhfQUxQSEE4X0VUQzJfRUFDID0gMHg5Mjc5LAorICAgICAgICBURVhUVVJFX0lNTVVUQUJM
RV9GT1JNQVQgPSAweDkxMkYsCisgICAgICAgIE1BWF9FTEVNRU5UX0lOREVYID0gMHg4RDZCLAor
ICAgICAgICBOVU1fU0FNUExFX0NPVU5UUyA9IDB4OTM4MCwKKyAgICAgICAgVEVYVFVSRV9JTU1V
VEFCTEVfTEVWRUxTID0gMHg4MkRGLAorICAgICAgICBQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9J
TkRFWCA9IDB4OEQ2OSwKKyAgICAgICAgUFJJTUlUSVZFX1JFU1RBUlQgPSAweDhGOUQsCisKKyAg
ICAgICAgLy8gT3BlbkdMIEVTIDMgY29uc3RhbnRzLgorICAgICAgICBNQVBfUkVBRF9CSVQgPSAw
eDAwMDEsCisKKyAgICAgICAgLy8gTmVjZXNzYXJ5IGRlc2t0b3AgT3BlbkdMIGNvbnN0YW50cy4K
KyAgICAgICAgVEVYVFVSRV9SRUNUQU5HTEVfQVJCID0gMHg4NEY1CisgICAgfTsKKworICAgIGVu
dW0gY2xhc3MgRGF0YUZvcm1hdCA6IHVpbnQ4X3QgeworICAgICAgICBSR0JBOCA9IDAsCisgICAg
ICAgIFJHQkExNkxpdHRsZSwKKyAgICAgICAgUkdCQTE2QmlnLAorICAgICAgICBSR0JBMTZGLAor
ICAgICAgICBSR0JBMzJGLAorICAgICAgICBSR0I4LAorICAgICAgICBSR0IxNkxpdHRsZSwKKyAg
ICAgICAgUkdCMTZCaWcsCisgICAgICAgIFJHQjE2RiwKKyAgICAgICAgUkdCMzJGLAorICAgICAg
ICBCR1I4LAorICAgICAgICBCR1JBOCwKKyAgICAgICAgQkdSQTE2TGl0dGxlLAorICAgICAgICBC
R1JBMTZCaWcsCisgICAgICAgIEFSR0I4LAorICAgICAgICBBUkdCMTZMaXR0bGUsCisgICAgICAg
IEFSR0IxNkJpZywKKyAgICAgICAgQUJHUjgsCisgICAgICAgIFJHQkE1NTUxLAorICAgICAgICBS
R0JBNDQ0NCwKKyAgICAgICAgUkdCNTY1LAorICAgICAgICBSOCwKKyAgICAgICAgUjE2TGl0dGxl
LAorICAgICAgICBSMTZCaWcsCisgICAgICAgIFIxNkYsCisgICAgICAgIFIzMkYsCisgICAgICAg
IFJBOCwKKyAgICAgICAgUkExNkxpdHRsZSwKKyAgICAgICAgUkExNkJpZywKKyAgICAgICAgUkEx
NkYsCisgICAgICAgIFJBMzJGLAorICAgICAgICBBUjgsCisgICAgICAgIEFSMTZMaXR0bGUsCisg
ICAgICAgIEFSMTZCaWcsCisgICAgICAgIEE4LAorICAgICAgICBBMTZMaXR0bGUsCisgICAgICAg
IEExNkJpZywKKyAgICAgICAgQTE2RiwKKyAgICAgICAgQTMyRiwKKyAgICAgICAgTnVtRm9ybWF0
cworICAgIH07CisKKyAgICBlbnVtIGNsYXNzIERlc3RpbmF0aW9uIDogdWludDhfdCB7CisgICAg
ICAgIE9mZnNjcmVlbiwKKyAgICAgICAgRGlyZWN0bHlUb0hvc3RXaW5kb3csCisgICAgfTsKKwor
ICAgIGVudW0gY2xhc3MgQ2hhbm5lbEJpdHMgOiB1aW50OF90IHsKKyAgICAgICAgUmVkID0gMSwK
KyAgICAgICAgR3JlZW4gPSAyLAorICAgICAgICBCbHVlID0gNCwKKyAgICAgICAgQWxwaGEgPSA4
LAorICAgICAgICBEZXB0aCA9IDE2LAorICAgICAgICBTdGVuY2lsID0gMzIsCisgICAgICAgIFJH
QiA9IFJlZCB8IEdyZWVuIHwgQmx1ZSwKKyAgICAgICAgUkdCQSA9IFJHQiB8IEFscGhhLAorICAg
ICAgICBEZXB0aFN0ZW5jaWwgPSBEZXB0aCB8IFN0ZW5jaWwsCisgICAgfTsKKworICAgIC8vIFBv
c3NpYmxlIGFscGhhIG9wZXJhdGlvbnMgdGhhdCBtYXkgbmVlZCB0byBvY2N1ciBkdXJpbmcKKyAg
ICAvLyBwaXhlbCBwYWNraW5nLiBGSVhNRToga0FscGhhRG9Vbm11bHRpcGx5IGlzIGxvc3N5IGFu
ZCBtdXN0CisgICAgLy8gYmUgcmVtb3ZlZC4KKyAgICBlbnVtIEFscGhhT3AgOiB1aW50OF90IHsK
KyAgICAgICAgRG9Ob3RoaW5nLAorICAgICAgICBEb1ByZW11bHRpcGx5LAorICAgICAgICBEb1Vu
bXVsdGlwbHksCisgICAgfTsKKworICAgIGVudW0gY2xhc3MgRE9NU291cmNlIDogdWludDhfdCB7
CisgICAgICAgIEltYWdlLAorICAgICAgICBDYW52YXMsCisgICAgICAgIFZpZGVvLAorICAgICAg
ICBOb25lLAorICAgIH07CisKKyNpZiBVU0UoQU5HTEUpCisgICAgZW51bSB7CisgICAgICAgIC8v
IFRoZXNlIGNvbnN0YW50cyBhcmUgcmVkZWZpbmVkIGhlcmUgZnJvbSBBTkdMRSdzIE9wZW5HTCBF
UyBoZWFkZXJzIHRvCisgICAgICAgIC8vIHByb3ZpZGUgYSBzaW5nbGUgcGxhY2Ugd2hlcmUgbXVs
dGlwbGUgcG9ydGlvbnMgb2YgcGxhdGZvcm0gY29kZSBjYW4KKyAgICAgICAgLy8gcmVmZXJlbmNl
IHRoZW0uCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICBJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0
ID0gVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAvLyBhbHNvIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FO
R0xFCisgICAgICAgIEVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQgPSAweDM0NUIsIC8vIEVHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BTkdMRQorI2Vsc2UKKyAgICAgICAgSU9TdXJmYWNlVGV4dHVyZVRh
cmdldCA9IFRFWFRVUkVfMkQsCisgICAgICAgIEVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQgPSAw
eDMwNUYsIC8vIEVHTF9URVhUVVJFXzJECisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorICAgIH07
CisjZW5kaWYgLy8gVVNFKEFOR0xFKQorCisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisKKyAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGhhc0FscGhhKERhdGFGb3JtYXQgZm9ybWF0KQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBODoK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBMTZGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6
OkEzMkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkE4OgorICAgICAgICBjYXNlIERhdGFG
b3JtYXQ6OkFSODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTE2RjoKKyAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0OjpSQTMyRjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBODoKKyAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0OjpCR1JBODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpB
UkdCODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBQkdSODoKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0OjpSR0JBMTZGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkEzMkY6CisgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTQ0NDQ6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6
UkdCQTU1NTE6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgc3RhdGljIGJvb2wgaGFzQ29sb3IoRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE4Ogor
ICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkExNkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dDo6UkdCQTMyRjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0I4OgorICAgICAgICBjYXNl
IERhdGFGb3JtYXQ6OlJHQjE2RjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0IzMkY6Cisg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QkdSODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpC
R1JBODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBUkdCODoKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0OjpBQkdSODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBNTU1MToKKyAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBNDQ0NDoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpS
R0I1NjU6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6Ujg6CisgICAgICAgIGNhc2UgRGF0YUZv
cm1hdDo6UjE2RjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSMzJGOgorICAgICAgICBjYXNl
IERhdGFGb3JtYXQ6OlJBODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTE2RjoKKyAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0OjpSQTMyRjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpBUjg6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGlmIHRoZSBm
b3JtYXQgaXMgb25lIG9mIHRoZSBmb3JtYXRzIGZyb20gdGhlIEltYWdlRGF0YSBvciBET00gZWxl
bWVudHMuCisgICAgLy8gVGhlIGZvcm1hdHMgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIFJHQkE4
LgorICAgIC8vIFRoZSBmb3JtYXRzIGZyb20gRE9NIGVsZW1lbnRzIHZhcnkgd2l0aCBHcmFwaGlj
cyBwb3J0cy4gSXQgY2FuIG9ubHkgYmUgUkdCQTggb3IgQkdSQTggZm9yIG5vbi1DRyBwb3J0IHdo
aWxlIGEgbGl0dGxlIG1vcmUgZm9yIENHIHBvcnQuCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
Ym9vbCBzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEoRGF0YUZvcm1hdCBT
cmNGb3JtYXQpCisgICAgeworI2lmIFVTRShDRykKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICBy
ZXR1cm4gU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJHQkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRh
Rm9ybWF0OjpBUkdCOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCOAorICAgICAgICB8
fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0
OjpBUjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlI4IHx8IFNyY0Zvcm1hdCA9PSBEYXRh
Rm9ybWF0OjpBODsKKyNlbHNlCisgICAgLy8gVGhhdCBMSVRUTEVfRU5ESUFOIGNhc2UgaGFzIG1v
cmUgcG9zc2libGUgZm9ybWF0cyB0aGFuIEJJR19FTkRJQU4gY2FzZSBpcyBiZWNhdXNlIHNvbWUg
ZGVjb2RlZCBpbWFnZSBkYXRhIGlzIGFjdHVhbGx5IGJpZyBlbmRpYW4KKyAgICAvLyBldmVuIG9u
IGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlcy4KKyAgICByZXR1cm4gU3JjRm9ybWF0ID09IERh
dGFGb3JtYXQ6OkJHUkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBQkdSOCB8fCBTcmNG
b3JtYXQgPT0gRGF0YUZvcm1hdDo6QkdSOAorICAgICAgICB8fCBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdDo6UkdCQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFSR0I4IHx8IFNyY0Zvcm1h
dCA9PSBEYXRhRm9ybWF0OjpSR0I4CisgICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0
OjpSOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QTgKKyAgICAgICAgfHwgU3JjRm9ybWF0
ID09IERhdGFGb3JtYXQ6OlJBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QVI4OworI2Vu
ZGlmCisjZWxzZQorICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QkdSQTggfHwg
U3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJHQkE4OworI2VuZGlmCisgICAgfQorCisgICAgc3Ry
dWN0IEFjdGl2ZUluZm8geworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgR0MzRGVudW0g
dHlwZTsKKyAgICAgICAgR0MzRGludCBzaXplOworICAgIH07CisKKyAgICBHcmFwaGljc0NvbnRl
eHRHTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIERlc3RpbmF0aW9uID0gRGVzdGluYXRp
b246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0R0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRy
KTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTCgpID0gZGVmYXVsdDsKKworICAgIC8v
ID09PT09PT09PT0gV2ViR0wgMSBlbnRyeSBwb2ludHMuCisKKyAgICB2aXJ0dWFsIHZvaWQgYWN0
aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmlu
ZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdD
M0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBi
bGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRF
cXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0g
ZGZhY3RvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRz
dEFscGhhKSA9IDA7CisKKyAgICB2aXJ0dWFsIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0MzRGVudW0gdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKEdDM0RiaXRm
aWVsZCBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29sb3IoR0MzRGNsYW1wZiBy
ZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgcykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0Mz
RGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2Jq
ZWN0IGNyZWF0ZUJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3Jl
YXRlRnJhbWVidWZmZXIoKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0
ZVByb2dyYW0oKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlU2hhZGVy
KEdDM0RlbnVtKSA9IDA7CisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1
cmUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UoR0MzRGVudW0gbW9kZSkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNE
T2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRl
eCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNE
aW50cHRyIG9mZnNldCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGVuYWJsZShHQzNEZW51bSBj
YXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVp
bnQgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBmbHVzaCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5k
ZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50
LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpID0gMDsKKworICAg
IHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0QWN0
aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQs
IFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpID0gMDsKKworICAgIHZpcnR1YWwgR0MzRGludCBn
ZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgPSAwOworCisgICAgLy8gZ2V0UGFy
YW1ldGVyCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZh
bHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlZ2VyNjR2KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50NjQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFBy
b2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFt
ZSwgR0MzRGJvb2xlYW4qIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIEdDM0RlbnVtIGdldEVy
cm9yKCkgPSAwOworCisgICAgLy8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyCisg
ICAgdmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKSA9IDA7CisKKyAgICAvLyBnZXRQcm9ncmFtUGFyYW1ldGVyCisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisgICAgLy8g
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyCisgICAgdmlydHVhbCB2b2lkIGdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKSA9IDA7CisKKyAgICAvLyBnZXRTaGFkZXJQYXJhbWV0ZXIKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3Jt
M0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJh
bmdlLCBHQzNEaW50KiBwcmVjaXNpb24pID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGdldFNo
YWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICAvLyBnZXRUZXhQYXJhbWV0
ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkgPSAwOworCisgICAgLy8gZ2V0VW5pZm9ybQorICAgIHZpcnR1YWwgdm9pZCBnZXRV
bmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1pdihQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKSA9IDA7
CisKKyAgICB2aXJ0dWFsIEdDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOworCisgICAgLy8gZ2V0VmVydGV4QXR0cmliCisg
ICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRWZXJ0
ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KSA9IDA7CisKKyAgICB2aXJ0dWFsIEdDM0RzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIEdD
M0Rib29sZWFuIGlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIEdD
M0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApID0gMDsKKyAgICB2aXJ0dWFsIEdDM0Ri
b29sZWFuIGlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwg
R0MzRGJvb2xlYW4gaXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFs
IEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2
aXJ0dWFsIEdDM0Rib29sZWFuIGlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2
aXJ0dWFsIEdDM0Rib29sZWFuIGlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwaXhl
bFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFs
dWUsIEdDM0Rib29sZWFuIGludmVydCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzY2lzc29yKEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuYyhH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMs
IEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxNYXNrKEdDM0R1aW50IG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2tT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1l
dGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCB4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5p
Zm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCog
dikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0Mz
RGludCB5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVu
aWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0Rm
bG9hdCB6KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50
IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEdDM0RmbG9hdCB3KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00ZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEaW50IHosIEdDM0RpbnQgdykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGl2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgeCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5k
ZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRl
eEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBH
QzNEZmxvYXQqIHZhbHVlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0
IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBH
QzNEZmxvYXQgdykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVp
bnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNE
ZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNE
aW50cHRyIG9mZnNldCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0KEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRy
IHNpemUsIEdDM0RlbnVtIHVzYWdlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0Mz
RGVudW0gdXNhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQq
IGRhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkgPSAwOworCisgICAgdmlydHVhbCBib29sIHRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rz
aXplaSBwcmltY291bnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikgPSAw
OworCisgICAgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGNvbnRleHRBdHRyaWJ1dGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyczsgfQorICAgIHZvaWQgc2V0Q29udGV4dEF0dHJpYnV0ZXMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzJiBhdHRycykgeyBtX2F0dHJzID0gYXR0
cnM7IH0KKworICAgIC8vIFZlcnRleEFycmF5T2plY3QgY2FsbHMKKyAgICB2aXJ0dWFsIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXkoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIEdDM0Ri
b29sZWFuIGlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisjaWYgVVNFKE9Q
RU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKKyAgICB2aXJ0dWFsIHZvaWQgcHJpbWl0aXZlUmVzdGFy
dEluZGV4KEdDM0R1aW50KSA9IDA7CisjZW5kaWYKKworICAgIC8vIFN1cHBvcnQgZm9yIGV4dGVu
c2lvbnMuIFJldHVybnMgYSBub24tbnVsbCBvYmplY3QsIHRob3VnaCBub3QKKyAgICAvLyBhbGwg
bWV0aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJpbHkgYmUgc3VwcG9ydGVkIG9uIHRoZQor
ICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2FsbCBFeHRlbnNpb25zR0w6OnN1cHBvcnRz
KCkgdG8KKyAgICAvLyBkZXRlcm1pbmUgdGhpcy4KKyAgICB2aXJ0dWFsIEV4dGVuc2lvbnNHTCYg
Z2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIC8vID09PT09PT09PT0gV2ViR0wgMiBlbnRyeSBw
b2ludHMuCisKKyAgICB2aXJ0dWFsIHZvaWQqIG1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBh
Y2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIHVubWFwQnVmZmVyKEdDM0RlbnVt
IHRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51
bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciByZWFkT2Zmc2V0
LCBHQzNEaW50cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIpID0gMDsKKworICAgIC8vIGdl
dEludGVybmFsRm9ybWF0UGFyYW1ldGVyCisgICAgdmlydHVhbCB2b2lkIGdldEludGVybmFsZm9y
bWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHRleFN0b3Jh
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRHNpemVpIGRlcHRoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QWN0aXZlVW5p
Zm9ybXMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1
bmlmb3JtSW5kaWNlcywgR0MzRGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKSA9
IDA7CisKKyAgICAvLyA9PT09PT09PT09IE5vbi1XZWJHTCBiYXNlZCBlbnRyeSBwb2ludHMuCisK
KyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShHQzNEZW51
bSk7CisgICAgc3RhdGljIHVuc2lnbmVkIGdldENsZWFyQml0c0J5Rm9ybWF0KEdDM0RlbnVtKTsK
KworICAgIHN0YXRpYyB1aW50OF90IGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwor
CisgICAgRGVzdGluYXRpb24gZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uOyB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIG1fYXR0
cnM7CisgICAgRGVzdGluYXRpb24gbV9kZXN0aW5hdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5MjVhMzVjZWYzYzkzNDg4Zjg4MDRjZTM3YjNlMzgyOWMzMmQzOGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBHcmFwaGljc0NvbnRleHRHTFBvd2Vy
UHJlZmVyZW5jZSB7CisgICAgRGVmYXVsdCwKKyAgICBMb3dQb3dlciwKKyAgICBIaWdoUGVyZm9y
bWFuY2UKK307CisKK3N0cnVjdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgeworICAgIC8v
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMKKyAgICBib29sIGFscGhhIHsgdHJ1ZSB9OworICAgIGJv
b2wgZGVwdGggeyB0cnVlIH07CisgICAgYm9vbCBzdGVuY2lsIHsgZmFsc2UgfTsKKyAgICBib29s
IGFudGlhbGlhcyB7IHRydWUgfTsKKyAgICBib29sIHByZW11bHRpcGxpZWRBbHBoYSB7IHRydWUg
fTsKKyAgICBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlciB7IGZhbHNlIH07CisgICAgYm9vbCBm
YWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IHsgZmFsc2UgfTsKKyAgICB1c2luZyBQb3dlclBy
ZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTsKKyAgICBQb3dlclBy
ZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlIHsgUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0IH07CisK
KyAgICAvLyBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCisgICAgYm9vbCBzaGFyZVJlc291cmNlcyB7
IHRydWUgfTsKKyAgICBib29sIGlzV2ViR0wyIHsgZmFsc2UgfTsKKyAgICBib29sIG5vRXh0ZW5z
aW9ucyB7IGZhbHNlIH07CisgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbyB7IDEgfTsKKyAgICBQ
b3dlclByZWZlcmVuY2UgaW5pdGlhbFBvd2VyUHJlZmVyZW5jZSB7IFBvd2VyUHJlZmVyZW5jZTo6
RGVmYXVsdCB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDBlOGRhZjFlYTk1NTg5YzUzNDBlMDI2ZTQ0Njg1NWE1
MTEyYmMwNTYuLjFhMGY4MTZmZGE4MDMwMjc5NmFhM2EzZTU5YjZkZjkxOTk1ZDAzYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAg
LTE5MSw3ICsxOTEsNyBAQCBQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXll
cigpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCkKK2Jvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCAx
MTg4MGNhMTg1NjgyZTM0MGEwNTg1ZGYxZTAxZTUxNTk5ZDAyMTU0Li41MzMzY2Y0ZWMyMjhmOWRi
MzczZjI1OGU2YjljN2I5ZWU0ZmM4YWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogY2xhc3Mg
SW1hZ2U7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBJbnRQb2ludDsKQEAgLTEzNCw3ICsxMzQs
NyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2Yg
dGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawogICAg
IC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdO
RURfQllURSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29s
KTsKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCk7CiAK
ICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VC
dWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KICAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCA2
MzU1NzgyNGFmMzZiMzQwZmMyYTNiOWEwOWMwMWFlNTE1ZGM1ZTFjLi4wYTM1M2NiYzIxOThhN2Fl
Y2UyOWUyOTM0MzdmZDdhYTY0N2Y5ZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC05NTUsNyArOTU1LDcgQEAgdm9pZCBNZWRp
YVBsYXllcjo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBwLCBj
b25zdCBGbG9hdFJlY3QKICAgICBtX3ByaXZhdGUtPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0
KHAsIHIpOwogfQogCi1ib29sIE1lZGlhUGxheWVyOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgZmxpcFkpCitib29sIE1lZGlhUGxheWVyOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0
Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29weVZp
ZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKGNvbnRleHQsIHRleHR1cmUsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZ
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5o
CmluZGV4IDBjN2RkOWI2MGU2ZTAwZWNlOWE5MDViM2QwNDgwZTMzNjA2OGFiYTkuLjc2MWU1MWRm
ZTVmODdlYmMyODkxYjMzNDkxMjFmOTcyMWI5NWM5MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyOwogY2xhc3MgQ0RNSW5zdGFu
Y2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOwogY2xhc3MgTGVnYWN5Q0RNU2Vzc2lvbkNs
aWVudDsKQEAgLTQyMSw3ICs0MjEsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGRlc3RpbmF0aW9u
IHRleHR1cmUgbWF5IG5lZWQgdG8gYmUgcmVzaXplZCB0byB0byB0aGUgZGltZW5zaW9ucyBvZiB0
aGUgc291cmNlIHRleHR1cmUgb3IgcmUtZGVmaW5lZCB0byB0aGUgcmVxdWlyZWQgaW50ZXJuYWxG
b3JtYXQuCiAgICAgLy8gVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3Jt
YXQgc2hvdWQgYmUgUkdCIG9yIFJHQkEsIHR5cGUgc2hvdWxkIGJlIFVOU0lHTkVEX0JZVEUgYW5k
IGxldmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUuCiAKLSAg
ICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RCosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOworICAgIGJvb2wgY29weVZp
ZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggNjJjN2RkMDJmYmYz
ZmIxZmFhODM1MzFlMjczMGZmMWU1MzI1MjdhMy4uYjAwM2IxYzFhN2IwZDY4ODE4MzMzMGExZjA1
MGQzNGJmM2I4NmQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTE1Nyw3ICsxNTcsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFw
aGljc0NvbnRleHQmIGMsIGNvbnN0IEZsb2F0UmVjdCYgcikgeyBwYWludChjLCByKTsgfQotICAg
IHZpcnR1YWwgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0s
IEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIGJvb2wsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgeyBy
ZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFByZWxvYWQoTWVkaWFQbGF5
ZXI6OlByZWxvYWQpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvT3BlbkdMU2hpbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
T3BlbkdMU2hpbXMuY3BwCmluZGV4IGY3OTc2ZTYxZGQ4NTI0NmQyZjRlMjc2MmM4YzE4N2UwOTk4
MDRkYzUuLjUyODBiZWYxZTczMTNkZjVmNmQyMjRiM2Q2ZDU4MTg1MWVhNzcyZTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAKQEAgLTE3
LDcgKzE3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaWYgRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfM0QpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKICNkZWZp
bmUgRElTQUJMRV9TSElNUwogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCkBAIC0yMzAsNCArMjMw
LDQgQEAgYm9vbCBpbml0aWFsaXplT3BlbkdMU2hpbXMoKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNlbmRpZiAvLyBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xFLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhNDBjYjkwOTk2MjE3MjJkNjIyNzM1ZmJmYThkNDM0
MGY3OGIzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoQU5HTEUpCi0j
aW5jbHVkZSAiRXh0ZW5zaW9uczNEQU5HTEUuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCi0KLSNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5o
PgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzNfMF9hdXRvZ2VuLmg+Ci0vLyBT
a2lwIHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50
cyBmb3Igbm93LgotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0Ci0jZGVmaW5lIEdM
X0FOR0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKLXR5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0
OwotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmg+Ci0KLS8v
IE5vdGU6IHRoaXMgZmlsZSBjYW4ndCBiZSBjb21waWxlZCBpbiB0aGUgc2FtZSB1bmlmaWVkIHNv
dXJjZSBmaWxlCi0vLyBhcyBvdGhlcnMgd2hpY2ggaW5jbHVkZSB0aGUgc3lzdGVtJ3MgT3BlbkdM
IGhlYWRlcnMuCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRXh0ZW5zaW9uczNEQU5HTEU6OkV4
dGVuc2lvbnMzREFOR0xFKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBib29sIHVzZUluZGV4
ZWRHZXRTdHJpbmcpCi0gICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxz
ZSkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9pc05WSURJQShmYWxzZSkKLSAg
ICAsIG1faXNBTUQoZmFsc2UpCi0gICAgLCBtX2lzSW50ZWwoZmFsc2UpCi0gICAgLCBtX2lzSW1h
Z2luYXRpb24oZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9u
KGZhbHNlKQotICAgICwgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoZmFs
c2UpCi0gICAgLCBtX3VzZUluZGV4ZWRHZXRTdHJpbmcodXNlSW5kZXhlZEdldFN0cmluZykKLXsK
LSAgICAvLyBGSVhNRTogaWRlYWxseSwgcmVtb3ZlIHRoaXMgaW5pdGlhbGl6YXRpb24gYWx0b2dl
dGhlci4gQU5HTEUKLSAgICAvLyBzdWJzdW1lcyB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGdyYXBo
aWNzIGRyaXZlciB3b3JrYXJvdW5kcy4KLSAgICBtX3ZlbmRvciA9IFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdMX1ZFTkRPUikpKTsKLSAgICBtX3Jl
bmRlcmVyID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJp
bmcoR0xfUkVOREVSRVIpKSk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB2ZW5kb3JDb21wb25lbnRz
ID0gbV92ZW5kb3IuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5zcGxpdCgnICcpOwotICAgIGlm
ICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJudmlkaWEiKSkKLSAgICAgICAgbV9pc05WSURJ
QSA9IHRydWU7Ci0gICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImF0aSIpIHx8IHZl
bmRvckNvbXBvbmVudHMuY29udGFpbnMoImFtZCIpKQotICAgICAgICBtX2lzQU1EID0gdHJ1ZTsK
LSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiaW50ZWwiKSkKLSAgICAgICAgbV9p
c0ludGVsID0gdHJ1ZTsKLSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiaW1hZ2lu
YXRpb24iKSkKLSAgICAgICAgbV9pc0ltYWdpbmF0aW9uID0gdHJ1ZTsKLX0KLQotRXh0ZW5zaW9u
czNEQU5HTEU6On5FeHRlbnNpb25zM0RBTkdMRSgpID0gZGVmYXVsdDsKLQotYm9vbCBFeHRlbnNp
b25zM0RBTkdMRTo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmICghbV9p
bml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCi0gICAgICAgIGluaXRpYWxpemVBdmFpbGFi
bGVFeHRlbnNpb25zKCk7Ci0KLSAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Ci19
Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBu
YW1lKQotewotICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBh
bHJlYWR5KS4KLSAgICBpZiAobV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkg
JiYgIW1fZW5hYmxlZEV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgZ2w6OlJlcXVlc3RFeHRlbnNpb25B
TkdMRShuYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgbV9lbmFibGVkRXh0ZW5zaW9ucy5h
ZGQobmFtZSk7Ci0gICAgfQotfQotCi1ib29sIEV4dGVuc2lvbnMzREFOR0xFOjppc0VuYWJsZWQo
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
Y29udGFpbnMobmFtZSkgfHwgbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKLX0K
LQotaW50IEV4dGVuc2lvbnMzREFOR0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKLXsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotfQotCi1TdHJpbmcgRXh0
ZW5zaW9uczNEQU5HTEU6OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKLXsKLSAgICBpbnQgc291cmNlTGVuZ3RoID0gMDsKLSAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KHNoYWRlciwgR0xfVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdU
SF9BTkdMRSwgJnNvdXJjZUxlbmd0aCk7Ci0gICAgaWYgKCFzb3VyY2VMZW5ndGgpCi0gICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUoc291cmNlTGVu
Z3RoKTsgLy8gR0xfVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRSBpbmNsdWRl
cyBudWxsIHRlcm1pbmF0aW9uLgotICAgIGludCByZXR1cm5lZExlbmd0aCA9IDA7Ci0gICAgZ2w6
OkdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIsIHNvdXJjZUxlbmd0aCwgJnJl
dHVybmVkTGVuZ3RoLCBuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFyZXR1cm5lZExlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgLy8gcmV0dXJuZWRMZW5ndGggZG9lcyBu
b3QgaW5jbHVkZSB0aGUgbnVsbCB0ZXJtaW5hdG9yLgotICAgIEFTU0VSVChyZXR1cm5lZExlbmd0
aCA9PSBzb3VyY2VMZW5ndGggLSAxKTsKLSAgICByZXR1cm4gU3RyaW5nKG5hbWUuZGF0YSgpLCBy
ZXR1cm5lZExlbmd0aCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmluaXRpYWxpemVB
dmFpbGFibGVFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAobV91c2VJbmRleGVkR2V0U3RyaW5nKSB7
Ci0gICAgICAgIEdMaW50IG51bUV4dGVuc2lvbnMgPSAwOwotICAgICAgICBnbDo6R2V0SW50ZWdl
cnYoR0xfTlVNX0VYVEVOU0lPTlMsICZudW1FeHRlbnNpb25zKTsKLSAgICAgICAgZm9yIChHTGlu
dCBpID0gMDsgaSA8IG51bUV4dGVuc2lvbnM7ICsraSkKLSAgICAgICAgICAgIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5hZGQoZ2w6OkdldFN0cmluZ2koR0xfRVhURU5TSU9OUywgaSkpOwotICAgICAg
ICBnbDo6R2V0SW50ZWdlcnYoR0xfTlVNX1JFUVVFU1RBQkxFX0VYVEVOU0lPTlNfQU5HTEUsICZu
dW1FeHRlbnNpb25zKTsKLSAgICAgICAgZm9yIChHTGludCBpID0gMDsgaSA8IG51bUV4dGVuc2lv
bnM7ICsraSkKLSAgICAgICAgICAgIG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmFkZChnbDo6R2V0
U3RyaW5naShHTF9SRVFVRVNUQUJMRV9FWFRFTlNJT05TX0FOR0xFLCBpKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7Ci0g
ICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgnICcp
KQotICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChleHRlbnNpb24pOwotICAg
ICAgICBleHRlbnNpb25zU3RyaW5nID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGdsOjpHZXRTdHJpbmcoR0xfUkVRVUVTVEFCTEVfRVhURU5TSU9OU19BTkdMRSkpKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBleHRlbnNpb24gOiBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCcgJykp
Ci0gICAgICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsKLSAg
ICB9Ci0gICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOwotfQotCi12
b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpyZWFkblBpeGVsc0VYVChpbnQsIGludCwgR0MzRHNpemVp
LCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRHNpemVpLCB2b2lkICopCi17Ci0g
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19
Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQsIGlu
dCwgR0MzRHNpemVpLCBmbG9hdCAqKQotewotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpn
ZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50LCBpbnQsIEdDM0RzaXplaSwgaW50ICopCi17Ci0gICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19Ci0K
LXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25n
IHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBs
b25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcg
ZmlsdGVyKQotewotICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRpbmcgc3VwcG9ydCBmb3IgQVBQ
TEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgZ2w6OkJsaXRGcmFtZWJ1ZmZlckFOR0xF
KHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwg
bWFzaywgZmlsdGVyKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNh
bXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVBTkdMRSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zM0RBTkdMRTo6Y3JlYXRlVmVy
dGV4QXJyYXlPRVMoKQotewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgR0x1aW50IGFycmF5ID0gMDsKLSAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJh
eSk7Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpkZWxl
dGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJy
YXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2w6OkRlbGV0ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwotfQotCi1HQzNE
Ym9vbGVhbiBFeHRlbnNpb25zM0RBTkdMRTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsK
LQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJ
c1ZlcnRleEFycmF5T0VTKGFycmF5KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6Ymlu
ZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmluZFZlcnRleEFycmF5T0VTKGFycmF5
KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29u
c3QgU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5k
IGFkZCBHTF9FWFRfZGVidWdfbWFya2VyIGluIHN1cHBvcnRzKCkuCi0gICAgcmV0dXJuOwotfQot
Ci12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5n
JikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9F
WFRfZGVidWdfbWFya2VyIGluIHN1cHBvcnRzKCkuCi0gICAgcmV0dXJuOwotfQotCi12b2lkIEV4
dGVuc2lvbnMzREFOR0xFOjpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQotewotICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4g
c3VwcG9ydHMoKS4KLSAgICByZXR1cm47Ci19Ci0KLWJvb2wgRXh0ZW5zaW9uczNEQU5HTEU6OnN1
cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpIHx8IG1fcmVxdWVzdGFibGVFeHRlbnNpb25z
LmNvbnRhaW5zKG5hbWUpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpkcmF3QnVmZmVy
c0VYVChHQzNEc2l6ZWkgbiwgY29uc3QgR0MzRGVudW0qIGJ1ZnMpCi17Ci0gICAgZ2w6OkRyYXdC
dWZmZXJzRVhUKG4sIGJ1ZnMpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpkcmF3QXJy
YXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNv
dW50LCBwcmltY291bnQpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZEFO
R0xFKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19j
YXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKLX0KLQotdm9pZCBFeHRlbnNpb25z
M0RBTkdMRTo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2
aXNvcikKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpW
ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwotfQotCi1TdHJpbmcgRXh0
ZW5zaW9uczNEQU5HTEU6OmdldEV4dGVuc2lvbnMoKQotewotICAgIHJldHVybiBTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF8zRCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xFLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NDU4NTk1M2Y0ZTVmOWRhOGNkNTdlY2U5OWNlOTMwNTc2
NWU3OTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEV4dGVuc2lvbnMzREFOR0xFIDogcHVibGljIEV4dGVuc2lvbnMzRCB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5
IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRh
dGlvbnMuCi0gICAgRXh0ZW5zaW9uczNEQU5HTEUoR3JhcGhpY3NDb250ZXh0M0QqLCBib29sIHVz
ZUluZGV4ZWRHZXRTdHJpbmcgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB+RXh0ZW5zaW9uczNEQU5H
TEUoKTsKLQotICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgotICAgIGJvb2wgc3VwcG9ydHMo
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0
cmluZyYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJy
aWRlOwotICAgIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgb3ZlcnJpZGU7Ci0KLSAg
ICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAg
ICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdC
dWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsKLQotICAgIFN0
cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kw
LCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRz
dFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVy
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBw
cmltY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWlu
dCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFWFQgUm9idXN0
bmVzcyAtIHVzZXMgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi0gICAgdm9pZCByZWFkblBp
eGVsc0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAq
ZGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dy
YW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0KLSAgICBi
b29sIGlzTlZJRElBKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc05WSURJQTsgfQotICAgIGJvb2wg
aXNBTUQoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzQU1EOyB9Ci0gICAgYm9vbCBpc0ludGVsKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV9pc0ludGVsOyB9Ci0gICAgYm9vbCBpc0ltYWdpbmF0aW9uKCkg
b3ZlcnJpZGUgeyByZXR1cm4gbV9pc0ltYWdpbmF0aW9uOyB9Ci0gICAgU3RyaW5nIHZlbmRvcigp
IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVuZG9yOyB9Ci0KLSAgICBib29sIHJlcXVpcmVzQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc0J1aWx0SW5G
dW5jdGlvbkVtdWxhdGlvbjsgfQotICAgIGJvb2wgcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRl
eHR1cmVTaXplKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVt
VGV4dHVyZVNpemU7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFdURjo6U3RyaW5nJik7Ci0gICAgU3RyaW5nIGdldEV4dGVuc2lvbnMoKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOwotICAgIGJvb2wgbV9p
bml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fYXZh
aWxhYmxlRXh0ZW5zaW9uczsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJsZUV4dGVu
c2lvbnM7Ci0gICAgSGFzaFNldDxTdHJpbmc+IG1fZW5hYmxlZEV4dGVuc2lvbnM7Ci0KLSAgICAv
LyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHQzRC4KLSAgICBHcmFwaGljc0Nv
bnRleHQzRCogbV9jb250ZXh0OwotCi0gICAgYm9vbCBtX2lzTlZJRElBOwotICAgIGJvb2wgbV9p
c0FNRDsKLSAgICBib29sIG1faXNJbnRlbDsKLSAgICBib29sIG1faXNJbWFnaW5hdGlvbjsKLSAg
ICBib29sIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247Ci0gICAgYm9vbCBtX3Jl
cXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZTsKLQotICAgIGJvb2wgbV91c2VJbmRl
eGVkR2V0U3RyaW5nIHsgZmFsc2UgfTsKLQotICAgIFN0cmluZyBtX3ZlbmRvcjsKLSAgICBTdHJp
bmcgbV9yZW5kZXJlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNH
TEFOR0xFLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzUxM2FiZWQ5OGJmNGU3NDI0NTkwOWUyM2Y2NDE2NjBl
NjY1OTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYm
IFVTRShBTkdMRSkKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50
c19nbGVzXzJfMF9hdXRvZ2VuLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNf
M18wX2F1dG9nZW4uaD4KKy8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0
IGNvbnRleHQgZW50cnkgcG9pbnRzIGZvciBub3cuCisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0
X2NvbnRleHQKKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQordHlwZWRl
ZiB2b2lkKiBHTGVnbENvbnRleHQ7CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNf
ZXh0X2F1dG9nZW4uaD4KKworLy8gTm90ZTogdGhpcyBmaWxlIGNhbid0IGJlIGNvbXBpbGVkIGlu
IHRoZSBzYW1lIHVuaWZpZWQgc291cmNlIGZpbGUKKy8vIGFzIG90aGVycyB3aGljaCBpbmNsdWRl
IHRoZSBzeXN0ZW0ncyBPcGVuR0wgaGVhZGVycy4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitF
eHRlbnNpb25zR0xBTkdMRTo6RXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQsIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZykKKyAgICA6IG1faW5pdGlhbGl6
ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgLCBtX2lzTlZJRElBKGZhbHNlKQorICAgICwgbV9pc0FNRChmYWxzZSkKKyAgICAsIG1faXNJ
bnRlbChmYWxzZSkKKyAgICAsIG1faXNJbWFnaW5hdGlvbihmYWxzZSkKKyAgICAsIG1fcmVxdWly
ZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24oZmFsc2UpCisgICAgLCBtX3JlcXVpcmVzUmVzdHJp
Y3RlZE1heGltdW1UZXh0dXJlU2l6ZShmYWxzZSkKKyAgICAsIG1fdXNlSW5kZXhlZEdldFN0cmlu
Zyh1c2VJbmRleGVkR2V0U3RyaW5nKQoreworICAgIC8vIEZJWE1FOiBpZGVhbGx5LCByZW1vdmUg
dGhpcyBpbml0aWFsaXphdGlvbiBhbHRvZ2V0aGVyLiBBTkdMRQorICAgIC8vIHN1YnN1bWVzIHRo
ZSByZXNwb25zaWJpbGl0eSBmb3IgZ3JhcGhpY3MgZHJpdmVyIHdvcmthcm91bmRzLgorICAgIG1f
dmVuZG9yID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJp
bmcoR0xfVkVORE9SKSkpOworICAgIG1fcmVuZGVyZXIgPSBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9SRU5ERVJFUikpKTsKKworICAgIFZlY3Rv
cjxTdHJpbmc+IHZlbmRvckNvbXBvbmVudHMgPSBtX3ZlbmRvci5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZSgpLnNwbGl0KCcgJyk7CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoIm52
aWRpYSIpKQorICAgICAgICBtX2lzTlZJRElBID0gdHJ1ZTsKKyAgICBpZiAodmVuZG9yQ29tcG9u
ZW50cy5jb250YWlucygiYXRpIikgfHwgdmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiYW1kIikp
CisgICAgICAgIG1faXNBTUQgPSB0cnVlOworICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRh
aW5zKCJpbnRlbCIpKQorICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOworICAgIGlmICh2ZW5kb3JD
b21wb25lbnRzLmNvbnRhaW5zKCJpbWFnaW5hdGlvbiIpKQorICAgICAgICBtX2lzSW1hZ2luYXRp
b24gPSB0cnVlOworfQorCitFeHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xFKCkg
PSBkZWZhdWx0OworCitib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykK
KyAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKworICAgIHJldHVybiBz
dXBwb3J0c0V4dGVuc2lvbihuYW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZW5z
dXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gRW5hYmxlIHN1cHBvcnQg
aW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpLgorICAgIGlmIChtX3JlcXVlc3RhYmxl
RXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAmJiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlu
cyhuYW1lKSkgeworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
ICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKG5hbWUuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICBtX2VuYWJsZWRFeHRlbnNpb25zLmFkZChuYW1lKTsKKyAgICB9Cit9CisKK2Jvb2wgRXh0
ZW5zaW9uc0dMQU5HTEU6OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSB8fCBtX2VuYWJsZWRFeHRl
bnNpb25zLmNvbnRhaW5zKG5hbWUpOworfQorCitpbnQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldEdy
YXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6
Tk9fRVJST1I7Cit9CisKK1N0cmluZyBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIGludCBzb3Vy
Y2VMZW5ndGggPSAwOworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9UUkFO
U0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291cmNlTGVuZ3RoKTsKKyAgICBp
ZiAoIXNvdXJjZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgVmVj
dG9yPEdMY2hhcj4gbmFtZShzb3VyY2VMZW5ndGgpOyAvLyBHTF9UUkFOU0xBVEVEX1NIQURFUl9T
T1VSQ0VfTEVOR1RIX0FOR0xFIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgaW50IHJl
dHVybmVkTGVuZ3RoID0gMDsKKyAgICBnbDo6R2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KHNoYWRlciwgc291cmNlTGVuZ3RoLCAmcmV0dXJuZWRMZW5ndGgsIG5hbWUuZGF0YSgpKTsKKyAg
ICBpZiAoIXJldHVybmVkTGVuZ3RoKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAg
ICAvLyByZXR1cm5lZExlbmd0aCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBudWxsIHRlcm1pbmF0b3Iu
CisgICAgQVNTRVJUKHJldHVybmVkTGVuZ3RoID09IHNvdXJjZUxlbmd0aCAtIDEpOworICAgIHJl
dHVybiBTdHJpbmcobmFtZS5kYXRhKCksIHJldHVybmVkTGVuZ3RoKTsKK30KKwordm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKQoreworICAgIGlm
IChtX3VzZUluZGV4ZWRHZXRTdHJpbmcpIHsKKyAgICAgICAgR0xpbnQgbnVtRXh0ZW5zaW9ucyA9
IDA7CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9OVU1fRVhURU5TSU9OUywgJm51bUV4dGVu
c2lvbnMpOworICAgICAgICBmb3IgKEdMaW50IGkgPSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsgKytp
KQorICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChnbDo6R2V0U3RyaW5naShH
TF9FWFRFTlNJT05TLCBpKSk7CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9OVU1fUkVRVUVT
VEFCTEVfRVhURU5TSU9OU19BTkdMRSwgJm51bUV4dGVuc2lvbnMpOworICAgICAgICBmb3IgKEdM
aW50IGkgPSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsgKytpKQorICAgICAgICAgICAgbV9yZXF1ZXN0
YWJsZUV4dGVuc2lvbnMuYWRkKGdsOjpHZXRTdHJpbmdpKEdMX1JFUVVFU1RBQkxFX0VYVEVOU0lP
TlNfQU5HTEUsIGkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0
cmluZyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgZm9yIChhdXRvJiBleHRlbnNpb24gOiBl
eHRlbnNpb25zU3RyaW5nLnNwbGl0KCcgJykpCisgICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuYWRkKGV4dGVuc2lvbik7CisgICAgICAgIGV4dGVuc2lvbnNTdHJpbmcgPSBTdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9SRVFVRVNUQUJM
RV9FWFRFTlNJT05TX0FOR0xFKSkpOworICAgICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4
dGVuc2lvbnNTdHJpbmcuc3BsaXQoJyAnKSkKKyAgICAgICAgICAgIG1fcmVxdWVzdGFibGVFeHRl
bnNpb25zLmFkZChleHRlbnNpb24pOworICAgIH0KKyAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxl
RXh0ZW5zaW9ucyA9IHRydWU7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRuUGl4
ZWxzRVhUKGludCwgaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEc2l6ZWksIHZvaWQgKikKK3sKKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0
blVuaWZvcm1mdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGZsb2F0ICopCit7CisgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQsIGludCwg
R0MzRHNpemVpLCBpbnQgKikKK3sKKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmxpdEZy
YW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEs
IGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVk
IGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCit7CisgICAgLy8gRklYTUU6IGNvbnNp
ZGVyIGFkZGluZyBzdXBwb3J0IGZvciBBUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZS4KKyAg
ICBnbDo6QmxpdEZyYW1lYnVmZmVyQU5HTEUoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRz
dFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOworfQorCit2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgc2FtcGxlcywg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEV4
dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCit7CisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgYXJyYXkgPSAwOworICAgIGdsOjpH
ZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3Zv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmpl
Y3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGVsZXRlVmVydGV4QXJyYXlz
T0VTKDEsICZhcnJheSk7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnNHTEFOR0xFOjppc1Zl
cnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQorCit2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCBhcnJheSkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
OjppbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3Vw
cG9ydHMoKS4KKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnB1c2hH
cm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
dGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4K
KyAgICByZXR1cm47Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnBvcEdyb3VwTWFya2Vy
RVhUKHZvaWQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBh
ZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgorICAgIHJldHVybjsKK30KKwor
Ym9vbCBFeHRlbnNpb25zR0xBTkdMRTo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkg
fHwgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51
bSogYnVmcykKK3sKKyAgICBnbDo6RHJhd0J1ZmZlcnNFWFQobiwgYnVmcyk7Cit9CisKK3ZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0Mz
RGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRyYXdBcnJheXNJbnN0
YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBw
cmltY291bnQpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291
bnQpOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdD
M0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQoreworICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwg
ZGl2aXNvcik7Cit9CisKK1N0cmluZyBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RXh0ZW5zaW9ucygp
Cit7CisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6
R2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoQU5HTEUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNp
b25zR0xBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0
ZW5zaW9uc0dMQU5HTEUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMTE0ZDQ4Zjc4ZjdjNzM5ZjQ3ZDkxNjY4YTA4
ZmM2ZDZmMjYzMDVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuaApAQCAtMCwwICsxLDEwNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zR0xBTkdMRSA6
IHB1YmxpYyBFeHRlbnNpb25zR0wgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgaW1wbGVtZW50YXRpb25zLgorICAgIEV4dGVuc2lvbnNH
TEFOR0xFKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5n
ID0gZmFsc2UpOworICAgIHZpcnR1YWwgfkV4dGVuc2lvbnNHTEFOR0xFKCk7CisKKyAgICAvLyBF
eHRlbnNpb25zR0wgbWV0aG9kcy4KKyAgICBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOworICAgIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsK
KyAgICBib29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBpbnQgZ2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIG92ZXJyaWRlOworCisgICAgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGluc2Vy
dEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgcHVzaEdy
b3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgcG9wR3JvdXBN
YXJrZXJFWFQodm9pZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6
ZWksIGNvbnN0IEdDM0RlbnVtKikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgZ2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9u
ZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwg
dW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikgb3ZlcnJpZGU7CisgICAg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpIG92ZXJyaWRlOworCisgICAg
dm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
cmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50
IGRpdmlzb3IpIG92ZXJyaWRlOworCisgICAgLy8gRVhUIFJvYnVzdG5lc3MgLSB1c2VzIGdldEdy
YXBoaWNzUmVzZXRTdGF0dXNBUkIoKQorICAgIHZvaWQgcmVhZG5QaXhlbHNFWFQoaW50IHgsIGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZ2V0blVuaWZvcm1mdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKSBvdmVycmlkZTsKKyAgICB2b2lkIGdl
dG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
YnVmU2l6ZSwgaW50ICpwYXJhbXMpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc05WSURJQSgpIG92
ZXJyaWRlIHsgcmV0dXJuIG1faXNOVklESUE7IH0KKyAgICBib29sIGlzQU1EKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV9pc0FNRDsgfQorICAgIGJvb2wgaXNJbnRlbCgpIG92ZXJyaWRlIHsgcmV0dXJu
IG1faXNJbnRlbDsgfQorICAgIGJvb2wgaXNJbWFnaW5hdGlvbigpIG92ZXJyaWRlIHsgcmV0dXJu
IG1faXNJbWFnaW5hdGlvbjsgfQorICAgIFN0cmluZyB2ZW5kb3IoKSBvdmVycmlkZSB7IHJldHVy
biBtX3ZlbmRvcjsgfQorCisgICAgYm9vbCByZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlv
bigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247
IH0KKyAgICBib29sIHJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpIG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplOyB9CisK
K3ByaXZhdGU6CisgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYp
OworICAgIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKyAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7
CisgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zOworICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX2VuYWJsZWRFeHRlbnNpb25zOworCisgICAgLy8gV2VhayBwb2ludGVyIGJh
Y2sgdG8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIG1fY29udGV4dDsKKworICAgIGJvb2wgbV9pc05WSURJQTsKKyAgICBib29sIG1faXNBTUQ7
CisgICAgYm9vbCBtX2lzSW50ZWw7CisgICAgYm9vbCBtX2lzSW1hZ2luYXRpb247CisgICAgYm9v
bCBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uOworICAgIGJvb2wgbV9yZXF1aXJl
c1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemU7CisKKyAgICBib29sIG1fdXNlSW5kZXhlZEdl
dFN0cmluZyB7IGZhbHNlIH07CisKKyAgICBTdHJpbmcgbV92ZW5kb3I7CisgICAgU3RyaW5nIG1f
cmVuZGVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHQzREFOR0xF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dDNEQU5HTEUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjQ1YTlmNDVj
MGUyYTIyNGJjODJlZjI2NzRlMjE4N2JmYWI0Yzk2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTgzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0Qp
ICYmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgotI2Vu
ZGlmCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQU5HTEUuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+
Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLS8vIFNraXAg
dGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZv
ciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNkZWZpbmUgR0xfQU5H
TEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7Ci0j
aW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KLSNpbmNsdWRl
IDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18zXzBfYXV0b2dlbi5oPgotI2luY2x1ZGUgPEFOR0xF
L2VudHJ5X3BvaW50c19nbGVzX2V4dF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZ2wyZXh0
Lmg+Ci0jaW5jbHVkZSA8QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+Ci0KLS8vIE5vdGU6IHRoaXMgZmls
ZSBjYW4ndCBiZSBjb21waWxlZCBpbiB0aGUgc2FtZSB1bmlmaWVkIHNvdXJjZSBmaWxlCi0vLyBh
cyBvdGhlcnMgd2hpY2ggaW5jbHVkZSB0aGUgc3lzdGVtJ3MgT3BlbkdMIGhlYWRlcnMuCi0KLS8v
IFRoaXMgb25lIGRlZmluaXRpb24gc2hvcnQtY2lyY3VpdHMgdGhlIG5lZWQgZm9yIGdsMmV4dC5o
LCB3aGljaAotLy8gd291bGQgbmVlZCBtb3JlIHdvcmsgdG8gYmUgaW5jbHVkZWQgZnJvbSBXZWJD
b3JlLgotI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQgMHg4RDU3Ci0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSNkZWZpbmUgR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhUIDB4OENFMAotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQgMHg4RDQw
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSA9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwiOwotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LSNpZiBQTEFURk9STShNQUMpCi1zdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVs
cyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKLXsKLSAgICAv
LyBXZSBjYW4gYXNzdW1lIHRoaXMgZG9lc24ndCBvdmVyZmxvdyBiZWNhdXNlIHRoZSBjYWxsaW5n
IGZ1bmN0aW9ucwotICAgIC8vIHVzZSBjaGVja2VkIGFyaXRobWV0aWMuCi0gICAgaW50IHRvdGFs
Qnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3Rh
bEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHBpeGVsc1tpICsgM10gPSAyNTU7Ci19Ci0jZW5kaWYK
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5l
Y2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hh
ciogcGl4ZWxzKQotewotICAgIC8vIE5WSURJQSBkcml2ZXJzIGhhdmUgYSBidWcgd2hlcmUgY2Fs
bGluZyByZWFkUGl4ZWxzIGluIEJHUkEgY2FuIHJldHVybiB0aGUgd3JvbmcgdmFsdWVzIGZvciB0
aGUgYWxwaGEgY2hhbm5lbCB3aGVuIHRoZSBhbHBoYSBpcyBvZmYgZm9yIHRoZSBjb250ZXh0Lgot
ICAgIGdsOjpSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIHBpeGVscyk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMud2lkdGggPSB3aWR0aDsK
LSAgICBzcmMucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgc3JjLmRhdGEgPSBwaXhlbHM7Ci0K
LSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
ZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAg
ZGVzdC5kYXRhID0gcGl4ZWxzOwotCi0gICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJH
QkEgdG8gQkdSQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9Owot
ICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQg
KiA0OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQotICAgICAg
ICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIGlmICghY29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKLSAgICAgICAg
d2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKLSNlbmRp
ZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQotewot
ICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5hbWUp
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotICAgIGNv
bnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6
ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gMDsKLSAgICBpZiAoYXR0cnMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5hbENv
bG9yRm9ybWF0ID0gR0xfUkdCQTg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OwotICAg
ICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwg
fHwgYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdo
ZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAgICAgLy8gU2Vl
IEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCi0KLSAgICAgICAgRXh0ZW5z
aW9uczNEJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgICAvLyBVc2UgYSAy
NCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgaWYg
KGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSkpCi0g
ICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgIH0KLQotICAgIC8vIFJlc2l6ZSBtdWx0
aXNhbXBsZSBGQk8uCi0gICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewotICAgICAgICBHTGludCBt
YXhTYW1wbGVDb3VudDsKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0FO
R0xFLCAmbWF4U2FtcGxlQ291bnQpOwotICAgICAgICAvLyBVc2luZyBtb3JlIHRoYW4gNCBzYW1w
bGVzIGlzIHNsb3cgb24gc29tZSBoYXJkd2FyZSBhbmQgaXMgdW5saWtlbHkgdG8KLSAgICAgICAg
Ly8gcHJvZHVjZSBhIHNpZ25pZmljYW50bHkgYmV0dGVyIHJlc3VsdC4KLSAgICAgICAgR0xpbnQg
c2FtcGxlQ291bnQgPSBzdGQ6Om1pbig0LCBtYXhTYW1wbGVDb3VudCk7Ci0gICAgICAgIGdsOjpC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAg
ICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGdldEV4dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBh
dHRycy5kZXB0aCkgewotICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVS
QlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdl
dEV4dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotICAgICAgICAgICAgLy8gV2ViR0wgMS4wJ3MgcnVsZXMgc3RhdGUgdGhhdCBjb21iaW5l
ZCBkZXB0aC9zdGVuY2lsIHJlbmRlcmJ1ZmZlcnMKLSAgICAgICAgICAgIC8vIGhhdmUgdG8gYmUg
YXR0YWNoZWQgdG8gdGhlIHN5bnRoZXRpYyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgcG9pbnQu
Ci0gICAgICAgICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiBpbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCA9PSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUykKLSAgICAgICAgICAgICAgICBn
bDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIERFUFRIX1NURU5DSUxf
QVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChhdHRycy5zdGVu
Y2lsKQotICAgICAgICAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cnMu
ZGVwdGgpCi0gICAgICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOwotICAgICAg
ICBpZiAoZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpICE9IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KLSAg
ICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBy
ZXNpemUgcmVndWxhciBGQk8KLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKHdpZHRoLCBoZWlnaHQp
KTsKLSAgICB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsK
LSAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldCwgbV90
ZXh0dXJlLCAwKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICBnbDo6QmluZFRleHR1cmUoR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSk7Ci0gICAgZ2w6OlRleEltYWdlMkQo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIGds
OjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVO
VDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3RleHR1cmUsIDApOwotICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BTkdMRSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgICAgIGdsOjpUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwLCBtX2ludGVybmFsQ29sb3JGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
LSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwKTsK
LSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX2lu
dGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BTkdMRSwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7Ci0gICAgfQotI2Vsc2UKLSNlcnJv
ciBGSVhNRTogUG9ydCB0byBub24tQ29jb2EgcGxhdGZvcm1zLgotI2VuZGlmIC8vIFBMQVRGT1JN
KENPQ09BKQotCi0gICAgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IHRydWU7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAg
ICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgICAg
IG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc3Rh
dGUuYm91bmRGQk8gPT0gbV9mYm8pCi0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGlu
dGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAg
YXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoIWF0dHJzLmFudGlh
bGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkpIHsKLSAgICAgICAgZ2w6OkJp
bmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAvLyBXZWJHTCAxLjAn
cyBydWxlcyBzdGF0ZSB0aGF0IGNvbWJpbmVkIGRlcHRoL3N0ZW5jaWwgcmVuZGVyYnVmZmVycwot
ICAgICAgICAvLyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UIHBvaW50LgotICAgICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAm
JiBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9PSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUykK
LSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCkK
LSAgICAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRB
Q0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
fQotICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOwotICAg
IH0KLQotICAgIGlmIChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUikg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgLy8gRklYTUU6IGNsZWFudXAK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBUZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09S
X1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlBTkdMRVNldHRpbmcgc2NvcGVkRGl0aGVy
KEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotCi0gICAgR0xpbnQgYm91bmRGcmFtZUJ1ZmZlcjsKLSAg
ICBnbDo6R2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElORywgJmJvdW5kRnJhbWVCdWZm
ZXIpOwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSwg
bV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1F
QlVGRkVSX0FOR0xFLCBtX2Zibyk7Ci0KLSAgICAvLyBGSVhNRTogZmlndXJlIG91dCBtb3JlIGVm
ZmljaWVudCBzb2x1dGlvbiBmb3IgaU9TLgotICAgIEludFJlY3QgcmVzb2x2ZVJlY3QgPSByZWN0
OwotICAgIC8vIFdoZW4gdXNpbmcgYW4gRVMgMi4wIGNvbnRleHQsIHRoZSBmdWxsIGZyYW1lYnVm
ZmVyIG11c3QgYWx3YXlzIGJlCi0gICAgLy8gcmVzb2x2ZWQ7IHBhcnRpYWwgYmxpdHMgYXJlIG5v
dCBhbGxvd2VkLgotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpIHx8IHJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXNvbHZlUmVjdCA9IEludFJlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCk7Ci0KLSAgICBnbDo6QmxpdEZyYW1lYnVmZmVyQU5HTEUocmVzb2x2ZVJl
Y3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3Qu
bWF4WSgpLCByZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4
WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX05FQVJFU1Qp
OwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZm
ZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIE1BWF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIGdsOjpH
ZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9TSVpFLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChnZXRFeHRl
bnNpb25zKCkucmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkpCi0gICAgICAg
ICAgICAqdmFsdWUgPSBzdGQ6Om1pbig0MDk2LCAqdmFsdWUpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2Vy
dihNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChnZXRFeHRl
bnNpb25zKCkucmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkpCi0gICAgICAg
ICAgICAqdmFsdWUgPSBzdGQ6Om1pbigxMDI0LCAqdmFsdWUpOwotICAgICAgICBicmVhazsKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgLy8gU29tZSBvbGRlciBoYXJkd2FyZSBhZHZlcnRpc2VzIGEg
bGFyZ2VyIG1heGltdW0gdGhhbiB0aGV5Ci0gICAgLy8gY2FuIGFjdHVhbGx5IGhhbmRsZS4gUmF0
aGVyIHRoYW4gZGV0ZWN0aW5nIHN1Y2ggZGV2aWNlcywgc2ltcGx5Ci0gICAgLy8gY2xhbXAgdGhl
IG1heGltdW0gdG8gODE5Miwgd2hpY2ggaXMgYmlnIGVub3VnaCBmb3IgYSA1SyBkaXNwbGF5Lgot
ICAgIGNhc2UgTUFYX1JFTkRFUkJVRkZFUl9TSVpFOgotICAgICAgICBnbDo6R2V0SW50ZWdlcnYo
TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCB2YWx1ZSk7Ci0gICAgICAgICp2YWx1ZSA9IHN0ZDo6bWlu
KDgxOTIsICp2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUFYX1ZJRVdQT1JUX0RJ
TVM6Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVklFV1BPUlRfRElNUywgdmFsdWUpOwot
ICAgICAgICB2YWx1ZVswXSA9IHN0ZDo6bWluKDgxOTIsIHZhbHVlWzBdKTsKLSAgICAgICAgdmFs
dWVbMV0gPSBzdGQ6Om1pbig4MTkyLCB2YWx1ZVsxXSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci0g
ICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0MzRGludCog
cmFuZ2UsIEdDM0RpbnQqIHByZWNpc2lvbikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlw
ZSk7Ci0gICAgQVNTRVJUKHJhbmdlKTsKLSAgICBBU1NFUlQocHJlY2lzaW9uKTsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgc3dpdGNoIChwcmVjaXNpb25UeXBlKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgot
ICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGZvciBhIDMyLWJpdCB0d29zLWNvbXBsZW1lbnQg
aW50ZWdlciBmb3JtYXQuCi0gICAgICAgIHJhbmdlWzBdID0gMzE7Ci0gICAgICAgIHJhbmdlWzFd
ID0gMzA7Ci0gICAgICAgIHByZWNpc2lvblswXSA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNRURJVU1fRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9B
VDoKLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYW4gSUVFRSBzaW5nbGUtcHJlY2lz
aW9uIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4KLSAgICAgICAgcmFuZ2VbMF0gPSAxMjc7Ci0gICAg
ICAgIHJhbmdlWzFdID0gMTI3OwotICAgICAgICBwcmVjaXNpb25bMF0gPSAyMzsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBp
ZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0
ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBH
QzNEY2xhbXBmIHpGYXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRl
cHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6
RmFyKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1w
ZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q2xlYXJEZXB0
aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7Ci19Ci0KLUV4dGVuc2lvbnMzRCYgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25zKQot
ICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnMzREFOR0xFPih0aGlz
KTsKLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEp
Ci17Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUg
ZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5n
IGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Rmx1c2goKTsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICBnbDo6Qmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAg
ICAgICBnbDo6Rmx1c2goKTsKLSAgICB9Ci0gICAgZ2w6OlJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYm
IG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgZ2w6OkJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmICghYXR0cnMuYWxwaGEgJiYgKGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkJHUkEpICYmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJvIHx8IChhdHRycy5hbnRpYWxp
YXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSkpCi0gICAgICAgIHdp
cGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKHdpZHRoLCBoZWlnaHQsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihkYXRhKSk7Ci0jZW5kaWYKLX0KLQotCi0vLyBUaGUgY29udGVudHMgb2YgR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24gZm9sbG93LCBwb3J0ZWQgdG8gdXNlIEFOR0xFLgot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFy
KiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCi17Ci0gICAgRXh0ZW5zaW9uczNEJiBleHRl
bnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmli
dXRlcygpOwotCi0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgaWYgKGV4dGVuc2lv
bnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgewotICAgICAgICAgICAg
ZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7Ci0g
ICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCi0gICAgICAgICAg
ICBhdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXR0cnMu
c3RlbmNpbCA9IGZhbHNlOwotICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7Ci0g
ICAgfQotICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgLy8gRklYTUU6IG11c3Qg
YWRqdXN0IHRoaXMgd2hlbiB1cGdyYWRpbmcgdG8gV2ViR0wgMi4wIC8gT3BlbkdMIEVTIDMuMCBz
dXBwb3J0LgotICAgICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIikgfHwgIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQiKSB8fCAhZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfT0VTX3JnYjhfcmdi
YTgiKSkgewotICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgICAgICAg
ICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIik7Ci0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xF
X2ZyYW1lYnVmZmVyX2JsaXQiKTsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxl
ZCgiR0xfT0VTX3JnYjhfcmdiYTgiKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIq
IGltYWdlQnVmZmVyKQotewotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gcm93Qnl0
ZXMgPSBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIDQ7Ci0g
ICAgaWYgKHJvd0J5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IHJvd0J5dGVz
ICogbV9jdXJyZW50SGVpZ2h0OwotICAgIGlmICh0b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgdG90YWxCeXRlcyA9IHRvdGFsQnl0ZXND
aGVja2VkLnVuc2FmZUdldCgpOwotCi0gICAgYXV0byBwaXhlbHMgPSBtYWtlVW5pcXVlQXJyYXk8
dW5zaWduZWQgY2hhcj4odG90YWxCeXRlcyk7Ci0gICAgaWYgKCFwaXhlbHMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxCeXRl
cyk7Ci0KLSAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKSB7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7Ci0gICAg
ICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYS4KLSAgICAgICAgICAgIHBpeGVsc1tpICsgMF0g
PSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAg
ICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBw
aXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1p
bigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGlt
YWdlQnVmZmVyLT5jb250ZXh0KCkpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVO
R0xfRVMpCi0gICAgLy8gRklYTUU6IHdvcmsgb24gaU9TIGludGVncmF0aW9uLgotICAgIHByZXNl
bnRSZW5kZXJidWZmZXIoKTsKLSNlbmRpZgotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpw
YWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKQotewotICAgIC8vIE5v
dCBuZWVkZWQgYXQgdGhlIG1vbWVudCwgc28gcmV0dXJuIHRoYXQgbm90aGluZyB3YXMgZG9uZS4K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17Ci0gICAgLy8gUmVhZGlu
ZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hp
Y2ggaXMKLSAgICAvLyBsb3NzeS4KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0
aXBsaWVkQWxwaGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNr
ZWQgPSA0ICogQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRXaWR0aCkgKiBD
aGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudEhlaWdodCk7Ci0gICAgaWYgKHRv
dGFsQnl0ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0
YTsKLSAgICBpbnQgdG90YWxCeXRlcyA9IHRvdGFsQnl0ZXNDaGVja2VkLnVuc2FmZUdldCgpOwot
Ci0gICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKLQotICAgIC8v
IENvbnZlcnQgdG8gUkdCQS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7Ci0KLSAg
ICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJl
VGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLmFudGlhbGlhcykKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgp
OwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIHN0ZDo6c3dhcChtX3RleHR1
cmUsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50
ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgbV9mYm8pOwotICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3RleHR1
cmUsIDApOwotICAgIGdsOjpGbHVzaCgpOwotCi0gICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0g
bV9mYm8pCi0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLSAgICBlbHNlCi0gICAgICAgIGdsOjpCaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0jZWxz
ZQotICAgIGdsOjpGbHVzaCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1Np
emUpCi17Ci0gICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhl
aWdodCAqIDQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlmIChjb250ZXh0QXR0cmli
dXRlcygpLmFudGlhbGlhcykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykgewotICAgICAg
ICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OwotICAgIGJvb2wgbXVzdFJlc3Rv
cmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgZ2w6OkdldEludGVnZXJ2KEdMX1BBQ0tfQUxJ
R05NRU5ULCAmcGFja0FsaWdubWVudCk7Ci0gICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0KSB7Ci0g
ICAgICAgIGdsOjpQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7Ci0gICAgICAgIG11
c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmVhZFBpeGVsc0Fu
ZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeSgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LCBwaXhlbHMpOwotCi0gICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKLSAg
ICAgICAgZ2w6OlBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsK
LQotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsK
LSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRI
ZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdo
dCA+PSAwKTsKLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotCi0gICAgbV9jdXJyZW50V2lkdGggPSB3
aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLQotICAgIFRlbXBvcmFyeUFOR0xF
U2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRl
bXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0K
LSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KSk7Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAvLyBJ
bml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KLSAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9
IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7Ci0gICAgR0xpbnQgY2xlYXJTdGVuY2lsID0g
MDsKLSAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUU7Ci0gICAgR0x1aW50IHN0ZW5jaWxNYXNr
ID0gMHhmZmZmZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKLSAgICBHTGJpdGZp
ZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgZ2w6OkdldEZsb2F0dihH
TF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7Ci0gICAgZ2w6OkNsZWFyQ29sb3IoMCwg
MCwgMCwgMCk7Ci0gICAgZ2w6OkdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JN
YXNrKTsKLSAgICBnbDo6Q29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUUpOwotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICBnbDo6R2V0RmxvYXR2KEdMX0RF
UFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhckRlcHRoKDEpOwotICAgICAgICBnbDo6R2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVN
QVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgZ2w6OkRlcHRoTWFzayhHTF9UUlVFKTsKLSAgICAg
ICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAgIGlmIChhdHRy
cy5zdGVuY2lsKSB7Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFLCAmY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgZ2w6OkNsZWFyU3RlbmNpbCgwKTsKLSAgICAg
ICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0
PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVO
Q0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNr
QmFjaykpOwotICAgICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZm
ZmZmZik7Ci0gICAgICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZm
ZmYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgIH0K
LQotICAgIGdsOjpDbGVhcihjbGVhck1hc2spOwotCi0gICAgZ2w6OkNsZWFyQ29sb3IoY2xlYXJD
b2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7Ci0g
ICAgZ2w6OkNvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJd
LCBjb2xvck1hc2tbM10pOwotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAgICAgZ2w6OkRlcHRoTWFz
ayhkZXB0aE1hc2spOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBn
bDo6Q2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIGdsOjpTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgICAgIGdsOjpTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7Ci0gICAgfQotCi0gICAgaWYgKG11c3RS
ZXN0b3JlRkJPKQotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Ci0KLSAgICBnbDo6Rmx1c2goKTsKLX0K
LQotSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0Rl
bnVtIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zdGF0ZS5h
Y3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7Ci0gICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dy
YW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmluZEJ1ZmZl
cih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBmYm87Ci0gICAgaWYgKGJ1ZmZlcikK
LSAgICAgICAgZmJvID0gYnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0gKGNvbnRleHRB
dHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBp
ZiAoZmJvICE9IG1fc3RhdGUuYm91bmRGQk8pIHsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cih0YXJnZXQsIGZibyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBmYm87Ci0gICAgfQot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIp
OwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVu
aXQsIHRleHR1cmUsIHRhcmdldCk7Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiBy
ZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmxlbmRDb2xvcihyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1
YXRpb24oR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bDo6QmxlbmRFcXVhdGlvbihtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymxl
bmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmxlbmRFcXVhdGlvblNlcGFy
YXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0g
c3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RB
bHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmxlbmRGdW5jU2Vw
YXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIg
c2l6ZSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6
ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJ1ZmZlclN1YkRhdGEo
dGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi12b2lkKiBHcmFwaGljc0NvbnRleHQz
RDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0Mz
RHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2VzcykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6Ok1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0
LCBsZW5ndGgsIGFjY2Vzcyk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjp1
bm1hcEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIGdsOjpVbm1hcEJ1ZmZlcih0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51
bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciByZWFkT2Zmc2V0LCBHQzNEaW50cHRyIHdyaXRlT2Zm
c2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZz
ZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW50ZXJuYWxmb3JtYXRpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRHNpemVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0SW50ZXJuYWxmb3JtYXRpdih0
YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNh
bXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVs
cywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VGV4U3RvcmFnZTJE
KHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQzNEZW51bSBwbmFt
ZSwgVmVjdG9yPEdDM0RpbnQ+JiBwYXJhbXMpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgZ2w6OkdldEFjdGl2ZVVuaWZvcm1zaXYocHJv
Z3JhbSwgdW5pZm9ybUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1l
LCBwYXJhbXMuZGF0YSgpKTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHJldHVybiBnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0Mz
RGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbDo6Q2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNsZWFyKG1hc2spOwotICAgIGNoZWNrR1BVU3RhdHVz
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNsZWFyU3RlbmNpbChzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwg
R0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDb2xvck1hc2socmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIC8vIFdlIG5lZWQgdGhpcyBleHRlbnNpb24gdG8g
c3VwcG9ydCBJT1N1cmZhY2UgYmFja2J1ZmZlcnMsIGJ1dCB3ZQotICAgIC8vIGRvbid0IHdhbnQg
aXQgZXhwb3NlZCB0byBXZWJHTCB1c2VyIHNoYWRlcnMuIFRlbXBvcmFyaWx5IGRpc2FibGUKLSAg
ICAvLyBpdCBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uLgotICAgIGdsOjpEaXNhYmxlRXh0ZW5z
aW9uQU5HTEUoIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIik7Ci0gICAgZ2w6OkNvbXBpbGVT
aGFkZXIoc2hhZGVyKTsKLSAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90
ZXh0dXJlX3JlY3RhbmdsZSIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxl
U2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFk
ZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDb21waWxlU2hhZGVyKHNo
YWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGF1dG8gYXR0cnMg
PSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0
YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICB9Ci0gICAgZ2w6OkNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAg
ICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYXV0byBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYm
IG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICByZXNvbHZl
TXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwot
ICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9mYm8pOwotICAgIH0KLSAgICBnbDo6Q29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKGF0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAg
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2Uo
R0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q3Vs
bEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNE
ZW51bSBmdW5jKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEZXB0aEZ1
bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9v
bGVhbiBmbGFnKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEZXB0aE1h
c2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFT
U0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6RGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51
bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLSAg
ICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxl
bWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNE
aW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkZpbmlzaCgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2w6OkZsdXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFy
Z2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0
YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsOjpGcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
bmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbDo6R2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKLX0KLQotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3JhbSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBtYXhB
dHRyaWJ1dGVTaXplID0gMDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElW
RV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwotICAgIFZlY3RvcjxH
TGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFY
X0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0
aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIGds
OjpHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwgaW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1l
TGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLmRh
dGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUg
PSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9n
cmFtLCBpbmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2
ZVVuaWZvcm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAw
OwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xF
TkdUSCwgJm1heFVuaWZvcm1TaXplKTsKLQotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5p
Zm9ybVNpemUpOyAvLyBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwg
dGVybWluYXRpb24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXpl
ID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgZ2w6OkdldEFjdGl2ZVVuaWZvcm0ocHJv
Z3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBu
YW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOwotICAg
IGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewot
ICAgIHJldHVybiBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxh
dGZvcm0zRE9iamVjdCogc2hhZGVycykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldEF0dGFjaGVkU2hhZGVycyhw
cm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwotfQotCi1pbnQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIC0xOwot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICByZXR1cm4gZ2w6OkdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWludCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIGdldEF0dHJpYkxvY2F0aW9uKHBy
b2dyYW0sIG5hbWUpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjptb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGJv
b2wgbW92ZWRBbkVycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5IGxpbWl0
IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgotICAgIC8vIGEgcHJvYmxl
bSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFyIHRoZSBlcnJv
ci4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3ZSBnb3QgTk9f
RVJST1IuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0gICAgICAg
IEdDM0RlbnVtIGVycm9yID0gZ2w6OkdldEVycm9yKCk7Ci0gICAgICAgIGlmIChlcnJvciA9PSBO
T19FUlJPUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5h
ZGQoZXJyb3IpOwotICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBtb3ZlZEFuRXJyb3I7Ci19Ci0KLUdDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRF
cnJvcigpCi17Ci0gICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVy
cm9yIGxpc3QgaW4gY2FzZQotICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUs
IHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCi0gICAgICAgIC8vIGdsR2V0RXJy
b3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgot
ICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICAgICAgcmV0dXJu
IG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwotICAgIH0KLQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGdsOjpHZXRTdHJpbmcobmFtZSkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewot
ICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLUdD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6SXNFbmFibGVkKGNhcCk7
Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsOjpJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0g
ICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OklzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQot
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyKQotICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4g
Z2w6OklzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBp
ZiAoIXNoYWRlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc1NoYWRlcihzaGFkZXIpOwotfQotCi1HQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6SXNUZXh0dXJlKHRleHR1cmUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRo
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpMaW5lV2lkdGgod2lkdGgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlBpeGVsU3RvcmVpKHBuYW1lLCBw
YXJhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZs
b2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVh
biBpbnZlcnQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlNhbXBsZUNv
dmVyYWdlKHZhbHVlLCBpbnZlcnQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lz
c29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlNjaXNzb3IoeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJj
ZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAg
QVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGNvbnN0
IENTdHJpbmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwotICAgIGNvbnN0
IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwotICAg
IGludCBzaGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgpOwot
ICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVy
U291cmNlTGVuZ3RoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMo
R0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0g
ZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwg
ZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1h
c2soR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
U3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdD
M0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbDo6U3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVt
IGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbDo6U3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWws
IHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZs
b2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9y
bTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0yZihsb2NhdGlv
biwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsK
LSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwg
djEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0
IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtNGYobG9j
YXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZsb2F0
KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTRmdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
MWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6VW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IGNvbnN0IEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNE
aW50IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtMmko
bG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5
KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2
MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MiwgR0MzRGludCB2MykKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5KQotewot
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5p
Zm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBh
cnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
OS4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUs
IHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbDo6VXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBB
U1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmFs
aWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIGNv
bnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2w6OlZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNE
ZmxvYXQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0
dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwg
YXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliM2YoaW5kZXgs
IHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIz
ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYz
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRyaWI0Zihp
bmRleCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwg
YXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVy
KEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFu
IG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4
LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBHTHVpbnQgYXJyYXkgPSAwOwotICAgIGdsOjpHZW5WZXJ0ZXhBcnJheXMo
MSwgJmFycmF5KTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgaWYg
KCFhcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKLX0KLQotR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsK
LSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5KGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3Qg
YXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJpbmRWZXJ0ZXhB
cnJheShhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KEdD
M0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2w6OkdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0
RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0gICAgCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRJbnRlZ2VyNjR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50NjQqIHZhbHVlKQotewotICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgKnZhbHVl
ID0gMDsKLSAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3Qg
Zmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFs
aW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgotICAgIC8vIGdsOjpH
ZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5D
SUxfQVRUQUNITUVOVCkKLSAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8v
IE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgotICAgIGdsOjpHZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1l
LCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5tYW5nbGVkSW5m
b0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIEdDM0RzaXplaSBjb3VudCwgY29uc3Qg
U3RyaW5nJiBsb2cpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNoYWRlcnMpOwotICAgIFVOVVNFRF9Q
QVJBTShjb3VudCk7Ci0gICAgTE9HKFdlYkdMLCAiT3JpZ2luYWwgU2hhZGVySW5mb0xvZzpcbiVz
IiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7
Ci0KLSAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hh
ZGVyIHNvdXJjZSB0aGF0Ci0gICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVy
cy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZwotICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUg
dXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0Ci0gICAgLy8gaXMgY2F1
c2luZyBpdC4KLSAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdh
cm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMg
bm90IHN1cHBvcnRlZFxuIl9zIH07Ci0gICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRo
KGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwotICAgIHBy
b2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIGxvZy5sZW5ndGgoKSAt
IHN0YXJ0RnJvbSkpOwotCi0gICAgTE9HKFdlYkdMLCAiVW5tYW5nbGVkIFNoYWRlckluZm9Mb2c6
XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNT
RVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbGVu
Z3RoID0gMDsKLSAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdU
SCwgJmxlbmd0aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsg
Ci0KLSAgICBHTHNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3Ro
KTsKLSAgICBnbDo6R2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5m
by5kYXRhKCkpOwotCi0gICAgR0MzRHNpemVpIGNvdW50OwotICAgIFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBz
aGFkZXJzKTsKLQotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIGNvdW50
LCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2w6OkdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRTaGFkZXJpdihz
aGFkZXIsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IGxlbmd0aCA9IDA7
Ci0gICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3Ro
KTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdM
c2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIGds
OjpHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwot
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICBy
ZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCks
IHNpemUpKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCkKLXsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRVbmlmb3JtZnYocHJvZ3JhbSwg
bG9jYXRpb24sIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9y
bWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCog
dmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFVuaWZvcm1p
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi1HQzNEaW50IEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJm
dihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0VmVydGV4QXR0
cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLUdDM0RzaXplaXB0ciBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMdm9pZCogcG9pbnRl
ciA9IDA7Ci0gICAgZ2w6OkdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBv
aW50ZXIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFs
IHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0
aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgotICAgIGdsOjpUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3Nl
ZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBk
YXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJm8pOwotICAgIHJl
dHVybiBvOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8g
PSAwOwotICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQot
Ci1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OkNyZWF0ZVByb2dyYW0o
KTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVy
YnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7
Ci0gICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1Q
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OkNyZWF0
ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDog
R0xfVkVSVEVYX1NIQURFUik7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdM
dWludCBvID0gMDsKLSAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIG1fc3RhdGUudGV4
dHVyZVNlZWRDb3VudC5hZGQobyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBp
ZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0ZS5ib3VuZEZCTykgewotICAgICAgICAvLyBNYWtlIHN1
cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCi0g
ICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgotICAgICAgICBiaW5k
RnJhbWVidWZmZXIoRlJBTUVCVUZGRVIsIDApOwotICAgIH0KLSAgICBnbDo6RGVsZXRlRnJhbWVi
dWZmZXJzKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpEZWxldGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5k
ZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fc3RhdGUuYm91bmRUZXh0dXJl
TWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsKLSAgICAgICAgcmV0dXJu
IGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7Ci0gICAgfSk7Ci0gICAgZ2w6OkRlbGV0
ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQucmVt
b3ZlQWxsKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXpl
R0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJl
bnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCB0bwotICAgIC8vIHByZXNlcnZl
IHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRvIGdldEVycm9yIHdpbGwgZ2V0Ci0g
ICAgLy8gYW55IGVycm9ycyBmcm9tIGdsOjpFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBz
eW50aGVzaXppbmcuCi0gICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAg
bV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsKLSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNl
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsK
LSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Ci0KLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6
IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmRpZENvbXBvc2l0ZSgp
OwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Zm9yY2VDb250ZXh0TG9zdCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5
VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlY3ljbGVDb250ZXh0KCkKLXsKLSAgICBm
b3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGll
bnQtPnJlY3ljbGVDb250ZXh0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc3Bh
dGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQotewotICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRy
YXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGdldEV4dGVu
c2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwg
cHJpbWNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZp
c29yKQotewotICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBk
aXZpc29yKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0Qp
ICYmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzUxYTUyMWM0YjhhNGMyZWVkZWE4NjNhZWRhZDVhNGUxMGViYTEyMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dEdMQU5HTEUuY3BwCkBAIC0wLDAgKzEsMTgzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oIgorI2VuZGlmCisjaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMQU5HTEUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
UmVndWxhckV4cHJlc3Npb24uaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0
cmluZz4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNw
ZWNpZmljLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKKy8vIFNraXAgdGhlIGluY2x1c2lvbiBv
ZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZvciBub3cuCisjZGVmaW5l
IEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29u
dGV4dF9nbGVzMQordHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7CisjaW5jbHVkZSA8QU5HTEUv
ZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9w
b2ludHNfZ2xlc18zXzBfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19n
bGVzX2V4dF9hdXRvZ2VuLmg+CisjaW5jbHVkZSA8QU5HTEUvZ2wyZXh0Lmg+CisjaW5jbHVkZSA8
QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+CisKKy8vIE5vdGU6IHRoaXMgZmlsZSBjYW4ndCBiZSBjb21w
aWxlZCBpbiB0aGUgc2FtZSB1bmlmaWVkIHNvdXJjZSBmaWxlCisvLyBhcyBvdGhlcnMgd2hpY2gg
aW5jbHVkZSB0aGUgc3lzdGVtJ3MgT3BlbkdMIGhlYWRlcnMuCisKKy8vIFRoaXMgb25lIGRlZmlu
aXRpb24gc2hvcnQtY2lyY3VpdHMgdGhlIG5lZWQgZm9yIGdsMmV4dC5oLCB3aGljaAorLy8gd291
bGQgbmVlZCBtb3JlIHdvcmsgdG8gYmUgaW5jbHVkZWQgZnJvbSBXZWJDb3JlLgorI2RlZmluZSBH
TF9NQVhfU0FNUExFU19FWFQgMHg4RDU3CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
ICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhU
IDB4OENFMAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQgMHg4RDQwCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uTmFtZSA9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiOworCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBQTEFU
Rk9STShNQUMpCitzdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbnQgd2lk
dGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICAvLyBXZSBjYW4g
YXNzdW1lIHRoaXMgZG9lc24ndCBvdmVyZmxvdyBiZWNhdXNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9u
cworICAgIC8vIHVzZSBjaGVja2VkIGFyaXRobWV0aWMuCisgICAgaW50IHRvdGFsQnl0ZXMgPSB3
aWR0aCAqIGhlaWdodCAqIDQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBp
ICs9IDQpCisgICAgICAgIHBpeGVsc1tpICsgM10gPSAyNTU7Cit9CisjZW5kaWYKKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vz
c2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciog
cGl4ZWxzKQoreworICAgIC8vIE5WSURJQSBkcml2ZXJzIGhhdmUgYSBidWcgd2hlcmUgY2FsbGlu
ZyByZWFkUGl4ZWxzIGluIEJHUkEgY2FuIHJldHVybiB0aGUgd3JvbmcgdmFsdWVzIGZvciB0aGUg
YWxwaGEgY2hhbm5lbCB3aGVuIHRoZSBhbHBoYSBpcyBvZmYgZm9yIHRoZSBjb250ZXh0LgorICAg
IGdsOjpSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIHBpeGVscyk7CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdkltYWdlX0J1ZmZlciBz
cmM7CisgICAgc3JjLmhlaWdodCA9IGhlaWdodDsKKyAgICBzcmMud2lkdGggPSB3aWR0aDsKKyAg
ICBzcmMucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgc3JjLmRhdGEgPSBwaXhlbHM7CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7CisgICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7CisgICAgZGVz
dC53aWR0aCA9IHdpZHRoOworICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgZGVz
dC5kYXRhID0gcGl4ZWxzOworCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEg
dG8gQkdSQS4KKyAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAg
IHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7CisjZWxzZQorICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICBz
dGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIGlmICghY29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkKKyAgICAgICAgd2lw
ZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKKyNlbmRpZgor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQor
eworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbk5h
bWUpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25z
dCBJbnRTaXplJiBzaXplKQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygp
OworICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgaGVp
Z2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICBpZiAoYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgbV9p
bnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xf
UkdCQTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9S
R0I4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisgICAgaWYgKGF0dHJz
LnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhl
IGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAg
ICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCisK
KyAgICAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAg
ICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBp
dC4KKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uTmFtZSkpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDE2OworICAgIH0KKworICAg
IC8vIFJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8uCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewor
ICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdM
X01BWF9TQU1QTEVTX0FOR0xFLCAmbWF4U2FtcGxlQ291bnQpOworICAgICAgICAvLyBVc2luZyBt
b3JlIHRoYW4gNCBzYW1wbGVzIGlzIHNsb3cgb24gc29tZSBoYXJkd2FyZSBhbmQgaXMgdW5saWtl
bHkgdG8KKyAgICAgICAgLy8gcHJvZHVjZSBhIHNpZ25pZmljYW50bHkgYmV0dGVyIHJlc3VsdC4K
KyAgICAgICAgR0xpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig0LCBtYXhTYW1wbGVDb3VudCk7
CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGdldEV4dGVuc2lvbnMoKS5yZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9p
bnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xf
UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0
cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkgeworICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJi
dWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgICAgIGdldEV4dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgLy8gV2ViR0wgMS4wJ3MgcnVsZXMgc3Rh
dGUgdGhhdCBjb21iaW5lZCBkZXB0aC9zdGVuY2lsIHJlbmRlcmJ1ZmZlcnMKKyAgICAgICAgICAg
IC8vIGhhdmUgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHN5bnRoZXRpYyBERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQgcG9pbnQuCisgICAgICAgICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9PSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUykKKyAg
ICAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChhdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVO
REVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICBpZiAoYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVO
REVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZG
RVIsIDApOworICAgICAgICBpZiAoZ2w6OkNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVC
VUZGRVIpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogY2xlYW51cC4KKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyByZXNpemUgcmVndWxhciBGQk8KKyAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKKyAgICB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3Rv
cmVGcm9tTGF5ZXIoKTsKKyAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHRHTDo6SU9TdXJmYWNlVGV4
dHVyZVRhcmdldCwgbV90ZXh0dXJlLCAwKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBnbDo6
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSk7CisgICAg
Z2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDAsIG1faW50ZXJuYWxD
b2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApOworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3RleHR1cmUs
IDApOworICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Cisg
ICAgICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwLCBtX2lu
dGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCAwKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FOR0xFLCAwKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0FOR0xFLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgICAgICBnbDo6VGV4SW1hZ2Uy
RChHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAg
ICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7CisgICAg
fQorI2Vsc2UKKyNlcnJvciBGSVhNRTogUG9ydCB0byBub24tQ29jb2EgcGxhdGZvcm1zLgorI2Vu
ZGlmIC8vIFBMQVRGT1JNKENPQ09BKQorCisgICAgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVy
SWZOZWVkZWQoaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisg
ICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykg
eworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8pCisgICAgICAgICAgICBtdXN0UmVz
dG9yZUZCTyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVm
ZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisK
KyAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0
aCkpIHsKKyAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JF
TkRFUkJVRkZFUiwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAvLyBXZWJHTCAxLjAncyBydWxlcyBzdGF0ZSB0aGF0IGNvbWJpbmVkIGRlcHRoL3N0
ZW5jaWwgcmVuZGVyYnVmZmVycworICAgICAgICAvLyBoYXZlIHRvIGJlIGF0dGFjaGVkIHRvIHRo
ZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UIHBvaW50LgorICAgICAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSAmJiBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9PSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUykKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJC
VUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpZiAoYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVS
QlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0cnMuZGVw
dGgpCisgICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9S
RU5ERVJCVUZGRVIsIDApOworICAgIH0KKworICAgIGlmIChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhHTF9GUkFNRUJVRkZFUikgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAg
ICAgLy8gRklYTUU6IGNsZWFudXAKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZO
ZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBUZW1wb3JhcnlBTkdMRVNldHRp
bmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBUZW1wb3Jh
cnlBTkdMRVNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOworCisgICAg
R0xpbnQgYm91bmRGcmFtZUJ1ZmZlcjsKKyAgICBnbDo6R2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZG
RVJfQklORElORywgJmJvdW5kRnJhbWVCdWZmZXIpOworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIo
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFLCBtX2Zibyk7CisKKyAgICAv
LyBGSVhNRTogZmlndXJlIG91dCBtb3JlIGVmZmljaWVudCBzb2x1dGlvbiBmb3IgaU9TLgorICAg
IEludFJlY3QgcmVzb2x2ZVJlY3QgPSByZWN0OworICAgIC8vIFdoZW4gdXNpbmcgYW4gRVMgMi4w
IGNvbnRleHQsIHRoZSBmdWxsIGZyYW1lYnVmZmVyIG11c3QgYWx3YXlzIGJlCisgICAgLy8gcmVz
b2x2ZWQ7IHBhcnRpYWwgYmxpdHMgYXJlIG5vdCBhbGxvd2VkLgorICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpIHx8IHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXNvbHZlUmVjdCA9IEludFJl
Y3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisKKyAgICBnbDo6Qmxp
dEZyYW1lYnVmZmVyQU5HTEUocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29s
dmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVjdC54KCksIHJlc29s
dmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIEdMX0NP
TE9SX0JVRkZFUl9CSVQsIEdMX05FQVJFU1QpOworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJn
ZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIE1BWF9URVhUVVJFX1NJWkU6CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVY
VFVSRV9TSVpFLCB2YWx1ZSk7CisgICAgICAgIGlmIChnZXRFeHRlbnNpb25zKCkucmVxdWlyZXNS
ZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkpCisgICAgICAgICAgICAqdmFsdWUgPSBzdGQ6
Om1pbig0MDk2LCAqdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1BWF9DVUJFX01B
UF9URVhUVVJFX1NJWkU6CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfQ1VCRV9NQVBfVEVY
VFVSRV9TSVpFLCB2YWx1ZSk7CisgICAgICAgIGlmIChnZXRFeHRlbnNpb25zKCkucmVxdWlyZXNS
ZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkpCisgICAgICAgICAgICAqdmFsdWUgPSBzdGQ6
Om1pbigxMDI0LCAqdmFsdWUpOworICAgICAgICBicmVhazsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgLy8gU29tZSBvbGRlciBoYXJkd2FyZSBhZHZlcnRpc2VzIGEgbGFyZ2VyIG1heGltdW0gdGhh
biB0aGV5CisgICAgLy8gY2FuIGFjdHVhbGx5IGhhbmRsZS4gUmF0aGVyIHRoYW4gZGV0ZWN0aW5n
IHN1Y2ggZGV2aWNlcywgc2ltcGx5CisgICAgLy8gY2xhbXAgdGhlIG1heGltdW0gdG8gODE5Miwg
d2hpY2ggaXMgYmlnIGVub3VnaCBmb3IgYSA1SyBkaXNwbGF5LgorICAgIGNhc2UgTUFYX1JFTkRF
UkJVRkZFUl9TSVpFOgorICAgICAgICBnbDo6R2V0SW50ZWdlcnYoTUFYX1JFTkRFUkJVRkZFUl9T
SVpFLCB2YWx1ZSk7CisgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWluKDgxOTIsICp2YWx1ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIGdsOjpH
ZXRJbnRlZ2VydihNQVhfVklFV1BPUlRfRElNUywgdmFsdWUpOworICAgICAgICB2YWx1ZVswXSA9
IHN0ZDo6bWluKDgxOTIsIHZhbHVlWzBdKTsKKyAgICAgICAgdmFsdWVbMV0gPSBzdGQ6Om1pbig4
MTkyLCB2YWx1ZVsxXSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgZ2w6OkdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0g
c2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0MzRGludCogcmFuZ2UsIEdDM0Rp
bnQqIHByZWNpc2lvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oc2hhZGVyVHlwZSk7CisgICAgQVNT
RVJUKHJhbmdlKTsKKyAgICBBU1NFUlQocHJlY2lzaW9uKTsKKworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworCisgICAgc3dpdGNoIChwcmVjaXNpb25UeXBlKSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TE9XX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNRURJVU1f
SU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhJR0hfSU5UOgorICAgICAgICAvLyBU
aGVzZSB2YWx1ZXMgYXJlIGZvciBhIDMyLWJpdCB0d29zLWNvbXBsZW1lbnQgaW50ZWdlciBmb3Jt
YXQuCisgICAgICAgIHJhbmdlWzBdID0gMzE7CisgICAgICAgIHJhbmdlWzFdID0gMzA7CisgICAg
ICAgIHByZWNpc2lvblswXSA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNRURJVU1f
RkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9GTE9BVDoKKyAgICAgICAg
Ly8gVGhlc2UgdmFsdWVzIGFyZSBmb3IgYW4gSUVFRSBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5n
LXBvaW50IGZvcm1hdC4KKyAgICAgICAgcmFuZ2VbMF0gPSAxMjc7CisgICAgICAgIHJhbmdlWzFd
ID0gMTI3OworICAgICAgICBwcmVjaXNpb25bMF0gPSAyMzsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICBpZiAod2lk
dGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZXhJbWFn
ZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBH
QzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRl
cHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6
RmFyKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0Mz
RGNsYW1wZiBkZXB0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Q2xl
YXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7Cit9CisKK0V4dGVuc2lvbnNHTCYg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9l
eHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnNH
TEFOR0xFPih0aGlzKTsKKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKKyAgICAvLyBhbGwg
cHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBp
eGVscy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Rmx1c2goKTsKKyAgICBh
dXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFz
ICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkp
OworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICBnbDo6Rmx1c2goKTsKKyAgICB9CisgICAgZ2w6OlJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICBpZiAo
YXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykK
KyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmICghYXR0
cnMuYWxwaGEgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSB8fCBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OkJHUkEpICYmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJv
IHx8IChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSkpCisgICAgICAgIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKHdpZHRoLCBoZWlnaHQs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSk7CisjZW5kaWYKK30KKworCisvLyBU
aGUgY29udGVudHMgb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24gZm9sbG93LCBwb3J0
ZWQgdG8gdXNlIEFOR0xFLgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCit7
CisgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGF1
dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJzLnN0ZW5jaWwp
IHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVu
Y2lsIGlzIHRydWUuCisgICAgICAgICAgICBhdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgICAgICBzZXRDb250
ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgfQorICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsK
KyAgICAgICAgLy8gRklYTUU6IG11c3QgYWRqdXN0IHRoaXMgd2hlbiB1cGdyYWRpbmcgdG8gV2Vi
R0wgMi4wIC8gT3BlbkdMIEVTIDMuMCBzdXBwb3J0LgorICAgICAgICBpZiAoIWV4dGVuc2lvbnMu
c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgIWV4dGVuc2lv
bnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKSB8fCAhZXh0ZW5zaW9ucy5z
dXBwb3J0cygiR0xfT0VTX3JnYjhfcmdiYTgiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFs
aWFzID0gZmFsc2U7CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQoIkdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAgICAgICAgICBleHRlbnNpb25z
LmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3JnYjhfcmdiYTgiKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQoreworICAgIENoZWNr
ZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gcm93Qnl0ZXMgPSBDaGVja2VkPGludCwgUmVjb3JkT3Zl
cmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIDQ7CisgICAgaWYgKHJvd0J5dGVzLmhhc092ZXJmbG93
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93
PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworICAgIGlm
ICh0b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpbnQgdG90YWxCeXRlcyA9IHRvdGFsQnl0ZXNDaGVja2VkLnVuc2FmZUdldCgpOworCisgICAg
YXV0byBwaXhlbHMgPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4odG90YWxCeXRlcyk7
CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybjsKKworICAgIHJlYWRSZW5kZXJpbmdS
ZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxCeXRlcyk7CisKKyAgICBpZiAoIWNvbnRleHRBdHRy
aWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdG90YWxCeXRlczsgaSArPSA0KSB7CisgICAgICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBo
YS4KKyAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsg
MF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBz
dGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAg
ICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhl
bHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHBhaW50VG9DYW52YXMo
cGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBp
bWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworCisj
aWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgLy8gRklYTUU6IHdvcmsg
b24gaU9TIGludGVncmF0aW9uLgorICAgIHByZXNlbnRSZW5kZXJidWZmZXIoKTsKKyNlbmRpZgor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludENvbXBvc2l0ZWRSZXN1bHRz
VG9DYW52YXMoSW1hZ2VCdWZmZXIqKQoreworICAgIC8vIE5vdCBuZWVkZWQgYXQgdGhlIG1vbWVu
dCwgc28gcmV0dXJuIHRoYXQgbm90aGluZyB3YXMgZG9uZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgLy8gUmVhZGluZyBwcmVtdWx0aXBsaWVk
IGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMKKyAgICAvLyBs
b3NzeS4KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6
OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOworICAgIENo
ZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSA0ICogQ2hlY2tl
ZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRXaWR0aCkgKiBDaGVja2VkPGludCwgUmVj
b3JkT3ZlcmZsb3c+KG1fY3VycmVudEhlaWdodCk7CisgICAgaWYgKHRvdGFsQnl0ZXNDaGVja2Vk
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKyAgICBpbnQgdG90
YWxCeXRlcyA9IHRvdGFsQnl0ZXNDaGVja2VkLnVuc2FmZUdldCgpOworCisgICAgcmVhZFJlbmRl
cmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKKworICAgIC8vIENvbnZlcnQgdG8gUkdC
QS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAg
c3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7CisKKyAgICByZXR1cm4gaW1hZ2VE
YXRhOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgp
Cit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlh
bGlhcykKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOworCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29t
cG9zaXRvclRleHR1cmUpOworICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRl
VGV4dHVyZSk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8p
OworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1Jf
QVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3RleHR1cmUsIDApOwor
ICAgIGdsOjpGbHVzaCgpOworCisgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pCisg
ICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
LCBtX3N0YXRlLmJvdW5kRkJPKTsKKyAgICBlbHNlCisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisjZWxzZQorICAgIGds
OjpGbHVzaCgpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
YWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUp
Cit7CisgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdo
dCAqIDQpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLmFudGlhbGlhcykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KCk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICAg
ICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OworICAgIGJvb2wgbXVzdFJlc3RvcmVQ
YWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgZ2w6OkdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05N
RU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0KSB7CisgICAg
ICAgIGdsOjpQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7CisgICAgICAgIG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorCisgICAgcmVhZFBpeGVsc0FuZENv
bnZlcnRUb0JHUkFJZk5lY2Vzc2FyeSgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0LCBwaXhlbHMpOworCisgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAg
ICAgZ2w6OlBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKwor
ICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
K3sKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJl
bnRIZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhl
aWdodCA+PSAwKTsKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworCisgICAgbV9jdXJyZW50V2lkdGgg
PSB3aWR0aDsKKyAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIFRlbXBvcmFyeUFO
R0xFU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAg
IFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7
CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAv
LyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBHTGZsb2F0IGNsZWFyQ29sb3Jb
XSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2ls
ID0gMDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxN
YXNrID0gMHhmZmZmZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJp
dGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgZ2w6OkdldEZsb2F0
dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CisgICAgZ2w6OkNsZWFyQ29sb3Io
MCwgMCwgMCwgMCk7CisgICAgZ2w6OkdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29s
b3JNYXNrKTsKKyAgICBnbDo6Q29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdM
X1RSVUUpOworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICBnbDo6R2V0RmxvYXR2KEdM
X0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOworICAgICAgICBnbDo6R2V0Qm9vbGVhbnYoR0xfREVQ
VEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgZ2w6OkRlcHRoTWFzayhHTF9UUlVF
KTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAg
IGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9TVEVOQ0lM
X0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgZ2w6OkNsZWFyU3RlbmNpbCgw
KTsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVy
cHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIGdsOjpHZXRJbnRlZ2Vy
dihHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0
ZW5jaWxNYXNrQmFjaykpOworICAgICAgICBnbDo6U3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9O
VCwgMHhmZmZmZmZmZik7CisgICAgICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ss
IDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklU
OworICAgIH0KKworICAgIGdsOjpDbGVhcihjbGVhck1hc2spOworCisgICAgZ2w6OkNsZWFyQ29s
b3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xv
clszXSk7CisgICAgZ2w6OkNvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29s
b3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAg
ICAgZ2w6OkRlcHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNp
bCkgeworICAgICAgICBnbDo6Q2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIGds
OjpTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgICAgIGds
OjpTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7CisgICAgfQor
CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7CisKKyAgICBn
bDo6Rmx1c2goKTsKK30KKworSW50U2l6ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7Cisg
ICAgZ2w6OkFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hh
ZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QXR0YWNoU2hhZGVyKHBy
b2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRB
dHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgs
IG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1
ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAg
ICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1
dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZmJv
ICE9IG1fc3RhdGUuYm91bmRGQk8pIHsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcih0YXJn
ZXQsIGZibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBmYm87CisgICAgfQorfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZmZXIp
OworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIG1fc3RhdGUuc2V0Qm91bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4
dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7CisgICAgZ2w6OkJpbmRUZXh0dXJlKHRhcmdldCwg
dGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3Io
R0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNs
YW1wZiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QmxlbmRD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6QmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVS
R0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6QmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3Is
IEdDM0RlbnVtIGRmYWN0b3IpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OkJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RS
R0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0g
dXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2w6OkJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkJ1ZmZlclN1YkRhdGEodGFy
Z2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOworfQorCit2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwg
R0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6Ok1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zm
c2V0LCBsZW5ndGgsIGFjY2Vzcyk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bm1hcEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpVbm1hcEJ1ZmZlcih0YXJnZXQpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51bSByZWFk
VGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciByZWFkT2Zmc2V0LCBHQzNE
aW50cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVU
YXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSwgR0MzRHNpemVpIGJ1ZlNpemUs
IEdDM0RpbnQqIHBhcmFtcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
R2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6
ZSwgcGFyYW1zKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIHNhbXBsZXMs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6VGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZl
bHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6VGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZl
Y3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdD
M0RpbnQ+JiBwYXJhbXMpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgZ2w6OkdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9y
bUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCBwYXJhbXMuZGF0
YSgpKTsKK30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIHJldHVybiBnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0Mz
RGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIsIEdDM0RjbGFtcGYgYSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6Q2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNsZWFyKG1hc2spOworICAgIGNoZWNrR1BV
U3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNp
bChHQzNEaW50IHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNsZWFy
U3RlbmNpbChzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdD
M0Rib29sZWFuIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpD
b2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQorewor
ICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIC8vIFdl
IG5lZWQgdGhpcyBleHRlbnNpb24gdG8gc3VwcG9ydCBJT1N1cmZhY2UgYmFja2J1ZmZlcnMsIGJ1
dCB3ZQorICAgIC8vIGRvbid0IHdhbnQgaXQgZXhwb3NlZCB0byBXZWJHTCB1c2VyIHNoYWRlcnMu
IFRlbXBvcmFyaWx5IGRpc2FibGUKKyAgICAvLyBpdCBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9u
LgorICAgIGdsOjpEaXNhYmxlRXh0ZW5zaW9uQU5HTEUoIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFu
Z2xlIik7CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICBnbDo6UmVxdWVzdEV4
dGVuc2lvbkFOR0xFKCJHTF9BTkdMRV90ZXh0dXJlX3JlY3RhbmdsZSIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygp
OworCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJ
bnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgZ2w6
OkNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBnbDo6Qmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IH0KKyAgICBnbDo6Q29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBt
X3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJP
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Q3VsbEZhY2UobW9k
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQzNEZW51
bSBmdW5jKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZXB0aEZ1bmMo
ZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQzNE
Ym9vbGVhbiBmbGFnKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZXB0
aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGV0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGUoR0MzRGVudW0gY2FwKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEaXNhYmxlKGNhcCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
QzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRyYXdBcnJh
eXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0
eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZz
ZXQpKSk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6RW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkZpbmlzaCgpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmbHVzaCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2w6OkZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwg
R0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpGcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2VuZXJhdGVNaXBtYXAodGFyZ2V0
KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1w
bChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKKyAgICBnbDo6
R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1h
eEF0dHJpYnV0ZVNpemUpOworICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6
ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1p
bmF0aW9uLgorICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7
CisgICAgR0xlbnVtIHR5cGUgPSAwOworICAgIGdsOjpHZXRBY3RpdmVBdHRyaWIocHJvZ3JhbSwg
aW5kZXgsIG1heEF0dHJpYnV0ZVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUu
ZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7CisgICAgaW5m
by50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sK
KyAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Cit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOworICAgIGdsOjpHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZv
cm1TaXplKTsKKworICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBH
TF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisg
ICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVu
dW0gdHlwZSA9IDA7CisgICAgZ2w6OkdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1h
eFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Cisg
ICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbmZvLm5h
bWUgPSBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5
cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIHJldHVy
biBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpbmRleCwgaW5mbyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZv
cm0zRE9iamVjdCogc2hhZGVycykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldEF0dGFjaGVkU2hhZGVycyhwcm9n
cmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICByZXR1cm4gZ2w6OkdldEF0dHJp
YkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2ludCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIGdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIG5hbWUpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7CisKKyAgICAvLyBTZXQgYW4g
YXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNyZWF0aW5nIGEgaGFuZyBpZgor
ICAgIC8vIGEgcHJvYmxlbSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQgY2F1c2VzIGl0IHRvIG5ldmVy
IGNsZWFyIHRoZSBlcnJvci4KKyAgICAvLyBPdGhlcndpc2UsIHdlIHdvdWxkIGp1c3QgbG9vcCB1
bnRpbCB3ZSBnb3QgTk9fRVJST1IuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDsg
KytpKSB7CisgICAgICAgIEdDM0RlbnVtIGVycm9yID0gZ2w6OkdldEVycm9yKCk7CisgICAgICAg
IGlmIChlcnJvciA9PSBOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5
bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9y
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9y
cyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVy
cm9yIGlzIGFscmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3Ro
CisgICAgICAgIC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVh
Y2ggZXJyb3IgY29kZSBvbmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKKyAgICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAg
IH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6R2V0RXJyb3Io
KTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0MzRGVu
dW0gbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcobmFtZSkpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkhpbnQo
dGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6SXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGds
OjpJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7Cisg
ICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OklzUHJvZ3JhbShwcm9ncmFtKTsKK30KKwor
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBy
ZXR1cm4gZ2w6OklzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpJc1NoYWRlcihzaGFkZXIpOwor
fQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6
SXNUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjps
aW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsOjpMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJU
KHByb2dyYW0pOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpMaW5rUHJvZ3Jh
bShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9y
ZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OlBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0Mz
RGZsb2F0IHVuaXRzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpQb2x5
Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlNhbXBsZUNvdmVyYWdlKHZh
bHVlLCBpbnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29y
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlNjaXNzb3IoeCwgeSwgd2lk
dGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNv
dXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7Cisg
ICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGNv
bnN0IENTdHJpbmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOworICAgIGNv
bnN0IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwor
ICAgIGludCBzaGFkZXJTb3VyY2VMZW5ndGggPSBzaGFkZXJTb3VyY2VDU3RyaW5nLmxlbmd0aCgp
OworICAgIGdsOjpTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hh
ZGVyU291cmNlTGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwg
bWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50
IG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlN0ZW5jaWxGdW5j
U2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6U3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0Mz
RHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U3RlbmNp
bE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6
cGFzcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U3RlbmNpbE9wKGZh
aWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0
ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpm
YWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6U3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3Qg
R0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
VW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZv
cm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0Mz
RGZsb2F0KiBhcnJheSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMi4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybTJm
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQg
djEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
VW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwg
Y29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
VW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYz
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCB2MCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6VW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNv
bnN0IEdDM0RpbnQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBH
QzNEaW50IHYxKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3Jt
MmkobG9jYXRpb24sIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0Rp
bnQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiAyLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtMml2KGxv
Y2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNE
aW50IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtM2ko
bG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNE
aW50KiBhcnJheSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgMy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybTNpdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0Mz
RGludCB2MiwgR0MzRGludCB2MykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6VW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVl
ZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJh
eSkKK3sKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybU1hdHJpeDJmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5z
cG9zZSwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6VXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6VmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZihpbmRleCwg
djApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIxZnYo
R0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgs
IGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2w6OlZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0
IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5k
ZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2w6OlZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAs
IHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJy
YXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29s
ZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJQb2ludGVyKGlu
ZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5KCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgYXJyYXkgPSAwOworICAgIGdsOjpH
ZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmpl
Y3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuOworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsK
K30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXko
UGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpJ
c1ZlcnRleEFycmF5KGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2w6OkJpbmRWZXJ0ZXhBcnJheShhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNE
Ym9vbGVhbiogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6Okdl
dEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpH
ZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0RmxvYXR2
KHBuYW1lLCB2YWx1ZSk7Cit9CisgICAgCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VyNjR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50NjQqIHZhbHVlKQoreworICAgIFVO
VVNFRF9QQVJBTShwbmFtZSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgKnZhbHVl
ID0gMDsKKyAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3Qg
Zmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFs
aW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgorICAgIC8vIGdsOjpH
ZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChhdHRhY2htZW50ID09IERFUFRI
X1NURU5DSUxfQVRUQUNITUVOVCkKKyAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1F
TlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgorICAgIGdsOjpHZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1p
dihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0UHJvZ3JhbWl2KHBy
b2dyYW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIEdDM0Rz
aXplaSBjb3VudCwgY29uc3QgU3RyaW5nJiBsb2cpCit7CisgICAgVU5VU0VEX1BBUkFNKHNoYWRl
cnMpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgTE9HKFdlYkdMLCAiT3JpZ2luYWwg
U2hhZGVySW5mb0xvZzpcbiVzIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOworCisgICAgU3RyaW5nQnVp
bGRlciBwcm9jZXNzZWRMb2c7CisKKyAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24i
IGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0CisgICAgLy8gY2F1c2VzIGEgd2Fybmlu
ZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZworICAgIC8vIHRo
aXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0
aGF0CisgICAgLy8gaXMgY2F1c2luZyBpdC4KKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FS
Ql9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9zIH07CisgICAgaW50IHN0YXJ0RnJv
bSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVu
Z3RoKCkgOiAwOworICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZy
b20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJvbSkpOworCisgICAgTE9HKFdlYkdMLCAiVW5tYW5n
bGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHByb2Nlc3NlZExvZy50b1N0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIHJldHVybiBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKTsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICBnbDo6R2V0UHJvZ3JhbWl2KHBy
b2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZl
Y3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICBnbDo6R2V0UHJvZ3JhbUluZm9Mb2cocHJv
Z3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgR0MzRHNpemVpIGNvdW50
OworICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXTsKKyAgICBnZXRBdHRhY2hlZFNoYWRl
cnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIHJldHVybiBnZXRVbm1hbmds
ZWRJbmZvTG9nKHNoYWRlcnMsIGNvdW50LCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgZ2w6OkdldFNo
YWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7
CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIGdsOjpHZXRTaGFkZXJJbmZv
TG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOworCisgICAgUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKKyAgICByZXR1cm4gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0z
RE9iamVjdCkKK3sKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZh
bHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRVbmlmb3JtZnYo
cHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2w6OkdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitHQzNEaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0p
OworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK0dDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgZ2w6Okdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBv
aW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5
b2ZmLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworCisgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxT
dG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBm
cm9tIHRoZSBzdWJpbWFnZSBzaXplLgorICAgIGdsOjpUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAg
ICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVy
ZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsK
KyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2w6OkdlbkJ1ZmZlcnMoMSwgJm8pOwor
ICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgR0x1aW50IG8gPSAwOworICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
Z2w6OkNyZWF0ZVByb2dyYW0oKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8p
OworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9T
SEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7Cit9CisKK1Bs
YXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbDo6
R2VuVGV4dHVyZXMoMSwgJm8pOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7
CisgICAgcmV0dXJuIG87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBm
cmFtZWJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoZnJhbWVi
dWZmZXIgPT0gbV9zdGF0ZS5ib3VuZEZCTykgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZy
YW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCisgICAgICAgIC8v
IG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgorICAgICAgICBiaW5kRnJhbWVidWZm
ZXIoRlJBTUVCVUZGRVIsIDApOworICAgIH0KKyAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsOjpEZWxldGVQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBy
ZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlbGV0
ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fc3Rh
dGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsK
KyAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7CisgICAgfSk7
CisgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKK3sKKyAgICAvLyBO
ZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlz
dCB0bworICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVyIHRv
IGdldEVycm9yIHdpbGwgZ2V0CisgICAgLy8gYW55IGVycm9ycyBmcm9tIGdsOjpFcnJvciBiZWZv
cmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCisgICAgbW92ZUVycm9yc1RvU3ludGhl
dGljRXJyb3JMaXN0KCk7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAg
ICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9
IHRydWU7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMp
KQorICAgICAgICBjbGllbnQtPmRpZENvbXBvc2l0ZSgpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyQ29tcG9zaXRlZDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VD
b250ZXh0TG9zdCgpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9j
bGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKK3sKKyAgICBmb3IgKGF1
dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPnJl
Y3ljbGVDb250ZXh0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3Bh
dGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQoreworICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250
ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgZ2V0RXh0
ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291
bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50
KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291
bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1
aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQoreworICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0
ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9UZW1wb3JhcnlBTkdM
RVNldHRpbmcuY3BwCmluZGV4IGJiOTU4ZGEwMmEwZDY0ZjlkNDMyZDNiYmJjMWY5ZmFkYTRlOGJm
MmIuLjYxOTk0M2RhMmIzMmQ5MzAwZGVhZmQxMDczYjQyZjA1ZGQwZjVlYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvVGVt
cG9yYXJ5QU5HTEVTZXR0aW5nLmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKEFOR0xFKQor
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoQU5HTEUpCiAjaW5jbHVkZSAi
VGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmgiCiAKICNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNf
Z2xlc18yXzBfYXV0b2dlbi5oPgpAQCAtNjAsNCArNjAsNCBAQCBUZW1wb3JhcnlBTkdMRVNldHRp
bmc6On5UZW1wb3JhcnlBTkdMRVNldHRpbmcoKQogCiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKEFOR0xFKQorI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKSAmJiBVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKaW5kZXggYTlk
NTAxNzZlY2NkMzNkMGU3NTk0YjdiYmMyMTZlMjJiM2NkNTRiMS4uNTMyYmVjZjFhOTMyY2U3ZmE3
NWVjYTg5NmIzOWU0OTk2Nzk5NjdjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaApAQCAtMjcxLDcg
KzI3MSw3IEBAIHByaXZhdGU6CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50VGltZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgd2FpdEZvclZpZGVvT3V0cHV0TWVkaWFEYXRh
V2lsbENoYW5nZSgpOwogCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMubW0KaW5kZXggYjJmM2EyYWQ4YmI0YWIwY2M0MDdjYThhM2VjY2E5ZGYzZDg1ZTE4ZS4u
YjNkYzdhYTdlYjkwNGFhZDQ4MmZhNjNlZWI2ZmRjMGRlNjRjOWQ3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tCkBAIC0zOCwxMSArMzgsMTEgQEAKICNpbXBvcnQgIkNETVNlc3Npb25BVkZvdW5k
YXRpb25PYmpDLmgiCiAjaW1wb3J0ICJDb29raWUuaCIKICNpbXBvcnQgIkRlcHJlY2F0ZWRHbG9i
YWxTZXR0aW5ncy5oIgotI2ltcG9ydCAiRXh0ZW5zaW9uczNELmgiCisjaW1wb3J0ICJFeHRlbnNp
b25zR0wuaCIKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgogI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW1w
b3J0ICJJbWFnZVJvdGF0aW9uU2Vzc2lvblZULmgiCiAjaW1wb3J0ICJJbmJhbmRNZXRhZGF0YVRl
eHRUcmFja1ByaXZhdGVBVkYuaCIKICNpbXBvcnQgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZP
YmpDLmgiCkBAIC0yMjk1LDcgKzIyOTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVvT3V0cHV0KEdyYXBoaWNzQ29udGV4dCYgYwogCiB9
CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y29weVZpZGVvVGV4
dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9y
bTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0
cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oCmluZGV4IDUzMTQwOWJkMzZiODY0YzRkNTJhMTA2YTlmMWEy
NmU0OWIxNDVmYWIuLjA1MDAxZTczZjMxNmYyYTczNTU3YmE5NTc2ZjE5NDJhOWQxNzA5ZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oCkBAIC0yMjMsNyArMjIzLDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIHVwZGF0ZUxhc3RJbWFnZSgpOwogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBwYWludEN1cnJlbnRGcmFt
ZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKyAgICBib29sIGNv
cHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc3VwcG9y
dHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOwogICAgIC8vIGNhbGxlZCB3
aGVuIHRoZSByZW5kZXJpbmcgc3lzdGVtIGZsaXBzIHRoZSBpbnRvIG9yIG91dCBvZiBhY2NlbGVy
YXRlZCByZW5kZXJpbmcgbW9kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQppbmRleCAyM2M0
ZDQ5NjIzMThiZDRjMzhiNmUyMjY5NTU4OGY4ZjA3MThmYjg1Li43NTJmODllYWJhMTY3MGQ2ZGQz
ZmQ3ZDY0NzhjNDI5NGNhNzJlYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCkBAIC02
MzEsNyArNjMxLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ28KICAgICBjb250ZXh0LmRyYXdO
YXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LnNpemUoKSwgb3V0cHV0UmVjdCwgaW1hZ2VSZWN0
KTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNvcHlW
aWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
UGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0
Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIFBsYXRmb3JtM0RP
YmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCiB7CiAgICAgLy8gV2UgaGF2ZSBi
ZWVuIGFza2VkIHRvIHBhaW50IGludG8gYSBXZWJHTCBjYW52YXMsIHNvIHRha2UgdGhhdCBhcyBh
IHNpZ25hbCB0byBjcmVhdGUKICAgICAvLyBhIGRlY29tcHJlc3Npb24gc2Vzc2lvbiwgZXZlbiBp
ZiB0aGF0IG1lYW5zIHRoZSBuYXRpdmUgdmlkZW8gY2FuJ3QgYWxzbyBiZSBkaXNwbGF5ZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ4ODk1N2UyZTU3YzgwNjY3MDE4MzFiMzA3Y2Q5NzhjMWRkMzk3MTYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgot
I2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250
ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQotewotICAg
IGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFdlIG5lZWQgdGhp
cyB0byBzdGF5IGluIHNjb3BlIGJlY2F1c2UgdGhlIG5hdGl2ZSBpbWFnZSBpcyBqdXN0IGEgc2hh
bGxvdyBjb3B5IG9mIHRoZSBkYXRhLgotICAgIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uID0gcHJl
bXVsdGlwbHlBbHBoYSA/IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkIDogQWxwaGFPcHRpb246
Ok5vdFByZW11bHRpcGxpZWQ7Ci0gICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24gPSBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b246OkFwcGxpZWQ7Ci0gICAgYXV0byBzb3VyY2UgPSBJbWFnZVNvdXJjZTo6Y3JlYXRlKG51bGxw
dHIsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0gICAgbV9hbHBo
YU9wID0gQWxwaGFPcDo6RG9Ob3RoaW5nOwotCi0gICAgaWYgKG1faW1hZ2UtPmRhdGEoKSkgewot
ICAgICAgICBzb3VyY2UtPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKLSAgICAgICAg
aWYgKCFzb3VyY2UtPmZyYW1lQ291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbV9pbWFnZVN1cmZhY2UgPSBzb3VyY2UtPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDAp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faW1hZ2VTdXJmYWNlID0gbV9pbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgLy8gMS4gRm9yIHRleEltYWdlMkQgd2l0
aCBIVE1MVmlkZW9FbG1lbnQgaW5wdXQsIGFzc3VtZSBubyBQcmVtdWx0aXBseUFscGhhIGhhZCBi
ZWVuIGFwcGxpZWQgYW5kIHRoZSBhbHBoYSB2YWx1ZSBpcyAweEZGIGZvciBlYWNoIHBpeGVsLAot
ICAgICAgICAvLyB3aGljaCBpcyB0cnVlIGF0IHByZXNlbnQgYW5kIG1heSBiZSBjaGFuZ2VkIGlu
IHRoZSBmdXR1cmUgYW5kIG5lZWRzIGFkanVzdG1lbnQgYWNjb3JkaW5nbHkuCi0gICAgICAgIC8v
IDIuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1lbnQgaW5wdXQgaW4gd2hpY2gg
QWxwaGEgaXMgYWxyZWFkeSBQcmVtdWx0aXBsaWVkIGluIHRoaXMgcG9ydCwgCi0gICAgICAgIC8v
IGRvIEFscGhhRG9Vbm11bHRpcGx5IGlmIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCBp
cyBzZXQgdG8gZmFsc2UuCi0gICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiBtX2ltYWdl
SHRtbERvbVNvdXJjZSAhPSBET01Tb3VyY2U6OlZpZGVvKQotICAgICAgICAgICAgbV9hbHBoYU9w
ID0gQWxwaGFPcDo6RG9Vbm11bHRpcGx5OwotCi0gICAgICAgIC8vIGlmIG1faW1hZ2VTdXJmYWNl
IGlzIG5vdCBhbiBpbWFnZSwgZXh0cmFjdCBhIGNvcHkgb2YgdGhlIHN1cmZhY2UKLSAgICAgICAg
aWYgKG1faW1hZ2VTdXJmYWNlICYmIGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9pbWFnZVN1cmZh
Y2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAgICAgICAgICAgSW50
U2l6ZSBzdXJmYWNlU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZVN1cmZhY2UuZ2V0KCkp
OwotICAgICAgICAgICAgYXV0byB0bXBTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgc3VyZmFjZVNpemUud2lkdGgoKSwgc3Vy
ZmFjZVNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VU
b0Fub3RoZXIobV9pbWFnZVN1cmZhY2UuZ2V0KCksIHRtcFN1cmZhY2UuZ2V0KCksIEludFNpemUo
KSwgSW50UmVjdChJbnRQb2ludCgpLCBzdXJmYWNlU2l6ZSksIEludFNpemUoKSwgQ0FJUk9fT1BF
UkFUT1JfU09VUkNFKTsKLSAgICAgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gV1RGTW92ZSh0bXBT
dXJmYWNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9pbWFnZVN1cmZhY2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBl
KG1faW1hZ2VTdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOwotCi0g
ICAgSW50U2l6ZSBpbWFnZVNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2VTdXJmYWNlLmdl
dCgpKTsKLSAgICBtX2ltYWdlV2lkdGggPSBpbWFnZVNpemUud2lkdGgoKTsKLSAgICBtX2ltYWdl
SGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdodCgpOwotICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFt
X2ltYWdlSGVpZ2h0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZm9ybWF0KG1faW1hZ2VTdXJmYWNlLmdldCgpKSAhPSBDQUlST19GT1JN
QVRfQVJHQjMyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBpbnQgc3Jj
VW5wYWNrQWxpZ25tZW50ID0gMTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHNpemVfdCBi
aXRzUGVyUGl4ZWwgPSAzMjsKLSAgICB1bnNpZ25lZCBwYWRkaW5nID0gYnl0ZXNQZXJSb3cgLSBi
aXRzUGVyUGl4ZWwgLyA4ICogbV9pbWFnZVdpZHRoOwotICAgIGlmIChwYWRkaW5nKSB7Ci0gICAg
ICAgIHNyY1VucGFja0FsaWdubWVudCA9IHBhZGRpbmcgKyAxOwotICAgICAgICB3aGlsZSAoYnl0
ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgICAgICArK3NyY1VucGFja0Fs
aWdubWVudDsKLSAgICB9Ci0KLSAgICBtX2ltYWdlUGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZGF0YShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgbV9pbWFnZVNvdXJjZUZv
cm1hdCA9IERhdGFGb3JtYXQ6OkJHUkE4OwotICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1l
bnQgPSBzcmNVbnBhY2tBbGlnbm1lbnQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQ
aXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmICghaW1hZ2VQaXhlbHMgfHwg
aW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LT5jcigpOwotICAg
IHBsYXRmb3JtQ29udGV4dC0+c2F2ZSgpOwotCi0gICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAw
LCBjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgIGNhaXJvX3BhaW50KGNy
KTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAotICAgICAgICBjb25zdF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihpbWFnZVBpeGVscyksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGltYWdlU2l6ZS53aWR0aCgpICogNCkp
OwotCi0gICAgLy8gT3BlbkdMIGtlZXBzIHRoZSBwaXhlbHMgc3RvcmVkIGJvdHRvbSB1cCwgc28g
d2UgbmVlZCB0byBmbGlwIHRoZSBpbWFnZSBoZXJlLgotICAgIGNhaXJvX3RyYW5zbGF0ZShjciwg
MCwgaW1hZ2VTaXplLmhlaWdodCgpKTsKLSAgICBjYWlyb19zY2FsZShjciwgMSwgLTEpOwotCi0g
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVSKTsKLSAgICBjYWly
b19zZXRfc291cmNlX3N1cmZhY2UoY3IsIGltYWdlU3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIC1jYW52YXNTaXpl
LmhlaWdodCgpKTsKLQotICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIHBsYXRmb3JtQ29udGV4dC0+
cmVzdG9yZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRHTENhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTVjYzlkNjE1NWZmYTg3MmQzZDEwYjBhZjZkYTll
YzdjNWYyMzBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKQEAgLTAsMCArMSwxNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpICYmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWly
by5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJ
bWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OworCitib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKK3sKKyAgICBp
ZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBXZSBuZWVkIHRoaXMg
dG8gc3RheSBpbiBzY29wZSBiZWNhdXNlIHRoZSBuYXRpdmUgaW1hZ2UgaXMganVzdCBhIHNoYWxs
b3cgY29weSBvZiB0aGUgZGF0YS4KKyAgICBBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiA9IHByZW11
bHRpcGx5QWxwaGEgPyBBbHBoYU9wdGlvbjo6UHJlbXVsdGlwbGllZCA6IEFscGhhT3B0aW9uOjpO
b3RQcmVtdWx0aXBsaWVkOworICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uID0gaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
OjpBcHBsaWVkOworICAgIGF1dG8gc291cmNlID0gSW1hZ2VTb3VyY2U6OmNyZWF0ZShudWxscHRy
LCBhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOworICAgIG1fYWxwaGFP
cCA9IEFscGhhT3A6OkRvTm90aGluZzsKKworICAgIGlmIChtX2ltYWdlLT5kYXRhKCkpIHsKKyAg
ICAgICAgc291cmNlLT5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CisgICAgICAgIGlm
ICghc291cmNlLT5mcmFtZUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIG1faW1hZ2VTdXJmYWNlID0gc291cmNlLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJEIHdpdGgg
SFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBoYWQgYmVl
biBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhGRiBmb3IgZWFjaCBwaXhlbCwKKyAg
ICAgICAgLy8gd2hpY2ggaXMgdHJ1ZSBhdCBwcmVzZW50IGFuZCBtYXkgYmUgY2hhbmdlZCBpbiB0
aGUgZnV0dXJlIGFuZCBuZWVkcyBhZGp1c3RtZW50IGFjY29yZGluZ2x5LgorICAgICAgICAvLyAy
LiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxDYW52YXNFbGVtZW50IGlucHV0IGluIHdoaWNoIEFs
cGhhIGlzIGFscmVhZHkgUHJlbXVsdGlwbGllZCBpbiB0aGlzIHBvcnQsIAorICAgICAgICAvLyBk
byBBbHBoYURvVW5tdWx0aXBseSBpZiBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgaXMg
c2V0IHRvIGZhbHNlLgorICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgbV9pbWFnZUh0
bWxEb21Tb3VyY2UgIT0gRE9NU291cmNlOjpWaWRlbykKKyAgICAgICAgICAgIG1fYWxwaGFPcCA9
IEFscGhhT3A6OkRvVW5tdWx0aXBseTsKKworICAgICAgICAvLyBpZiBtX2ltYWdlU3VyZmFjZSBp
cyBub3QgYW4gaW1hZ2UsIGV4dHJhY3QgYSBjb3B5IG9mIHRoZSBzdXJmYWNlCisgICAgICAgIGlm
IChtX2ltYWdlU3VyZmFjZSAmJiBjYWlyb19zdXJmYWNlX2dldF90eXBlKG1faW1hZ2VTdXJmYWNl
LmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAgICAgICAgIEludFNp
emUgc3VyZmFjZVNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsK
KyAgICAgICAgICAgIGF1dG8gdG1wU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHN1cmZhY2VTaXplLndpZHRoKCksIHN1cmZh
Y2VTaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9B
bm90aGVyKG1faW1hZ2VTdXJmYWNlLmdldCgpLCB0bXBTdXJmYWNlLmdldCgpLCBJbnRTaXplKCks
IEludFJlY3QoSW50UG9pbnQoKSwgc3VyZmFjZVNpemUpLCBJbnRTaXplKCksIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7CisgICAgICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IFdURk1vdmUodG1wU3Vy
ZmFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1faW1hZ2VTdXJmYWNlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZSht
X2ltYWdlU3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKKworICAg
IEludFNpemUgaW1hZ2VTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlU3VyZmFjZS5nZXQo
KSk7CisgICAgbV9pbWFnZVdpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7CisgICAgbV9pbWFnZUhl
aWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9p
bWFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2Zvcm1hdChtX2ltYWdlU3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fRk9STUFU
X0FSR0IzMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgc3JjVW5wYWNr
QWxpZ25tZW50ID0gMTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9zdHJpZGUobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOworICAgIHNpemVfdCBiaXRzUGVy
UGl4ZWwgPSAzMjsKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gYnl0ZXNQZXJSb3cgLSBiaXRzUGVy
UGl4ZWwgLyA4ICogbV9pbWFnZVdpZHRoOworICAgIGlmIChwYWRkaW5nKSB7CisgICAgICAgIHNy
Y1VucGFja0FsaWdubWVudCA9IHBhZGRpbmcgKyAxOworICAgICAgICB3aGlsZSAoYnl0ZXNQZXJS
b3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgICAgICArK3NyY1VucGFja0FsaWdubWVu
dDsKKyAgICB9CisKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7CisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9
IERhdGFGb3JtYXQ6OkJHUkE4OworICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSBz
cmNVbnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQ
aXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghaW1hZ2VQaXhlbHMgfHwg
aW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCisgICAgICAg
IHJldHVybjsKKworICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LT5jcigpOworICAg
IHBsYXRmb3JtQ29udGV4dC0+c2F2ZSgpOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAw
LCBjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNy
KTsKKworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAorICAgICAgICBjb25zdF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihpbWFnZVBpeGVscyksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGltYWdlU2l6ZS53aWR0aCgpICogNCkp
OworCisgICAgLy8gT3BlbkdMIGtlZXBzIHRoZSBwaXhlbHMgc3RvcmVkIGJvdHRvbSB1cCwgc28g
d2UgbmVlZCB0byBmbGlwIHRoZSBpbWFnZSBoZXJlLgorICAgIGNhaXJvX3RyYW5zbGF0ZShjciwg
MCwgaW1hZ2VTaXplLmhlaWdodCgpKTsKKyAgICBjYWlyb19zY2FsZShjciwgMSwgLTEpOworCisg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9PVkVSKTsKKyAgICBjYWly
b19zZXRfc291cmNlX3N1cmZhY2UoY3IsIGltYWdlU3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGNyLCAwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIC1jYW52YXNTaXpl
LmhlaWdodCgpKTsKKworICAgIGNhaXJvX2ZpbGwoY3IpOworICAgIHBsYXRmb3JtQ29udGV4dC0+
cmVzdG9yZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAppbmRleCA2YjY3ZjU1ZGM5OGIwNzY2YTAzMWMzYTRlN2I5MDYwZmRiOGI1MDRlLi45ZGU5MDQ0
ODA3YjkxNzY5ZTRmMzRkMzVjYjE2ZTYzNDUzZTZiZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cApAQCAtNzIzLDcgKzcyMyw3IEBAIFBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEJiwgR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK2Jvb2wgSW1hZ2VCdWZmZXI6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCiB7CiAjaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1f
cmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBp
cyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dDNEQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0M0RDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjOTM4YjQ0
MmI4MTE4YWFiYTNmNDMzMTA2YjE3N2QwZjgyNzVkMjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRE5FT04uaCIKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0NvbnRleHQuaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEYXRhUHJvdmlkZXIuaD4K
LSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgotCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1lbnVtIFNvdXJjZURhdGFGb3JtYXRCYXNlIHsKLSAgICBTb3VyY2VGb3JtYXRCYXNl
UiA9IDAsCi0gICAgU291cmNlRm9ybWF0QmFzZUEsCi0gICAgU291cmNlRm9ybWF0QmFzZVJBLAot
ICAgIFNvdXJjZUZvcm1hdEJhc2VBUiwKLSAgICBTb3VyY2VGb3JtYXRCYXNlUkdCLAotICAgIFNv
dXJjZUZvcm1hdEJhc2VSR0JBLAotICAgIFNvdXJjZUZvcm1hdEJhc2VBUkdCLAotICAgIFNvdXJj
ZUZvcm1hdEJhc2VOdW1Gb3JtYXRzCi19OwotCi1lbnVtIEFscGhhRm9ybWF0IHsKLSAgICBBbHBo
YUZvcm1hdE5vbmUgPSAwLAotICAgIEFscGhhRm9ybWF0Rmlyc3QsCi0gICAgQWxwaGFGb3JtYXRM
YXN0LAotICAgIEFscGhhRm9ybWF0TnVtRm9ybWF0cwotfTsKLQotLy8gVGhpcyByZXR1cm5zIFNv
dXJjZUZvcm1hdE51bUZvcm1hdHMgaWYgdGhlIGNvbWJpbmF0aW9uIG9mIGlucHV0IHBhcmFtZXRl
cnMgaXMgdW5zdXBwb3J0ZWQuCi1zdGF0aWMgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQg
Z2V0U291cmNlRGF0YUZvcm1hdCh1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwsIEFscGhhRm9y
bWF0IGFscGhhRm9ybWF0LCBib29sIGlzMTZCaXRGb3JtYXQsIGJvb2wgYmlnRW5kaWFuKQotewot
ICAgIGNvbnN0IHN0YXRpYyBTb3VyY2VEYXRhRm9ybWF0QmFzZSBmb3JtYXRUYWJsZUJhc2VbNF1b
QWxwaGFGb3JtYXROdW1Gb3JtYXRzXSA9IHsgLy8gY29tcG9uZW50c1BlclBpeGVsIHggQWxwaGFG
b3JtYXQKLSAgICAgICAgLy8gQWxwaGFGb3JtYXROb25lICAgICAgICAgICAgQWxwaGFGb3JtYXRG
aXJzdCAgICAgICAgICAgIEFscGhhRm9ybWF0TGFzdAotICAgICAgICB7IFNvdXJjZUZvcm1hdEJh
c2VSLCAgICAgICAgICBTb3VyY2VGb3JtYXRCYXNlQSwgICAgICAgICAgU291cmNlRm9ybWF0QmFz
ZUEgICAgICAgICAgfSwgLy8gMSBjb21wb25lbnRzUGVyUGl4ZWwKLSAgICAgICAgeyBTb3VyY2VG
b3JtYXRCYXNlTnVtRm9ybWF0cywgU291cmNlRm9ybWF0QmFzZUFSLCAgICAgICAgIFNvdXJjZUZv
cm1hdEJhc2VSQSAgICAgICAgIH0sIC8vIDIgY29tcG9uZW50c1BlclBpeGVsCi0gICAgICAgIHsg
U291cmNlRm9ybWF0QmFzZVJHQiwgICAgICAgIFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBT
b3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cyB9LCAvLyAzIGNvbXBvbmVudHNQZXJQaXhlbAotICAg
ICAgICB7IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNlQVJHQiwg
ICAgICAgU291cmNlRm9ybWF0QmFzZVJHQkEgICAgICAgIH0gLy8gNCBjb21wb25lbnRzUGVyUGl4
ZWwKLSAgICB9OwotICAgIGNvbnN0IHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dCBmb3JtYXRUYWJsZVtTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0c11bNF0gPSB7IC8vIFNvdXJj
ZURhdGFGb3JtYXQ6OkJhc2UgeCBiaXRzUGVyQ29tcG9uZW50IHggZW5kaWFuCi0gICAgICAgIC8v
IDhiaXRzLCBsaXR0bGUgZW5kaWFuICAgICAgICAgICAgICAgICA4Yml0cywgYmlnIGVuZGlhbiAg
ICAgICAgICAgICAgICAgICAgIDE2Yml0cywgbGl0dGxlIGVuZGlhbiAgICAgICAgICAgICAgICAg
ICAgICAgIDE2Yml0cywgYmlnIGVuZGlhbgotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSOCwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4LCAgICBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2TGl0dGxlLCAgICBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UjE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OkE4LCAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgsICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZMaXR0bGUsICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZCaWcgfSwKLSAgICAgICAgeyBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6QVI4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgs
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZMaXR0bGUsICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZCaWcgfSwKLSAgICAgICAgeyBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkE4LCAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpB
UjgsICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSMTZMaXR0bGUsICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSMTZCaWcgfSwKLSAgICAgICAgeyBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSOCwgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0I4LCAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2TGl0dGxlLCAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2QmlnIH0sCi0gICAgICAgIHsgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFCR1I4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZMaXR0bGUs
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZCaWcgfSwKLSAgICAgICAgeyBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpBUkdCOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0IxNkxp
dHRsZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0IxNkJpZyB9Ci0gICAgfTsK
LQotICAgIEFTU0VSVChjb21wb25lbnRzUGVyUGl4ZWwgPD0gNCAmJiBjb21wb25lbnRzUGVyUGl4
ZWwgPiAwKTsKLSAgICBTb3VyY2VEYXRhRm9ybWF0QmFzZSBmb3JtYXRCYXNlID0gZm9ybWF0VGFi
bGVCYXNlW2NvbXBvbmVudHNQZXJQaXhlbCAtIDFdW2FscGhhRm9ybWF0XTsKLSAgICBpZiAoZm9y
bWF0QmFzZSA9PSBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cykKLSAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpOdW1Gb3JtYXRzOwotICAgIHJldHVybiBmb3Jt
YXRUYWJsZVtmb3JtYXRCYXNlXVsoaXMxNkJpdEZvcm1hdCA/IDIgOiAwKSArIChiaWdFbmRpYW4g
PyAxIDogMCldOwotfQotCi1uYW1lc3BhY2UgewotdWludDhfdCBjb252ZXJ0Q29sb3IxNkxpdHRs
ZVRvOCh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUgPj4gODsKLX0KLQotdWlu
dDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgJiAweDAwRkYpOwotfQotCi10ZW1wbGF0ZTxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBmb3JtYXQsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5
cGVuYW1lIERzdFR5cGU+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9S
R0JBOChjb25zdCBTb3VyY2VUeXBlKiwgRHN0VHlwZSosIHVuc2lnbmVkKQotewotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252
ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JB
MTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJHQkExNkxpdHRsZVRv
UkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKLSNlbmRpZgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0
aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAg
ICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMl0p
OwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJj
ZVszXSk7Ci0gICAgICAgIHNvdXJjZSArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0Owot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9y
bWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2QmlnLCB1aW50
MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0
Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29u
dmVydENvbG9yMTZCaWdUbzgoc291cmNlWzJdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBj
b252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbM10pOwotICAgICAgICBzb3VyY2UgKz0gNDsKLSAg
ICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQjE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsK
LSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgU0lNRDo6dW5wYWNrT25lUm93T2ZS
R0IxNkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKLSNl
bmRpZgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewot
ICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsw
XSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291
cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRv
OChzb3VyY2VbMl0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IDB4RkY7Ci0gICAgICAgIHNv
dXJjZSArPSAzOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291
cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChz
b3VyY2VbMl0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IDB4RkY7Ci0gICAgICAgIHNvdXJj
ZSArPSAzOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29u
c3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKLXsKLSNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgU0lNRDo6dW5w
YWNrT25lUm93T2ZBUkdCMTZMaXR0bGVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRpb24sIHBpeGVs
c1BlclJvdyk7Ci0jZW5kaWYKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkxpdHRs
ZVRvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVsyXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENv
bG9yMTZMaXR0bGVUbzgoc291cmNlWzNdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252
ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBzb3VyY2UgKz0gNDsKLSAg
ICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkFSR0IxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKLSAgICAg
ICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMl0pOwotICAg
ICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVszXSk7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsK
LSAgICAgICAgc291cmNlICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JH
QkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZMaXR0bGUsIHVpbnQxNl90LCB1
aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENv
bG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252
ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9
IDB4RkY7Ci0gICAgICAgIHNvdXJjZSArPSAxOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0Owot
ICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9y
bWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2QmlnLCB1aW50MTZf
dCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29s
b3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRD
b2xvcjE2QmlnVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVy
dENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSAweEZG
OwotICAgICAgICBzb3VyY2UgKz0gMTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRv
UkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZMaXR0bGUsIHVpbnQxNl90
LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xv
cjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVy
dENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBj
b252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsz
XSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIHNvdXJjZSAr
PSAyOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkExNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQx
Nl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsK
LSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0p
OwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsw
XSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNl
WzFdKTsKLSAgICAgICAgc291cmNlICs9IDI7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3Jt
YXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjE2TGl0dGxlLCB1aW50
MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0
Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNv
bnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJd
ID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRp
b25bM10gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBzb3Vy
Y2UgKz0gMjsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1
aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsx
XSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNl
WzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3Vy
Y2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNv
dXJjZVswXSk7Ci0gICAgICAgIHNvdXJjZSArPSAyOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0
Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2TGl0dGxlLCB1
aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSAweDA7
Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gMHgwOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9
IDB4MDsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChz
b3VyY2VbMF0pOwotICAgICAgICBzb3VyY2UgKz0gMTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0g
NDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJp
dEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkJpZywgdWlu
dDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gMHgwOwot
ICAgICAgICBkZXN0aW5hdGlvblsxXSA9IDB4MDsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSAw
eDA7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNl
WzBdKTsKLSAgICAgICAgc291cmNlICs9IDE7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0g
ICAgfQotfQotCi12b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTgoR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgc3JjRm9ybWF0LCBjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotI2RlZmluZSBDT05WRVJU
MTZCSVRGT1JNQVRUT1JHQkE4KFNyY0Zvcm1hdCkgXAotICAgIGNhc2UgU3JjRm9ybWF0OiBcCi0g
ICAgICAgIHJldHVybiBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PFNyY0Zvcm1hdD4oc291cmNl
LCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKLQotICAgIHN3aXRjaCAoc3JjRm9ybWF0KSB7
Ci0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlIxNkxpdHRsZSkKLSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2QmlnKQotICAgICAgICBDT05WRVJUMTZC
SVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZMaXR0bGUp
Ci0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkExNkJpZykKLSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkxpdHRsZSkKLSAgICAgICAgQ09OVkVSVDE2
QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkJpZykK
LSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6QVIxNkxpdHRsZSkKLSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVIxNkJpZykKLSAgICAgICAgQ09OVkVSVDE2
QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZMaXR0
bGUpCi0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQjE2QmlnKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZMaXR0bGUpCi0gICAgICAgIENP
TlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QkExNkJpZykKLSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6QVJHQjE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JN
QVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCMTZCaWcpCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotI3VuZGVmIENP
TlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgKLX0KLQotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCi17Ci0gICAgaWYgKCFtX2lt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCBoYXNBbHBoYSA9ICFtX2ltYWdl
LT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKLSAgICBpZiAoKGlnbm9yZUdhbW1hQW5k
Q29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJlbXVsdGlwbHlBbHBoYSkpICYmIG1faW1h
Z2UtPmRhdGEoKSkgewotICAgICAgICBhdXRvIHNvdXJjZSA9IEltYWdlU291cmNlOjpjcmVhdGUo
bnVsbHB0ciwgQWxwaGFPcHRpb246Ok5vdFByZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCk7Ci0gICAgICAgIHNvdXJjZS0+c2V0RGF0YSht
X2ltYWdlLT5kYXRhKCksIHRydWUpOwotICAgICAgICBpZiAoIXNvdXJjZS0+ZnJhbWVDb3VudCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG1fZGVjb2RlZEltYWdlID0g
c291cmNlLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsKLSAgICAgICAgbV9jZ0ltYWdlID0g
bV9kZWNvZGVkSW1hZ2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2dJbWFnZSA9IG1faW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFtX2NnSW1hZ2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faW1hZ2VXaWR0aCA9IENHSW1hZ2VHZXRXaWR0aCht
X2NnSW1hZ2UuZ2V0KCkpOwotICAgIG1faW1hZ2VIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KG1f
Y2dJbWFnZS5nZXQoKSk7Ci0gICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWlnaHQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNlZSB3aGV0aGVyIHRoZSBpbWFnZSBp
cyB1c2luZyBhbiBpbmRleGVkIGNvbG9yIHNwYWNlLCBhbmQgaWYKLSAgICAvLyBzbywgcmUtcmVu
ZGVyIGl0IGludG8gYW4gUkdCIGNvbG9yIHNwYWNlLiBUaGUgaW1hZ2UgcmUtcGFja2luZwotICAg
IC8vIGNvZGUgcmVxdWlyZXMgY29sb3IgZGF0YSwgbm90IGNvbG9yIHRhYmxlIGluZGljZXMsIGZv
ciB0aGUKLSAgICAvLyBpbWFnZSBkYXRhLgotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNl
ID0gQ0dJbWFnZUdldENvbG9yU3BhY2UobV9jZ0ltYWdlLmdldCgpKTsKLSAgICBDR0NvbG9yU3Bh
Y2VNb2RlbCBtb2RlbCA9IENHQ29sb3JTcGFjZUdldE1vZGVsKGNvbG9yU3BhY2UpOwotICAgIGlm
IChtb2RlbCA9PSBrQ0dDb2xvclNwYWNlTW9kZWxJbmRleGVkKSB7Ci0gICAgICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGJpdG1hcENvbnRleHQ7Ci0gICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91
bGQgcHJvYmFibHkgbWFudWFsbHkgY29udmVydCB0aGUgaW1hZ2UgYnkgaW5kZXhpbmcgaW50bwot
ICAgICAgICAvLyB0aGUgY29sb3IgdGFibGUsIHdoaWNoIHdvdWxkIGFsbG93IHVzIHRvIGF2b2lk
IHByZW11bHRpcGx5aW5nIHRoZQotICAgICAgICAvLyBhbHBoYSBjaGFubmVsLiBDcmVhdGlvbiBv
ZiBhIGJpdG1hcCBjb250ZXh0IHdpdGggYW4gYWxwaGEgY2hhbm5lbAotICAgICAgICAvLyBkb2Vz
bid0IHNlZW0gdG8gd29yayB1bmxlc3MgaXQncyBwcmVtdWx0aXBsaWVkLgotICAgICAgICBiaXRt
YXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbV9pbWFnZVdpZHRo
LCBtX2ltYWdlSGVpZ2h0LCA4LCBtX2ltYWdlV2lkdGggKiA0LAotICAgICAgICAgICAgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCkpOwotICAgICAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1h
cENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRTZXRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dJbnRlcnBvbGF0aW9u
Tm9uZSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIG1faW1hZ2VXaWR0aCwgbV9pbWFnZUhlaWdodCksIG1fY2dJbWFnZS5n
ZXQoKSk7Ci0KLSAgICAgICAgLy8gTm93IGRpc2NhcmQgdGhlIG9yaWdpbmFsIENHIGltYWdlIGFu
ZCByZXBsYWNlIGl0IHdpdGggYSBjb3B5IGZyb20gdGhlIGJpdG1hcCBjb250ZXh0LgotICAgICAg
ICBtX2RlY29kZWRJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0
bWFwQ29udGV4dC5nZXQoKSkpOwotICAgICAgICBtX2NnSW1hZ2UgPSBtX2RlY29kZWRJbWFnZS5n
ZXQoKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYml0c1BlckNvbXBvbmVudCA9IENHSW1hZ2VHZXRC
aXRzUGVyQ29tcG9uZW50KG1fY2dJbWFnZS5nZXQoKSk7Ci0gICAgc2l6ZV90IGJpdHNQZXJQaXhl
bCA9IENHSW1hZ2VHZXRCaXRzUGVyUGl4ZWwobV9jZ0ltYWdlLmdldCgpKTsKLSAgICBpZiAoYml0
c1BlckNvbXBvbmVudCAhPSA4ICYmIGJpdHNQZXJDb21wb25lbnQgIT0gMTYpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoYml0c1BlclBpeGVsICUgYml0c1BlckNvbXBvbmVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHNpemVfdCBjb21wb25lbnRzUGVyUGl4ZWwgPSBiaXRz
UGVyUGl4ZWwgLyBiaXRzUGVyQ29tcG9uZW50OwotCi0gICAgQ0dCaXRtYXBJbmZvIGJpdEluZm8g
PSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhtX2NnSW1hZ2UuZ2V0KCkpOwotICAgIGJvb2wgYmlnRW5k
aWFuU291cmNlID0gZmFsc2U7Ci0gICAgLy8gVGhlc2UgY291bGQgdGVjaG5pY2FsbHkgYmUgY29t
YmluZWQgaW50byBvbmUgbGFyZ2Ugc3dpdGNoCi0gICAgLy8gc3RhdGVtZW50LCBidXQgd2UgcHJl
ZmVyIG5vdCB0byBzbyB0aGF0IHdlIGZhaWwgZmFzdCBpZiB3ZQotICAgIC8vIGVuY291bnRlciBh
biB1bmV4cGVjdGVkIGltYWdlIGNvbmZpZ3VyYXRpb24uCi0gICAgaWYgKGJpdHNQZXJDb21wb25l
bnQgPT0gMTYpIHsKLSAgICAgICAgc3dpdGNoIChiaXRJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVy
TWFzaykgewotICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlcjE2QmlnOgotICAgICAgICAg
ICAgYmlnRW5kaWFuU291cmNlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGtDR0JpdG1hcEJ5dGVPcmRlcjE2TGl0dGxlOgotICAgICAgICAgICAgYmlnRW5kaWFuU291
cmNlID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBrQ0dCaXRtYXBC
eXRlT3JkZXJEZWZhdWx0OgotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJ1ZyBpbiBlYXJsaWVy
IHZlcnNpb24gb2YgY2cgd2hlcmUgdGhlIGRlZmF1bHQgZW5kaWFuCi0gICAgICAgICAgICAvLyBp
cyBsaXR0bGUgd2hlcmVhcyB0aGUgZGVjb2RlZCAxNi1iaXQgcG5nIGltYWdlIGRhdGEgaXMgYWN0
dWFsbHkKLSAgICAgICAgICAgIC8vIEJpZy4gTGF0ZXIgdmVyc2lvbiAoMTAuNi40KSBubyBsb25n
ZXIgcmV0dXJucyBCeXRlT3JkZXJEZWZhdWx0LgotICAgICAgICAgICAgYmlnRW5kaWFuU291cmNl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNo
IChiaXRJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyTWFzaykgewotICAgICAgICBjYXNlIGtDR0Jp
dG1hcEJ5dGVPcmRlcjMyQmlnOgotICAgICAgICAgICAgYmlnRW5kaWFuU291cmNlID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0
dGxlOgotICAgICAgICAgICAgYmlnRW5kaWFuU291cmNlID0gZmFsc2U7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0OgotICAgICAgICAg
ICAgLy8gSXQgYXBwZWFycyB0aGF0IHRoZSBkZWZhdWx0IGJ5dGUgb3JkZXIgaXMgYWN0dWFsbHkg
YmlnCi0gICAgICAgICAgICAvLyBlbmRpYW4gZXZlbiBvbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVj
dHVyZXMuCi0gICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb05vdGhpbmc7Ci0gICAg
QWxwaGFGb3JtYXQgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdE5vbmU7Ci0gICAgc3dpdGNoIChD
R0ltYWdlR2V0QWxwaGFJbmZvKG1fY2dJbWFnZS5nZXQoKSkpIHsKLSAgICBjYXNlIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Q6Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkK
LSAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvVW5tdWx0aXBseTsKLSAgICAgICAg
YWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IGtDR0ltYWdlQWxwaGFGaXJzdDoKLSAgICAgICAgLy8gVGhpcyBwYXRoIGlzIG9ubHkgYWNjZXNz
aWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFuIDEwLjYuNC4KLSAgICAgICAgaWYgKHByZW11bHRp
cGx5QWxwaGEpCi0gICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1ByZW11bHRpcGx5
OwotICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3Q6Ci0gICAgICAgIC8vIFRoaXMg
cGF0aCBpcyBvbmx5IGFjY2Vzc2libGUgZm9yIE1hY09TIGVhcmxpZXIgdGhhbiAxMC42LjQuCi0g
ICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJzdDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q6Ci0gICAgICAgIGlmICghcHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvVW5tdWx0
aXBseTsKLSAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdExhc3Q7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2Uga0NHSW1hZ2VBbHBoYUxhc3Q6Ci0gICAgICAgIGlmIChwcmVtdWx0aXBs
eUFscGhhKQotICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9QcmVtdWx0aXBseTsK
LSAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdExhc3Q7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDoKLSAgICAgICAgYWxwaGFGb3JtYXQg
PSBBbHBoYUZvcm1hdExhc3Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga0NHSW1hZ2VBbHBo
YU5vbmU6Ci0gICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXROb25lOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
bV9pbWFnZVNvdXJjZUZvcm1hdCA9IGdldFNvdXJjZURhdGFGb3JtYXQoY29tcG9uZW50c1BlclBp
eGVsLCBhbHBoYUZvcm1hdCwgYml0c1BlckNvbXBvbmVudCA9PSAxNiwgYmlnRW5kaWFuU291cmNl
KTsKLSAgICBpZiAobV9pbWFnZVNvdXJjZUZvcm1hdCA9PSBEYXRhRm9ybWF0OjpOdW1Gb3JtYXRz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BpeGVsRGF0YSA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKG1fY2dJbWFnZS5nZXQo
KSkpKTsKLSAgICBpZiAoIW1fcGl4ZWxEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX2ltYWdlUGl4ZWxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oQ0ZEYXRh
R2V0Qnl0ZVB0cihtX3BpeGVsRGF0YS5nZXQoKSkpOwotCi0gICAgdW5zaWduZWQgaW50IHNyY1Vu
cGFja0FsaWdubWVudCA9IDA7Ci0gICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5
dGVzUGVyUm93KG1fY2dJbWFnZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgcGFkZGluZyA9IGJ5dGVz
UGVyUm93IC0gYml0c1BlclBpeGVsIC8gOCAqIG1faW1hZ2VXaWR0aDsKLSAgICBpZiAocGFkZGlu
ZykgewotICAgICAgICBzcmNVbnBhY2tBbGlnbm1lbnQgPSBwYWRkaW5nICsgMTsKLSAgICAgICAg
d2hpbGUgKGJ5dGVzUGVyUm93ICUgc3JjVW5wYWNrQWxpZ25tZW50KQotICAgICAgICAgICAgKytz
cmNVbnBhY2tBbGlnbm1lbnQ7Ci0gICAgfQotCi0gICAgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdu
bWVudCA9IHNyY1VucGFja0FsaWdubWVudDsKLSAgICAvLyBVc2luZyBhIGJpdG1hcCBjb250ZXh0
IGNyZWF0ZWQgYWNjb3JkaW5nIHRvIGRlc3RpbmF0aW9uIGZvcm1hdCBhbmQgZHJhd2luZyB0aGUg
Q0dJbWFnZSB0byB0aGUgYml0bWFwIGNvbnRleHQgY2FuIGFsc28gZG8gdGhlIGZvcm1hdCBjb252
ZXJzaW9uLAotICAgIC8vIGJ1dCBpdCB3b3VsZCBwcmVtdWx0aXBseSB0aGUgYWxwaGEgY2hhbm5l
bCBhcyBhIHNpZGUgZWZmZWN0LgotICAgIC8vIFByZWZlciB0byBtYW5udWFsbHkgQ29udmVydCAx
NmJpdCBwZXItY29tcG9uZW50IGZvcm1hdHMgdG8gUkdCQTggZm9ybWF0cyBpbnN0ZWFkLgotICAg
IGlmIChiaXRzUGVyQ29tcG9uZW50ID09IDE2KSB7Ci0gICAgICAgIG1fZm9ybWFsaXplZFJHQkE4
RGF0YSA9IG1ha2VVbmlxdWVBcnJheTx1aW50OF90PigoQ2hlY2tlZDxzaXplX3Q+KG1faW1hZ2VX
aWR0aCkgKiBtX2ltYWdlSGVpZ2h0ICogNFUpLnVuc2FmZUdldCgpKTsKLSAgICAgICAgY29uc3Qg
dWludDE2X3QqIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihtX2lt
YWdlUGl4ZWxEYXRhKTsKLSAgICAgICAgdWludDhfdCogZGVzdGluYXRpb24gPSBtX2Zvcm1hbGl6
ZWRSR0JBOERhdGEuZ2V0KCk7Ci0gICAgICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNTdHJpZGVJbkVs
ZW1lbnRzID0gYnl0ZXNQZXJSb3cgLyBzaXplb2YodWludDE2X3QpOwotICAgICAgICBjb25zdCBw
dHJkaWZmX3QgZHN0U3RyaWRlSW5FbGVtZW50cyA9IDQgKiBtX2ltYWdlV2lkdGg7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9MDsgaSA8IG1faW1hZ2VIZWlnaHQ7IGkrKykgewotICAgICAgICAg
ICAgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBOChtX2ltYWdlU291cmNlRm9ybWF0LCBzb3VyY2Us
IGRlc3RpbmF0aW9uLCBtX2ltYWdlV2lkdGgpOwotICAgICAgICAgICAgc291cmNlICs9IHNyY1N0
cmlkZUluRWxlbWVudHM7Ci0gICAgICAgICAgICBkZXN0aW5hdGlvbiArPSBkc3RTdHJpZGVJbkVs
ZW1lbnRzOwotICAgICAgICB9Ci0gICAgICAgIG1faW1hZ2VQaXhlbERhdGEgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHZvaWQqPihtX2Zvcm1hbGl6ZWRSR0JBOERhdGEuZ2V0KCkpOwotICAgICAg
ICBtX2ltYWdlU291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdDo6UkdCQTg7Ci0gICAgICAgIG1faW1h
Z2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSAxOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RhdGljIHZvaWQgcmVsZWFzZUltYWdlRGF0YSh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90KQotewotICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFy
KiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBj
YW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFpbWFnZVBp
eGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaW50IHJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0Owot
ICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotCi0gICAgaWYg
KGNvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICB1bnNpZ25lZCBjaGFy
KiBjb3BpZWRQaXhlbHM7Ci0KLSAgICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGltYWdlU2l6ZS5o
ZWlnaHQoKSwgcm93Qnl0ZXMpLmdldFZhbHVlKGNvcGllZFBpeGVscykpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbWVtY3B5KGNvcGllZFBpeGVscywgaW1hZ2VQaXhlbHMsIHJvd0J5
dGVzICogaW1hZ2VTaXplLmhlaWdodCgpKTsKLQotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSBy
b3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChjb3BpZWRQaXhlbHMsIGRhdGFTaXplKTsKLSAgICAgICAgZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGNvcGllZFBpeGVscywg
ZGF0YVNpemUsIHJlbGVhc2VJbWFnZURhdGEpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzaXpl
X3QgZGF0YVNpemUgPSByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgdmVy
aWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChpbWFnZVBpeGVscywgZGF0YVNpemUpOwotICAgICAg
ICBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwg
aW1hZ2VQaXhlbHMsIGRhdGFTaXplLCAwKSk7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2VTaXplLndpZHRoKCks
IGltYWdlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHJvd0J5dGVzLCBzUkdCQ29sb3JTcGFjZVJlZigp
LCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJI
b3N0LAotICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7Ci0KLSAgICAvLyBDU1Mgc3R5bGluZyBtYXkgY2F1c2UgdGhlIGNhbnZh
cydzIGNvbnRlbnQgdG8gYmUgcmVzaXplZCBvbgotICAgIC8vIHRoZSBwYWdlLiBHbyBiYWNrIHRv
IHRoZSBDYW52YXMgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdAotICAgIC8vIHdpZHRoIGFuZCBo
ZWlnaHQgdG8gZHJhdy4KLSAgICBGbG9hdFJlY3QgY2FudmFzUmVjdChGbG9hdFBvaW50KCksIGNh
bnZhc1NpemUpOwotICAgIC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHBy
ZXZpb3VzIGZyYW1lJ3MKLSAgICAvLyByZW5kZXJpbmcgcmVzdWx0cy4KLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNjYWxl
KEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1pbWFnZVNpemUu
aGVpZ2h0KCkpOwotICAgIGNvbnRleHQuc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZSk7Ci0gICAgY29udGV4dC5kcmF3TmF0
aXZlSW1hZ2UoY2dJbWFnZSwgaW1hZ2VTaXplLCBjYW52YXNSZWN0LCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBpbWFnZVNpemUpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5IH0pOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF8zRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dEdMQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2IwMzBlMDhhNWM2NmI5Mzg1
NmFhMGE5NWEzN2JjMjVjMmZmNGQ5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCkBAIC0wLDAgKzEs
NTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisKKyNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKworI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE5FT04uaCIKKyNlbmRpZgor
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgorI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9DR0NvbnRleHQuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEYXRhUHJv
dmlkZXIuaD4KKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgorCisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitlbnVtIFNvdXJjZURhdGFGb3JtYXRCYXNlIHsKKyAgICBTb3VyY2VG
b3JtYXRCYXNlUiA9IDAsCisgICAgU291cmNlRm9ybWF0QmFzZUEsCisgICAgU291cmNlRm9ybWF0
QmFzZVJBLAorICAgIFNvdXJjZUZvcm1hdEJhc2VBUiwKKyAgICBTb3VyY2VGb3JtYXRCYXNlUkdC
LAorICAgIFNvdXJjZUZvcm1hdEJhc2VSR0JBLAorICAgIFNvdXJjZUZvcm1hdEJhc2VBUkdCLAor
ICAgIFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzCit9OworCitlbnVtIEFscGhhRm9ybWF0IHsK
KyAgICBBbHBoYUZvcm1hdE5vbmUgPSAwLAorICAgIEFscGhhRm9ybWF0Rmlyc3QsCisgICAgQWxw
aGFGb3JtYXRMYXN0LAorICAgIEFscGhhRm9ybWF0TnVtRm9ybWF0cworfTsKKworLy8gVGhpcyBy
ZXR1cm5zIFNvdXJjZUZvcm1hdE51bUZvcm1hdHMgaWYgdGhlIGNvbWJpbmF0aW9uIG9mIGlucHV0
IHBhcmFtZXRlcnMgaXMgdW5zdXBwb3J0ZWQuCitzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQgZ2V0U291cmNlRGF0YUZvcm1hdCh1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWws
IEFscGhhRm9ybWF0IGFscGhhRm9ybWF0LCBib29sIGlzMTZCaXRGb3JtYXQsIGJvb2wgYmlnRW5k
aWFuKQoreworICAgIGNvbnN0IHN0YXRpYyBTb3VyY2VEYXRhRm9ybWF0QmFzZSBmb3JtYXRUYWJs
ZUJhc2VbNF1bQWxwaGFGb3JtYXROdW1Gb3JtYXRzXSA9IHsgLy8gY29tcG9uZW50c1BlclBpeGVs
IHggQWxwaGFGb3JtYXQKKyAgICAgICAgLy8gQWxwaGFGb3JtYXROb25lICAgICAgICAgICAgQWxw
aGFGb3JtYXRGaXJzdCAgICAgICAgICAgIEFscGhhRm9ybWF0TGFzdAorICAgICAgICB7IFNvdXJj
ZUZvcm1hdEJhc2VSLCAgICAgICAgICBTb3VyY2VGb3JtYXRCYXNlQSwgICAgICAgICAgU291cmNl
Rm9ybWF0QmFzZUEgICAgICAgICAgfSwgLy8gMSBjb21wb25lbnRzUGVyUGl4ZWwKKyAgICAgICAg
eyBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cywgU291cmNlRm9ybWF0QmFzZUFSLCAgICAgICAg
IFNvdXJjZUZvcm1hdEJhc2VSQSAgICAgICAgIH0sIC8vIDIgY29tcG9uZW50c1BlclBpeGVsCisg
ICAgICAgIHsgU291cmNlRm9ybWF0QmFzZVJHQiwgICAgICAgIFNvdXJjZUZvcm1hdEJhc2VOdW1G
b3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cyB9LCAvLyAzIGNvbXBvbmVudHNQZXJQ
aXhlbAorICAgICAgICB7IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRC
YXNlQVJHQiwgICAgICAgU291cmNlRm9ybWF0QmFzZVJHQkEgICAgICAgIH0gLy8gNCBjb21wb25l
bnRzUGVyUGl4ZWwKKyAgICB9OworICAgIGNvbnN0IHN0YXRpYyBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBmb3JtYXRUYWJsZVtTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0c11bNF0gPSB7
IC8vIFNvdXJjZURhdGFGb3JtYXQ6OkJhc2UgeCBiaXRzUGVyQ29tcG9uZW50IHggZW5kaWFuCisg
ICAgICAgIC8vIDhiaXRzLCBsaXR0bGUgZW5kaWFuICAgICAgICAgICAgICAgICA4Yml0cywgYmln
IGVuZGlhbiAgICAgICAgICAgICAgICAgICAgIDE2Yml0cywgbGl0dGxlIGVuZGlhbiAgICAgICAg
ICAgICAgICAgICAgICAgIDE2Yml0cywgYmlnIGVuZGlhbgorICAgICAgICB7IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSOCwgICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlI4LCAgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2TGl0dGxlLCAgICBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2QmlnIH0sCisgICAgICAgIHsgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4LCAgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6QTgsICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZMaXR0bGUsICAgIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZCaWcgfSwKKyAgICAgICAgeyBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVI4LCAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSQTgsICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZMaXR0bGUsICAg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZCaWcgfSwKKyAgICAgICAgeyBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4LCAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpBUjgsICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSMTZMaXR0bGUs
ICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSMTZCaWcgfSwKKyAgICAgICAgeyBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSOCwgIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0I4LCAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2TGl0
dGxlLCAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2QmlnIH0sCisgICAgICAg
IHsgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4LCBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTgsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MTZMaXR0bGUsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZCaWcgfSwKKyAg
ICAgICAgeyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTgsIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCOCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OkFSR0IxNkxpdHRsZSwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0IxNkJpZyB9
CisgICAgfTsKKworICAgIEFTU0VSVChjb21wb25lbnRzUGVyUGl4ZWwgPD0gNCAmJiBjb21wb25l
bnRzUGVyUGl4ZWwgPiAwKTsKKyAgICBTb3VyY2VEYXRhRm9ybWF0QmFzZSBmb3JtYXRCYXNlID0g
Zm9ybWF0VGFibGVCYXNlW2NvbXBvbmVudHNQZXJQaXhlbCAtIDFdW2FscGhhRm9ybWF0XTsKKyAg
ICBpZiAoZm9ybWF0QmFzZSA9PSBTb3VyY2VGb3JtYXRCYXNlTnVtRm9ybWF0cykKKyAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpOdW1Gb3JtYXRzOworICAgIHJl
dHVybiBmb3JtYXRUYWJsZVtmb3JtYXRCYXNlXVsoaXMxNkJpdEZvcm1hdCA/IDIgOiAwKSArIChi
aWdFbmRpYW4gPyAxIDogMCldOworfQorCituYW1lc3BhY2UgewordWludDhfdCBjb252ZXJ0Q29s
b3IxNkxpdHRsZVRvOCh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgPj4gODsK
K30KKwordWludDhfdCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgJiAweDAwRkYpOworfQorCit0ZW1w
bGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBmb3JtYXQsIHR5cGVuYW1lIFNvdXJj
ZVR5cGUsIHR5cGVuYW1lIERzdFR5cGU+CitBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0
Rm9ybWF0VG9SR0JBOChjb25zdCBTb3VyY2VUeXBlKiwgRHN0VHlwZSosIHVuc2lnbmVkKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworI2lm
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJHQkEx
NkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKKyNlbmRp
ZgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAg
ICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7
CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNl
WzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChz
b3VyY2VbMl0pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxl
VG84KHNvdXJjZVszXSk7CisgICAgICAgIHNvdXJjZSArPSA0OworICAgICAgICBkZXN0aW5hdGlv
biArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVy
dDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2
QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0g
PSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsx
XSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9u
WzJdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzJdKTsKKyAgICAgICAgZGVzdGluYXRp
b25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbM10pOworICAgICAgICBzb3VyY2Ug
Kz0gNDsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3Qg
dWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3sKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAgU0lNRDo6dW5wYWNr
T25lUm93T2ZSR0IxNkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVy
Um93KTsKKyNlbmRpZgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84
KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZMaXR0
bGVUbzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3Ix
NkxpdHRsZVRvOChzb3VyY2VbMl0pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IDB4RkY7Cisg
ICAgICAgIHNvdXJjZSArPSAzOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30K
KwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JB
ODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcsIHVpbnQxNl90LCB1aW50
OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2Qmln
VG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZC
aWdUbzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3Ix
NkJpZ1RvOChzb3VyY2VbMl0pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IDB4RkY7CisgICAg
ICAgIHNvdXJjZSArPSAzOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjE2TGl0dGxlLCB1aW50MTZfdCwgdWlu
dDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKK3sKKyNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCisgICAg
U0lNRDo6dW5wYWNrT25lUm93T2ZBUkdCMTZMaXR0bGVUb1JHQkE4KHNvdXJjZSwgZGVzdGluYXRp
b24sIHBpeGVsc1BlclJvdyk7CisjZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29s
b3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZl
cnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsyXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0g
Y29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzNdKTsKKyAgICAgICAgZGVzdGluYXRpb25b
M10gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBzb3VyY2Ug
Kz0gNDsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0IxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7
CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFd
KTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2Vb
Ml0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVszXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291
cmNlWzBdKTsKKyAgICAgICAgc291cmNlICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRG
b3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZMaXR0bGUsIHVp
bnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZl
cnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0g
Y29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25b
Ml0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5h
dGlvblszXSA9IDB4RkY7CisgICAgICAgIHNvdXJjZSArPSAxOworICAgICAgICBkZXN0aW5hdGlv
biArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVy
dDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2Qmln
LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBj
b252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9
IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJd
ID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25b
M10gPSAweEZGOworICAgICAgICBzb3VyY2UgKz0gMTsKKyAgICAgICAgZGVzdGluYXRpb24gKz0g
NDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJp
dEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZMaXR0bGUs
IHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNv
bnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFd
ID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRp
b25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0
aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CisgICAgICAg
IHNvdXJjZSArPSAyOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291
cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChz
b3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84
KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdU
bzgoc291cmNlWzFdKTsKKyAgICAgICAgc291cmNlICs9IDI7CisgICAgICAgIGRlc3RpbmF0aW9u
ICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0
MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjE2TGl0
dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0g
PSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlv
blsxXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3Rp
bmF0aW9uWzJdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKKyAgICAgICAg
ZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAg
ICAgICBzb3VyY2UgKz0gMjsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSMTZCaWcsIHVpbnQxNl90LCB1aW50OF90
Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84
KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdU
bzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJp
Z1RvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2
QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIHNvdXJjZSArPSAyOworICAgICAgICBkZXN0aW5h
dGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29u
dmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2
TGl0dGxlLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25b
MF0gPSAweDA7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gMHgwOworICAgICAgICBkZXN0aW5h
dGlvblsyXSA9IDB4MDsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkxp
dHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBzb3VyY2UgKz0gMTsKKyAgICAgICAgZGVzdGlu
YXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNv
bnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEx
NkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gMHgwOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IDB4MDsKKyAgICAgICAgZGVzdGluYXRp
b25bMl0gPSAweDA7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdU
bzgoc291cmNlWzBdKTsKKyAgICAgICAgc291cmNlICs9IDE7CisgICAgICAgIGRlc3RpbmF0aW9u
ICs9IDQ7CisgICAgfQorfQorCit2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTgoR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc3JjRm9ybWF0LCBjb25zdCB1aW50MTZfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworI2RlZmlu
ZSBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KFNyY0Zvcm1hdCkgXAorICAgIGNhc2UgU3JjRm9y
bWF0OiBcCisgICAgICAgIHJldHVybiBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PFNyY0Zvcm1h
dD4oc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKKworICAgIHN3aXRjaCAoc3Jj
Rm9ybWF0KSB7CisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkxpdHRsZSkKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFU
VE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2QmlnKQorICAgICAgICBD
T05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpB
MTZMaXR0bGUpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkJpZykKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9S
R0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkxpdHRsZSkKKyAgICAgICAg
Q09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkExNkJpZykKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6QVIxNkxpdHRsZSkKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFU
VE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVIxNkJpZykKKyAgICAgICAg
Q09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCMTZMaXR0bGUpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2QmlnKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JN
QVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZMaXR0bGUpCisg
ICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQkExNkJpZykKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjE2TGl0dGxlKQorICAgICAgICBDT05WRVJU
MTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCMTZC
aWcpCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
I3VuZGVmIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgKK30KKworfQorCitHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsK
KworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJ
bWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9v
bCBoYXNBbHBoYSA9ICFtX2ltYWdlLT5jdXJyZW50RnJhbWVLbm93blRvQmVPcGFxdWUoKTsKKyAg
ICBpZiAoKGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJlbXVs
dGlwbHlBbHBoYSkpICYmIG1faW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBhdXRvIHNvdXJjZSA9
IEltYWdlU291cmNlOjpjcmVhdGUobnVsbHB0ciwgQWxwaGFPcHRpb246Ok5vdFByZW11bHRpcGxp
ZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGllZCk7CisgICAg
ICAgIHNvdXJjZS0+c2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOworICAgICAgICBpZiAo
IXNvdXJjZS0+ZnJhbWVDb3VudCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIG1fZGVjb2RlZEltYWdlID0gc291cmNlLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleCgwKTsK
KyAgICAgICAgbV9jZ0ltYWdlID0gbV9kZWNvZGVkSW1hZ2U7CisgICAgfSBlbHNlCisgICAgICAg
IG1fY2dJbWFnZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
aWYgKCFtX2NnSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faW1hZ2VXaWR0
aCA9IENHSW1hZ2VHZXRXaWR0aChtX2NnSW1hZ2UuZ2V0KCkpOworICAgIG1faW1hZ2VIZWlnaHQg
PSBDR0ltYWdlR2V0SGVpZ2h0KG1fY2dJbWFnZS5nZXQoKSk7CisgICAgaWYgKCFtX2ltYWdlV2lk
dGggfHwgIW1faW1hZ2VIZWlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFNl
ZSB3aGV0aGVyIHRoZSBpbWFnZSBpcyB1c2luZyBhbiBpbmRleGVkIGNvbG9yIHNwYWNlLCBhbmQg
aWYKKyAgICAvLyBzbywgcmUtcmVuZGVyIGl0IGludG8gYW4gUkdCIGNvbG9yIHNwYWNlLiBUaGUg
aW1hZ2UgcmUtcGFja2luZworICAgIC8vIGNvZGUgcmVxdWlyZXMgY29sb3IgZGF0YSwgbm90IGNv
bG9yIHRhYmxlIGluZGljZXMsIGZvciB0aGUKKyAgICAvLyBpbWFnZSBkYXRhLgorICAgIENHQ29s
b3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3BhY2UobV9jZ0ltYWdlLmdl
dCgpKTsKKyAgICBDR0NvbG9yU3BhY2VNb2RlbCBtb2RlbCA9IENHQ29sb3JTcGFjZUdldE1vZGVs
KGNvbG9yU3BhY2UpOworICAgIGlmIChtb2RlbCA9PSBrQ0dDb2xvclNwYWNlTW9kZWxJbmRleGVk
KSB7CisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJpdG1hcENvbnRleHQ7CisgICAg
ICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgcHJvYmFibHkgbWFudWFsbHkgY29udmVydCB0aGUgaW1h
Z2UgYnkgaW5kZXhpbmcgaW50bworICAgICAgICAvLyB0aGUgY29sb3IgdGFibGUsIHdoaWNoIHdv
dWxkIGFsbG93IHVzIHRvIGF2b2lkIHByZW11bHRpcGx5aW5nIHRoZQorICAgICAgICAvLyBhbHBo
YSBjaGFubmVsLiBDcmVhdGlvbiBvZiBhIGJpdG1hcCBjb250ZXh0IHdpdGggYW4gYWxwaGEgY2hh
bm5lbAorICAgICAgICAvLyBkb2Vzbid0IHNlZW0gdG8gd29yayB1bmxlc3MgaXQncyBwcmVtdWx0
aXBsaWVkLgorICAgICAgICBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGUoMCwgbV9pbWFnZVdpZHRoLCBtX2ltYWdlSGVpZ2h0LCA4LCBtX2ltYWdlV2lkdGggKiA0
LAorICAgICAgICAgICAgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCkpOworICAgICAgICBpZiAoIWJp
dG1hcENvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwor
ICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShiaXRtYXBDb250ZXh0Lmdl
dCgpLCBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShi
aXRtYXBDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIG1faW1hZ2VXaWR0aCwgbV9pbWFn
ZUhlaWdodCksIG1fY2dJbWFnZS5nZXQoKSk7CisKKyAgICAgICAgLy8gTm93IGRpc2NhcmQgdGhl
IG9yaWdpbmFsIENHIGltYWdlIGFuZCByZXBsYWNlIGl0IHdpdGggYSBjb3B5IGZyb20gdGhlIGJp
dG1hcCBjb250ZXh0LgorICAgICAgICBtX2RlY29kZWRJbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSkpOworICAgICAgICBtX2NnSW1h
Z2UgPSBtX2RlY29kZWRJbWFnZS5nZXQoKTsKKyAgICB9CisKKyAgICBzaXplX3QgYml0c1BlckNv
bXBvbmVudCA9IENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KG1fY2dJbWFnZS5nZXQoKSk7Cisg
ICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IENHSW1hZ2VHZXRCaXRzUGVyUGl4ZWwobV9jZ0ltYWdl
LmdldCgpKTsKKyAgICBpZiAoYml0c1BlckNvbXBvbmVudCAhPSA4ICYmIGJpdHNQZXJDb21wb25l
bnQgIT0gMTYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYml0c1BlclBpeGVsICUg
Yml0c1BlckNvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNpemVfdCBjb21w
b25lbnRzUGVyUGl4ZWwgPSBiaXRzUGVyUGl4ZWwgLyBiaXRzUGVyQ29tcG9uZW50OworCisgICAg
Q0dCaXRtYXBJbmZvIGJpdEluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhtX2NnSW1hZ2UuZ2V0
KCkpOworICAgIGJvb2wgYmlnRW5kaWFuU291cmNlID0gZmFsc2U7CisgICAgLy8gVGhlc2UgY291
bGQgdGVjaG5pY2FsbHkgYmUgY29tYmluZWQgaW50byBvbmUgbGFyZ2Ugc3dpdGNoCisgICAgLy8g
c3RhdGVtZW50LCBidXQgd2UgcHJlZmVyIG5vdCB0byBzbyB0aGF0IHdlIGZhaWwgZmFzdCBpZiB3
ZQorICAgIC8vIGVuY291bnRlciBhbiB1bmV4cGVjdGVkIGltYWdlIGNvbmZpZ3VyYXRpb24uCisg
ICAgaWYgKGJpdHNQZXJDb21wb25lbnQgPT0gMTYpIHsKKyAgICAgICAgc3dpdGNoIChiaXRJbmZv
ICYga0NHQml0bWFwQnl0ZU9yZGVyTWFzaykgeworICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVP
cmRlcjE2QmlnOgorICAgICAgICAgICAgYmlnRW5kaWFuU291cmNlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlcjE2TGl0dGxlOgorICAg
ICAgICAgICAgYmlnRW5kaWFuU291cmNlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0OgorICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIGJ1ZyBpbiBlYXJsaWVyIHZlcnNpb24gb2YgY2cgd2hlcmUgdGhlIGRlZmF1bHQgZW5k
aWFuCisgICAgICAgICAgICAvLyBpcyBsaXR0bGUgd2hlcmVhcyB0aGUgZGVjb2RlZCAxNi1iaXQg
cG5nIGltYWdlIGRhdGEgaXMgYWN0dWFsbHkKKyAgICAgICAgICAgIC8vIEJpZy4gTGF0ZXIgdmVy
c2lvbiAoMTAuNi40KSBubyBsb25nZXIgcmV0dXJucyBCeXRlT3JkZXJEZWZhdWx0LgorICAgICAg
ICAgICAgYmlnRW5kaWFuU291cmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgc3dpdGNoIChiaXRJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyTWFzaykg
eworICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnOgorICAgICAgICAgICAgYmln
RW5kaWFuU291cmNlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtD
R0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlOgorICAgICAgICAgICAgYmlnRW5kaWFuU291cmNlID0g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0OgorICAgICAgICAgICAgLy8gSXQgYXBwZWFycyB0aGF0IHRoZSBkZWZhdWx0IGJ5
dGUgb3JkZXIgaXMgYWN0dWFsbHkgYmlnCisgICAgICAgICAgICAvLyBlbmRpYW4gZXZlbiBvbiBs
aXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZXMuCisgICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2Ug
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2FscGhhT3AgPSBBbHBo
YU9wOjpEb05vdGhpbmc7CisgICAgQWxwaGFGb3JtYXQgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1h
dE5vbmU7CisgICAgc3dpdGNoIChDR0ltYWdlR2V0QWxwaGFJbmZvKG1fY2dJbWFnZS5nZXQoKSkp
IHsKKyAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Q6CisgICAgICAgIGlm
ICghcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRv
VW5tdWx0aXBseTsKKyAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIGtDR0ltYWdlQWxwaGFGaXJzdDoKKyAgICAgICAgLy8gVGhp
cyBwYXRoIGlzIG9ubHkgYWNjZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFuIDEwLjYuNC4K
KyAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBtX2FscGhhT3AgPSBB
bHBoYU9wOjpEb1ByZW11bHRpcGx5OworICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0
Rmlyc3Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmly
c3Q6CisgICAgICAgIC8vIFRoaXMgcGF0aCBpcyBvbmx5IGFjY2Vzc2libGUgZm9yIE1hY09TIGVh
cmxpZXIgdGhhbiAxMC42LjQuCisgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJz
dDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExh
c3Q6CisgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgIG1fYWxwaGFP
cCA9IEFscGhhT3A6OkRvVW5tdWx0aXBseTsKKyAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZv
cm1hdExhc3Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHSW1hZ2VBbHBoYUxhc3Q6Cisg
ICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxw
aGFPcDo6RG9QcmVtdWx0aXBseTsKKyAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdExh
c3Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDoK
KyAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdExhc3Q7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmU6CisgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFG
b3JtYXROb25lOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IGdldFNvdXJjZURhdGFG
b3JtYXQoY29tcG9uZW50c1BlclBpeGVsLCBhbHBoYUZvcm1hdCwgYml0c1BlckNvbXBvbmVudCA9
PSAxNiwgYmlnRW5kaWFuU291cmNlKTsKKyAgICBpZiAobV9pbWFnZVNvdXJjZUZvcm1hdCA9PSBE
YXRhRm9ybWF0OjpOdW1Gb3JtYXRzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3Bp
eGVsRGF0YSA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVBy
b3ZpZGVyKG1fY2dJbWFnZS5nZXQoKSkpKTsKKyAgICBpZiAoIW1fcGl4ZWxEYXRhKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB2b2lkKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihtX3BpeGVsRGF0YS5nZXQoKSkpOworCisg
ICAgdW5zaWduZWQgc3JjVW5wYWNrQWxpZ25tZW50ID0gMDsKKyAgICBzaXplX3QgYnl0ZXNQZXJS
b3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3cobV9jZ0ltYWdlLmdldCgpKTsKKyAgICB1bnNpZ25l
ZCBwYWRkaW5nID0gYnl0ZXNQZXJSb3cgLSBiaXRzUGVyUGl4ZWwgLyA4ICogbV9pbWFnZVdpZHRo
OworICAgIGlmIChwYWRkaW5nKSB7CisgICAgICAgIHNyY1VucGFja0FsaWdubWVudCA9IHBhZGRp
bmcgKyAxOworICAgICAgICB3aGlsZSAoYnl0ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQp
CisgICAgICAgICAgICArK3NyY1VucGFja0FsaWdubWVudDsKKyAgICB9CisKKyAgICBtX2ltYWdl
U291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OworICAgIC8vIFVzaW5n
IGEgYml0bWFwIGNvbnRleHQgY3JlYXRlZCBhY2NvcmRpbmcgdG8gZGVzdGluYXRpb24gZm9ybWF0
IGFuZCBkcmF3aW5nIHRoZSBDR0ltYWdlIHRvIHRoZSBiaXRtYXAgY29udGV4dCBjYW4gYWxzbyBk
byB0aGUgZm9ybWF0IGNvbnZlcnNpb24sCisgICAgLy8gYnV0IGl0IHdvdWxkIHByZW11bHRpcGx5
IHRoZSBhbHBoYSBjaGFubmVsIGFzIGEgc2lkZSBlZmZlY3QuCisgICAgLy8gUHJlZmVyIHRvIG1h
bm51YWxseSBDb252ZXJ0IDE2Yml0IHBlci1jb21wb25lbnQgZm9ybWF0cyB0byBSR0JBOCBmb3Jt
YXRzIGluc3RlYWQuCisgICAgaWYgKGJpdHNQZXJDb21wb25lbnQgPT0gMTYpIHsKKyAgICAgICAg
bV9mb3JtYWxpemVkUkdCQThEYXRhID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQ4X3Q+KChDaGVja2Vk
PHNpemVfdD4obV9pbWFnZVdpZHRoKSAqIG1faW1hZ2VIZWlnaHQgKiA0VSkudW5zYWZlR2V0KCkp
OworICAgICAgICBjb25zdCB1aW50MTZfdCogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MTZfdCo+KG1faW1hZ2VQaXhlbERhdGEpOworICAgICAgICB1aW50OF90KiBkZXN0aW5h
dGlvbiA9IG1fZm9ybWFsaXplZFJHQkE4RGF0YS5nZXQoKTsKKyAgICAgICAgY29uc3QgcHRyZGlm
Zl90IHNyY1N0cmlkZUluRWxlbWVudHMgPSBieXRlc1BlclJvdyAvIHNpemVvZih1aW50MTZfdCk7
CisgICAgICAgIGNvbnN0IHB0cmRpZmZfdCBkc3RTdHJpZGVJbkVsZW1lbnRzID0gNCAqIG1faW1h
Z2VXaWR0aDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0wOyBpIDwgbV9pbWFnZUhlaWdodDsg
aSsrKSB7CisgICAgICAgICAgICBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KG1faW1hZ2VTb3Vy
Y2VGb3JtYXQsIHNvdXJjZSwgZGVzdGluYXRpb24sIG1faW1hZ2VXaWR0aCk7CisgICAgICAgICAg
ICBzb3VyY2UgKz0gc3JjU3RyaWRlSW5FbGVtZW50czsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
ICs9IGRzdFN0cmlkZUluRWxlbWVudHM7CisgICAgICAgIH0KKyAgICAgICAgbV9pbWFnZVBpeGVs
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KG1fZm9ybWFsaXplZFJHQkE4RGF0
YS5nZXQoKSk7CisgICAgICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0OjpSR0JB
ODsKKyAgICAgICAgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCA9IDE7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QpCit7CisgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lk
Kj4oZGF0YSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2Fu
dmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2Fu
dmFzU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQgcm93Qnl0ZXMgPSBp
bWFnZVNpemUud2lkdGgoKSAqIDQ7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBk
YXRhUHJvdmlkZXI7CisKKyAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7
CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGNvcGllZFBpeGVsczsKKworICAgICAgICBpZiAoIXRy
eUZhc3RDYWxsb2MoaW1hZ2VTaXplLmhlaWdodCgpLCByb3dCeXRlcykuZ2V0VmFsdWUoY29waWVk
UGl4ZWxzKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtZW1jcHkoY29waWVkUGl4
ZWxzLCBpbWFnZVBpeGVscywgcm93Qnl0ZXMgKiBpbWFnZVNpemUuaGVpZ2h0KCkpOworCisgICAg
ICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJvd0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOworICAg
ICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvcGllZFBpeGVscywgZGF0YVNpemUp
OworICAgICAgICBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEoMCwgY29waWVkUGl4ZWxzLCBkYXRhU2l6ZSwgcmVsZWFzZUltYWdlRGF0YSkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJvd0J5dGVzICogaW1hZ2VTaXpl
LmhlaWdodCgpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGltYWdlUGl4
ZWxzLCBkYXRhU2l6ZSk7CisgICAgICAgIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJv
dmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIDApKTsKKyAgICB9
CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCAzMiwgcm93Qnl0
ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Qg
fCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsCisgICAgICAgIGRhdGFQcm92aWRlci5nZXQoKSwg
MCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAgIC8vIENTUyBzdHls
aW5nIG1heSBjYXVzZSB0aGUgY2FudmFzJ3MgY29udGVudCB0byBiZSByZXNpemVkIG9uCisgICAg
Ly8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0IHRoZSBjb3Jy
ZWN0CisgICAgLy8gd2lkdGggYW5kIGhlaWdodCB0byBkcmF3LgorICAgIEZsb2F0UmVjdCBjYW52
YXNSZWN0KEZsb2F0UG9pbnQoKSwgY2FudmFzU2l6ZSk7CisgICAgLy8gV2Ugd2FudCB0byBjb21w
bGV0ZWx5IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZnJhbWUncworICAgIC8vIHJlbmRlcmluZyBy
ZXN1bHRzLgorCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQpOworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dC50
cmFuc2xhdGUoMCwgLWltYWdlU2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dC5zZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRl
KTsKKyAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjZ0ltYWdlLCBpbWFnZVNpemUsIGNhbnZh
c1JlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSksIHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OkNvcHkgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dDNEQ29jb2Eu
bW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzY2NiNDQ1NWFhNWNiN2ZjYTc2YmM0
ZDNlYmY4NzFhZWY3NTA2ZDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3ND
b250ZXh0M0RDb2NvYS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDg1MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQzRC5oIgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVVTRShBTkdM
RSkKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCi0jZW5kaWYKLQotI2ltcG9ydCAi
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCIKLSNpbXBvcnQgIkhUTUxDYW52YXNF
bGVtZW50LmgiCi0jaW1wb3J0ICJIb3N0V2luZG93LmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5o
IgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViR0xMYXllci5oIgotI2ltcG9ydCAi
V2ViR0xPYmplY3QuaCIKLSNpbXBvcnQgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKLSNp
bXBvcnQgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KLSNpbXBvcnQgPHN5cy9zeXNj
dGwuaD4KLSNpbXBvcnQgPHN5c2V4aXRzLmg+Ci0jaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgVVNFKE9QRU5HTF9F
UykKLSNpbXBvcnQgPE9wZW5HTEVTL0VBR0wuaD4KLSNpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3
YWJsZS5oPgotI2ltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3VyZmFjZS5oPgotI2ltcG9ydCA8T3Bl
bkdMRVMvRVMyL2dsZXh0Lmg+Ci0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNp
bXBvcnQgPHBhbC9zcGkvaW9zL09wZW5HTEVTU1BJLmg+Ci0jZWxpZiBVU0UoT1BFTkdMKQotI2lt
cG9ydCA8SU9LaXQvSU9LaXRMaWIuaD4KLSNpbXBvcnQgPE9wZW5HTC9nbC5oPgotI2VsaWYgVVNF
KEFOR0xFKQotI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAotLy8gU2tpcCB0aGUgaW5jbHVz
aW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KLSNk
ZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNp
dF9jb250ZXh0X2dsZXMxCi10eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKLSNpbmNsdWRlIDxB
TkdMRS9lZ2wuaD4KLSNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9l
Z2xleHRfYW5nbGUuaD4KLSNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsLmg+Ci0jaW5j
bHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbF9leHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9lbnRy
eV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50
c19nbGVzX2V4dF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZ2wyZXh0Lmg+Ci0jaW5jbHVk
ZSA8QU5HTEUvZ2wyZXh0X2FuZ2xlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShPUEVOR0xfRVMpIHx8
IFVTRShPUEVOR0wpCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCi0jZWxpZiBVU0Uo
QU5HTEUpCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNEQU5HTEUuaCIKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oTUFDKQotI2ltcG9ydCAiU2NyZWVuUHJvcGVydGllcy5oIgotI2lmIFVTRShPUEVOR0wp
IHx8IFVTRShBTkdMRSkKLSNpbXBvcnQgPE9wZW5HTC9DR0xSZW5kZXJlcnMuaD4KLSNlbmRpZgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0
YXR1c0NoZWNrVGhyZXNob2xkID0gNTsKLQotLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgY3VycmVu
dGx5IGVtcHR5IG9uIE1hYywgYnV0IHdpbGwgZ2V0IHBvcHVsYXRlZCBhcwotLy8gdGhlIHJlc3Ry
dWN0dXJpbmcgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2OTAz
IGlzIGRvbmUKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdy
YXBoaWNzQ29udGV4dDNEKikgeyB9Ci0gICAgCi0gICAgfkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZSgpIHsgfQotfTsKLQotUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQot
ewotICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBy
ZW5kZXJpbmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCi0gICAgaWYgKGRlc3RpbmF0aW9u
ID09IERlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBNYWtlIHNwYWNlIGZvciB0aGUgaW5jb21pbmcgY29udGV4dCBpZiB3
ZSdyZSBmdWxsLgotICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
LnJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0RN
YW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuaGFzVG9vTWFueUNvbnRleHRzKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
YWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCBkZXN0aW5h
dGlvbikpOwotCi0gICAgaWYgKCFjb250ZXh0LT5tX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5hZ2Vy
KCkuYWRkQ29udGV4dChjb250ZXh0LmdldCgpLCBob3N0V2luZG93KTsKLQotICAgIHJldHVybiBj
b250ZXh0OwotfQotCi1SZWY8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVTaGFyZWQoR3JhcGhpY3NDb250ZXh0M0QmIHNoYXJlZENvbnRleHQpCi17Ci0gICAgYXV0
byBob3N0V2luZG93ID0gR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCku
aG9zdFdpbmRvd0ZvckNvbnRleHQoJnNoYXJlZENvbnRleHQpOwotICAgIGF1dG8gY29udGV4dCA9
IGFkb3B0UmVmKCpuZXcgR3JhcGhpY3NDb250ZXh0M0Qoc2hhcmVkQ29udGV4dC5jb250ZXh0QXR0
cmlidXRlcygpLCBob3N0V2luZG93LCBzaGFyZWRDb250ZXh0LmRlc3RpbmF0aW9uKCksICZzaGFy
ZWRDb250ZXh0KSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS5hZGRDb250ZXh0KGNvbnRleHQucHRyKCksIGhvc3RXaW5kb3cpOwotCi0gICAgcmV0dXJu
IGNvbnRleHQ7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0Uo
QU5HTEUpKSAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgYmUganVzdCAoVVNFKE9QRU5H
TCkgfHwgVVNFKEFOR0xFKSkgLSBzZWUgPHJkYXI6Ly81MzA2Mjc5ND4uCi0KLXN0YXRpYyB2b2lk
IHNldEdQVUJ5UmVnaXN0cnlJRChDR0xDb250ZXh0T2JqIGNvbnRleHRPYmosIENHTFBpeGVsRm9y
bWF0T2JqIHBpeGVsRm9ybWF0T2JqLCBJT1JlZ2lzdHJ5R1BVSUQgcHJlZmVycmVkR1BVSUQpCi17
Ci0gICAgLy8gV2hlbiB0aGUgV2ViUHJvY2VzcyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUg
V2luZG93U2VydmVyLCB0aGVyZSBpcyBubyB3YXkgZm9yIE9wZW5HTCB0byB0ZWxsIHdoaWNoIEdQ
VSBpcyBjb25uZWN0ZWQgdG8gYSBkaXNwbGF5LgotICAgIC8vIE9uIDEwLjEzKywgZmluZCB0aGUg
dmlydHVhbCBzY3JlZW4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJlZmVycmVkIEdQVSBieSBp
dHMgcmVnaXN0cnlJRC4KLSAgICAvLyBDR0xTZXRWaXJ0dWFsU2NyZWVuIGNhbiB0aGVuIGJlIHVz
ZWQgdG8gdGVsbCBPcGVuR0wgd2hpY2ggR1BVIGl0IHNob3VsZCBiZSB1c2luZy4KLQotICAgIGlm
ICghY29udGV4dE9iaiB8fCAhcHJlZmVycmVkR1BVSUQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdMaW50IHZpcnR1YWxTY3JlZW5Db3VudCA9IDA7Ci0gICAgQ0dMRXJyb3IgZXJyb3IgPSBDR0xE
ZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqLCAwLCBrQ0dMUEZBVmlydHVhbFNjcmVl
bkNvdW50LCAmdmlydHVhbFNjcmVlbkNvdW50KTsKLSAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5v
RXJyb3IpOwotCi0gICAgR0xpbnQgZmlyc3RBY2NlbGVyYXRlZFNjcmVlbiA9IC0xOwotCi0gICAg
Zm9yIChHTGludCB2aXJ0dWFsU2NyZWVuID0gMDsgdmlydHVhbFNjcmVlbiA8IHZpcnR1YWxTY3Jl
ZW5Db3VudDsgKyt2aXJ0dWFsU2NyZWVuKSB7Ci0gICAgICAgIEdMaW50IGRpc3BsYXlNYXNrID0g
MDsKLSAgICAgICAgZXJyb3IgPSBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2Jq
LCB2aXJ0dWFsU2NyZWVuLCBrQ0dMUEZBRGlzcGxheU1hc2ssICZkaXNwbGF5TWFzayk7Ci0gICAg
ICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Ci0KLSAgICAgICAgYXV0byBncHVJRCA9
IGdwdUlERm9yRGlzcGxheU1hc2soZGlzcGxheU1hc2spOwotCi0gICAgICAgIGlmIChncHVJRCA9
PSBwcmVmZXJyZWRHUFVJRCkgewotICAgICAgICAgICAgZXJyb3IgPSBDR0xTZXRWaXJ0dWFsU2Ny
ZWVuKGNvbnRleHRPYmosIHZpcnR1YWxTY3JlZW4pOwotICAgICAgICAgICAgQVNTRVJUKGVycm9y
ID09IGtDR0xOb0Vycm9yKTsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgKCVwKSBz
ZXQgdG8gR1BVIHdpdGggSUQ6ICglbGxkKS4iLCBjb250ZXh0T2JqLCBncHVJRCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZmlyc3RBY2NlbGVyYXRlZFNj
cmVlbiA8IDApIHsKLSAgICAgICAgICAgIEdMaW50IGlzQWNjZWxlcmF0ZWQgPSAwOwotICAgICAg
ICAgICAgZXJyb3IgPSBDR0xEZXNjcmliZVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqLCB2aXJ0
dWFsU2NyZWVuLCBrQ0dMUEZBQWNjZWxlcmF0ZWQsICZpc0FjY2VsZXJhdGVkKTsKLSAgICAgICAg
ICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Ci0gICAgICAgICAgICBpZiAoaXNBY2Nl
bGVyYXRlZCkKLSAgICAgICAgICAgICAgICBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuID0gdmlydHVh
bFNjcmVlbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vIHJlZ2lzdHJ5SUQgbWF0Y2gg
Zm91bmQ7IHNldCB0byBmaXJzdCBoYXJkd2FyZS1hY2NlbGVyYXRlZCB2aXJ0dWFsIHNjcmVlbi4K
LSAgICBpZiAoZmlyc3RBY2NlbGVyYXRlZFNjcmVlbiA+PSAwKSB7Ci0gICAgICAgIGVycm9yID0g
Q0dMU2V0VmlydHVhbFNjcmVlbihjb250ZXh0T2JqLCBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuKTsK
LSAgICAgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9yKTsKLSAgICAgICAgTE9HKFdlYkdM
LCAiUmVnaXN0cnlJRCAoJWxsZCkgbm90IG1hdGNoZWQ7IENvbnRleHQgKCVwKSBzZXQgdG8gdmly
dHVhbCBzY3JlZW4gKCVkKS4iLCBwcmVmZXJyZWRHUFVJRCwgY29udGV4dE9iaiwgZmlyc3RBY2Nl
bGVyYXRlZFNjcmVlbik7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiAo
VVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKLQotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBH
cmFwaGljc0NvbnRleHQzRCogc2hhcmVkQ29udGV4dCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dDNE
QmFzZShhdHRycywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUo
bWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+KHRoaXMpKQotewotICAgIEFTU0VS
VChBTkdMRVdlYktpdEJyaWRnZTo6YW5nbGVBdmFpbGFibGUoKSk7Ci0gICAgaWYgKCFBTkdMRVdl
YktpdEJyaWRnZTo6YW5nbGVBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9p
c0ZvcldlYkdMMiA9IGF0dHJzLmlzV2ViR0wyOwotCi0jaWYgSEFWRShBUFBMRV9HUkFQSElDU19D
T05UUk9MKQotICAgIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID0gKGhhc0xvd0Fu
ZEhpZ2hQb3dlckdQVXMoKSAmJiBhdHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250
ZXh0M0RQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgPyBHcmFwaGljc0NvbnRleHQz
RFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlIDogR3JhcGhpY3NDb250ZXh0M0RQb3dl
clByZWZlcmVuY2U6OkRlZmF1bHQ7Ci0jZWxzZQotICAgIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZv
ckNyZWF0aW9uID0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQ7Ci0j
ZW5kaWYKLQotI2lmICFVU0UoQU5HTEUpCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICBpZiAobV9p
c0ZvcldlYkdMMikKLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VT
U0xfT1VUUFVULCBTSF9XRUJHTDJfU1BFQyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbXBpbGVy
ID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQpOwotI2Vsc2UKLSAgICBpZiAobV9p
c0ZvcldlYkdMMikKLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dM
U0xfNDEwX0NPUkVfT1VUUFVULCBTSF9XRUJHTDJfU1BFQyk7Ci0jZW5kaWYgLy8gVVNFKE9QRU5H
TF9FUykKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICBV
TlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0gICAgRUFHTFJlbmRlcmluZ0FQSSBhcGkgPSBtX2lz
Rm9yV2ViR0wyID8ga0VBR0xSZW5kZXJpbmdBUElPcGVuR0xFUzMgOiBrRUFHTFJlbmRlcmluZ0FQ
SU9wZW5HTEVTMjsKLSAgICBFQUdMQ29udGV4dCAqY29udGV4dE9iajsKLSAgICBpZiAoIXNoYXJl
ZENvbnRleHQpCi0gICAgICAgIGNvbnRleHRPYmogPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBpbml0
V2l0aEFQSTphcGldOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dE9iaiA9IFtbRUFHTENvbnRl
eHQgYWxsb2NdIGluaXRXaXRoQVBJOmFwaSBzaGFyZWdyb3VwOnN0YXRpY19jYXN0PEVBR0xDb250
ZXh0ICo+KHNoYXJlZENvbnRleHQtPm1fY29udGV4dE9iaikuc2hhcmVncm91cF07Ci0KLSAgICBt
X2NvbnRleHRPYmogPSBzdGF0aWNfY2FzdDx2b2lkICo+KGNvbnRleHRPYmopOwotCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV9pc0ZvcldlYkdMMikKLSAgICAgICAgOjpn
bEVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6UFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVgp
OwotI2VsaWYgVVNFKE9QRU5HTCkKLQotICAgIGJvb2wgdXNlTXVsdGlzYW1wbGluZyA9IGF0dHJz
LmFudGlhbGlhczsKLQotICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmli
czsKLSAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7Ci0gICAgR0xpbnQg
bnVtUGl4ZWxGb3JtYXRzID0gMDsKLQotICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFBY2NlbGVy
YXRlZCk7Ci0gICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUNvbG9yU2l6ZSk7Ci0gICAgYXR0cmli
cy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDMyKSk7Ci0gICAg
YXR0cmlicy5hcHBlbmQoa0NHTFBGQURlcHRoU2l6ZSk7Ci0gICAgYXR0cmlicy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDMyKSk7Ci0KLSAgICAvLyBUaGlzIGF0
dHJpYnV0ZSwgd2hpbGUgbWVudGlvbmluZyBvZmZsaW5lIHJlbmRlcmVycywgaXMgYWN0dWFsbHkK
LSAgICAvLyBhbGxvd2luZyB1cyB0byByZXF1ZXN0IHRoZSBpbnRlZ3JhdGVkIGdyYXBoaWNzIG9u
IGEgZHVhbCBHUFUKLSAgICAvLyBzeXN0ZW0sIGFuZCBub3QgZm9yY2UgdGhlIGRpc2NyZXRlIEdQ
VS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL3Rl
Y2hub3Rlcy90bjIyMjkvX2luZGV4Lmh0bWwKLSAgICBpZiAoYWxsb3dPZmZsaW5lUmVuZGVyZXJz
KCkpCi0gICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFBbGxvd09mZmxpbmVSZW5kZXJlcnMp
OwotCi0gICAgaWYgKHVzZU11bHRpc2FtcGxpbmcpIHsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQo
a0NHTFBGQU11bHRpc2FtcGxlKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQVNhbXBs
ZUJ1ZmZlcnMpOwotICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZT4oMSkpOwotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBU2FtcGxl
cyk7Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0
cmlidXRlPig0KSk7Ci0gICAgfQotCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKLSAgICAgICAg
Ly8gRklYTUU6IEluc3RlYWQgb2YgYmFja2luZyBhIFdlYkdMMiBHcmFwaGljc0NvbnRleHQzRCB3
aXRoIGEgT3BlbkdMIDQgY29udGV4dCwgd2Ugc2hvdWxkIGluc3RlYWQgYmFjayBpdCB3aXRoIEFO
R0xFLgotICAgICAgICAvLyBVc2UgYW4gT3BlbkdMIDQgY29udGV4dCBmb3Igbm93IHVudGlsIHRo
ZSBBTkdMRSBiYWNrZW5kIGlzIHJlYWR5LgotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZB
T3BlbkdMUHJvZmlsZSk7Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlPihrQ0dMT0dMUFZlcnNpb25fR0w0X0NvcmUpKTsKLSAgICB9Ci0K
LSAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4o
MCkpOwotCi0gICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZv
cm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0KLSAgICBpZiAoIW51bVBpeGVsRm9ybWF0cykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gbnVsbHB0
cjsKLSAgICBDR0xDb250ZXh0T2JqIHNoYXJlZENHTENvbnRleHQgPSBzaGFyZWRDb250ZXh0ID8g
c3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4oc2hhcmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKSA6
IG51bGxwdHI7Ci0KLSAgICBDR0xFcnJvciBlcnIgPSBDR0xDcmVhdGVDb250ZXh0KHBpeGVsRm9y
bWF0T2JqLCBzaGFyZWRDR0xDb250ZXh0LCAmY2dsQ29udGV4dCk7Ci0gICAgR0xpbnQgYWJvcnRP
bkJsYWNrbGlzdCA9IDA7Ci0gICAgQ0dMU2V0UGFyYW1ldGVyKGNnbENvbnRleHQsIGtDR0xDUEFi
b3J0T25HUFVSZXN0YXJ0U3RhdHVzQmxhY2tsaXN0ZWQsICZhYm9ydE9uQmxhY2tsaXN0KTsKLQot
I2lmIFBMQVRGT1JNKE1BQykgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGJlIFVTRShP
UEVOR0wpIC0gc2VlIDxyZGFyOi8vNTMwNjI3OTQ+LgotCi0gICAgYXV0byBncHVJRCA9IChob3N0
V2luZG93ICYmIGhvc3RXaW5kb3ctPmRpc3BsYXlJRCgpKSA/IGdwdUlERm9yRGlzcGxheShob3N0
V2luZG93LT5kaXNwbGF5SUQoKSkgOiBwcmltYXJ5R1BVSUQoKTsKLSAgICBzZXRHUFVCeVJlZ2lz
dHJ5SUQoY2dsQ29udGV4dCwgcGl4ZWxGb3JtYXRPYmosIGdwdUlEKTsKLQotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLQotICAgIENHTERlc3Ryb3lQaXhlbEZv
cm1hdChwaXhlbEZvcm1hdE9iaik7Ci0KLSAgICBtX2NvbnRleHRPYmogPSBjZ2xDb250ZXh0Owot
Ci0gICAgaWYgKGVyciAhPSBrQ0dMTm9FcnJvciB8fCAhbV9jb250ZXh0T2JqKSB7Ci0gICAgICAg
IC8vIFdlIHdlcmUgdW5hYmxlIHRvIGNyZWF0ZSB0aGUgY29udGV4dC4KLSAgICAgICAgbV9jb250
ZXh0T2JqID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dE9iaiA9
IGNnbENvbnRleHQ7Ci0KLSAgICBDR0xTZXRDdXJyZW50Q29udGV4dChjZ2xDb250ZXh0KTsKLQot
ICAgIC8vIFdlYkdMIDIgZXhwZWN0cyBFUyAzLW9ubHkgUFJJTUlUSVZFX1JFU1RBUlRfRklYRURf
SU5ERVggdG8gYmUgZW5hYmxlZDsgd2UgbXVzdCBlbXVsYXRlIHRoaXMgb24gbm9uLUVTIDMgc3lz
dGVtcy4KLSAgICBpZiAobV9pc0ZvcldlYkdMMikKLSAgICAgICAgOjpnbEVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6UFJJTUlUSVZFX1JFU1RBUlQpOwotCi0jZWxpZiBVU0UoQU5HTEUpCi0KLSAg
ICBtX2Rpc3BsYXlPYmogPSBFR0xfR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKLSAg
ICBpZiAobV9kaXNwbGF5T2JqID09IEVHTF9OT19ESVNQTEFZKQotICAgICAgICByZXR1cm47Ci0g
ICAgRUdMaW50IG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uOwotICAgIGlmIChFR0xfSW5pdGlh
bGl6ZShtX2Rpc3BsYXlPYmosICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9G
QUxTRSkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZh
aWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJBTkdMRSBp
bml0aWFsaXNlZCBNYWpvcjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNp
b24pOwotICAgIGNvbnN0IGNoYXIgKmRpc3BsYXlFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5n
KG1fZGlzcGxheU9iaiwgRUdMX0VYVEVOU0lPTlMpOwotICAgIExPRyhXZWJHTCwgIkV4dGVuc2lv
bnM6ICVzIiwgZGlzcGxheUV4dGVuc2lvbnMpOwotCi0gICAgRUdMaW50IGNvbmZpZ0F0dHJpYnV0
ZXNbXSA9IHsKLSAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklU
LAotICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCi0gICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAot
ICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAotICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKLSAg
ICAgICAgRUdMX05PTkUKLSAgICB9OwotICAgIEVHTGludCBudW1iZXJDb25maWdzUmV0dXJuZWQg
PSAwOwotICAgIEVHTF9DaG9vc2VDb25maWcobV9kaXNwbGF5T2JqLCBjb25maWdBdHRyaWJ1dGVz
LCAmbV9jb25maWdPYmosIDEsICZudW1iZXJDb25maWdzUmV0dXJuZWQpOwotICAgIGlmIChudW1i
ZXJDb25maWdzUmV0dXJuZWQgIT0gMSkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xDb25maWcg
SW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIExP
RyhXZWJHTCwgIkdvdCBFR0xDb25maWciKTsKLQotICAgIEVHTF9CaW5kQVBJKEVHTF9PUEVOR0xf
RVNfQVBJKTsKLSAgICBpZiAoRUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1MpIHsKLSAgICAg
ICAgTE9HKFdlYkdMLCAiVW5hYmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPEVHTGludD4gZWdsQ29udGV4dEF0dHJpYnV0
ZXM7Ci0gICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKLSAgICAgICAgZWdsQ29udGV4
dEF0dHJpYnV0ZXMuYXBwZW5kKDMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVnbENvbnRleHRB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7Ci0gICAgICAgIGVn
bENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZCgyKTsKLSAgICAgICAgLy8gQU5HTEUgd2lsbCB1cGdy
YWRlIHRoZSBjb250ZXh0IHRvIEVTMyBhdXRvbWF0aWNhbGx5IHVubGVzcyB0aGlzIGlzIHNwZWNp
ZmllZC4KLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX09Q
RU5HTF9CQUNLV0FSRFNfQ09NUEFUSUJMRV9BTkdMRSk7Ci0gICAgICAgIGVnbENvbnRleHRBdHRy
aWJ1dGVzLmFwcGVuZChFR0xfRkFMU0UpOwotICAgIH0KLSAgICBlZ2xDb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoRUdMX0NPTlRFWFRfV0VCR0xfQ09NUEFUSUJJTElUWV9BTkdMRSk7Ci0gICAgZWds
Q29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9UUlVFKTsKLQotICAgIGlmIChzdHJzdHIoZGlz
cGxheUV4dGVuc2lvbnMsICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpKSB7Ci0gICAgICAg
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7
Ci0gICAgICAgIC8vIEVHTF9MT1dfUE9XRVJfQU5HTEUgaXMgdGhlIGRlZmF1bHQuIENoYW5nZSB0
bwotICAgICAgICAvLyBFR0xfSElHSF9QT1dFUl9BTkdMRSBpZiBkZXNpcmVkLgotICAgICAgICBl
Z2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0xPV19QT1dFUl9BTkdMRSk7Ci0gICAgfQot
ICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7Ci0KLSAgICBtX2NvbnRl
eHRPYmogPSBFR0xfQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCBzaGFy
ZWRDb250ZXh0ID8gc3RhdGljX2Nhc3Q8RUdMQ29udGV4dD4oc2hhcmVkQ29udGV4dC0+bV9jb250
ZXh0T2JqKSA6IEVHTF9OT19DT05URVhULCBlZ2xDb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOwot
ICAgIGlmIChtX2NvbnRleHRPYmogPT0gRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgICAgTE9HKFdl
YkdMLCAiRUdMQ29udGV4dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgTE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKLQotICAgIEVHTF9N
YWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
bV9jb250ZXh0T2JqKTsKLQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAgICBnbDo6RW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgRXh0ZW5zaW9uczNEJiBleHRlbnNpb25zID0gZ2V0RXh0
ZW5zaW9ucygpOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiByZXF1aXJlZEV4
dGVuc2lvbnNbXSA9IHsKLSAgICAgICAgIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIiwgLy8g
Rm9yIElPU3VyZmFjZS1iYWNrZWQgdGV4dHVyZXMuCi0gICAgICAgICJHTF9FWFRfdGV4dHVyZV9m
b3JtYXRfQkdSQTg4ODgiLCAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNlIGZyb20gYW4g
SU9TdXJmYWNlLgotICAgIH07Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgocmVxdWlyZWRFeHRlbnNpb25zKTsgKytpKSB7Ci0gICAgICAgIGlmICghZXh0ZW5z
aW9ucy5zdXBwb3J0cyhyZXF1aXJlZEV4dGVuc2lvbnNbaV0pKSB7Ci0gICAgICAgICAgICBMT0co
V2ViR0wsICJNaXNzaW5nIHJlcXVpcmVkIGV4dGVuc2lvbi4gJXMiLCByZXF1aXJlZEV4dGVuc2lv
bnNbaV0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZXh0ZW5z
aW9ucy5lbnN1cmVFbmFibGVkKHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSk7Ci0gICAgfQotCi0gICAg
RUdMRGV2aWNlRVhUIGRldmljZSA9IG51bGxwdHI7Ci0gICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJp
YkVYVChtX2Rpc3BsYXlPYmosIEVHTF9ERVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVHTEF0
dHJpYio+KCZkZXZpY2UpKTsKLSAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRy
OwotICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0ID0gbnVsbHB0cjsKLSAgICBFR0xf
UXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2aWNlLCBFR0xfQ0dMX0NPTlRFWFRfQU5HTEUsIHJlaW50
ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmNnbENvbnRleHQpKTsKLSAgICBFR0xfUXVlcnlEZXZp
Y2VBdHRyaWJFWFQoZGV2aWNlLCBFR0xfQ0dMX1BJWEVMX0ZPUk1BVF9BTkdMRSwgcmVpbnRlcnBy
ZXRfY2FzdDxFR0xBdHRyaWIqPigmcGl4ZWxGb3JtYXQpKTsKLSAgICBhdXRvIGdwdUlEID0gKGhv
c3RXaW5kb3cgJiYgaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpID8gZ3B1SURGb3JEaXNwbGF5KGhv
c3RXaW5kb3ctPmRpc3BsYXlJRCgpKSA6IHByaW1hcnlHUFVJRCgpOwotICAgIHNldEdQVUJ5UmVn
aXN0cnlJRChjZ2xDb250ZXh0LCBwaXhlbEZvcm1hdCwgZ3B1SUQpOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZW5kaWYg
Ly8gI2VsaWYgVVNFKEFOR0xFKQotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAgYXR0
cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5n
IHZhbGlkYXRpb24uCi0KLSAgICAvLyBDcmVhdGUgdGhlIFdlYkdMTGF5ZXIKLSAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhbW1dl
YkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6dGhpc10pOwotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgW21fd2ViR0xMYXllciBzZXROYW1lOkAiV2ViR0wgTGF5ZXIiXTsK
LSNlbmRpZgotI2lmIFVTRShBTkdMRSkKLSAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNw
bGF5Om1fZGlzcGxheU9iaiBjb25maWc6bV9jb25maWdPYmpdOwotI2VuZGlmCi0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwotCi0jaWYgVVNFKE9QRU5HTCkKLSAgICBpZiAodXNlTXVsdGlz
YW1wbGluZykKLSAgICAgICAgOjpnbEVuYWJsZShHTF9NVUxUSVNBTVBMRSk7Ci0jZW5kaWYKLQot
ICAgIC8vIENyZWF0ZSB0aGUgdGV4dHVyZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGZyYW1l
YnVmZmVyLgotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fdGV4dHVyZSk7Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKLSAgICAvLyBXZSBiaW5kIHRvIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCBy
YXRoZXIgdGhhbiBURVhUVVJFXzJEIGJlY2F1c2UKLSAgICAvLyB0aGF0J3Mgd2hhdCBpcyByZXF1
aXJlZCBmb3IgYSB0ZXh0dXJlIGJhY2tlZCBieSBJT1N1cmZhY2UuCi0gICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9F
WFQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFN
UF9UT19FREdFKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9F
WFQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCAwKTsKLQotI2VsaWYgVVNFKEFOR0xFKQot
Ci0gICAgR0xlbnVtIHRleHR1cmVUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQzRDo6SU9TdXJmYWNl
VGV4dHVyZVRhcmdldDsKLQotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAg
ICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4
UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6VGV4UGFyYW1l
dGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgZ2w6OkJpbmRUZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOwotI2Vsc2UKLSNlcnJvciBV
bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uCi0jZW5kaWYKLQotI2lmIFVTRShPUEVOR0wpIHx8IFVT
RShPUEVOR0xfRVMpCi0gICAgLy8gQ3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QuCi0gICAg
OjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0KLSAgICBtX3N0YXRlLmJvdW5kRkJP
ID0gbV9mYm87Ci0gICAgaWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwg
YXR0cnMuZGVwdGgpKQotICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0
aFN0ZW5jaWxCdWZmZXIpOwotCi0gICAgLy8gSWYgbmVjZXNzYXJ5LCBjcmVhdGUgYW5vdGhlciBm
cmFtZWJ1ZmZlciBmb3IgdGhlIG11bHRpc2FtcGxlIHJlc3VsdHMuCi0gICAgaWYgKGF0dHJzLmFu
dGlhbGlhcykgewotICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2Ft
cGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9tdWx0
aXNhbXBsZUZCTzsKLSAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRl
cHRoKQotICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLSNlbGlmIFVTRShBTkdMRSkKLSAgICBnbDo6
R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKLQotICAg
IGlmICghYXR0cnMuYW50aWFsaWFzICYmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkK
LSAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
LQotICAgIC8vIElmIG5lY2Vzc2FyeSwgY3JlYXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRo
ZSBtdWx0aXNhbXBsZSByZXN1bHRzLgotICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKLSAgICAg
ICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAg
ICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAgZ2w6Okdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlm
IChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQotICAgICAgICAgICAgZ2w6OkdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLQot
I2VuZGlmIC8vIFVTRShBTkdMRSkKLQotI2lmICFVU0UoQU5HTEUpCi0gICAgLy8gQU5HTEUgc2hh
ZGVyIGNvbXBpbGVyIGluaXRpYWxpemF0aW9uLgotCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFO
R0xFUmVzb3VyY2VzOwotICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJj
ZXMpOwotCi0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRU
UklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIGdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlp
bmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsK
LSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1f
VkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0g
ICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMu
TWF4RHJhd0J1ZmZlcnMgPSAxOwotICAgIAotICAgIEdDM0RpbnQgcmFuZ2VbMl0sIHByZWNpc2lv
bjsKLSAgICBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lz
aW9uKTsKLSAgICBBTkdMRVJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2Vb
MF0gfHwgcmFuZ2VbMV0gfHwgcHJlY2lzaW9uKTsKLQotICAgIG1fY29tcGlsZXIuc2V0UmVzb3Vy
Y2VzKEFOR0xFUmVzb3VyY2VzKTsKLSNlbmRpZiAvLyAhVVNFKEFOR0xFKQotICAgIAotI2lmIFVT
RShPUEVOR0wpCi0gICAgOjpnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgOjpnbEVuYWJsZShHTF9QT0lO
VF9TUFJJVEUpOwotI2VuZGlmCi0KLSNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQot
ICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotI2VsaWYgVVNFKEFOR0xFKQotICAgIGds
OjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotI2VuZGlmCi0KLSAgICBMT0coV2ViR0wsICJDcmVh
dGVkIGEgR3JhcGhpY3NDb250ZXh0M0QgKCVwKS4iLCB0aGlzKTsKLX0KLQotR3JhcGhpY3NDb250
ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RNYW5h
Z2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLQotICAgIGlmIChtX2Nv
bnRleHRPYmopIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4obV9j
b250ZXh0T2JqKSByZW5kZXJidWZmZXJTdG9yYWdlOkdMX1JFTkRFUkJVRkZFUiBmcm9tRHJhd2Fi
bGU6bmlsXTsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fdGV4dHVyZSk7
Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgICAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBz
dGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopOwotICAgICAgICBDR0xTZXRD
dXJyZW50Q29udGV4dChjZ2xDb250ZXh0KTsKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOwotI2VsaWYgVVNFKEFOR0xFKQotICAgICAgICBFR0xfTWFrZUN1cnJlbnQo
bV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1fY29udGV4dE9i
aik7Ci0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNlbmRpZgot
Ci0jaWYgVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcykgewotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8
fCBhdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6Omds
RGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQotICAg
ICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgx
LCAmbV9mYm8pOwotI2VsaWYgVVNFKEFOR0xFKQotICAgICAgICBpZiAoYXR0cnMuYW50aWFsaWFz
KSB7Ci0gICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRl
cHRoKQotICAgICAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1
ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6
OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
fQotICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0jZW5kaWYKLQot
I2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4
dDowXTsKLSAgICAgICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0ICo+KG1fY29udGV4dE9iaikg
cmVsZWFzZV07Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4
dCgwKTsKLSAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY2dsQ29udGV4dCk7Ci0jZWxpZiBVU0Uo
QU5HTEUpCi0gICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJG
QUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICBFR0xfRGVzdHJv
eUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOwotI2VuZGlmCi0gICAgICAgIFtt
X3dlYkdMTGF5ZXIgc2V0Q29udGV4dDpudWxscHRyXTsKLSAgICB9Ci0KLSAgICBMT0coV2ViR0ws
ICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHQzRCAoJXApLiIsIHRoaXMpOwotfQotCi0jaWYg
VVNFKE9QRU5HTF9FUykKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldFJlbmRlcmJ1ZmZlclN0
b3JhZ2VGcm9tRHJhd2FibGUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewot
ICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBhIGNhbGwgdG8gc2V0Qm91bmRzIGJlbG93IHRvIHVwZGF0
ZSB0aGUgYmFja2luZyBzdG9yZSBzaXplIGJ1dCB3ZSBhbHNvCi0gICAgLy8gZG8gbm90IHdhbnQg
dG8gY2xvYmJlciB0aGUgYm91bmRzIHNldCBkdXJpbmcgbGF5b3V0LgotICAgIENHUmVjdCBwcmV2
aW91c0JvdW5kcyA9IFttX3dlYkdMTGF5ZXIuZ2V0KCkgYm91bmRzXTsKLQotICAgIFttX3dlYkdM
TGF5ZXIgc2V0Qm91bmRzOkNHUmVjdE1ha2UoMCwgMCwgd2lkdGgsIGhlaWdodCldOwotICAgIFtt
X3dlYkdMTGF5ZXIgc2V0T3BhcXVlOiFjb250ZXh0QXR0cmlidXRlcygpLmFscGhhXTsKLQotICAg
IFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCAqPihtX2NvbnRleHRPYmopIHJlbmRlcmJ1ZmZlclN0
b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21EcmF3YWJsZTpzdGF0aWNfY2FzdDxpZDxFQUdMRHJh
d2FibGU+PihtX3dlYkdMTGF5ZXIuZ2V0KCkpXTsKLQotICAgIFttX3dlYkdMTGF5ZXIgc2V0Qm91
bmRzOnByZXZpb3VzQm91bmRzXTsKLX0KLSNlbmRpZgotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
OjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIGlmICghbV9jb250ZXh0T2JqKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlmIChbRUFHTENvbnRl
eHQgY3VycmVudENvbnRleHRdICE9IG1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuIFtFQUdM
Q29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29u
dGV4dE9iaildOwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBDR0xDb250ZXh0T2JqIGN1cnJlbnRD
b250ZXh0ID0gQ0dMR2V0Q3VycmVudENvbnRleHQoKTsKLSAgICBpZiAoY3VycmVudENvbnRleHQg
IT0gbV9jb250ZXh0T2JqKQotICAgICAgICByZXR1cm4gQ0dMU2V0Q3VycmVudENvbnRleHQoc3Rh
dGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250ZXh0T2JqKSkgPT0ga0NHTE5vRXJyb3I7Ci0j
ZWxpZiBVU0UoQU5HTEUpCi0gICAgaWYgKEVHTF9HZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29u
dGV4dE9iaikKLSAgICAgICAgcmV0dXJuIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKLSNlbmRpZgotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0dQVVN0YXR1
cygpCi17Ci0gICAgaWYgKG1fZmFpbE5leHRTdGF0dXNDaGVjaykgewotICAgICAgICBMT0coV2Vi
R0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUgaGFzIHJlc2V0ICglcCkuIExvc2UgdGhlIGNvbnRleHQu
IiwgdGhpcyk7Ci0gICAgICAgIG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IGZhbHNlOwotICAgICAg
ICBmb3JjZUNvbnRleHRMb3N0KCk7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICAgICAgQ0dMU2V0Q3Vy
cmVudENvbnRleHQoMCk7Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBbRUFHTENvbnRl
eHQgc2V0Q3VycmVudENvbnRleHQ6MF07Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgICAgIEVHTF9N
YWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
RUdMX05PX0NPTlRFWFQpOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBPbmx5IGRvIHRoZSBjaGVjayBldmVyeSBzdGF0dXNDaGVja1RocmVzaG9sZCBjYWxscy4KLSAg
ICBpZiAobV9zdGF0dXNDaGVja0NvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0YXR1
c0NoZWNrQ291bnQgPSAobV9zdGF0dXNDaGVja0NvdW50ICsgMSkgJSBzdGF0dXNDaGVja1RocmVz
aG9sZDsKLQotICAgIEdMaW50IHJlc3RhcnRTdGF0dXMgPSAwOwotI2lmIFVTRShPUEVOR0wpCi0g
ICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4o
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICBDR0xHZXRQYXJhbWV0ZXIoY2dsQ29u
dGV4dCwga0NHTENQR1BVUmVzdGFydFN0YXR1cywgJnJlc3RhcnRTdGF0dXMpOwotICAgIGlmIChy
ZXN0YXJ0U3RhdHVzID09IGtDR0xDUEdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgewotICAg
ICAgICBMT0coV2ViR0wsICJUaGUgR1BVIGhhcyBibGFja2xpc3RlZCB1cyAoJXApLiBUZXJtaW5h
dGluZy4iLCB0aGlzKTsKLSAgICAgICAgZXhpdChFWF9PU0VSUik7Ci0gICAgfQotICAgIGlmIChy
ZXN0YXJ0U3RhdHVzID09IGtDR0xDUEdQVVJlc3RhcnRTdGF0dXNDYXVzZWQpIHsKLSAgICAgICAg
TE9HKFdlYkdMLCAiVGhlIEdQVSBoYXMgcmVzZXQgdXMgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4i
LCB0aGlzKTsKLSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICBDR0xTZXRDdXJy
ZW50Q29udGV4dCgwKTsKLSAgICB9Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotICAgIEVBR0xDb250
ZXh0KiBjdXJyZW50Q29udGV4dCA9IHN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4oUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICBbY3VycmVudENvbnRleHQgZ2V0UGFyYW1ldGVyOmtF
QUdMQ1BHUFVSZXN0YXJ0U3RhdHVzIHRvOiZyZXN0YXJ0U3RhdHVzXTsKLSAgICBpZiAocmVzdGFy
dFN0YXR1cyA9PSBrRUFHTENQR1BVUmVzdGFydFN0YXR1c0NhdXNlZCB8fCByZXN0YXJ0U3RhdHVz
ID09IGtFQUdMQ1BHUFVSZXN0YXJ0U3RhdHVzQmxhY2tsaXN0ZWQpIHsKLSAgICAgICAgTE9HKFdl
YkdMLCAiVGhlIEdQVSBoYXMgZWl0aGVyIHJlc2V0IG9yIGJsYWNrbGlzdGVkIHVzICglcCkuIExv
c2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7Ci0gICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKLSAg
ICAgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOwotICAgIH0KLSNlbGlmIFVT
RShBTkdMRSkKLSAgICAvLyBGSVhNRTogY2hlY2sgdmlhIEtIUl9yb2J1c3RuZXNzLgotICAgIHJl
c3RhcnRTdGF0dXMgPSAwOwotI2VuZGlmCi19Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cHJlc2VudFJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQotICAg
ICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICA6OmdsRmx1c2go
KTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7
Ci0gICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKSBwcmVzZW50UmVu
ZGVyYnVmZmVyOkdMX1JFTkRFUkJVRkZFUl07Ci0gICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRD
b250ZXh0Om5pbF07Ci19Ci0jZW5kaWYKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1h
Z2VJT1N1cmZhY2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIEdDM0R1aW50IHBsYW5lKQotewotI2lmIFVT
RShPUEVOR0wpCi0gICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dM
Q29udGV4dE9iaj4ocGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICByZXR1cm4ga0NH
TE5vRXJyb3IgPT0gQ0dMVGV4SW1hZ2VJT1N1cmZhY2UyRChjZ2xDb250ZXh0LCB0YXJnZXQsIGlu
dGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHN1cmZhY2UsIHBsYW5l
KTsKLSNlbGlmIFVTRShPUEVOR0xfRVMpICYmICFQTEFURk9STShJT1NfRkFNSUxZX1NJTVVMQVRP
UikKLSAgICByZXR1cm4gW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0ICo+KHBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QoKSkgdGV4SW1hZ2VJT1N1cmZhY2U6c3VyZmFjZSB0YXJnZXQ6dGFyZ2V0IGlu
dGVybmFsRm9ybWF0OmludGVybmFsRm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgZm9y
bWF0OmZvcm1hdCB0eXBlOnR5cGUgcGxhbmU6cGxhbmVdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxGb3JtYXQpOwotICAgIFVOVVNF
RF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShz
dXJmYWNlKTsKLSAgICBVTlVTRURfUEFSQU0ocGxhbmUpOwotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCi0jaWYgVVNFKE9QRU5HTCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9j
YXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUgc2l6ZSkKLXsKLSAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQgJWQg
eCAlZC4gKCVwKSIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7Ci0gICAgW21f
d2ViR0xMYXllciBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOnNpemUgdXNp
bmdBbHBoYTpjb250ZXh0QXR0cmlidXRlcygpLmFscGhhXTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkK
LXsKLSAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVidWZmZXJU
ZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkuICglcCkiLCB0aGlzKTsKLSAgICBbbV93ZWJH
TExheWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVDR0xDb250ZXh0KCkKLXsKLSAgICBpZiAoIW1fY29u
dGV4dE9iaikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKFdlYkdMLCAiRGV0ZWN0ZWQgYSBt
dXggc3dpdGNoIG9yIGRpc3BsYXkgcmVjb25maWd1cmF0aW9uLiBDYWxsIENHTFVwZGF0ZUNvbnRl
eHQuICglcCkiLCB0aGlzKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIENHTFVw
ZGF0ZUNvbnRleHQoc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250ZXh0T2JqKSk7Ci0g
ICAgbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1ZTsKLX0KLQotI2VuZGlm
IC8vIFVTRShPUEVOR0wpCi0KLSNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKLXsK
LSAgICBpZiAobV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24gPT0gR3JhcGhpY3NDb250
ZXh0M0RQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkgewotICAgICAgICBpZiAoaXNW
aXNpYmxlKQotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5h
Z2VyKCkuYWRkQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZSh0aGlzKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5hZ2Vy
KCkucmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZSh0aGlzKTsKLSAgICB9Ci19
Ci0jZW5kaWYgLy8gVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQotCi0jaWYgVVNFKEFOR0xFKQot
Ci0jaWYgUExBVEZPUk0oTUFDKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlQ0dMQ29u
dGV4dCgpCi17Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybjsKLQotICAg
IExPRyhXZWJHTCwgIkRldGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29uZmlndXJh
dGlvbi4gQ2FsbCBDR0xVcGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7Ci0KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKLSAgICBF
R0xfUXVlcnlEaXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJl
aW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOwotICAgIENHTENvbnRleHRPYmog
Y2dsQ29udGV4dCA9IG51bGxwdHI7Ci0gICAgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmlj
ZSwgRUdMX0NHTF9DT05URVhUX0FOR0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZj
Z2xDb250ZXh0KSk7Ci0KLSAgICBDR0xVcGRhdGVDb250ZXh0KGNnbENvbnRleHQpOwotICAgIG1f
aGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSA9IHRydWU7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6
ZSBzaXplKQotewotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIExPRyhXZWJHTCwgIkdyYXBoaWNz
Q29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZSBhdCAlZCB4ICVkLiAoJXAp
Iiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB0aGlzKTsKLSAgICBbbV93ZWJHTExheWVy
IGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6c2l6ZSB1c2luZ0FscGhhOmNv
bnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVidWZmZXJU
ZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkKLXsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAg
ICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHQzRDo6dXBkYXRlRnJhbWVidWZmZXJUZXh0dXJl
QmFja2luZ1N0b3JlRnJvbUxheWVyKCkuICglcCkiLCB0aGlzKTsKLSAgICBbbV93ZWJHTExheWVy
IGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdOwotI2VuZGlmCi19Ci0jZW5k
aWYgLy8gVVNFKEFOR0xFKQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxp
YW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkudXBkYXRlQWxsQ29udGV4dHMoKTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6YWxsb3dPZmZsaW5lUmVuZGVyZXJzKCkgY29uc3QK
LXsKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9C
TE9DS0lORykKLSAgICAvLyBXaGVuIFdpbmRvd1NlcnZlciBhY2Nlc3MgaXMgYmxvY2tlZCBpbiB0
aGUgV2ViUHJvY2VzcywgdGhlcmUgaXMgbm8gd2F5Ci0gICAgLy8gZm9yIE9wZW5HTCB0byBkZWNp
ZGUgd2hpY2ggR1BVIGlzIGNvbm5lY3RlZCB0byBhIGRpc3BsYXkgKG9ubGluZS9vZmZsaW5lKS4K
LSAgICAvLyBPcGVuR0wgd2lsbCB0aGVuIGNvbnNpZGVyIGFsbCBHUFVzLCBvciByZW5kZXJlcnMs
IGFzIG9mZmxpbmUsIHdoaWNoIG1lYW5zCi0gICAgLy8gYWxsIG9mZmxpbmUgcmVuZGVyZXJzIG5l
ZWQgdG8gYmUgY29uc2lkZXJlZCB3aGVuIGZpbmRpbmcgYSBwaXhlbCBmb3JtYXQuCi0gICAgLy8g
SW4gV2ViS2l0IGxlZ2FjeSwgdGhlcmUgd2lsbCBzdGlsbCBiZSBhIFdpbmRvd1NlcnZlciBjb25u
ZWN0aW9uLCBhbmQKLSAgICAvLyBtX2Rpc3BsYXlNYXNrIHdpbGwgbm90IGJlIHNldCBpbiB0aGlz
IGNhc2UuCi0gICAgaWYgKHByaW1hcnlPcGVuR0xEaXNwbGF5TWFzaygpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSNlbGlmIFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQotICAgIC8vIEZJWE1FOiA8cmRh
cjovLzUzMDYyNzk0PiBXZSdyZSB2ZXJ5IGluY29uc2lzdGVudCBhYm91dCBXRUJQUk9DRVNTX1dJ
TkRPV1NFUlZFUl9CTE9DS0lORwotICAgIC8vIGFuZCBNQUMvTUFDQ0FUQUxZU1QgYW5kIE9QRU5H
TC9PUEVOR0xFUy4KLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAKLSNpZiBIQVZF
KEFQUExFX0dSQVBISUNTX0NPTlRST0wpCi0gICAgaWYgKGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY3JlZW5E
aWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQotewotICAgIGlmICghbV9jb250
ZXh0T2JqKQotICAgICAgICByZXR1cm47Ci0jaWYgVVNFKEFOR0xFKQotICAgIGlmICghbV9oYXNT
d2l0Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVKSB7Ci0gICAgICAgIEVHTERldmljZUVYVCBkZXZp
Y2UgPSBudWxscHRyOwotICAgICAgICBFR0xfUXVlcnlEaXNwbGF5QXR0cmliRVhUKG1fZGlzcGxh
eU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmlj
ZSkpOwotICAgICAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOwotICAgICAg
ICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdCA9IG51bGxwdHI7Ci0gICAgICAgIEVHTF9R
dWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfQ09OVEVYVF9BTkdMRSwgcmVpbnRl
cnByZXRfY2FzdDxFR0xBdHRyaWIqPigmY2dsQ29udGV4dCkpOwotICAgICAgICBFR0xfUXVlcnlE
ZXZpY2VBdHRyaWJFWFQoZGV2aWNlLCBFR0xfQ0dMX1BJWEVMX0ZPUk1BVF9BTkdMRSwgcmVpbnRl
cnByZXRfY2FzdDxFR0xBdHRyaWIqPigmcGl4ZWxGb3JtYXQpKTsKLSAgICAgICAgc2V0R1BVQnlS
ZWdpc3RyeUlEKGNnbENvbnRleHQsIHBpeGVsRm9ybWF0LCBncHVJREZvckRpc3BsYXkoZGlzcGxh
eUlEKSk7Ci0gICAgfQotI2Vsc2UKLSNpZiBVU0UoT1BFTkdMKQotICAgIGlmICghbV9oYXNTd2l0
Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVKSB7Ci0gICAgICAgIENHTENvbnRleHRPYmogY2dsQ29u
dGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9iaik7Ci0gICAgICAg
IHNldEdQVUJ5UmVnaXN0cnlJRChjZ2xDb250ZXh0LCBDR0xHZXRQaXhlbEZvcm1hdChjZ2xDb250
ZXh0KSwgZ3B1SURGb3JEaXNwbGF5KGRpc3BsYXlJRCkpOwotICAgIH0KLSNlbmRpZgotI2VuZGlm
IC8vIFVTRShBTkdMRSkKLX0KLSNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQotCi19Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiNzVjZjk1ZmJmNjBlOWI4MmMxMTcwNDM2
N2Q4MGU2YTI5ZmMxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCkBAIC0wLDAg
KzEsODUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgIVVTRShBTkdMRSkKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMRVNJT1MuaCIKKyNlbmRpZgorCisjaW1wb3J0ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmgi
CisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlci5oIgorI2ltcG9ydCAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbXBvcnQg
Ikhvc3RXaW5kb3cuaCIKKyNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisjaW1wb3J0ICJMb2dnaW5n
LmgiCisjaW1wb3J0ICJXZWJHTExheWVyLmgiCisjaW1wb3J0ICJXZWJHTE9iamVjdC5oIgorI2lt
cG9ydCAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2ltcG9ydCA8Q29yZUdyYXBoaWNz
L0NHQml0bWFwQ29udGV4dC5oPgorI2ltcG9ydCA8c3lzL3N5c2N0bC5oPgorI2ltcG9ydCA8c3lz
ZXhpdHMuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2ltcG9ydCA8T3BlbkdM
RVMvRUFHTC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxlLmg+CisjaW1wb3J0IDxP
cGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisjaW1wb3J0IDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4K
KyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8cGFsL3NwaS9pb3Mv
T3BlbkdMRVNTUEkuaD4KKyNlbGlmIFVTRShPUEVOR0wpCisjaW1wb3J0IDxJT0tpdC9JT0tpdExp
Yi5oPgorI2ltcG9ydCA8T3BlbkdML2dsLmg+CisjZWxpZiBVU0UoQU5HTEUpCisjZGVmaW5lIEVH
TF9FR0xfUFJPVE9UWVBFUyAwCisvLyBTa2lwIHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBs
aWNpdCBjb250ZXh0IGVudHJ5IHBvaW50cyBmb3Igbm93LgorI2RlZmluZSBHTF9BTkdMRV9leHBs
aWNpdF9jb250ZXh0CisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKK3R5
cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0OworI2luY2x1ZGUgPEFOR0xFL2VnbC5oPgorI2luY2x1
ZGUgPEFOR0xFL2VnbGV4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2VnbGV4dF9hbmdsZS5oPgorI2lu
Y2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19lZ2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9w
b2ludHNfZWdsX2V4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9h
dXRvZ2VuLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4u
aD4KKyNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5n
bGUuaD4KKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FUykgfHwgVVNFKE9QRU5HTCkKKyNpbmNs
dWRlICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKKyNlbGlmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJF
eHRlbnNpb25zR0xBTkdMRS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0
ICJTY3JlZW5Qcm9wZXJ0aWVzLmgiCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQorI2lt
cG9ydCA8T3BlbkdML0NHTFJlbmRlcmVycy5oPgorI2VuZGlmCisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RhdHVzQ2hlY2tUaHJlc2hvbGQg
PSA1OworCisvLyBGSVhNRTogVGhpcyBjbGFzcyBpcyBjdXJyZW50bHkgZW1wdHkgb24gTWFjLCBi
dXQgd2lsbCBnZXQgcG9wdWxhdGVkIGFzCisvLyB0aGUgcmVzdHJ1Y3R1cmluZyBpbiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY5MDMgaXMgZG9uZQorY2xhc3MgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqKSB7IH0KKyAgICAKKyAgICB+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQ
cml2YXRlKCkgeyB9Cit9OworCitSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0
dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHRHTDo6RGVzdGluYXRp
b24gZGVzdGluYXRpb24pCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1
cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KKyAg
ICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIE1ha2Ugc3BhY2UgZm9yIHRoZSBpbmNv
bWluZyBjb250ZXh0IGlmIHdlJ3JlIGZ1bGwuCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVjeWNsZUNvbnRleHRJZk5lY2Vzc2FyeSgpOworICAg
IGlmIChHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5oYXNU
b29NYW55Q29udGV4dHMoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woYXR0cnMsIGhvc3RXaW5kb3csIGRlc3RpbmF0aW9uKSk7CisKKyAgICBp
ZiAoIWNvbnRleHQtPm1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250
ZXh0KGNvbnRleHQuZ2V0KCksIGhvc3RXaW5kb3cpOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9
CisKK1JlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVNoYXJlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgc2hhcmVkQ29udGV4dCkKK3sK
KyAgICBhdXRvIGhvc3RXaW5kb3cgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5ob3N0V2luZG93Rm9yQ29udGV4dCgmc2hhcmVkQ29udGV4dCk7CisgICAg
YXV0byBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChzaGFy
ZWRDb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCksIGhvc3RXaW5kb3csIHNoYXJlZENvbnRleHQu
ZGVzdGluYXRpb24oKSwgJnNoYXJlZENvbnRleHQpKTsKKworICAgIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4dC5wdHIoKSwg
aG9zdFdpbmRvdyk7CisKKyAgICByZXR1cm4gY29udGV4dDsKK30KKworI2lmIFBMQVRGT1JNKE1B
QykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5
IHNob3VsZCBiZSBqdXN0IChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKSAtIHNlZSA8cmRhcjov
LzUzMDYyNzk0Pi4KKworc3RhdGljIHZvaWQgc2V0R1BVQnlSZWdpc3RyeUlEKENHTENvbnRleHRP
YmogY29udGV4dE9iaiwgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmosIElPUmVnaXN0
cnlHUFVJRCBwcmVmZXJyZWRHUFVJRCkKK3sKKyAgICAvLyBXaGVuIHRoZSBXZWJQcm9jZXNzIGRv
ZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBXaW5kb3dTZXJ2ZXIsIHRoZXJlIGlzIG5vIHdheSBm
b3IgT3BlbkdMIHRvIHRlbGwgd2hpY2ggR1BVIGlzIGNvbm5lY3RlZCB0byBhIGRpc3BsYXkuCisg
ICAgLy8gT24gMTAuMTMrLCBmaW5kIHRoZSB2aXJ0dWFsIHNjcmVlbiB0aGF0IGNvcnJlc3BvbmRz
IHRvIHRoZSBwcmVmZXJyZWQgR1BVIGJ5IGl0cyByZWdpc3RyeUlELgorICAgIC8vIENHTFNldFZp
cnR1YWxTY3JlZW4gY2FuIHRoZW4gYmUgdXNlZCB0byB0ZWxsIE9wZW5HTCB3aGljaCBHUFUgaXQg
c2hvdWxkIGJlIHVzaW5nLgorCisgICAgaWYgKCFjb250ZXh0T2JqIHx8ICFwcmVmZXJyZWRHUFVJ
RCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR0xpbnQgdmlydHVhbFNjcmVlbkNvdW50ID0gMDsK
KyAgICBDR0xFcnJvciBlcnJvciA9IENHTERlc2NyaWJlUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXRP
YmosIDAsIGtDR0xQRkFWaXJ0dWFsU2NyZWVuQ291bnQsICZ2aXJ0dWFsU2NyZWVuQ291bnQpOwor
ICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7CisKKyAgICBHTGludCBmaXJzdEFjY2Vs
ZXJhdGVkU2NyZWVuID0gLTE7CisKKyAgICBmb3IgKEdMaW50IHZpcnR1YWxTY3JlZW4gPSAwOyB2
aXJ0dWFsU2NyZWVuIDwgdmlydHVhbFNjcmVlbkNvdW50OyArK3ZpcnR1YWxTY3JlZW4pIHsKKyAg
ICAgICAgR0xpbnQgZGlzcGxheU1hc2sgPSAwOworICAgICAgICBlcnJvciA9IENHTERlc2NyaWJl
UGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXRPYmosIHZpcnR1YWxTY3JlZW4sIGtDR0xQRkFEaXNwbGF5
TWFzaywgJmRpc3BsYXlNYXNrKTsKKyAgICAgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9y
KTsKKworICAgICAgICBhdXRvIGdwdUlEID0gZ3B1SURGb3JEaXNwbGF5TWFzayhkaXNwbGF5TWFz
ayk7CisKKyAgICAgICAgaWYgKGdwdUlEID09IHByZWZlcnJlZEdQVUlEKSB7CisgICAgICAgICAg
ICBlcnJvciA9IENHTFNldFZpcnR1YWxTY3JlZW4oY29udGV4dE9iaiwgdmlydHVhbFNjcmVlbik7
CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOworICAgICAgICAgICAg
TE9HKFdlYkdMLCAiQ29udGV4dCAoJXApIHNldCB0byBHUFUgd2l0aCBJRDogKCVsbGQpLiIsIGNv
bnRleHRPYmosIGdwdUlEKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChmaXJzdEFjY2VsZXJhdGVkU2NyZWVuIDwgMCkgeworICAgICAgICAgICAgR0xpbnQg
aXNBY2NlbGVyYXRlZCA9IDA7CisgICAgICAgICAgICBlcnJvciA9IENHTERlc2NyaWJlUGl4ZWxG
b3JtYXQocGl4ZWxGb3JtYXRPYmosIHZpcnR1YWxTY3JlZW4sIGtDR0xQRkFBY2NlbGVyYXRlZCwg
JmlzQWNjZWxlcmF0ZWQpOworICAgICAgICAgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9y
KTsKKyAgICAgICAgICAgIGlmIChpc0FjY2VsZXJhdGVkKQorICAgICAgICAgICAgICAgIGZpcnN0
QWNjZWxlcmF0ZWRTY3JlZW4gPSB2aXJ0dWFsU2NyZWVuOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gTm8gcmVnaXN0cnlJRCBtYXRjaCBmb3VuZDsgc2V0IHRvIGZpcnN0IGhhcmR3YXJlLWFj
Y2VsZXJhdGVkIHZpcnR1YWwgc2NyZWVuLgorICAgIGlmIChmaXJzdEFjY2VsZXJhdGVkU2NyZWVu
ID49IDApIHsKKyAgICAgICAgZXJyb3IgPSBDR0xTZXRWaXJ0dWFsU2NyZWVuKGNvbnRleHRPYmos
IGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4pOworICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5v
RXJyb3IpOworICAgICAgICBMT0coV2ViR0wsICJSZWdpc3RyeUlEICglbGxkKSBub3QgbWF0Y2hl
ZDsgQ29udGV4dCAoJXApIHNldCB0byB2aXJ0dWFsIHNjcmVlbiAoJWQpLiIsIHByZWZlcnJlZEdQ
VUlELCBjb250ZXh0T2JqLCBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuKTsKKyAgICB9Cit9CisKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQorCitH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGlj
c0NvbnRleHRHTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKiBzaGFyZWRDb250ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cnMsIGRlc3Rp
bmF0aW9uLCBzaGFyZWRDb250ZXh0KQoreworICAgIEFTU0VSVChBTkdMRVdlYktpdEJyaWRnZTo6
YW5nbGVBdmFpbGFibGUoKSk7CisgICAgaWYgKCFBTkdMRVdlYktpdEJyaWRnZTo6YW5nbGVBdmFp
bGFibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0ZvcldlYkdMMiA9IGF0dHJzLmlz
V2ViR0wyOworCisjaWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9MKQorICAgIG1fcG93ZXJQ
cmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID0gKGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKSAmJiBh
dHRycy5wb3dlclByZWZlcmVuY2UgPT0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6
OkhpZ2hQZXJmb3JtYW5jZSkgPyBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6SGln
aFBlcmZvcm1hbmNlIDogR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQ7
CisjZWxzZQorICAgIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uID0gR3JhcGhpY3ND
b250ZXh0R0xQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQ7CisjZW5kaWYKKworI2lmICFVU0UoQU5H
TEUpCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAg
bV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBTSF9XRUJHTDJf
U1BFQyk7CisgICAgZWxzZQorICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2Uo
U0hfRVNTTF9PVVRQVVQpOworI2Vsc2UKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAg
bV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfNDEwX0NPUkVfT1VUUFVULCBT
SF9XRUJHTDJfU1BFQyk7CisjZW5kaWYgLy8gVVNFKE9QRU5HTF9FUykKKyNlbmRpZiAvLyAhVVNF
KEFOR0xFKQorCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRv
dyk7CisgICAgRUFHTFJlbmRlcmluZ0FQSSBhcGkgPSBtX2lzRm9yV2ViR0wyID8ga0VBR0xSZW5k
ZXJpbmdBUElPcGVuR0xFUzMgOiBrRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMjsKKyAgICBFQUdM
Q29udGV4dCAqY29udGV4dE9iajsKKyAgICBpZiAoIXNoYXJlZENvbnRleHQpCisgICAgICAgIGNv
bnRleHRPYmogPSBbW0VBR0xDb250ZXh0IGFsbG9jXSBpbml0V2l0aEFQSTphcGldOworICAgIGVs
c2UKKyAgICAgICAgY29udGV4dE9iaiA9IFtbRUFHTENvbnRleHQgYWxsb2NdIGluaXRXaXRoQVBJ
OmFwaSBzaGFyZWdyb3VwOnN0YXRpY19jYXN0PEVBR0xDb250ZXh0ICo+KHNoYXJlZENvbnRleHQt
Pm1fY29udGV4dE9iaikuc2hhcmVncm91cF07CisKKyAgICBtX2NvbnRleHRPYmogPSBzdGF0aWNf
Y2FzdDx2b2lkICo+KGNvbnRleHRPYmopOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAgOjpnbEVuYWJsZShHcmFwaGljc0NvbnRl
eHRHTDo6UFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVgpOworI2VsaWYgVVNFKE9QRU5HTCkK
KworICAgIGJvb2wgdXNlTXVsdGlzYW1wbGluZyA9IGF0dHJzLmFudGlhbGlhczsKKworICAgIFZl
Y3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKKyAgICBDR0xQaXhlbEZvcm1h
dE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CisgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsK
KworICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFBY2NlbGVyYXRlZCk7CisgICAgYXR0cmlicy5h
cHBlbmQoa0NHTFBGQUNvbG9yU2l6ZSk7CisgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8
Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDMyKSk7CisgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBG
QURlcHRoU2l6ZSk7CisgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGU+KDMyKSk7CisKKyAgICAvLyBUaGlzIGF0dHJpYnV0ZSwgd2hpbGUgbWVudGlv
bmluZyBvZmZsaW5lIHJlbmRlcmVycywgaXMgYWN0dWFsbHkKKyAgICAvLyBhbGxvd2luZyB1cyB0
byByZXF1ZXN0IHRoZSBpbnRlZ3JhdGVkIGdyYXBoaWNzIG9uIGEgZHVhbCBHUFUKKyAgICAvLyBz
eXN0ZW0sIGFuZCBub3QgZm9yY2UgdGhlIGRpc2NyZXRlIEdQVS4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL3RlY2hub3Rlcy90bjIyMjkvX2luZGV4
Lmh0bWwKKyAgICBpZiAoYWxsb3dPZmZsaW5lUmVuZGVyZXJzKCkpCisgICAgICAgIGF0dHJpYnMu
YXBwZW5kKGtDR0xQRkFBbGxvd09mZmxpbmVSZW5kZXJlcnMpOworCisgICAgaWYgKHVzZU11bHRp
c2FtcGxpbmcpIHsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQU11bHRpc2FtcGxlKTsK
KyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQVNhbXBsZUJ1ZmZlcnMpOworICAgICAgICBh
dHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMSkpOwor
ICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBU2FtcGxlcyk7CisgICAgICAgIGF0dHJpYnMu
YXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPig0KSk7CisgICAgfQor
CisgICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2Yg
YmFja2luZyBhIFdlYkdMMiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCB3aXRoIGEgT3BlbkdMIDQg
Y29udGV4dCwgd2Ugc2hvdWxkIGluc3RlYWQgYmFjayBpdCB3aXRoIEFOR0xFLgorICAgICAgICAv
LyBVc2UgYW4gT3BlbkdMIDQgY29udGV4dCBmb3Igbm93IHVudGlsIHRoZSBBTkdMRSBiYWNrZW5k
IGlzIHJlYWR5LgorICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBT3BlbkdMUHJvZmlsZSk7
CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlPihrQ0dMT0dMUFZlcnNpb25fR0w0X0NvcmUpKTsKKyAgICB9CisKKyAgICBhdHRyaWJzLmFw
cGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMCkpOworCisgICAgQ0dM
Q2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBp
eGVsRm9ybWF0cyk7CisKKyAgICBpZiAoIW51bVBpeGVsRm9ybWF0cykKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gbnVsbHB0cjsKKyAgICBDR0xDb250
ZXh0T2JqIHNoYXJlZENHTENvbnRleHQgPSBzaGFyZWRDb250ZXh0ID8gc3RhdGljX2Nhc3Q8Q0dM
Q29udGV4dE9iaj4oc2hhcmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKSA6IG51bGxwdHI7CisKKyAg
ICBDR0xFcnJvciBlcnIgPSBDR0xDcmVhdGVDb250ZXh0KHBpeGVsRm9ybWF0T2JqLCBzaGFyZWRD
R0xDb250ZXh0LCAmY2dsQ29udGV4dCk7CisgICAgR0xpbnQgYWJvcnRPbkJsYWNrbGlzdCA9IDA7
CisgICAgQ0dMU2V0UGFyYW1ldGVyKGNnbENvbnRleHQsIGtDR0xDUEFib3J0T25HUFVSZXN0YXJ0
U3RhdHVzQmxhY2tsaXN0ZWQsICZhYm9ydE9uQmxhY2tsaXN0KTsKKworI2lmIFBMQVRGT1JNKE1B
QykgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGJlIFVTRShPUEVOR0wpIC0gc2VlIDxy
ZGFyOi8vNTMwNjI3OTQ+LgorCisgICAgYXV0byBncHVJRCA9IChob3N0V2luZG93ICYmIGhvc3RX
aW5kb3ctPmRpc3BsYXlJRCgpKSA/IGdwdUlERm9yRGlzcGxheShob3N0V2luZG93LT5kaXNwbGF5
SUQoKSkgOiBwcmltYXJ5R1BVSUQoKTsKKyAgICBzZXRHUFVCeVJlZ2lzdHJ5SUQoY2dsQ29udGV4
dCwgcGl4ZWxGb3JtYXRPYmosIGdwdUlEKTsKKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaG9z
dFdpbmRvdyk7CisjZW5kaWYKKworICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChwaXhlbEZvcm1h
dE9iaik7CisKKyAgICBtX2NvbnRleHRPYmogPSBjZ2xDb250ZXh0OworCisgICAgaWYgKGVyciAh
PSBrQ0dMTm9FcnJvciB8fCAhbV9jb250ZXh0T2JqKSB7CisgICAgICAgIC8vIFdlIHdlcmUgdW5h
YmxlIHRvIGNyZWF0ZSB0aGUgY29udGV4dC4KKyAgICAgICAgbV9jb250ZXh0T2JqID0gMDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dE9iaiA9IGNnbENvbnRleHQ7CisK
KyAgICBDR0xTZXRDdXJyZW50Q29udGV4dChjZ2xDb250ZXh0KTsKKworICAgIC8vIFdlYkdMIDIg
ZXhwZWN0cyBFUyAzLW9ubHkgUFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVggdG8gYmUgZW5h
YmxlZDsgd2UgbXVzdCBlbXVsYXRlIHRoaXMgb24gbm9uLUVTIDMgc3lzdGVtcy4KKyAgICBpZiAo
bV9pc0ZvcldlYkdMMikKKyAgICAgICAgOjpnbEVuYWJsZShHcmFwaGljc0NvbnRleHRHTDo6UFJJ
TUlUSVZFX1JFU1RBUlQpOworCisjZWxpZiBVU0UoQU5HTEUpCisKKyAgICBtX2Rpc3BsYXlPYmog
PSBFR0xfR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgICBpZiAobV9kaXNwbGF5
T2JqID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm47CisgICAgRUdMaW50IG1ham9y
VmVyc2lvbiwgbWlub3JWZXJzaW9uOworICAgIGlmIChFR0xfSW5pdGlhbGl6ZShtX2Rpc3BsYXlP
YmosICZtYWpvclZlcnNpb24sICZtaW5vclZlcnNpb24pID09IEVHTF9GQUxTRSkgeworICAgICAg
ICBMT0coV2ViR0wsICJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBMT0coV2ViR0wsICJBTkdMRSBpbml0aWFsaXNlZCBNYWpv
cjogJWQgTWlub3I6ICVkIiwgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb24pOworICAgIGNvbnN0
IGNoYXIgKmRpc3BsYXlFeHRlbnNpb25zID0gRUdMX1F1ZXJ5U3RyaW5nKG1fZGlzcGxheU9iaiwg
RUdMX0VYVEVOU0lPTlMpOworICAgIExPRyhXZWJHTCwgIkV4dGVuc2lvbnM6ICVzIiwgZGlzcGxh
eUV4dGVuc2lvbnMpOworCisgICAgRUdMaW50IGNvbmZpZ0F0dHJpYnV0ZXNbXSA9IHsKKyAgICAg
ICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICBFR0xf
UkVEX1NJWkUsIDgsCisgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICBFR0xfQkxV
RV9TSVpFLCA4LAorICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgRUdMX05PTkUK
KyAgICB9OworICAgIEVHTGludCBudW1iZXJDb25maWdzUmV0dXJuZWQgPSAwOworICAgIEVHTF9D
aG9vc2VDb25maWcobV9kaXNwbGF5T2JqLCBjb25maWdBdHRyaWJ1dGVzLCAmbV9jb25maWdPYmos
IDEsICZudW1iZXJDb25maWdzUmV0dXJuZWQpOworICAgIGlmIChudW1iZXJDb25maWdzUmV0dXJu
ZWQgIT0gMSkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xDb25maWcgSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIExPRyhXZWJHTCwgIkdvdCBF
R0xDb25maWciKTsKKworICAgIEVHTF9CaW5kQVBJKEVHTF9PUEVOR0xfRVNfQVBJKTsKKyAgICBp
ZiAoRUdMX0dldEVycm9yKCkgIT0gRUdMX1NVQ0NFU1MpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAi
VW5hYmxlIHRvIGJpbmQgdG8gT1BFTkdMX0VTX0FQSSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgVmVjdG9yPEVHTGludD4gZWdsQ29udGV4dEF0dHJpYnV0ZXM7CisgICAgaWYgKG1f
aXNGb3JXZWJHTDIpIHsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9D
T05URVhUX0NMSUVOVF9WRVJTSU9OKTsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKDMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVu
ZChFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTik7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1
dGVzLmFwcGVuZCgyKTsKKyAgICAgICAgLy8gQU5HTEUgd2lsbCB1cGdyYWRlIHRoZSBjb250ZXh0
IHRvIEVTMyBhdXRvbWF0aWNhbGx5IHVubGVzcyB0aGlzIGlzIHNwZWNpZmllZC4KKyAgICAgICAg
ZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX09QRU5HTF9CQUNLV0FSRFNf
Q09NUEFUSUJMRV9BTkdMRSk7CisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfRkFMU0UpOworICAgIH0KKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NP
TlRFWFRfV0VCR0xfQ09NUEFUSUJJTElUWV9BTkdMRSk7CisgICAgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9UUlVFKTsKKworICAgIGlmIChzdHJzdHIoZGlzcGxheUV4dGVuc2lvbnMs
ICJFR0xfQU5HTEVfcG93ZXJfcHJlZmVyZW5jZSIpKSB7CisgICAgICAgIGVnbENvbnRleHRBdHRy
aWJ1dGVzLmFwcGVuZChFR0xfUE9XRVJfUFJFRkVSRU5DRV9BTkdMRSk7CisgICAgICAgIC8vIEVH
TF9MT1dfUE9XRVJfQU5HTEUgaXMgdGhlIGRlZmF1bHQuIENoYW5nZSB0bworICAgICAgICAvLyBF
R0xfSElHSF9QT1dFUl9BTkdMRSBpZiBkZXNpcmVkLgorICAgICAgICBlZ2xDb250ZXh0QXR0cmli
dXRlcy5hcHBlbmQoRUdMX0xPV19QT1dFUl9BTkdMRSk7CisgICAgfQorICAgIGVnbENvbnRleHRB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTk9ORSk7CisKKyAgICBtX2NvbnRleHRPYmogPSBFR0xfQ3Jl
YXRlQ29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29uZmlnT2JqLCBzaGFyZWRDb250ZXh0ID8gc3Rh
dGljX2Nhc3Q8RUdMQ29udGV4dD4oc2hhcmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKSA6IEVHTF9O
T19DT05URVhULCBlZ2xDb250ZXh0QXR0cmlidXRlcy5kYXRhKCkpOworICAgIGlmIChtX2NvbnRl
eHRPYmogPT0gRUdMX05PX0NPTlRFWFQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiRUdMQ29udGV4
dCBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
TE9HKFdlYkdMLCAiR290IEVHTENvbnRleHQiKTsKKworICAgIEVHTF9NYWtlQ3VycmVudChtX2Rp
c3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsK
KworICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICBnbDo6RW5hYmxlKEdyYXBoaWNzQ29u
dGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7CisKKyNpZiBQTEFURk9STShN
QUMpCisgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiByZXF1aXJlZEV4dGVuc2lvbnNbXSA9IHsK
KyAgICAgICAgIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIiwgLy8gRm9yIElPU3VyZmFjZS1i
YWNrZWQgdGV4dHVyZXMuCisgICAgICAgICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgi
LCAvLyBGb3IgY3JlYXRpbmcgdGhlIEVHTCBzdXJmYWNlIGZyb20gYW4gSU9TdXJmYWNlLgorICAg
IH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgocmVxdWly
ZWRFeHRlbnNpb25zKTsgKytpKSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cyhy
ZXF1aXJlZEV4dGVuc2lvbnNbaV0pKSB7CisgICAgICAgICAgICBMT0coV2ViR0wsICJNaXNzaW5n
IHJlcXVpcmVkIGV4dGVuc2lvbi4gJXMiLCByZXF1aXJlZEV4dGVuc2lvbnNbaV0pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFi
bGVkKHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSk7CisgICAgfQorCisgICAgRUdMRGV2aWNlRVhUIGRl
dmljZSA9IG51bGxwdHI7CisgICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJpYkVYVChtX2Rpc3BsYXlP
YmosIEVHTF9ERVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZkZXZpY2Up
KTsKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOworICAgIENHTFBpeGVs
Rm9ybWF0T2JqIHBpeGVsRm9ybWF0ID0gbnVsbHB0cjsKKyAgICBFR0xfUXVlcnlEZXZpY2VBdHRy
aWJFWFQoZGV2aWNlLCBFR0xfQ0dMX0NPTlRFWFRfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdM
QXR0cmliKj4oJmNnbENvbnRleHQpKTsKKyAgICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2
aWNlLCBFR0xfQ0dMX1BJWEVMX0ZPUk1BVF9BTkdMRSwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRy
aWIqPigmcGl4ZWxGb3JtYXQpKTsKKyAgICBhdXRvIGdwdUlEID0gKGhvc3RXaW5kb3cgJiYgaG9z
dFdpbmRvdy0+ZGlzcGxheUlEKCkpID8gZ3B1SURGb3JEaXNwbGF5KGhvc3RXaW5kb3ctPmRpc3Bs
YXlJRCgpKSA6IHByaW1hcnlHUFVJRCgpOworICAgIHNldEdQVUJ5UmVnaXN0cnlJRChjZ2xDb250
ZXh0LCBwaXhlbEZvcm1hdCwgZ3B1SUQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaG9zdFdp
bmRvdyk7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCisjZW5kaWYgLy8gI2VsaWYgVVNFKEFO
R0xFKQorCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisgICAgYXR0cnMgPSBjb250ZXh0QXR0
cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisK
KyAgICAvLyBDcmVhdGUgdGhlIFdlYkdMTGF5ZXIKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKKyAgICAgICAgbV93ZWJHTExheWVyID0gYWRvcHROUyhbW1dlYkdMTGF5ZXIgYWxsb2Nd
IGluaXRXaXRoR3JhcGhpY3NDb250ZXh0R0w6dGhpc10pOworI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgW21fd2ViR0xMYXllciBzZXROYW1lOkAiV2ViR0wgTGF5ZXIiXTsKKyNlbmRpZgorI2lmIFVT
RShBTkdMRSkKKyAgICAgICAgW21fd2ViR0xMYXllciBzZXRFR0xEaXNwbGF5Om1fZGlzcGxheU9i
aiBjb25maWc6bV9jb25maWdPYmpdOworI2VuZGlmCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUworCisjaWYgVVNFKE9QRU5HTCkKKyAgICBpZiAodXNlTXVsdGlzYW1wbGluZykKKyAgICAg
ICAgOjpnbEVuYWJsZShHTF9NVUxUSVNBTVBMRSk7CisjZW5kaWYKKworICAgIC8vIENyZWF0ZSB0
aGUgdGV4dHVyZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGZyYW1lYnVmZmVyLgorI2lmIFVT
RShPUEVOR0xfRVMpCisgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fdGV4dHVyZSk7Cisj
ZWxpZiBVU0UoT1BFTkdMKQorICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAg
ICAvLyBXZSBiaW5kIHRvIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCByYXRoZXIgdGhhbiBURVhU
VVJFXzJEIGJlY2F1c2UKKyAgICAvLyB0aGF0J3Mgd2hhdCBpcyByZXF1aXJlZCBmb3IgYSB0ZXh0
dXJlIGJhY2tlZCBieSBJT1N1cmZhY2UuCisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
UkVDVEFOR0xFX0VYVCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
X1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfRVhULCAwKTsKKworI2VsaWYgVVNFKEFOR0xFKQorCisgICAgR0xlbnVtIHRl
eHR1cmVUYXJnZXQgPSBHcmFwaGljc0NvbnRleHRHTDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldDsK
KworICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1
cmUodGV4dHVyZVRhcmdldCwgbV90ZXh0dXJlKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0
dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRl
eFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFy
Z2V0LCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2w6OkJpbmRU
ZXh0dXJlKHRleHR1cmVUYXJnZXQsIDApOworI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBjb25m
aWd1cmF0aW9uCisjZW5kaWYKKworI2lmIFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpCisg
ICAgLy8gQ3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgICAgOjpnbEdlbkZyYW1lYnVm
ZmVyc0VYVCgxLCAmbV9mYm8pOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7CisKKyAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9mYm87CisgICAg
aWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpKQor
ICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworCisgICAgLy8gSWYgbmVjZXNzYXJ5LCBjcmVhdGUgYW5vdGhlciBmcmFtZWJ1ZmZlciBmb3Ig
dGhlIG11bHRpc2FtcGxlIHJlc3VsdHMuCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykgeworICAg
ICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CisgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQorICAgICAgICAg
ICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgIH0KKyNlbGlmIFVTRShBTkdMRSkKKyAgICBnbDo6R2VuRnJhbWVidWZmZXJz
KDEsICZtX2Zibyk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKworICAgIGlmICghYXR0cnMuYW50
aWFsaWFzICYmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkKKyAgICAgICAgZ2w6Okdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAgIC8vIElmIG5l
Y2Vzc2FyeSwgY3JlYXRlIGFub3RoZXIgZnJhbWVidWZmZXIgZm9yIHRoZSBtdWx0aXNhbXBsZSBy
ZXN1bHRzLgorICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkdlbkZyYW1l
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX3N0YXRlLmJv
dW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRycy5zdGVuY2ls
IHx8IGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKworI2VuZGlmIC8vIFVTRShB
TkdMRSkKKworI2lmICFVU0UoQU5HTEUpCisgICAgLy8gQU5HTEUgc2hhZGVyIGNvbXBpbGVyIGlu
aXRpYWxpemF0aW9uLgorCisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwor
ICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisgICAgZ2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dEdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFY
X1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwor
ICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklU
UywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHRHTDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xF
UmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3YXlzIHNl
dCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMg
PSAxOworICAgIAorICAgIEdDM0RpbnQgcmFuZ2VbMl0sIHByZWNpc2lvbjsKKyAgICBnZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUiwgR3Jh
cGhpY3NDb250ZXh0R0w6OkhJR0hfRkxPQVQsIHJhbmdlLCAmcHJlY2lzaW9uKTsKKyAgICBBTkdM
RVJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAocmFuZ2VbMF0gfHwgcmFuZ2VbMV0g
fHwgcHJlY2lzaW9uKTsKKworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3Vy
Y2VzKTsKKyNlbmRpZiAvLyAhVVNFKEFOR0xFKQorICAgIAorI2lmIFVTRShPUEVOR0wpCisgICAg
OjpnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKyAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworI2Vu
ZGlmCisKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xDbGVhckNv
bG9yKDAsIDAsIDAsIDApOworI2VsaWYgVVNFKEFOR0xFKQorICAgIGdsOjpDbGVhckNvbG9yKDAs
IDAsIDAsIDApOworI2VuZGlmCisKKyAgICBMT0coV2ViR0wsICJDcmVhdGVkIGEgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wgKCVwKS4iLCB0aGlzKTsKK30KKworR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKKworICAg
IGlmIChtX2NvbnRleHRPYmopIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworI2lmIFVTRShPUEVOR0xfRVMpCisgICAg
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRl
eHQgKj4obV9jb250ZXh0T2JqKSByZW5kZXJidWZmZXJTdG9yYWdlOkdMX1JFTkRFUkJVRkZFUiBm
cm9tRHJhd2FibGU6bmlsXTsKKyAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1f
dGV4dHVyZSk7CisjZWxpZiBVU0UoT1BFTkdMKQorICAgICAgICBDR0xDb250ZXh0T2JqIGNnbENv
bnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopOworICAgICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dChjZ2xDb250ZXh0KTsKKyAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworI2VsaWYgVVNFKEFOR0xFKQorICAgICAgICBFR0xfTWFr
ZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIG1f
Y29udGV4dE9iaik7CisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsK
KyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYg
KGF0dHJzLmFudGlhbGlhcykgeworICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0cnMu
c3RlbmNpbCB8fCBhdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
ICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRl
cHRoKQorICAgICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCgxLCAmbV9mYm8pOworI2VsaWYgVVNFKEFOR0xFKQorICAgICAgICBpZiAoYXR0cnMu
YW50aWFsaWFzKSB7CisgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8
IGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGdsOjpEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAg
ICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgfQorICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Cisj
ZW5kaWYKKworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDowXTsKKyAgICAgICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0ICo+KG1fY29u
dGV4dE9iaikgcmVsZWFzZV07CisjZWxpZiBVU0UoT1BFTkdMKQorICAgICAgICBDR0xTZXRDdXJy
ZW50Q29udGV4dCgwKTsKKyAgICAgICAgQ0dMRGVzdHJveUNvbnRleHQoY2dsQ29udGV4dCk7Cisj
ZWxpZiBVU0UoQU5HTEUpCisgICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBF
R0xfRGVzdHJveUNvbnRleHQobV9kaXNwbGF5T2JqLCBtX2NvbnRleHRPYmopOworI2VuZGlmCisg
ICAgICAgIFttX3dlYkdMTGF5ZXIgc2V0Q29udGV4dDpudWxscHRyXTsKKyAgICB9CisKKyAgICBM
T0coV2ViR0wsICJEZXN0cm95ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRo
aXMpOworfQorCisjaWYgVVNFKE9QRU5HTF9FUykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUoR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBhIGNhbGwgdG8gc2V0
Qm91bmRzIGJlbG93IHRvIHVwZGF0ZSB0aGUgYmFja2luZyBzdG9yZSBzaXplIGJ1dCB3ZSBhbHNv
CisgICAgLy8gZG8gbm90IHdhbnQgdG8gY2xvYmJlciB0aGUgYm91bmRzIHNldCBkdXJpbmcgbGF5
b3V0LgorICAgIENHUmVjdCBwcmV2aW91c0JvdW5kcyA9IFttX3dlYkdMTGF5ZXIuZ2V0KCkgYm91
bmRzXTsKKworICAgIFttX3dlYkdMTGF5ZXIgc2V0Qm91bmRzOkNHUmVjdE1ha2UoMCwgMCwgd2lk
dGgsIGhlaWdodCldOworICAgIFttX3dlYkdMTGF5ZXIgc2V0T3BhcXVlOiFjb250ZXh0QXR0cmli
dXRlcygpLmFscGhhXTsKKworICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCAqPihtX2NvbnRl
eHRPYmopIHJlbmRlcmJ1ZmZlclN0b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21EcmF3YWJsZTpz
dGF0aWNfY2FzdDxpZDxFQUdMRHJhd2FibGU+PihtX3dlYkdMTGF5ZXIuZ2V0KCkpXTsKKworICAg
IFttX3dlYkdMTGF5ZXIgc2V0Qm91bmRzOnByZXZpb3VzQm91bmRzXTsKK30KKyNlbmRpZgorCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAg
IGlmICghbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBVU0UoT1BF
TkdMX0VTKQorICAgIGlmIChbRUFHTENvbnRleHQgY3VycmVudENvbnRleHRdICE9IG1fY29udGV4
dE9iaikKKyAgICAgICAgcmV0dXJuIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpzdGF0
aWNfY2FzdDxFQUdMQ29udGV4dCo+KG1fY29udGV4dE9iaildOworI2VsaWYgVVNFKE9QRU5HTCkK
KyAgICBDR0xDb250ZXh0T2JqIGN1cnJlbnRDb250ZXh0ID0gQ0dMR2V0Q3VycmVudENvbnRleHQo
KTsKKyAgICBpZiAoY3VycmVudENvbnRleHQgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1
cm4gQ0dMU2V0Q3VycmVudENvbnRleHQoc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250
ZXh0T2JqKSkgPT0ga0NHTE5vRXJyb3I7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgaWYgKEVHTF9H
ZXRDdXJyZW50Q29udGV4dCgpICE9IG1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJuIEVHTF9N
YWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
bV9jb250ZXh0T2JqKTsKKyNlbmRpZgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7CisgICAgaWYgKG1fZmFpbE5l
eHRTdGF0dXNDaGVjaykgeworICAgICAgICBMT0coV2ViR0wsICJQcmV0ZW5kaW5nIHRoZSBHUFUg
aGFzIHJlc2V0ICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7CisgICAgICAgIG1fZmFp
bE5leHRTdGF0dXNDaGVjayA9IGZhbHNlOworICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7Cisj
aWYgVVNFKE9QRU5HTCkKKyAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7CisjZWxpZiBV
U0UoT1BFTkdMX0VTKQorICAgICAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6MF07
CisjZWxpZiBVU0UoQU5HTEUpCisgICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmos
IEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworI2VuZGlm
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBPbmx5IGRvIHRoZSBjaGVjayBldmVy
eSBzdGF0dXNDaGVja1RocmVzaG9sZCBjYWxscy4KKyAgICBpZiAobV9zdGF0dXNDaGVja0NvdW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXR1c0NoZWNrQ291bnQgPSAobV9zdGF0dXND
aGVja0NvdW50ICsgMSkgJSBzdGF0dXNDaGVja1RocmVzaG9sZDsKKworICAgIEdMaW50IHJlc3Rh
cnRTdGF0dXMgPSAwOworI2lmIFVTRShPUEVOR0wpCisgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4ocGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TCgpKTsKKyAgICBDR0xHZXRQYXJhbWV0ZXIoY2dsQ29udGV4dCwga0NHTENQR1BVUmVzdGFydFN0
YXR1cywgJnJlc3RhcnRTdGF0dXMpOworICAgIGlmIChyZXN0YXJ0U3RhdHVzID09IGtDR0xDUEdQ
VVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgeworICAgICAgICBMT0coV2ViR0wsICJUaGUgR1BV
IGhhcyBibGFja2xpc3RlZCB1cyAoJXApLiBUZXJtaW5hdGluZy4iLCB0aGlzKTsKKyAgICAgICAg
ZXhpdChFWF9PU0VSUik7CisgICAgfQorICAgIGlmIChyZXN0YXJ0U3RhdHVzID09IGtDR0xDUEdQ
VVJlc3RhcnRTdGF0dXNDYXVzZWQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVGhlIEdQVSBoYXMg
cmVzZXQgdXMgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKKyAgICAgICAgZm9yY2VD
b250ZXh0TG9zdCgpOworICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKKyAgICB9Cisj
ZWxpZiBVU0UoT1BFTkdMX0VTKQorICAgIEVBR0xDb250ZXh0KiBjdXJyZW50Q29udGV4dCA9IHN0
YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4oUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKTsKKyAg
ICBbY3VycmVudENvbnRleHQgZ2V0UGFyYW1ldGVyOmtFQUdMQ1BHUFVSZXN0YXJ0U3RhdHVzIHRv
OiZyZXN0YXJ0U3RhdHVzXTsKKyAgICBpZiAocmVzdGFydFN0YXR1cyA9PSBrRUFHTENQR1BVUmVz
dGFydFN0YXR1c0NhdXNlZCB8fCByZXN0YXJ0U3RhdHVzID09IGtFQUdMQ1BHUFVSZXN0YXJ0U3Rh
dHVzQmxhY2tsaXN0ZWQpIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiVGhlIEdQVSBoYXMgZWl0aGVy
IHJlc2V0IG9yIGJsYWNrbGlzdGVkIHVzICglcCkuIExvc2UgdGhlIGNvbnRleHQuIiwgdGhpcyk7
CisgICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKKyAgICAgICAgW0VBR0xDb250ZXh0IHNldEN1
cnJlbnRDb250ZXh0OjBdOworICAgIH0KKyNlbGlmIFVTRShBTkdMRSkKKyAgICAvLyBGSVhNRTog
Y2hlY2sgdmlhIEtIUl9yb2J1c3RuZXNzLgorICAgIHJlc3RhcnRTdGF0dXMgPSAwOworI2VuZGlm
Cit9CisKKyNpZiBVU0UoT1BFTkdMX0VTKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlc2VudFJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQorICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyAgICA6OmdsRmx1c2goKTsKKyAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7CisgICAgW3N0YXRpY19jYXN0
PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKSBwcmVzZW50UmVuZGVyYnVmZmVyOkdMX1JFTkRF
UkJVRkZFUl07CisgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0Om5pbF07Cit9Cisj
ZW5kaWYKKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2VJT1N1cmZhY2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSU9T
dXJmYWNlUmVmIHN1cmZhY2UsIEdDM0R1aW50IHBsYW5lKQoreworI2lmIFVTRShPUEVOR0wpCisg
ICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4o
cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKTsKKyAgICByZXR1cm4ga0NHTE5vRXJyb3IgPT0g
Q0dMVGV4SW1hZ2VJT1N1cmZhY2UyRChjZ2xDb250ZXh0LCB0YXJnZXQsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHN1cmZhY2UsIHBsYW5lKTsKKyNlbGlmIFVT
RShPUEVOR0xfRVMpICYmICFQTEFURk9STShJT1NfRkFNSUxZX1NJTVVMQVRPUikKKyAgICByZXR1
cm4gW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0ICo+KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wo
KSkgdGV4SW1hZ2VJT1N1cmZhY2U6c3VyZmFjZSB0YXJnZXQ6dGFyZ2V0IGludGVybmFsRm9ybWF0
OmludGVybmFsRm9ybWF0IHdpZHRoOndpZHRoIGhlaWdodDpoZWlnaHQgZm9ybWF0OmZvcm1hdCB0
eXBlOnR5cGUgcGxhbmU6cGxhbmVdOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxGb3JtYXQpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0
aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGZvcm1hdCk7
CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShzdXJmYWNlKTsKKyAg
ICBVTlVTRURfUEFSQU0ocGxhbmUpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisj
aWYgVVNFKE9QRU5HTCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFsbG9jYXRlSU9T
dXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUgc2l6ZSkKK3sKKyAgICBMT0coV2ViR0wsICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUgYXQgJWQg
eCAlZC4gKCVwKSIsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgdGhpcyk7CisgICAgW21f
d2ViR0xMYXllciBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZVdpdGhTaXplOnNpemUgdXNp
bmdBbHBoYTpjb250ZXh0QXR0cmlidXRlcygpLmFscGhhXTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxh
eWVyKCkKK3sKKyAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRl
RnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkuICglcCkiLCB0aGlzKTsK
KyAgICBbbV93ZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2Vd
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVDR0xDb250ZXh0KCkK
K3sKKyAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKFdl
YkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3BsYXkgcmVjb25maWd1cmF0aW9uLiBD
YWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsKKworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIENHTFVwZGF0ZUNvbnRleHQoc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4o
bV9jb250ZXh0T2JqKSk7CisgICAgbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVID0g
dHJ1ZTsKK30KKworI2VuZGlmIC8vIFVTRShPUEVOR0wpCisKKyNpZiBVU0UoT1BFTkdMKSB8fCBV
U0UoQU5HTEUpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJp
bGl0eShib29sIGlzVmlzaWJsZSkKK3sKKyAgICBpZiAobV9wb3dlclByZWZlcmVuY2VVc2VkRm9y
Q3JlYXRpb24gPT0gR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3Jt
YW5jZSkgeworICAgICAgICBpZiAoaXNWaXNpYmxlKQorICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dFJlcXVpcmluZ0hp
Z2hQZXJmb3JtYW5jZSh0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dFJlcXVp
cmluZ0hpZ2hQZXJmb3JtYW5jZSh0aGlzKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gVVNFKE9QRU5H
TCkgfHwgVVNFKEFOR0xFKQorCisjaWYgVVNFKEFOR0xFKQorCisjaWYgUExBVEZPUk0oTUFDKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCgpCit7CisgICAg
aWYgKCFtX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhXZWJHTCwgIkRl
dGVjdGVkIGEgbXV4IHN3aXRjaCBvciBkaXNwbGF5IHJlY29uZmlndXJhdGlvbi4gQ2FsbCBDR0xV
cGRhdGVDb250ZXh0LiAoJXApIiwgdGhpcyk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKKyAgICBFR0xfUXVlcnlEaXNwbGF5
QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8
RUdMQXR0cmliKj4oJmRldmljZSkpOworICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51
bGxwdHI7CisgICAgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9DT05U
RVhUX0FOR0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZjZ2xDb250ZXh0KSk7CisK
KyAgICBDR0xVcGRhdGVDb250ZXh0KGNnbENvbnRleHQpOworICAgIG1faGFzU3dpdGNoZWRUb0hp
Z2hQZXJmb3JtYW5jZUdQVSA9IHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSBzaXplKQor
eworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZSBhdCAlZCB4ICVkLiAoJXApIiwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB0aGlzKTsKKyAgICBbbV93ZWJHTExheWVyIGFs
bG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6c2l6ZSB1c2luZ0FscGhhOmNvbnRl
eHRBdHRyaWJ1dGVzKCkuYWxwaGFdOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Cisj
ZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlRnJhbWVidWZm
ZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkKK3sKKyNpZiBIQVZFKElPU1VSRkFDRSkK
KyAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlRnJhbWVidWZm
ZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCkuICglcCkiLCB0aGlzKTsKKyAgICBbbV93
ZWJHTExheWVyIGJpbmRGcmFtZWJ1ZmZlclRvTmV4dEF2YWlsYWJsZVN1cmZhY2VdOworI2VuZGlm
Cit9CisjZW5kaWYgLy8gVVNFKEFOR0xFKQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0ZvcldlYkdMMjsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2ltdWxhdGVDb250ZXh0Q2hhbmdl
ZCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2Vy
KCkudXBkYXRlQWxsQ29udGV4dHMoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YWxsb3dPZmZsaW5lUmVuZGVyZXJzKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShNQUMpICYm
IEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lORykKKyAgICAvLyBXaGVuIFdp
bmRvd1NlcnZlciBhY2Nlc3MgaXMgYmxvY2tlZCBpbiB0aGUgV2ViUHJvY2VzcywgdGhlcmUgaXMg
bm8gd2F5CisgICAgLy8gZm9yIE9wZW5HTCB0byBkZWNpZGUgd2hpY2ggR1BVIGlzIGNvbm5lY3Rl
ZCB0byBhIGRpc3BsYXkgKG9ubGluZS9vZmZsaW5lKS4KKyAgICAvLyBPcGVuR0wgd2lsbCB0aGVu
IGNvbnNpZGVyIGFsbCBHUFVzLCBvciByZW5kZXJlcnMsIGFzIG9mZmxpbmUsIHdoaWNoIG1lYW5z
CisgICAgLy8gYWxsIG9mZmxpbmUgcmVuZGVyZXJzIG5lZWQgdG8gYmUgY29uc2lkZXJlZCB3aGVu
IGZpbmRpbmcgYSBwaXhlbCBmb3JtYXQuCisgICAgLy8gSW4gV2ViS2l0IGxlZ2FjeSwgdGhlcmUg
d2lsbCBzdGlsbCBiZSBhIFdpbmRvd1NlcnZlciBjb25uZWN0aW9uLCBhbmQKKyAgICAvLyBtX2Rp
c3BsYXlNYXNrIHdpbGwgbm90IGJlIHNldCBpbiB0aGlzIGNhc2UuCisgICAgaWYgKHByaW1hcnlP
cGVuR0xEaXNwbGF5TWFzaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbGlmIFBMQVRGT1JN
KE1BQ0NBVEFMWVNUKQorICAgIC8vIEZJWE1FOiA8cmRhcjovLzUzMDYyNzk0PiBXZSdyZSB2ZXJ5
IGluY29uc2lzdGVudCBhYm91dCBXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lORworICAg
IC8vIGFuZCBNQUMvTUFDQ0FUQUxZU1QgYW5kIE9QRU5HTC9PUEVOR0xFUy4KKyAgICByZXR1cm4g
dHJ1ZTsKKyNlbmRpZgorICAgICAgICAKKyNpZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wp
CisgICAgaWYgKGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBQTEFURk9STShNQUMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1E
aXNwbGF5SUQgZGlzcGxheUlEKQoreworICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgICAgICBy
ZXR1cm47CisjaWYgVVNFKEFOR0xFKQorICAgIGlmICghbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZv
cm1hbmNlR1BVKSB7CisgICAgICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBudWxscHRyOworICAg
ICAgICBFR0xfUXVlcnlEaXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9F
WFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOworICAgICAgICBDR0xD
b250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOworICAgICAgICBDR0xQaXhlbEZvcm1hdE9i
aiBwaXhlbEZvcm1hdCA9IG51bGxwdHI7CisgICAgICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVY
VChkZXZpY2UsIEVHTF9DR0xfQ09OVEVYVF9BTkdMRSwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRy
aWIqPigmY2dsQ29udGV4dCkpOworICAgICAgICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2
aWNlLCBFR0xfQ0dMX1BJWEVMX0ZPUk1BVF9BTkdMRSwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRy
aWIqPigmcGl4ZWxGb3JtYXQpKTsKKyAgICAgICAgc2V0R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRl
eHQsIHBpeGVsRm9ybWF0LCBncHVJREZvckRpc3BsYXkoZGlzcGxheUlEKSk7CisgICAgfQorI2Vs
c2UKKyNpZiBVU0UoT1BFTkdMKQorICAgIGlmICghbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1h
bmNlR1BVKSB7CisgICAgICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0
PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9iaik7CisgICAgICAgIHNldEdQVUJ5UmVnaXN0cnlJ
RChjZ2xDb250ZXh0LCBDR0xHZXRQaXhlbEZvcm1hdChjZ2xDb250ZXh0KSwgZ3B1SURGb3JEaXNw
bGF5KGRpc3BsYXlJRCkpOworICAgIH0KKyNlbmRpZgorI2VuZGlmIC8vIFVTRShBTkdMRSkKK30K
KyNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBkYWUxODdkYTY1ZDIwYjI4MDZmMmJkMzllOGMzYjA2
OTM5N2M0YmFiLi5jMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBIQVZFKElPU1VSRkFDRSkKIAotI2ltcG9ydCAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgog
I2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaApp
bmRleCBlNmM0NWZiNTcwNWQ2MjA0OWU0YmIxOTc2ZWRhODgzMDc5Yjg3MjMzLi5mNzY3OTA5NzQ3
ZmVmZjQ4NzE0YjFiYWQwOWYxMzJiZGViOGJmNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogfQogCiBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgpAQCAtNDYsNyArNDYsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgogI2Vycm9yIFVuc3VwcG9ydGVkIHBsYXRmb3Jt
CiAjZW5kaWYKIHsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogX2NvbnRleHQ7Cisg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIF9jb250ZXh0OwogICAgIGZsb2F0
IF9kZXZpY2VQaXhlbFJhdGlvOwogI2lmIEhBVkUoSU9TVVJGQUNFKSAmJiAoVVNFKE9QRU5HTCkg
fHwgVVNFKEFOR0xFKSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBf
Y29udGVudHNCdWZmZXI7CkBAIC02NSw5ICs2NSw5IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0JFR0lOCiAjZW5kaWYKIH0KIAotQHByb3BlcnR5IChub25hdG9taWMpIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0OworQHByb3BlcnR5IChub25hdG9taWMpIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0OwogCi0tIChpZClpbml0V2l0aEdy
YXBoaWNzQ29udGV4dDNEOihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKKy0g
KGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0R0w6KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKiljb250ZXh0OwogCiAtIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENv
bG9yU3BhY2U6KENHQ29sb3JTcGFjZVJlZiljb2xvclNwYWNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQppbmRleCA3NTg4
ZjkxMTVjNWMzOGViOTg2MTA1MGJlYjI2MzJjZTNiNDBmMGQ5Li4yOTIwMTZhYzE0ZWFjMmFhOGZl
NGQxNWQyOGY5NGIwMmUyZDY3NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KQEAgLTI4LDggKzI4LDggQEAKICNpZiBF
TkFCTEUoV0VCR0wpCiAjaW1wb3J0ICJXZWJHTExheWVyLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2ltcG9ydCAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBv
cnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IgpAQCAtNjEsNyArNjEsNyBAQAogCiBAc3ludGhlc2l6ZSBjb250ZXh0PV9jb250ZXh0OwogCi0t
KGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Kiljb250ZXh0CistKGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0R0w6KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKiljb250ZXh0CiB7CiAgICAgX2NvbnRleHQgPSBjb250ZXh0Owog
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIHZvaWQg
ZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICNpZiBVU0UoT1BFTkdMKQotICAgIENHTENvbnRleHRP
YmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KF9jb250ZXh0LT5wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9
IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMKCkpOwogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENvbnRleHQpOwogCiAgICAg
UmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gaW1hZ2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsK
QEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZv
aWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgICAgICBpZiAoX2xhdGNoZWRQYnVmZmVy
KSB7CiAKICAgICAgICAgICAgIEdDM0RlbnVtIHRleHR1cmUgPSBfY29udGV4dC0+cGxhdGZvcm1U
ZXh0dXJlKCk7Ci0gICAgICAgICAgICBnbDo6QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OklPU3VyZmFjZVRleHR1cmVUYXJnZXQsIHRleHR1cmUpOworICAgICAgICAgICAgZ2w6OkJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LCB0ZXh0dXJl
KTsKICAgICAgICAgICAgIGlmICghRUdMX1JlbGVhc2VUZXhJbWFnZShfZWdsRGlzcGxheSwgX2xh
dGNoZWRQYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IHJlcG9ydCBlcnJvci4KICAgICAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAt
MjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAq
ZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgICAgIEVHTF9XSURUSCwgc2l6ZS53aWR0aCgp
LAogICAgICAgICBFR0xfSEVJR0hULCBzaXplLmhlaWdodCgpLAogICAgICAgICBFR0xfSU9TVVJG
QUNFX1BMQU5FX0FOR0xFLCAwLAotICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsIEdyYXBoaWNz
Q29udGV4dDNEOjpFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LAorICAgICAgICBFR0xfVEVYVFVS
RV9UQVJHRVQsIEdyYXBoaWNzQ29udGV4dEdMOjpFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LAog
ICAgICAgICBFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUsIHVzaW5nQWxwaGEgPyBH
TF9CR1JBX0VYVCA6IEdMX1JHQiwKICAgICAgICAgRUdMX1RFWFRVUkVfRk9STUFULCBFR0xfVEVY
VFVSRV9SR0JBLAogICAgICAgICBFR0xfVEVYVFVSRV9UWVBFX0FOR0xFLCBHTF9VTlNJR05FRF9C
WVRFLApAQCAtMjUwLDEzICsyNTAsMTMgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBj
b25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICBHQzNEZW51bSBpbnRlcm5h
bEZvcm1hdCA9IF91c2luZ0FscGhhID8gR0xfUkdCQSA6IEdMX1JHQjsKIAogICAgIC8vIExpbmsg
dGhlIElPU3VyZmFjZSB0byB0aGUgdGV4dHVyZS4KLSAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRl
eHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihfY29udGV4dC0+cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpKTsKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2Fz
dDxDR0xDb250ZXh0T2JqPihfY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKTsK
ICAgICBDR0xFcnJvciBlcnJvciA9IENHTFRleEltYWdlSU9TdXJmYWNlMkQoY2dsQ29udGV4dCwg
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBpbnRlcm5hbEZvcm1hdCwgX2J1ZmZlclNpemUud2lk
dGgoKSwgX2J1ZmZlclNpemUuaGVpZ2h0KCksIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84Xzhf
OF84X1JFViwgaW9TdXJmYWNlLCAwKTsKICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJvciA9
PSBrQ0dMTm9FcnJvcik7CiAjZWxpZiBVU0UoQU5HTEUpCiAgICAgR0MzRGVudW0gdGV4dHVyZSA9
IF9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsKIAotICAgIGdsOjpCaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldCwgdGV4dHVyZSk7CisgICAgZ2w6
OkJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LCB0
ZXh0dXJlKTsKIAogICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKICAgICAgICAgaWYgKCFFR0xf
UmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JV
RkZFUikpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vR3JhcGhpY3NDb250ZXh0M0RORU9OLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jcHUvYXJtL0dyYXBoaWNzQ29udGV4dDNETkVPTi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjMDQzZmVkZDRhOWE2MmJlZWU1Y2I4YjQ1MGQ4NDk3NmUzZGM2ZGE1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vR3JhcGhpY3NDb250ZXh0M0RORU9OLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
YWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RORU9OX2gKLSNkZWZpbmUgR3Jh
cGhpY3NDb250ZXh0M0RORU9OX2gKLQotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQot
I2luY2x1ZGUgPGFybV9uZW9uLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNl
IFNJTUQgewotCi1BTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0JBMTZMaXR0bGVU
b1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90KiYgZGVzdGluYXRpb24sIHVu
c2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17Ci0gICAgdW5zaWduZWQgY29tcG9uZW50c1BlclJvdyA9
IHBpeGVsc1BlclJvdyAqIDQ7Ci0gICAgdW5zaWduZWQgdGFpbENvbXBvbmVudHMgPSBjb21wb25l
bnRzUGVyUm93ICUgMTY7Ci0gICAgdW5zaWduZWQgY29tcG9uZW50c1NpemUgPSBjb21wb25lbnRz
UGVyUm93IC0gdGFpbENvbXBvbmVudHM7Ci0gICAgY29uc3QgdWludDhfdCogc3JjID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAxNikgewotICAgICAgICB1aW50OHgxNngy
X3QgY29tcG9uZW50cyA9IHZsZDJxX3U4KHNyYyArIGkgKiAyKTsKLSAgICAgICAgdnN0MXFfdTgo
ZGVzdGluYXRpb24gKyBpLCBjb21wb25lbnRzLnZhbFsxXSk7Ci0gICAgfQotCi0gICAgc291cmNl
ICs9IGNvbXBvbmVudHNTaXplOwotICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOwot
ICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFja09uZVJvd09mUkdCMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYg
c291cmNlLCB1aW50OF90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17
Ci0gICAgdW5zaWduZWQgY29tcG9uZW50c1BlclJvdyA9IHBpeGVsc1BlclJvdyAqIDM7Ci0gICAg
dW5zaWduZWQgdGFpbENvbXBvbmVudHMgPSBjb21wb25lbnRzUGVyUm93ICUgMjQ7Ci0gICAgdW5z
aWduZWQgY29tcG9uZW50c1NpemUgPSBjb21wb25lbnRzUGVyUm93IC0gdGFpbENvbXBvbmVudHM7
Ci0KLSAgICB1aW50OHg4X3QgY29tcG9uZW50QSA9IHZkdXBfbl91OCgweEZGKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMjQpIHsKLSAgICAgICAg
dWludDE2eDh4M190IFJHQjE2ID0gdmxkM3FfdTE2KHNvdXJjZSArIGkpOwotICAgICAgICB1aW50
OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoUkdCMTYudmFsWzBdLCA4
KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3Ux
NihSR0IxNi52YWxbMV0sIDgpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1v
dm5fdTE2KHZzaHJxX25fdTE2KFJHQjE2LnZhbFsyXSwgOCkpOwotICAgICAgICB1aW50OHg4eDRf
dCBSR0JBOCA9IHt7Y29tcG9uZW50UiwgY29tcG9uZW50RywgY29tcG9uZW50QiwgY29tcG9uZW50
QX19OwotICAgICAgICB2c3Q0X3U4KGRlc3RpbmF0aW9uLCBSR0JBOCk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uICs9IDMyOwotICAgIH0KLQotICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKLSAg
ICBwaXhlbHNQZXJSb3cgPSB0YWlsQ29tcG9uZW50cyAvIDM7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBz
b3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsK
LSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1
bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKLSAgICB1bnNp
Z25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikg
ewotICAgICAgICB1aW50MTZ4OHg0X3QgQVJHQjE2ID0gdmxkNHFfdTE2KHNvdXJjZSArIGkpOwot
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QSA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJH
QjE2LnZhbFswXSwgOCkpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91
MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFsxXSwgOCkpOwotICAgICAgICB1aW50OHg4X3QgY29t
cG9uZW50RyA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFsyXSwgOCkpOwotICAg
ICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2
LnZhbFszXSwgOCkpOwotICAgICAgICB1aW50OHg4eDRfdCBSR0JBOCA9IHt7Y29tcG9uZW50Uiwg
Y29tcG9uZW50RywgY29tcG9uZW50QiwgY29tcG9uZW50QX19OwotICAgICAgICB2c3Q0X3U4KGRl
c3RpbmF0aW9uICsgaSwgUkdCQTgpOwotICAgIH0KLQotICAgIHNvdXJjZSArPSBjb21wb25lbnRz
U2l6ZTsKLSAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZTsKLSAgICBwaXhlbHNQZXJS
b3cgPSB0YWlsQ29tcG9uZW50cyAvIDQ7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tP
bmVSb3dPZkJHUkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4
X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25l
ZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0YWls
Q29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKLSAgICB1bnNpZ25lZCBjb21wb25l
bnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikgewotICAgICAgICB1
aW50MTZ4OHg0X3QgQVJHQjE2ID0gdmxkNHFfdTE2KHNvdXJjZSArIGkpOwotICAgICAgICB1aW50
OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFswXSwg
OCkpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZxbW92bl91MTYodnNocnFfbl91
MTYoQVJHQjE2LnZhbFsxXSwgOCkpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZx
bW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFsyXSwgOCkpOwotICAgICAgICB1aW50OHg4
X3QgY29tcG9uZW50QSA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFszXSwgOCkp
OwotICAgICAgICB1aW50OHg4eDRfdCBSR0JBOCA9IHt7Y29tcG9uZW50UiwgY29tcG9uZW50Rywg
Y29tcG9uZW50QiwgY29tcG9uZW50QX19OwotICAgICAgICB2c3Q0X3U4KGRlc3RpbmF0aW9uICsg
aSwgUkdCQTgpOwotICAgIH0KLQotICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKLSAgICBk
ZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZTsKLSAgICBwaXhlbHNQZXJSb3cgPSB0YWlsQ29t
cG9uZW50cyAvIDQ7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkE0
NDQ0VG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQotewotICAgIHVuc2lnbmVkIHRhaWxQaXhlbHMgPSBw
aXhlbHNQZXJSb3cgJSA4OwotICAgIHVuc2lnbmVkIHBpeGVsU2l6ZSA9IHBpeGVsc1BlclJvdyAt
IHRhaWxQaXhlbHM7Ci0KLSAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MGYgPSB2ZHVwcV9uX3Ux
NigweDBGKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxTaXplOyBpICs9IDgp
IHsKLSAgICAgICAgdWludDE2eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3UxNihzb3VyY2UgKyBp
KTsKLQotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91
MTYoZWlnaHRQaXhlbHMsIDEyKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFt
b3ZuX3UxNih2YW5kcV91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDgpLCBpbW1lZGlhdGUw
eDBmKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2YW5kcV91
MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDQpLCBpbW1lZGlhdGUweDBmKSk7Ci0gICAgICAg
IHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMs
IGltbWVkaWF0ZTB4MGYpKTsKLQotICAgICAgICBjb21wb25lbnRSID0gdm9ycl91OCh2c2hsX25f
dTgoY29tcG9uZW50UiwgNCksIGNvbXBvbmVudFIpOwotICAgICAgICBjb21wb25lbnRHID0gdm9y
cl91OCh2c2hsX25fdTgoY29tcG9uZW50RywgNCksIGNvbXBvbmVudEcpOwotICAgICAgICBjb21w
b25lbnRCID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50QiwgNCksIGNvbXBvbmVudEIpOwot
ICAgICAgICBjb21wb25lbnRBID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50QSwgNCksIGNv
bXBvbmVudEEpOwotCi0gICAgICAgIHVpbnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21w
b25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZz
dDRfdTgoZGVzdGluYXRpb24sIGRlc3RDb21wb25lbnRzKTsKLSAgICAgICAgZGVzdGluYXRpb24g
Kz0gMzI7Ci0gICAgfQotCi0gICAgc291cmNlICs9IHBpeGVsU2l6ZTsKLSAgICBwaXhlbHNQZXJS
b3cgPSB0YWlsUGl4ZWxzOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdC
QThUb1Vuc2lnbmVkU2hvcnQ0NDQ0KGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIHVpbnQxNl90KiYg
ZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17Ci0gICAgdW5zaWduZWQgY29t
cG9uZW50c1BlclJvdyA9IHBpeGVsc1BlclJvdyAqIDQ7Ci0gICAgdW5zaWduZWQgdGFpbENvbXBv
bmVudHMgPSBjb21wb25lbnRzUGVyUm93ICUgMzI7Ci0gICAgdW5zaWduZWQgY29tcG9uZW50c1Np
emUgPSBjb21wb25lbnRzUGVyUm93IC0gdGFpbENvbXBvbmVudHM7Ci0KLSAgICB1aW50OF90KiBk
c3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbik7Ci0gICAgdWludDh4
OF90IGltbWVkaWF0ZTB4ZjAgPSB2ZHVwX25fdTgoMHhGMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7Ci0gICAgICAgIHVpbnQ4eDh4NF90
IFJHQkE4ID0gdmxkNF91OChzb3VyY2UgKyBpKTsKLQotICAgICAgICB1aW50OHg4X3QgY29tcG9u
ZW50UiA9IHZhbmRfdTgoUkdCQTgudmFsWzBdLCBpbW1lZGlhdGUweGYwKTsKLSAgICAgICAgdWlu
dDh4OF90IGNvbXBvbmVudEcgPSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbMV0sIGltbWVk
aWF0ZTB4ZjApLCA0KTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2YW5kX3U4KFJH
QkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhmMCk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRB
ID0gdnNocl9uX3U4KHZhbmRfdTgoUkdCQTgudmFsWzNdLCBpbW1lZGlhdGUweGYwKSwgNCk7Ci0K
LSAgICAgICAgdWludDh4OHgyX3QgUkdCQTQ7Ci0gICAgICAgIFJHQkE0LnZhbFswXSA9IHZvcnJf
dTgoY29tcG9uZW50QiwgY29tcG9uZW50QSk7Ci0gICAgICAgIFJHQkE0LnZhbFsxXSA9IHZvcnJf
dTgoY29tcG9uZW50UiwgY29tcG9uZW50Ryk7Ci0gICAgICAgIHZzdDJfdTgoZHN0LCBSR0JBNCk7
Ci0gICAgICAgIGRzdCArPSAxNjsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gY29tcG9uZW50c1Np
emU7Ci0gICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemUgLyA0OwotICAgIHBpeGVsc1Bl
clJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFj
a09uZVJvd09mUkdCQTU1NTFUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90
KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17Ci0gICAgdW5zaWduZWQg
dGFpbFBpeGVscyA9IHBpeGVsc1BlclJvdyAlIDg7Ci0gICAgdW5zaWduZWQgcGl4ZWxTaXplID0g
cGl4ZWxzUGVyUm93IC0gdGFpbFBpeGVsczsKLQotICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweDcg
PSB2ZHVwX25fdTgoMHg3KTsKLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmZiA9IHZkdXBfbl91
OCgweEZGKTsKLSAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MWYgPSB2ZHVwcV9uX3UxNigweDFG
KTsKLSAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MSA9IHZkdXBxX25fdTE2KDB4MSk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxTaXplOyBpICs9IDgpIHsKLSAgICAgICAg
dWludDE2eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3UxNihzb3VyY2UgKyBpKTsKLQotICAgICAg
ICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoZWlnaHRQaXhl
bHMsIDExKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2YW5k
cV91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDYpLCBpbW1lZGlhdGUweDFmKSk7Ci0gICAg
ICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2YW5kcV91MTYodnNocnFfbl91
MTYoZWlnaHRQaXhlbHMsIDEpLCBpbW1lZGlhdGUweDFmKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBj
b21wb25lbnRBID0gdnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMsIGltbWVkaWF0ZTB4
MSkpOwotCi0gICAgICAgIGNvbXBvbmVudFIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRS
LCAzKSwgdmFuZF91OChjb21wb25lbnRSLCBpbW1lZGlhdGUweDcpKTsKLSAgICAgICAgY29tcG9u
ZW50RyA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudEcsIDMpLCB2YW5kX3U4KGNvbXBvbmVu
dEcsIGltbWVkaWF0ZTB4NykpOwotICAgICAgICBjb21wb25lbnRCID0gdm9ycl91OCh2c2hsX25f
dTgoY29tcG9uZW50QiwgMyksIHZhbmRfdTgoY29tcG9uZW50QiwgaW1tZWRpYXRlMHg3KSk7Ci0g
ICAgICAgIGNvbXBvbmVudEEgPSB2bXVsX3U4KGNvbXBvbmVudEEsIGltbWVkaWF0ZTB4ZmYpOwot
Ci0gICAgICAgIHVpbnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21wb25lbnRSLCBjb21w
b25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGlu
YXRpb24sIGRlc3RDb21wb25lbnRzKTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7Ci0gICAg
fQotCi0gICAgc291cmNlICs9IHBpeGVsU2l6ZTsKLSAgICBwaXhlbHNQZXJSb3cgPSB0YWlsUGl4
ZWxzOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVk
U2hvcnQ1NTUxKGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIHVpbnQxNl90KiYgZGVzdGluYXRpb24s
IHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17Ci0gICAgdW5zaWduZWQgY29tcG9uZW50c1BlclJv
dyA9IHBpeGVsc1BlclJvdyAqIDQ7Ci0gICAgdW5zaWduZWQgdGFpbENvbXBvbmVudHMgPSBjb21w
b25lbnRzUGVyUm93ICUgMzI7Ci0gICAgdW5zaWduZWQgY29tcG9uZW50c1NpemUgPSBjb21wb25l
bnRzUGVyUm93IC0gdGFpbENvbXBvbmVudHM7Ci0KLSAgICB1aW50OF90KiBkc3QgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbik7Ci0KLSAgICB1aW50OHg4X3QgaW1tZWRp
YXRlMHhmOCA9IHZkdXBfbl91OCgweEY4KTsKLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgxOCA9
IHZkdXBfbl91OCgweDE4KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50
c1NpemU7IGkgKz0gMzIpIHsKLSAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNv
dXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JB
OC52YWxbMF0sIGltbWVkaWF0ZTB4ZjgpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RzNi
aXQgPSB2c2hyX25fdTgoUkdCQTgudmFsWzFdLCA1KTsKLQotICAgICAgICB1aW50OHg4X3QgY29t
cG9uZW50RzJiaXQgPSB2c2hsX25fdTgodmFuZF91OChSR0JBOC52YWxbMV0sIGltbWVkaWF0ZTB4
MTgpLCAzKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2c2hyX25fdTgodmFuZF91
OChSR0JBOC52YWxbMl0sIGltbWVkaWF0ZTB4ZjgpLCAyKTsKLSAgICAgICAgdWludDh4OF90IGNv
bXBvbmVudEEgPSB2c2hyX25fdTgoUkdCQTgudmFsWzNdLCA3KTsKLQotICAgICAgICB1aW50OHg4
eDJfdCBSR0JBNTU1MTsKLSAgICAgICAgUkdCQTU1NTEudmFsWzBdID0gdm9ycl91OCh2b3JyX3U4
KGNvbXBvbmVudEcyYml0LCBjb21wb25lbnRCKSwgY29tcG9uZW50QSk7Ci0gICAgICAgIFJHQkE1
NTUxLnZhbFsxXSA9IHZvcnJfdTgoY29tcG9uZW50UiwgY29tcG9uZW50RzNiaXQpOwotICAgICAg
ICB2c3QyX3U4KGRzdCwgUkdCQTU1NTEpOwotICAgICAgICBkc3QgKz0gMTY7Ci0gICAgfQotCi0g
ICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOwotICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVu
dHNTaXplIC8gNDsKLSAgICBwaXhlbHNQZXJSb3cgPSB0YWlsQ29tcG9uZW50cyAvIDQ7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQjU2NVRvUkdCQTgoY29uc3QgdWlu
dDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1Bl
clJvdykKLXsKLSAgICB1bnNpZ25lZCB0YWlsUGl4ZWxzID0gcGl4ZWxzUGVyUm93ICUgODsKLSAg
ICB1bnNpZ25lZCBwaXhlbFNpemUgPSBwaXhlbHNQZXJSb3cgLSB0YWlsUGl4ZWxzOwotCi0gICAg
dWludDE2eDhfdCBpbW1lZGlhdGUweDNmID0gdmR1cHFfbl91MTYoMHgzRik7Ci0gICAgdWludDE2
eDhfdCBpbW1lZGlhdGUweDFmID0gdmR1cHFfbl91MTYoMHgxRik7Ci0gICAgdWludDh4OF90IGlt
bWVkaWF0ZTB4MyA9IHZkdXBfbl91OCgweDMpOwotICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweDcg
PSB2ZHVwX25fdTgoMHg3KTsKLQotICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdmR1cF9uX3U4
KDB4RkYpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsU2l6ZTsgaSArPSA4
KSB7Ci0gICAgICAgIHVpbnQxNng4X3QgZWlnaHRQaXhlbHMgPSB2bGQxcV91MTYoc291cmNlICsg
aSk7Ci0KLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudFIgPSB2cW1vdm5fdTE2KHZzaHJxX25f
dTE2KGVpZ2h0UGl4ZWxzLCAxMSkpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZx
bW92bl91MTYodmFuZHFfdTE2KHZzaHJxX25fdTE2KGVpZ2h0UGl4ZWxzLCA1KSwgaW1tZWRpYXRl
MHgzZikpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodmFuZHFf
dTE2KGVpZ2h0UGl4ZWxzLCBpbW1lZGlhdGUweDFmKSk7Ci0KLSAgICAgICAgY29tcG9uZW50UiA9
IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudFIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudFIsIGlt
bWVkaWF0ZTB4NykpOwotICAgICAgICBjb21wb25lbnRHID0gdm9ycl91OCh2c2hsX25fdTgoY29t
cG9uZW50RywgMiksIHZhbmRfdTgoY29tcG9uZW50RywgaW1tZWRpYXRlMHgzKSk7Ci0gICAgICAg
IGNvbXBvbmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCAzKSwgdmFuZF91OChj
b21wb25lbnRCLCBpbW1lZGlhdGUweDcpKTsKLQotICAgICAgICB1aW50OHg4eDRfdCBkZXN0Q29t
cG9uZW50cyA9IHt7Y29tcG9uZW50UiwgY29tcG9uZW50RywgY29tcG9uZW50QiwgY29tcG9uZW50
QX19OwotICAgICAgICB2c3Q0X3U4KGRlc3RpbmF0aW9uLCBkZXN0Q29tcG9uZW50cyk7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uICs9IDMyOwotICAgIH0KLQotICAgIHNvdXJjZSArPSBwaXhlbFNpemU7
Ci0gICAgcGl4ZWxzUGVyUm93ID0gdGFpbFBpeGVsczsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IHBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1KGNvbnN0IHVpbnQ4X3QqJiBzb3Vy
Y2UsIHVpbnQxNl90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17Ci0g
ICAgdW5zaWduZWQgY29tcG9uZW50c1BlclJvdyA9IHBpeGVsc1BlclJvdyAqIDQ7Ci0gICAgdW5z
aWduZWQgdGFpbENvbXBvbmVudHMgPSBjb21wb25lbnRzUGVyUm93ICUgMzI7Ci0gICAgdW5zaWdu
ZWQgY29tcG9uZW50c1NpemUgPSBjb21wb25lbnRzUGVyUm93IC0gdGFpbENvbXBvbmVudHM7Ci0g
ICAgdWludDhfdCogZHN0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb24p
OwotCi0gICAgdWludDh4OF90IGltbWVkaWF0ZTB4ZjggPSB2ZHVwX25fdTgoMHhGOCk7Ci0gICAg
dWludDh4OF90IGltbWVkaWF0ZTB4MWMgPSB2ZHVwX25fdTgoMHgxQyk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7Ci0gICAgICAgIHVpbnQ4
eDh4NF90IFJHQkE4ID0gdmxkNF91OChzb3VyY2UgKyBpKTsKLQotICAgICAgICB1aW50OHg4X3Qg
Y29tcG9uZW50UiA9IHZhbmRfdTgoUkdCQTgudmFsWzBdLCBpbW1lZGlhdGUweGY4KTsKLSAgICAg
ICAgdWludDh4OF90IGNvbXBvbmVudEdMZWZ0ID0gdnNocl9uX3U4KFJHQkE4LnZhbFsxXSwgNSk7
Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHUmlnaHQgPSB2c2hsX25fdTgodmFuZF91OChS
R0JBOC52YWxbMV0sIGltbWVkaWF0ZTB4MWMpLCAzKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBv
bmVudEIgPSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbMl0sIGltbWVkaWF0ZTB4ZjgpLCAz
KTsKLQotICAgICAgICB1aW50OHg4eDJfdCBSR0I1NjU7Ci0gICAgICAgIFJHQjU2NS52YWxbMF0g
PSB2b3JyX3U4KGNvbXBvbmVudEdSaWdodCwgY29tcG9uZW50Qik7Ci0gICAgICAgIFJHQjU2NS52
YWxbMV0gPSB2b3JyX3U4KGNvbXBvbmVudFIsIGNvbXBvbmVudEdMZWZ0KTsKLSAgICAgICAgdnN0
Ml91OChkc3QsIFJHQjU2NSk7Ci0gICAgICAgIGRzdCArPSAxNjsKLSAgICB9Ci0KLSAgICBzb3Vy
Y2UgKz0gY29tcG9uZW50c1NpemU7Ci0gICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemUg
LyA0OwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgU0lNRAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0KLSNlbmRpZiAvLyBHcmFwaGljc0NvbnRleHQzRE5FT05f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9H
cmFwaGljc0NvbnRleHRHTE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NwdS9hcm0vR3JhcGhpY3NDb250ZXh0R0xORU9OLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk5YWM0NDRlMTlk
NDM2Y2UyYWFhNTRjYWM5ZGMwMDdjNDllNmJlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vR3JhcGhpY3NDb250ZXh0R0xORU9OLmgK
QEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR2Fib3IgUmFwY3Nh
bnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKworI2luY2x1
ZGUgPGFybV9uZW9uLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFNJTUQg
eworCitBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0JBMTZMaXR0bGVUb1JHQkE4
KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVk
JiBwaXhlbHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgY29tcG9uZW50c1BlclJvdyA9IHBpeGVs
c1BlclJvdyAqIDQ7CisgICAgdW5zaWduZWQgdGFpbENvbXBvbmVudHMgPSBjb21wb25lbnRzUGVy
Um93ICUgMTY7CisgICAgdW5zaWduZWQgY29tcG9uZW50c1NpemUgPSBjb21wb25lbnRzUGVyUm93
IC0gdGFpbENvbXBvbmVudHM7CisgICAgY29uc3QgdWludDhfdCogc3JjID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90Kj4oc291cmNlKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAxNikgeworICAgICAgICB1aW50OHgxNngyX3QgY29t
cG9uZW50cyA9IHZsZDJxX3U4KHNyYyArIGkgKiAyKTsKKyAgICAgICAgdnN0MXFfdTgoZGVzdGlu
YXRpb24gKyBpLCBjb21wb25lbnRzLnZhbFsxXSk7CisgICAgfQorCisgICAgc291cmNlICs9IGNv
bXBvbmVudHNTaXplOworICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOworICAgIHBp
eGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IHVucGFja09uZVJvd09mUkdCMTZMaXR0bGVUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNl
LCB1aW50OF90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCit7CisgICAg
dW5zaWduZWQgY29tcG9uZW50c1BlclJvdyA9IHBpeGVsc1BlclJvdyAqIDM7CisgICAgdW5zaWdu
ZWQgdGFpbENvbXBvbmVudHMgPSBjb21wb25lbnRzUGVyUm93ICUgMjQ7CisgICAgdW5zaWduZWQg
Y29tcG9uZW50c1NpemUgPSBjb21wb25lbnRzUGVyUm93IC0gdGFpbENvbXBvbmVudHM7CisKKyAg
ICB1aW50OHg4X3QgY29tcG9uZW50QSA9IHZkdXBfbl91OCgweEZGKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMjQpIHsKKyAgICAgICAgdWludDE2
eDh4M190IFJHQjE2ID0gdmxkM3FfdTE2KHNvdXJjZSArIGkpOworICAgICAgICB1aW50OHg4X3Qg
Y29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoUkdCMTYudmFsWzBdLCA4KSk7Cisg
ICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihSR0Ix
Ni52YWxbMV0sIDgpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2
KHZzaHJxX25fdTE2KFJHQjE2LnZhbFsyXSwgOCkpOworICAgICAgICB1aW50OHg4eDRfdCBSR0JB
OCA9IHt7Y29tcG9uZW50UiwgY29tcG9uZW50RywgY29tcG9uZW50QiwgY29tcG9uZW50QX19Owor
ICAgICAgICB2c3Q0X3U4KGRlc3RpbmF0aW9uLCBSR0JBOCk7CisgICAgICAgIGRlc3RpbmF0aW9u
ICs9IDMyOworICAgIH0KKworICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBwaXhl
bHNQZXJSb3cgPSB0YWlsQ29tcG9uZW50cyAvIDM7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2Us
IHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1
bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25l
ZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1bnNpZ25lZCBj
b21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikgeworICAg
ICAgICB1aW50MTZ4OHg0X3QgQVJHQjE2ID0gdmxkNHFfdTE2KHNvdXJjZSArIGkpOworICAgICAg
ICB1aW50OHg4X3QgY29tcG9uZW50QSA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZh
bFswXSwgOCkpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNo
cnFfbl91MTYoQVJHQjE2LnZhbFsxXSwgOCkpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50
RyA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFsyXSwgOCkpOworICAgICAgICB1
aW50OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFsz
XSwgOCkpOworICAgICAgICB1aW50OHg4eDRfdCBSR0JBOCA9IHt7Y29tcG9uZW50UiwgY29tcG9u
ZW50RywgY29tcG9uZW50QiwgY29tcG9uZW50QX19OworICAgICAgICB2c3Q0X3U4KGRlc3RpbmF0
aW9uICsgaSwgUkdCQTgpOworICAgIH0KKworICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsK
KyAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBwaXhlbHNQZXJSb3cgPSB0
YWlsQ29tcG9uZW50cyAvIDQ7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dP
ZkJHUkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21w
b25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9u
ZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6
ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikgeworICAgICAgICB1aW50MTZ4
OHg0X3QgQVJHQjE2ID0gdmxkNHFfdTE2KHNvdXJjZSArIGkpOworICAgICAgICB1aW50OHg4X3Qg
Y29tcG9uZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFswXSwgOCkpOwor
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJH
QjE2LnZhbFsxXSwgOCkpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91
MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFsyXSwgOCkpOworICAgICAgICB1aW50OHg4X3QgY29t
cG9uZW50QSA9IHZxbW92bl91MTYodnNocnFfbl91MTYoQVJHQjE2LnZhbFszXSwgOCkpOworICAg
ICAgICB1aW50OHg4eDRfdCBSR0JBOCA9IHt7Y29tcG9uZW50UiwgY29tcG9uZW50RywgY29tcG9u
ZW50QiwgY29tcG9uZW50QX19OworICAgICAgICB2c3Q0X3U4KGRlc3RpbmF0aW9uICsgaSwgUkdC
QTgpOworICAgIH0KKworICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBkZXN0aW5h
dGlvbiArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBwaXhlbHNQZXJSb3cgPSB0YWlsQ29tcG9uZW50
cyAvIDQ7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkE0NDQ0VG9S
R0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCYgcGl4ZWxzUGVyUm93KQoreworICAgIHVuc2lnbmVkIHRhaWxQaXhlbHMgPSBwaXhlbHNQ
ZXJSb3cgJSA4OworICAgIHVuc2lnbmVkIHBpeGVsU2l6ZSA9IHBpeGVsc1BlclJvdyAtIHRhaWxQ
aXhlbHM7CisKKyAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MGYgPSB2ZHVwcV9uX3UxNigweDBG
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxTaXplOyBpICs9IDgpIHsKKyAg
ICAgICAgdWludDE2eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3UxNihzb3VyY2UgKyBpKTsKKwor
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoZWln
aHRQaXhlbHMsIDEyKSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3Ux
Nih2YW5kcV91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDgpLCBpbW1lZGlhdGUweDBmKSk7
CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2YW5kcV91MTYodnNo
cnFfbl91MTYoZWlnaHRQaXhlbHMsIDQpLCBpbW1lZGlhdGUweDBmKSk7CisgICAgICAgIHVpbnQ4
eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMsIGltbWVk
aWF0ZTB4MGYpKTsKKworICAgICAgICBjb21wb25lbnRSID0gdm9ycl91OCh2c2hsX25fdTgoY29t
cG9uZW50UiwgNCksIGNvbXBvbmVudFIpOworICAgICAgICBjb21wb25lbnRHID0gdm9ycl91OCh2
c2hsX25fdTgoY29tcG9uZW50RywgNCksIGNvbXBvbmVudEcpOworICAgICAgICBjb21wb25lbnRC
ID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50QiwgNCksIGNvbXBvbmVudEIpOworICAgICAg
ICBjb21wb25lbnRBID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50QSwgNCksIGNvbXBvbmVu
dEEpOworCisgICAgICAgIHVpbnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21wb25lbnRS
LCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRfdTgo
ZGVzdGluYXRpb24sIGRlc3RDb21wb25lbnRzKTsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7
CisgICAgfQorCisgICAgc291cmNlICs9IHBpeGVsU2l6ZTsKKyAgICBwaXhlbHNQZXJSb3cgPSB0
YWlsUGl4ZWxzOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vu
c2lnbmVkU2hvcnQ0NDQ0KGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIHVpbnQxNl90KiYgZGVzdGlu
YXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgY29tcG9uZW50
c1BlclJvdyA9IHBpeGVsc1BlclJvdyAqIDQ7CisgICAgdW5zaWduZWQgdGFpbENvbXBvbmVudHMg
PSBjb21wb25lbnRzUGVyUm93ICUgMzI7CisgICAgdW5zaWduZWQgY29tcG9uZW50c1NpemUgPSBj
b21wb25lbnRzUGVyUm93IC0gdGFpbENvbXBvbmVudHM7CisKKyAgICB1aW50OF90KiBkc3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbik7CisgICAgdWludDh4OF90IGlt
bWVkaWF0ZTB4ZjAgPSB2ZHVwX25fdTgoMHhGMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7CisgICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4
ID0gdmxkNF91OChzb3VyY2UgKyBpKTsKKworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9
IHZhbmRfdTgoUkdCQTgudmFsWzBdLCBpbW1lZGlhdGUweGYwKTsKKyAgICAgICAgdWludDh4OF90
IGNvbXBvbmVudEcgPSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbMV0sIGltbWVkaWF0ZTB4
ZjApLCA0KTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2YW5kX3U4KFJHQkE4LnZh
bFsyXSwgaW1tZWRpYXRlMHhmMCk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnNo
cl9uX3U4KHZhbmRfdTgoUkdCQTgudmFsWzNdLCBpbW1lZGlhdGUweGYwKSwgNCk7CisKKyAgICAg
ICAgdWludDh4OHgyX3QgUkdCQTQ7CisgICAgICAgIFJHQkE0LnZhbFswXSA9IHZvcnJfdTgoY29t
cG9uZW50QiwgY29tcG9uZW50QSk7CisgICAgICAgIFJHQkE0LnZhbFsxXSA9IHZvcnJfdTgoY29t
cG9uZW50UiwgY29tcG9uZW50Ryk7CisgICAgICAgIHZzdDJfdTgoZHN0LCBSR0JBNCk7CisgICAg
ICAgIGRzdCArPSAxNjsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7Cisg
ICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemUgLyA0OworICAgIHBpeGVsc1BlclJvdyA9
IHRhaWxDb21wb25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJv
d09mUkdCQTU1NTFUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90KiYgZGVz
dGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgdGFpbFBp
eGVscyA9IHBpeGVsc1BlclJvdyAlIDg7CisgICAgdW5zaWduZWQgcGl4ZWxTaXplID0gcGl4ZWxz
UGVyUm93IC0gdGFpbFBpeGVsczsKKworICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweDcgPSB2ZHVw
X25fdTgoMHg3KTsKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmZiA9IHZkdXBfbl91OCgweEZG
KTsKKyAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MWYgPSB2ZHVwcV9uX3UxNigweDFGKTsKKyAg
ICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MSA9IHZkdXBxX25fdTE2KDB4MSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxTaXplOyBpICs9IDgpIHsKKyAgICAgICAgdWludDE2
eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3UxNihzb3VyY2UgKyBpKTsKKworICAgICAgICB1aW50
OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDEx
KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2YW5kcV91MTYo
dnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDYpLCBpbW1lZGlhdGUweDFmKSk7CisgICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2YW5kcV91MTYodnNocnFfbl91MTYoZWln
aHRQaXhlbHMsIDEpLCBpbW1lZGlhdGUweDFmKSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25l
bnRBID0gdnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMsIGltbWVkaWF0ZTB4MSkpOwor
CisgICAgICAgIGNvbXBvbmVudFIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRSLCAzKSwg
dmFuZF91OChjb21wb25lbnRSLCBpbW1lZGlhdGUweDcpKTsKKyAgICAgICAgY29tcG9uZW50RyA9
IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudEcsIDMpLCB2YW5kX3U4KGNvbXBvbmVudEcsIGlt
bWVkaWF0ZTB4NykpOworICAgICAgICBjb21wb25lbnRCID0gdm9ycl91OCh2c2hsX25fdTgoY29t
cG9uZW50QiwgMyksIHZhbmRfdTgoY29tcG9uZW50QiwgaW1tZWRpYXRlMHg3KSk7CisgICAgICAg
IGNvbXBvbmVudEEgPSB2bXVsX3U4KGNvbXBvbmVudEEsIGltbWVkaWF0ZTB4ZmYpOworCisgICAg
ICAgIHVpbnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRH
LCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24s
IGRlc3RDb21wb25lbnRzKTsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7CisgICAgfQorCisg
ICAgc291cmNlICs9IHBpeGVsU2l6ZTsKKyAgICBwaXhlbHNQZXJSb3cgPSB0YWlsUGl4ZWxzOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1
NTUxKGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIHVpbnQxNl90KiYgZGVzdGluYXRpb24sIHVuc2ln
bmVkJiBwaXhlbHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgY29tcG9uZW50c1BlclJvdyA9IHBp
eGVsc1BlclJvdyAqIDQ7CisgICAgdW5zaWduZWQgdGFpbENvbXBvbmVudHMgPSBjb21wb25lbnRz
UGVyUm93ICUgMzI7CisgICAgdW5zaWduZWQgY29tcG9uZW50c1NpemUgPSBjb21wb25lbnRzUGVy
Um93IC0gdGFpbENvbXBvbmVudHM7CisKKyAgICB1aW50OF90KiBkc3QgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbik7CisKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhm
OCA9IHZkdXBfbl91OCgweEY4KTsKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgxOCA9IHZkdXBf
bl91OCgweDE4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7
IGkgKz0gMzIpIHsKKyAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSAr
IGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxb
MF0sIGltbWVkaWF0ZTB4ZjgpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RzNiaXQgPSB2
c2hyX25fdTgoUkdCQTgudmFsWzFdLCA1KTsKKworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50
RzJiaXQgPSB2c2hsX25fdTgodmFuZF91OChSR0JBOC52YWxbMV0sIGltbWVkaWF0ZTB4MTgpLCAz
KTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2c2hyX25fdTgodmFuZF91OChSR0JB
OC52YWxbMl0sIGltbWVkaWF0ZTB4ZjgpLCAyKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVu
dEEgPSB2c2hyX25fdTgoUkdCQTgudmFsWzNdLCA3KTsKKworICAgICAgICB1aW50OHg4eDJfdCBS
R0JBNTU1MTsKKyAgICAgICAgUkdCQTU1NTEudmFsWzBdID0gdm9ycl91OCh2b3JyX3U4KGNvbXBv
bmVudEcyYml0LCBjb21wb25lbnRCKSwgY29tcG9uZW50QSk7CisgICAgICAgIFJHQkE1NTUxLnZh
bFsxXSA9IHZvcnJfdTgoY29tcG9uZW50UiwgY29tcG9uZW50RzNiaXQpOworICAgICAgICB2c3Qy
X3U4KGRzdCwgUkdCQTU1NTEpOworICAgICAgICBkc3QgKz0gMTY7CisgICAgfQorCisgICAgc291
cmNlICs9IGNvbXBvbmVudHNTaXplOworICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXpl
IC8gNDsKKyAgICBwaXhlbHNQZXJSb3cgPSB0YWlsQ29tcG9uZW50cyAvIDQ7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQjU2NVRvUkdCQTgoY29uc3QgdWludDE2X3Qq
JiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykK
K3sKKyAgICB1bnNpZ25lZCB0YWlsUGl4ZWxzID0gcGl4ZWxzUGVyUm93ICUgODsKKyAgICB1bnNp
Z25lZCBwaXhlbFNpemUgPSBwaXhlbHNQZXJSb3cgLSB0YWlsUGl4ZWxzOworCisgICAgdWludDE2
eDhfdCBpbW1lZGlhdGUweDNmID0gdmR1cHFfbl91MTYoMHgzRik7CisgICAgdWludDE2eDhfdCBp
bW1lZGlhdGUweDFmID0gdmR1cHFfbl91MTYoMHgxRik7CisgICAgdWludDh4OF90IGltbWVkaWF0
ZTB4MyA9IHZkdXBfbl91OCgweDMpOworICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweDcgPSB2ZHVw
X25fdTgoMHg3KTsKKworICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdmR1cF9uX3U4KDB4RkYp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsU2l6ZTsgaSArPSA4KSB7Cisg
ICAgICAgIHVpbnQxNng4X3QgZWlnaHRQaXhlbHMgPSB2bGQxcV91MTYoc291cmNlICsgaSk7CisK
KyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudFIgPSB2cW1vdm5fdTE2KHZzaHJxX25fdTE2KGVp
Z2h0UGl4ZWxzLCAxMSkpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZxbW92bl91
MTYodmFuZHFfdTE2KHZzaHJxX25fdTE2KGVpZ2h0UGl4ZWxzLCA1KSwgaW1tZWRpYXRlMHgzZikp
OworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodmFuZHFfdTE2KGVp
Z2h0UGl4ZWxzLCBpbW1lZGlhdGUweDFmKSk7CisKKyAgICAgICAgY29tcG9uZW50UiA9IHZvcnJf
dTgodnNobF9uX3U4KGNvbXBvbmVudFIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudFIsIGltbWVkaWF0
ZTB4NykpOworICAgICAgICBjb21wb25lbnRHID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50
RywgMiksIHZhbmRfdTgoY29tcG9uZW50RywgaW1tZWRpYXRlMHgzKSk7CisgICAgICAgIGNvbXBv
bmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCAzKSwgdmFuZF91OChjb21wb25l
bnRCLCBpbW1lZGlhdGUweDcpKTsKKworICAgICAgICB1aW50OHg4eDRfdCBkZXN0Q29tcG9uZW50
cyA9IHt7Y29tcG9uZW50UiwgY29tcG9uZW50RywgY29tcG9uZW50QiwgY29tcG9uZW50QX19Owor
ICAgICAgICB2c3Q0X3U4KGRlc3RpbmF0aW9uLCBkZXN0Q29tcG9uZW50cyk7CisgICAgICAgIGRl
c3RpbmF0aW9uICs9IDMyOworICAgIH0KKworICAgIHNvdXJjZSArPSBwaXhlbFNpemU7CisgICAg
cGl4ZWxzUGVyUm93ID0gdGFpbFBpeGVsczsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHBhY2tP
bmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0NTY1KGNvbnN0IHVpbnQ4X3QqJiBzb3VyY2UsIHVp
bnQxNl90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCit7CisgICAgdW5z
aWduZWQgY29tcG9uZW50c1BlclJvdyA9IHBpeGVsc1BlclJvdyAqIDQ7CisgICAgdW5zaWduZWQg
dGFpbENvbXBvbmVudHMgPSBjb21wb25lbnRzUGVyUm93ICUgMzI7CisgICAgdW5zaWduZWQgY29t
cG9uZW50c1NpemUgPSBjb21wb25lbnRzUGVyUm93IC0gdGFpbENvbXBvbmVudHM7CisgICAgdWlu
dDhfdCogZHN0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb24pOworCisg
ICAgdWludDh4OF90IGltbWVkaWF0ZTB4ZjggPSB2ZHVwX25fdTgoMHhGOCk7CisgICAgdWludDh4
OF90IGltbWVkaWF0ZTB4MWMgPSB2ZHVwX25fdTgoMHgxQyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7CisgICAgICAgIHVpbnQ4eDh4NF90
IFJHQkE4ID0gdmxkNF91OChzb3VyY2UgKyBpKTsKKworICAgICAgICB1aW50OHg4X3QgY29tcG9u
ZW50UiA9IHZhbmRfdTgoUkdCQTgudmFsWzBdLCBpbW1lZGlhdGUweGY4KTsKKyAgICAgICAgdWlu
dDh4OF90IGNvbXBvbmVudEdMZWZ0ID0gdnNocl9uX3U4KFJHQkE4LnZhbFsxXSwgNSk7CisgICAg
ICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHUmlnaHQgPSB2c2hsX25fdTgodmFuZF91OChSR0JBOC52
YWxbMV0sIGltbWVkaWF0ZTB4MWMpLCAzKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIg
PSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbMl0sIGltbWVkaWF0ZTB4ZjgpLCAzKTsKKwor
ICAgICAgICB1aW50OHg4eDJfdCBSR0I1NjU7CisgICAgICAgIFJHQjU2NS52YWxbMF0gPSB2b3Jy
X3U4KGNvbXBvbmVudEdSaWdodCwgY29tcG9uZW50Qik7CisgICAgICAgIFJHQjU2NS52YWxbMV0g
PSB2b3JyX3U4KGNvbXBvbmVudFIsIGNvbXBvbmVudEdMZWZ0KTsKKyAgICAgICAgdnN0Ml91OChk
c3QsIFJHQjU2NSk7CisgICAgICAgIGRzdCArPSAxNjsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0g
Y29tcG9uZW50c1NpemU7CisgICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemUgLyA0Owor
ICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgU0lNRAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKEFSTV9O
RU9OX0lOVFJJTlNJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvVGV4dHVyZUNhY2hlQ1YuaAppbmRleCBjOWZmNDE5ZDQzYmU0NWY0MDQ0MDMwNDBhZGQ4
YzRkMDQ0MDJiYTJmLi40NjNkMDYxZDI1MzlmZjIyNjc0YzViODA3OWZkMWRlYzBjYTZmMmVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2Fj
aGVDVi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVD
YWNoZUNWLmgKQEAgLTQxLDEyICs0MSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBfX0NWT3BlbkdMRVNU
ZXh0dXJlQ2FjaGUgKkNWT3BlbkdMRVNUZXh0dXJlQ2FjaGVSZWY7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDsKIAogY2xhc3MgVGV4dHVyZUNhY2hlQ1YgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
VGV4dHVyZUNhY2hlQ1Y+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVDYWNoZUNWPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVDYWNoZUNW
PiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKIAogI2lmIFVTRShPUEVOR0xfRVMp
CiAgICAgdXNpbmcgVGV4dHVyZUNhY2hlVHlwZSA9IENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVSZWY7
CkBAIC01NiwxMyArNTYsMTMgQEAgcHVibGljOgogICAgIHVzaW5nIFRleHR1cmVUeXBlID0gQ1ZP
cGVuR0xUZXh0dXJlUmVmOwogI2VuZGlmCiAKLSAgICBUZXh0dXJlQ2FjaGVDVihHcmFwaGljc0Nv
bnRleHQzRCYsIFJldGFpblB0cjxUZXh0dXJlQ2FjaGVUeXBlPiYmKTsKKyAgICBUZXh0dXJlQ2Fj
aGVDVihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIFJldGFpblB0cjxUZXh0dXJlQ2FjaGVUeXBl
PiYmKTsKIAogICAgIFJldGFpblB0cjxUZXh0dXJlVHlwZT4gdGV4dHVyZUZyb21JbWFnZShDVlBp
eGVsQnVmZmVyUmVmLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOwotICAg
IEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9
CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRl
eHQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29u
dGV4dDsKKyAgICBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fY29udGV4dDsKICAgICBS
ZXRhaW5QdHI8VGV4dHVyZUNhY2hlVHlwZT4gbV9jYWNoZTsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KaW5kZXgg
ZjUyZmUzZGE4ZTliZWY2N2RiYzQ5NjA1ZmNhNzljZTQ2OTQzNGMzNi4uNDljYjY1ZTdlMGQxNmYw
NjZjMTYwZDUyMTdjOTc0YjYyNzRlOWE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KQEAgLTI4LDIwICsyOCwyMCBA
QAogCiAjaWYgSEFWRShDT1JFX1ZJREVPKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogCiAjaW5jbHVkZSAiQ29y
ZVZpZGVvU29mdExpbmsuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGQ6OnVuaXF1ZV9w
dHI8VGV4dHVyZUNhY2hlQ1Y+IFRleHR1cmVDYWNoZUNWOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QmIGNvbnRleHQpCitzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZUNhY2hlQ1Y+IFRleHR1cmVDYWNo
ZUNWOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCiB7CiAgICAgVGV4
dHVyZUNhY2hlVHlwZSBjYWNoZSA9IG51bGxwdHI7CiAjaWYgVVNFKE9QRU5HTF9FUykKLSAgICBD
VkVBR0xDb250ZXh0IGVhZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q1ZFQUdMQ29udGV4dD4oY29u
dGV4dC5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIENWRUFHTENvbnRleHQgZWFn
bENvbnRleHQgPSBzdGF0aWNfY2FzdDxDVkVBR0xDb250ZXh0Pihjb250ZXh0LnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0R0woKSk7CiAgICAgQ1ZSZXR1cm4gZXJyb3IgPSBDVk9wZW5HTEVTVGV4dHVy
ZUNhY2hlQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIGVhZ2xDb250ZXh0LCBu
dWxscHRyLCAmY2FjaGUpOwogI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBDR0xDb250ZXh0T2JqIGNn
bENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihjb250ZXh0LnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSk7CisgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Q0dMQ29udGV4dE9iaj4oY29udGV4dC5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkp
OwogICAgIENWUmV0dXJuIGVycm9yID0gQ1ZPcGVuR0xUZXh0dXJlQ2FjaGVDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgY2dsQ29udGV4dCwgQ0dMR2V0UGl4ZWxGb3JtYXQoY2ds
Q29udGV4dCksIG51bGxwdHIsICZjYWNoZSk7CiAjZWxpZiBVU0UoQU5HTEUpCiAgICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaXMgaW50ZWdyYXRpbmcgdmlhIEFOR0xFLgpAQCAt
NTUsNyArNTUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZUNhY2hlQ1Y+IFRleHR1cmVDYWNo
ZUNWOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleAogICAgIHJldHVybiBtYWtlVW5p
cXVlPFRleHR1cmVDYWNoZUNWPihjb250ZXh0LCBXVEZNb3ZlKHN0cm9uZ0NhY2hlKSk7CiB9CiAK
LVRleHR1cmVDYWNoZUNWOjpUZXh0dXJlQ2FjaGVDVihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4
dCwgUmV0YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYgY2FjaGUpCitUZXh0dXJlQ2FjaGVDVjo6
VGV4dHVyZUNhY2hlQ1YoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIFJldGFpblB0
cjxUZXh0dXJlQ2FjaGVUeXBlPiYmIGNhY2hlKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAg
ICAgLCBtX2NhY2hlKGNhY2hlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCmluZGV4IGRkZDhh
ODJmOWEwMmJmOTkxYTZiOGRjNGVmZjBmZTI3NDQzNzJmNTEuLmY5OWZlOGUwNmZmNzhlMDNjNjc2
MzNlOTgxYjk2MjczZjFjZTgzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAKQEAgLTM3Niw5
ICszNzYsOSBAQCBzdGF0aWMgY29uc3QgVmVjdG9yPEdMZmxvYXQ+IFlDYkNyVG9SR0JNYXRyaXhG
b3JSYW5nZUFuZFRyYW5zZmVyRnVuY3Rpb24oUGl4ZWxSYQogfQogI2VuZGlmIC8vIEhBVkUoSU9T
VVJGQUNFKQogCi1WaWRlb1RleHR1cmVDb3BpZXJDVjo6VmlkZW9UZXh0dXJlQ29waWVyQ1YoR3Jh
cGhpY3NDb250ZXh0M0QmIGNvbnRleHQpCitWaWRlb1RleHR1cmVDb3BpZXJDVjo6VmlkZW9UZXh0
dXJlQ29waWVyQ1YoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCiAgICAgOiBtX3No
YXJlZENvbnRleHQoY29udGV4dCkKLSAgICAsIG1fY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlU2hhcmVkKGNvbnRleHQpKQorICAgICwgbV9jb250ZXh0KEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVTaGFyZWQoY29udGV4dCkpCiAgICAgLCBtX2ZyYW1lYnVmZmVyKGNvbnRl
eHQuY3JlYXRlRnJhbWVidWZmZXIoKSkKIHsKIH0KQEAgLTQwNCw2MiArNDA0LDYyIEBAIHN0YXRp
YyBTdHJpbmdNYXAmIGVudW1Ub1N0cmluZ01hcCgpCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZ01hcD4gbWFwOwogICAgIGlmIChtYXAuZ2V0KCkuZW1wdHkoKSkgewogICAgICAgICBT
dHJpbmdNYXAgc3RyaW5nTWFwOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkdCKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNl
KFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSk7Ci0gICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0Vf
QUxQSEEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJ
TkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6QUxQSEEpKTsKLSAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlI4KSk7Ci0gICAgICAg
IG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSMTZG
KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dDNEOjpSMzJGKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNU
UklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSOEkpKTsKLSAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJKSk7Ci0gICAg
ICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpS
MTZJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dDNEOjpSMzJVSSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHQzRDo6UjMySSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6Ukc4KSk7Ci0gICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2RikpOwot
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQz
RDo6UkczMkYpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHOFVJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5l
bXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUkpKTsKLSAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJH
MTZJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dDNEOjpSRzMyVUkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBs
YWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4KSk7Ci0gICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOCkp
OwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTgpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBOCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1w
bGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQpKTsKLSAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEw
X0EyKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNikpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQpKTsK
LSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRikpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJ
TkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMOCkpOwotICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEgzMkZfU1RFTkNJTDgpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQikpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkpOwotICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FM
UEhBKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0UpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5H
SUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5l
bXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRUQpKTsKLSAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lO
VEVHRVIpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKLSAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzVfNl81KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80KSk7Ci0gICAg
ICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5l
bXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUKSk7Ci0g
ICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUKSk7Ci0gICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWKSk7Ci0g
ICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9JTlRfMjRfOCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVW
KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0IpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkEpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQSkpOworICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6TFVN
SU5BTkNFKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBo
aWNzQ29udGV4dEdMOjpBTFBIQSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkYpKTsKKyAgICAgICAgbWFw
LmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlIzMkYpKTsK
KyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
R0w6OlI4VUkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3Jh
cGhpY3NDb250ZXh0R0w6OlI4SSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjE2VUkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkkpKTsKKyAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJ
KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dEdMOjpSMzJJKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dEdMOjpSRzgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZGKSk7CisgICAgICAgIG1hcC5nZXQo
KS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyRikpOworICAg
ICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6
Ukc4VUkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHOEkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1w
bGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkcxNkkpKTsKKyAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJV
SSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHRHTDo6UkczMkkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4KSk7CisgICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOCkpOwor
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRH
TDo6U1JHQjhfQUxQSEE4KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9Q
QUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTIpKTsKKyAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0NPTVBPTkVOVDE2KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNCkpOworICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9O
RU5UMzJGKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBs
YWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMOCkp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6UkdCKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEpKTsKKyAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlO
QU5DRSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGlj
c0NvbnRleHRHTDo6QUxQSEEpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJFRCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUikpOworICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6REVQ
VEhfU1RFTkNJTCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1w
bGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV82
XzUpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQpKTsKKyAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVf
NV81XzEpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0R0w6OkJZVEUpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQpKTsKKyAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUKSk7CisgICAg
ICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9TSE9SVCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJ
UihHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVCkpOworICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6SU5U
KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpKTsKKyAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8y
NF84KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dEdMOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpKTsKIAogI2lmIFVTRShP
UEVOR0xfRVMpCiAgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdMX1JF
RF9JTlRFR0VSKSk7CkBAIC01MTQsMTIgKzUxNCwxMiBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGll
ckNWOjppbml0aWFsaXplQ29udGV4dE9iamVjdHMoKQogICAgIHZlcnRleFNoYWRlclNvdXJjZS5h
cHBlbmRMaXRlcmFsKCIgICAgZ2xfUG9zaXRpb24gPSBhX3Bvc2l0aW9uO1xuIik7CiAgICAgdmVy
dGV4U2hhZGVyU291cmNlLmFwcGVuZExpdGVyYWwoIn1cbiIpOwogCi0gICAgUGxhdGZvcm0zRE9i
amVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIg
PSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURF
Uik7CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFk
ZXJTb3VyY2UudG9TdHJpbmcoKSk7CiAgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyRGlyZWN0
KHZlcnRleFNoYWRlcik7CiAKICAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldFNoYWRlcml2KHZlcnRleFNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RB
VFVTLCAmdmFsdWUpOworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVydGV4U2hhZGVyLCBH
cmFwaGljc0NvbnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7CiAgICAgaWYgKCF2YWx1
ZSkgewogICAgICAgICBMT0coV2ViR0wsICJWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIFZlcnRleCBzaGFkZXIgZmFpbGVkIHRvIGNv
bXBpbGUuIiwgdGhpcyk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNo
YWRlcik7CkBAIC01NjEsMTEgKzU2MSwxMSBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjpp
bml0aWFsaXplQ29udGV4dE9iamVjdHMoKQogICAgIGZyYWdtZW50U2hhZGVyU291cmNlLmFwcGVu
ZExpdGVyYWwoIiAgICB9XG4iKTsKICAgICBmcmFnbWVudFNoYWRlclNvdXJjZS5hcHBlbmRMaXRl
cmFsKCJ9XG4iKTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVT
aGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUik7CiAgICAgbV9jb250ZXh0
LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlLnRvU3Ry
aW5nKCkpOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlckRpcmVjdChmcmFnbWVudFNoYWRl
cik7CiAKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KGZyYWdtZW50U2hhZGVyLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7CisgICAgbV9jb250ZXh0LT5nZXRT
aGFkZXJpdihmcmFnbWVudFNoYWRlciwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBJTEVfU1RBVFVT
LCAmdmFsdWUpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBG
cmFnbWVudCBzaGFkZXIgZmFpbGVkIHRvIGNvbXBpbGUuIiwgdGhpcyk7CiAgICAgICAgIG1fY29u
dGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CkBAIC01NzgsNyArNTc4LDcgQEAgYm9v
bCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZUNvbnRleHRPYmplY3RzKCkKICAgICBt
X2NvbnRleHQtPmF0dGFjaFNoYWRlcihtX3Byb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKICAgICBt
X2NvbnRleHQtPmxpbmtQcm9ncmFtKG1fcHJvZ3JhbSk7CiAKLSAgICBtX2NvbnRleHQtPmdldFBy
b2dyYW1pdihtX3Byb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJnZhbHVl
KTsKKyAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihtX3Byb2dyYW0sIEdyYXBoaWNzQ29udGV4
dEdMOjpMSU5LX1NUQVRVUywgJnZhbHVlKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIExP
RyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoJXApIC0gUHJvZ3JhbSBmYWlsZWQgdG8gbGluay4iLCB0aGlzKTsKICAgICAgICAg
bV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKQEAgLTYwNiw4ICs2MDYsOCBA
QCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplQ29udGV4dE9iamVjdHMoKQog
ICAgIG1fdmVydGV4QnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKICAgICBmbG9h
dCB2ZXJ0aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEsIC0xLCAxLCAtMSwg
LTEgfTsKIAotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCBtX3ZlcnRleEJ1ZmZlcik7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZihmbG9hdCkgKiAxMiwgdmVydGlj
ZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT5iaW5k
QnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QnVmZmVyKTsK
KyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZF
Uiwgc2l6ZW9mKGZsb2F0KSAqIDEyLCB2ZXJ0aWNlcywgR3JhcGhpY3NDb250ZXh0R0w6OlNUQVRJ
Q19EUkFXKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNjM5LDEyICs2MzksMTIgQEAgYm9v
bCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoKQogICAg
ICAgICAifVxuIl9zCiAgICAgfTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVy
ID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFE
RVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyID0gbV9jb250ZXh0LT5jcmVh
dGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVIpOwogICAgIG1fY29udGV4
dC0+c2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyU291cmNlKTsKICAgICBt
X2NvbnRleHQtPmNvbXBpbGVTaGFkZXJEaXJlY3QodmVydGV4U2hhZGVyKTsKIAogICAgIEdDM0Rp
bnQgc3RhdHVzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHZlcnRleFNoYWRlciwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmc3RhdHVzKTsKKyAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KHZlcnRleFNoYWRlciwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBJTEVf
U1RBVFVTLCAmc3RhdHVzKTsKICAgICBpZiAoIXN0YXR1cykgewogICAgICAgICBMT0coV2ViR0ws
ICJWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoJXApIC0g
VmVydGV4IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKQEAgLTY3OCwxMSArNjc4LDExIEBAIGJv
b2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCkKICAg
ICAgICAgIn1cbiJfcwogICAgIH07CiAKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hh
ZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4
dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVIpOwogICAg
IG1fY29udGV4dC0+c2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlclNv
dXJjZSk7CiAgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyRGlyZWN0KGZyYWdtZW50U2hhZGVy
KTsKIAotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoZnJhZ21lbnRTaGFkZXIsIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJnN0YXR1cyk7CisgICAgbV9jb250ZXh0LT5nZXRT
aGFkZXJpdihmcmFnbWVudFNoYWRlciwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBJTEVfU1RBVFVT
LCAmc3RhdHVzKTsKICAgICBpZiAoIXN0YXR1cykgewogICAgICAgICBMT0coV2ViR0wsICJWaWRl
b1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoJXApIC0gRnJhZ21l
bnQgc2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIsIHRoaXMpOwogICAgICAgICBtX2NvbnRleHQt
PmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwpAQCAtNjk1LDcgKzY5NSw3IEBAIGJvb2wgVmlk
ZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCkKICAgICBtX2Nv
bnRleHQtPmF0dGFjaFNoYWRlcihtX3l1dlByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKICAgICBt
X2NvbnRleHQtPmxpbmtQcm9ncmFtKG1feXV2UHJvZ3JhbSk7CiAKLSAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihtX3l1dlByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywg
JnN0YXR1cyk7CisgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYobV95dXZQcm9ncmFtLCBHcmFw
aGljc0NvbnRleHRHTDo6TElOS19TVEFUVVMsICZzdGF0dXMpOwogICAgIGlmICghc3RhdHVzKSB7
CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZD
b250ZXh0T2JqZWN0cyglcCkgLSBQcm9ncmFtIGZhaWxlZCB0byBsaW5rLiIsIHRoaXMpOwogICAg
ICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwpAQCAtNzIxLDEwICs3
MjEsMTAgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9i
amVjdHMoKQogICAgIG1feXV2VmVydGV4QnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIo
KTsKICAgICBmbG9hdCB2ZXJ0aWNlc1sxMl0gPSB7IC0xLCAtMSwgMSwgLTEsIDEsIDEsIDEsIDEs
IC0xLCAxLCAtMSwgLTEgfTsKIAotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3l1dlZlcnRleEJ1ZmZlcik7Ci0gICAgbV9jb250ZXh0
LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0
aWNlcyksIHZlcnRpY2VzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBtX3l1
dlZlcnRleEJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4
dEdMOjpBUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHcmFwaGljc0Nv
bnRleHRHTDo6U1RBVElDX0RSQVcpOwogICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKLSAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYlBvaW50ZXIobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYlBvaW50ZXIobV95dXZQb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHcmFwaGlj
c0NvbnRleHRHTDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtNzM1LDE1ICs3MzUsMTUgQEAgdm9pZCogVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmF0dGFjaElP
U3VyZmFjZVRvVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGkKICAgICBhdXRvIGRp
c3BsYXkgPSBtX2NvbnRleHQtPnBsYXRmb3JtRGlzcGxheSgpOwogICAgIEVHTGludCBlZ2xUZXh0
dXJlVGFyZ2V0ID0gMDsKIAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfUkVDVEFOR0xFX0FSQikKKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIpCiAgICAgICAgIGVnbFRleHR1cmVUYXJnZXQgPSBFR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJEKQorICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV8yRCkKICAgICAgICAgZWdsVGV4dHVyZVRhcmdldCA9IEVHTF9URVhU
VVJFXzJEOwogICAgIGVsc2UgewogICAgICAgICBMT0coV2ViR0wsICJVbmtub3duIHRleHR1cmUg
dGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KLSAgICBpZiAoZWdsVGV4dHVyZVRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCkgeworICAgIGlmIChlZ2xUZXh0dXJlVGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KSB7CiAg
ICAgICAgIExPRyhXZWJHTCwgIk1pc21hdGNoIGluIEVHTCB0ZXh0dXJlIHRhcmdldCAlZC4iLCBz
dGF0aWNfY2FzdDxpbnQ+KHRhcmdldCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CkBAIC04MzEsMTkgKzgzMSwxOSBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5SW1h
Z2VUb1BsYXRmb3JtVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBzaQogICAgICAgICB9
CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOwog
CiAgICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb3V0cHV0
VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0g
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkREaXJlY3QoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgMCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLQotICAgIG1fY29udGV4dC0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBv
dXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0MzRGVudW0gc3RhdHVzID0gbV9jb250ZXh0LT5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUik7Ci0g
ICAgaWYgKHN0YXR1cyAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUp
IHsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
XzJELCBvdXRwdXRUZXh0dXJlKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01BR19G
SUxURVIsIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpOworICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9U
T19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0R0w6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRERpcmVj
dChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOworCisgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHQzNEZW51bSBzdGF0dXMgPSBt
X2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSKTsKKyAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
Ul9DT01QTEVURSkgewogICAgICAgICBMT0coV2ViR0wsICJWaWRlb1RleHR1cmVDb3BpZXJDVjo6
Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBjcmVhdGUg
ZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhpcyk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC04NTgsNTAgKzg1OCw1MCBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGll
ckNWOjpjb3B5SW1hZ2VUb1BsYXRmb3JtVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBz
aQogICAgIGF1dG8gdXZQbGFuZUhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodE9mUGxhbmUoc3Vy
ZmFjZSwgMSk7CiAKICNpZiBVU0UoT1BFTkdMX0VTKQotICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVy
ZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOworICAgIEdDM0RlbnVtIHZp
ZGVvVGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEOwogI2VsaWYg
VVNFKE9QRU5HTCkKLSAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCOworICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVy
ZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkI7CiAjZWxp
ZiBVU0UoQU5HTEUpCi0gICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3ND
b250ZXh0M0Q6OklPU3VyZmFjZVRleHR1cmVUYXJnZXQ7CisgICAgR0MzRGVudW0gdmlkZW9UZXh0
dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0R0w6OklPU3VyZmFjZVRleHR1cmVUYXJnZXQ7CiAj
ZWxzZQogI2Vycm9yIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24KICNlbmRpZgogICAgIGF1dG8g
dXZUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgbV9jb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMSk7CiAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHV2VGV4dHVyZSk7Ci0gICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0g
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0
R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRh
cmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVy
ZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHRHTDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGlj
c0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7CiAjaWYgVVNFKEFOR0xFKQotICAgIGF1dG8gdXZI
YW5kbGUgPSBhdHRhY2hJT1N1cmZhY2VUb1RleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHQzRDo6UkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOworICAgIGF1dG8gdXZIYW5kbGUg
PSBhdHRhY2hJT1N1cmZhY2VUb1RleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHRHTDo6UkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpOwogICAgIGlmICghdXZIYW5kbGUpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAjZWxzZQotICAgIGlmICghbV9jb250ZXh0LT50ZXhJbWFnZUlPU3Vy
ZmFjZTJEKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHLCB1dlBsYW5l
V2lkdGgsIHV2UGxhbmVIZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRywgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDEpKSB7CisgICAgaWYgKCFtX2NvbnRleHQt
PnRleEltYWdlSU9TdXJmYWNlMkQodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRH
TDo6UkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlJH
LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSkpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAjZW5kaWYgLy8gVVNFKEFOR0xFKQogCiAgICAgYXV0byB5VGV4dHVyZSA9
IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dC0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB5VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Cisg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7
CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVB
Uik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBf
VE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHRHTDo6
Q0xBTVBfVE9fRURHRSk7CiAjaWYgVVNFKEFOR0xFKQotICAgIGF1dG8geUhhbmRsZSA9IGF0dGFj
aElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBzdXJmYWNlLCAwKTsKKyAgICBhdXRvIHlIYW5kbGUgPSBhdHRhY2hJT1N1cmZh
Y2VUb1RleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6UkVELCB5
UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RSwgc3VyZmFjZSwgMCk7CiAgICAgaWYgKCF5SGFuZGxlKSB7CiAgICAgICAgIG1fY29udGV4dC0+
ZGVsZXRlVGV4dHVyZSh5VGV4dHVyZSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVy
ZSh1dlRleHR1cmUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogI2Vsc2UKLSAgICBp
ZiAoIW1fY29udGV4dC0+dGV4SW1hZ2VJT1N1cmZhY2UyRCh2aWRlb1RleHR1cmVUYXJnZXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0UsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQsIEdy
YXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0UsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCBzdXJmYWNlLCAwKSkgeworICAgIGlmICghbV9jb250ZXh0LT50ZXhJbWFnZUlPU3VyZmFj
ZTJEKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRSwgeVBs
YW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRSwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApKSB7CiAgICAgICAgIG1f
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZSh5VGV4dHVyZSk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVs
ZXRlVGV4dHVyZSh1dlRleHR1cmUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC05MjEsNyAr
OTIxLDcgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weUltYWdlVG9QbGF0Zm9ybVRl
eHR1cmUoQ1ZQaXhlbEJ1ZmZlclJlZiBpbWFnZSwgc2kKICAgICBtX2NvbnRleHQtPnVuaWZvcm1N
YXRyaXg0ZnYobV9jb2xvck1hdHJpeFVuaWZvcm1Mb2NhdGlvbiwgMSwgR0xfRkFMU0UsIGNvbG9y
TWF0cml4LmRhdGEoKSk7CiAKICAgICAvLyBEbyB0aGUgYWN0dWFsIGRyYXdpbmcuCi0gICAgbV9j
b250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDAsIDYpOwor
ICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHRHTDo6VFJJQU5HTEVTLCAw
LCA2KTsKIAogI2lmIFVTRShPUEVOR0xfRVMpIHx8IChVU0UoQU5HTEUpICYmIFBMQVRGT1JNKElP
U19GQU1JTFkpKQogICAgIC8vIGZsdXNoKCkgbXVzdCBiZSBjYWxsZWQgaGVyZSBpbiBvcmRlciB0
byByZS1zeW5jaHJvbml6ZSB0aGUgb3V0cHV0IHRleHR1cmUncyBjb250ZW50cyBhY3Jvc3MgdGhl
CkBAIC0xMDEwLDE5ICsxMDEwLDE5IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlW
aWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHZpCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOworICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7
CiAgICAgCiAgICAgLy8gQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgb3V0cHV0IHRleHR1cmUuCi0g
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
b3V0cHV0VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkREaXJlY3QoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLQotICAgIG1fY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBvdXRwdXRUZXh0dXJlLCBsZXZlbCk7Ci0gICAgR0MzRGVudW0gc3RhdHVzID0gbV9jb250
ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Uik7Ci0gICAgaWYgKHN0YXR1cyAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpOworICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7Cisg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpD
TEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfVCwgR3Jh
cGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2Uy
RERpcmVjdChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOworCisgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKKyAgICBHQzNEZW51bSBzdGF0
dXMgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSKTsKKyAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICBMT0coV2ViR0wsICJWaWRlb1RleHR1cmVDb3Bp
ZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIFVuYWJsZSB0byBj
cmVhdGUgZnJhbWVidWZmZXIgZm9yIG91dHB1dFRleHR1cmUuIiwgdGhpcyk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0xMDMxLDEyICsxMDMxLDEyIEBAIGJvb2wgVmlkZW9UZXh0
dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShQbGF0Zm9ybTNE
T2JqZWN0IHZpCiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsK
IAogICAgIC8vIEJpbmQgYW5kIHNldCB1cCB0aGUgdGV4dHVyZSBmb3IgdGhlIHZpZGVvIHNvdXJj
ZS4KLSAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkUwKTsKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwg
dmlkZW9UZXh0dXJlTmFtZSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4
dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVv
VGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZp
ZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
TUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7CiAK
ICAgICAvLyBDb25maWd1cmUgdGhlIGRyYXdpbmcgcGFyYW1ldGVycy4KICAgICBtX2NvbnRleHQt
PnVuaWZvcm0xaShtX3RleHR1cmVVbmlmb3JtTG9jYXRpb24sIDApOwpAQCAtMTA1Miw5ICsxMDUy
LDkgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZv
cm1UZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdmkKIAogICAgIC8vIERvIHRoZSBhY3R1YWwgZHJh
d2luZy4KICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25B
dHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uLCAyLCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgMCwgNik7CisgICAgbV9jb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QnVmZmVy
KTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkF0dHJpYnV0
ZUxvY2F0aW9uLCAyLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAg
ICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0R0w6OlRSSUFOR0xFUywgMCwg
Nik7CiAKICNpZiBVU0UoT1BFTkdMX0VTKQogICAgIC8vIGZsdXNoKCkgbXVzdCBiZSBjYWxsZWQg
aGVyZSBpbiBvcmRlciB0byByZS1zeW5jaHJvbml6ZSB0aGUgb3V0cHV0IHRleHR1cmUncyBjb250
ZW50cyBhY3Jvc3MgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuaAppbmRleCAzNmJkYTkxZGQ1OGZkYjM0
OGY0ZjJjYmFiM2VlYjRhZjg5MjVmNGUxLi4xMTVlOTgwYzllOTk5NTNjZDU4NjNmYzI5OTY0NDQ2
ZTEyMDM4MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9WaWRlb1RleHR1cmVDb3BpZXJDVi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lm
IEhBVkUoQ09SRV9WSURFTykKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW1wb3J0IDx3dGYvVW5zYWZlUG9pbnRl
ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyKiBDVkltYWdlQnVmZmVyUmVmOwpAQCAt
NDIsNyArNDIsNyBAQCBjbGFzcyBUZXh0dXJlQ2FjaGVDVjsKIGNsYXNzIFZpZGVvVGV4dHVyZUNv
cGllckNWIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBWaWRl
b1RleHR1cmVDb3BpZXJDVihHcmFwaGljc0NvbnRleHQzRCYpOworICAgIFZpZGVvVGV4dHVyZUNv
cGllckNWKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJik7CiAgICAgflZpZGVvVGV4dHVyZUNvcGll
ckNWKCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNTQsNyArNTQsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBjb3B5SW1hZ2VUb1BsYXRmb3JtVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVm
LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0cHV0VGV4
dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRp
cGx5QWxwaGEsIGJvb2wgZmxpcFkpOwogICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZv
cm1UZXh0dXJlKFRleHR1cmVUeXBlLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIFBsYXRm
b3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFksIGJvb2wgc3dhcENvbG9y
Q2hhbm5lbHMgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCgpIHsg
cmV0dXJuIG1fY29udGV4dDsgfQorICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUsIEdD
M0RlbnVtIGlucHV0VGFyZ2V0LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIFBsYXRmb3Jt
M0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFksIGJvb2wgc3dhcENvbG9yQ2hh
bm5lbHMpOwpAQCAtODEsOCArODEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZGV0YWNoSU9TdXJm
YWNlRnJvbVRleHR1cmUodm9pZCogaGFuZGxlKTsKICNlbmRpZgogCi0gICAgUmVmPEdyYXBoaWNz
Q29udGV4dDNEPiBtX3NoYXJlZENvbnRleHQ7Ci0gICAgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQ7CisgICAgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBtX3NoYXJlZENvbnRl
eHQ7CisgICAgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBtX2NvbnRleHQ7CiAjaWYgIVVT
RShBTkdMRSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZUNhY2hlQ1Y+IG1fdGV4dHVyZUNh
Y2hlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZ2wvR0xDb250ZXh0RUdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VnbC9HTENvbnRleHRFR0wuY3BwCmluZGV4IGE4YTgyZDcwOTdhYTRiMzMyYTU0ZjkwNzM0YTNl
ZDliYzllY2U5NWUuLjNkMzJmODhlZTJhNWQwMGI4NDhlYTRlODMyZDRmM2NiNDdhMTJlM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRF
R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRl
eHRFR0wuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpZiBVU0UoRUdMKQogCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheS5oIgogCiAjaWYgVVNFKExJQkVQT1hZKQpAQCAt
NDg3LDggKzQ4Nyw4IEBAIGNhaXJvX2RldmljZV90KiBHTENvbnRleHRFR0w6OmNhaXJvRGV2aWNl
KCkKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi1QbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIEdMQ29udGV4dEVHTDo6cGxhdGZvcm1Db250ZXh0KCkKKyNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR0xD
b250ZXh0RUdMOjpwbGF0Zm9ybUNvbnRleHQoKQogewogICAgIHJldHVybiBtX2NvbnRleHQ7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250
ZXh0RUdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0
RUdMLmgKaW5kZXggMGM3YTg0OGU4NjIxMmU1NzE4OWFlMWZlNzI4OWNmMDU0OGQ0YWM2NS4uOWRh
NjMyMjA4NjFiMzYzMzY3MDlmMjFlOTVjNDE3NTZiODgxN2MyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuaApAQCAtNjgsOCAr
NjgsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgYm9vbCBpc0VHTENvbnRleHQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8z
RCkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpIG92ZXJy
aWRlOworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIGVu
dW0gRUdMU3VyZmFjZVR5cGUgeyBQYnVmZmVyU3VyZmFjZSwgV2luZG93U3VyZmFjZSwgUGl4bWFw
U3VyZmFjZSwgU3VyZmFjZWxlc3MgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAKaW5kZXggYWRmMzIxOWNkOTNjYjVhODZi
ZDZhNmQ2NTBlMWEwMTAyMDIyMmQ1Zi4uODE1NTc3MTBiMmNmNDYzZWVmYWUwNmM3MzIzNDkxNTEw
NzJiNzUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4
L0dMQ29udGV4dEdMWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z2x4L0dMQ29udGV4dEdMWC5jcHAKQEAgLTQxMyw4ICs0MTMsOCBAQCBjYWlyb19kZXZpY2VfdCog
R0xDb250ZXh0R0xYOjpjYWlyb0RldmljZSgpCiAgICAgcmV0dXJuIG1fY2Fpcm9EZXZpY2U7CiB9
CiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLVBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgR0xDb250ZXh0R0xYOjpwbGF0Zm9ybUNvbnRleHQoKQorI2lmIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKQorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHTENvbnRleHRHTFg6OnBs
YXRmb3JtQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFgu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaApp
bmRleCBjYTI0MDI0ZjZjYTQyYTJkODgyNTZjYzk0YjI0OGQwZTNkMThkYWI4Li40YzcyYTgzOGE3
M2VlNDA3N2MyMzBjMmY2OTc3Mjk3OTY5NjgzOGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCkBAIC01MCw4ICs1MCw4IEBA
IHByaXZhdGU6CiAgICAgY2Fpcm9fZGV2aWNlX3QqIGNhaXJvRGV2aWNlKCkgb3ZlcnJpZGU7CiAg
ICAgYm9vbCBpc0VHTENvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0gICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF9HTCkKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4
dCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBHTENvbnRleHRHTFgoUGxhdGZvcm1EaXNwbGF5
JiwgWFVuaXF1ZUdMWENvbnRleHQmJiwgR0xOYXRpdmVXaW5kb3dUeXBlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAppbmRleCA3MWZkYTBk
OTI0Y2QyNTVkYjNlZjEwNzdmOWUxMDc4MTRlMjQzZGY0Li5lNTRkZjI0ZDJiZjJhZWNmOWE5YjBi
MzhkN2QxOGVjYzRhZjVkMDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L1RleHR1cmUuY3BwCkBAIC0zNCw5ICszNCw5IEBACiAKICNpbmNsdWRlICJUZXh0
dXJlLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25z
R0wuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CkBAIC00NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dHVyZTo6
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjx1bnNpZ25lZD4+IHRpbGVUZXh0dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKK1RleHR1cmU6OlRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8dW5zaWduZWQ+
PiB0aWxlVGV4dHVyZUlkcywgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgbWF4VGV4dHVyZVNpemUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fZm9y
bWF0KGZvcm1hdCkKICAgICAsIG1fdGlsZXMoSW50U2l6ZShtYXhUZXh0dXJlU2l6ZSwgbWF4VGV4
dHVyZVNpemUpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCB0cnVlKQpAQCAtNTQsMjUgKzU0LDI1
IEBAIFRleHR1cmU6OlRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8dW5zaWduZWQ+PiB0CiAKIFRleHR1cmU6On5UZXh0dXJlKCkKIHsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fdGlsZVRleHR1cmVJZHMtPnNpemUoKTsg
aSsrKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3RpbGVUZXh0dXJlSWRzLT5zaXpl
KCk7IGkrKykKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fdGlsZVRleHR1cmVJ
ZHMtPmF0KGkpKTsKIH0KIAotc3RhdGljIHZvaWQgY29udmVydEZvcm1hdChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgaW50KiBnbEZv
cm1hdCwgdW5zaWduZWQgaW50KiBnbFR5cGUsIGJvb2wqIHN3aXp6bGUpCitzdGF0aWMgdm9pZCBj
b252ZXJ0Rm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBUZXh0dXJlOjpG
b3JtYXQgZm9ybWF0LCB1bnNpZ25lZCogZ2xGb3JtYXQsIHVuc2lnbmVkKiBnbFR5cGUsIGJvb2wq
IHN3aXp6bGUpCiB7CiAgICAgKnN3aXp6bGUgPSBmYWxzZTsKICAgICBzd2l0Y2ggKGZvcm1hdCkg
ewogICAgIGNhc2UgVGV4dHVyZTo6UkdCQTg6Ci0gICAgICAgICpnbEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOwotICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU7CisgICAgICAgICpnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
OworICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dHVyZTo6QkdSQTg6CiAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCIpKSB7Ci0gICAgICAgICAgICAqZ2xGb3JtYXQgPSBFeHRlbnNpb25zM0Q6OkJHUkFfRVhU
OwotICAgICAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OworICAgICAgICAgICAgKmdsRm9ybWF0ID0gRXh0ZW5zaW9uc0dMOjpCR1JBX0VYVDsKKyAgICAg
ICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpnbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOwotICAgICAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFOworICAgICAgICAgICAgKmdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE7Cisg
ICAgICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU7CiAg
ICAgICAgICAgICAqc3dpenpsZSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBA
IC04MiwxMCArODIsMTAgQEAgc3RhdGljIHZvaWQgY29udmVydEZvcm1hdChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwgdW4KICAgICB9CiB9CiAKLVJl
ZlB0cjxUZXh0dXJlPiBUZXh0dXJlOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK1JlZlB0cjxUZXh0dXJlPiBU
ZXh0dXJlOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIEZvcm1hdCBm
b3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBpbnQgbWF4VGV4dHVyZVNpemUg
PSAwOwotICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVY
VFVSRV9TSVpFLCAmbWF4VGV4dHVyZVNpemUpOworICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9TSVpFLCAmbWF4VGV4dHVyZVNpemUpOwogICAg
IFRpbGluZ0RhdGEgdGlsaW5nKEludFNpemUobWF4VGV4dHVyZVNpemUsIG1heFRleHR1cmVTaXpl
KSwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgdHJ1ZSk7CiAKICAgICAvLyBDaGVjayBmb3Igb3Zl
cmZsb3cuCkBAIC0xMTUsOCArMTE1LDggQEAgUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHcKICAgICAg
ICAgdW5zaWduZWQgaW50IGdsVHlwZSA9IDA7CiAgICAgICAgIGJvb2wgc3dpenpsZTsKICAgICAg
ICAgY29udmVydEZvcm1hdChjb250ZXh0LCBmb3JtYXQsICZnbEZvcm1hdCwgJmdsVHlwZSwgJnN3
aXp6bGUpOwotICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291
cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZ2xGb3JtYXQsCisgICAg
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCB0
ZXh0dXJlSWQpOworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwLCBnbEZvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVy
LmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGds
Rm9ybWF0LCBnbFR5cGUpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgVGV4dHVyZTo6dXBkYXRl
U3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCiAgICAgYm9v
bCBzd2l6emxlOwogICAgIGNvbnZlcnRGb3JtYXQobV9jb250ZXh0LCBtX2Zvcm1hdCwgJmdsRm9y
bWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7CiAgICAgaWYgKHN3aXp6bGUpIHsKLSAgICAgICAgQVNT
RVJUKGdsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGdsVHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CisgICAgICAgIEFTU0VSVChnbEZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAmJiBnbFR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBGSVhNRTogIFRoaXMgY291bGQgdXNlIFBCTydz
IHRvIHNhdmUgZG9pbmcgYW4gZXh0cmEgY29weSBoZXJlLgogICAgIH0KICAgICBpbnQgdGVtcEJ1
ZmZTaXplID0gLy8gVGVtcG9yYXJ5IGJ1ZmZlciBzaXplIGlzIHRoZSBzbWFsbGVyIG9mIHRoZSBt
YXggdGV4dHVyZSBzaXplIG9yIHRoZSB1cGRhdGVSZWN0U2FuaXRpemVkCkBAIC0yMDEsOCArMjAx
LDggQEAgdm9pZCBUZXh0dXJlOjp1cGRhdGVTdWJSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50
UmVjdCYgdXBkYXRlUmVjdCkKICAgICAgICAgICAgIHRlbXBCdWZmLmdldCgpLCB1cGRhdGVSZWN0
SW50ZXJzZWN0ZWQud2lkdGgoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLmhlaWdodCgpLCBtX3Rp
bGVzLnRvdGFsU2l6ZSgpLndpZHRoKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVy
ZUlkcy0+YXQodGlsZSkpOwotICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sCisgICAgICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1
cmVJZHMtPmF0KHRpbGUpKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwIC8qIGxldmVsICovLAogICAgICAgICAgICAgZHN0
UmVjdC54KCksCiAgICAgICAgICAgICBkc3RSZWN0LnkoKSwKICAgICAgICAgICAgIHVwZGF0ZVJl
Y3RJbnRlcnNlY3RlZC53aWR0aCgpLApAQCAtMjEyLDExICsyMTIsMTEgQEAgdm9pZCBUZXh0dXJl
Ojp1cGRhdGVTdWJSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkK
IAogdm9pZCBUZXh0dXJlOjpiaW5kVGlsZShpbnQgdGlsZSkKIHsKLSAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RpbGVUZXh0dXJlSWRz
LT5hdCh0aWxlKSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7
Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFXzJELCBtX3RpbGVUZXh0dXJlSWRzLT5hdCh0aWxlKSk7CisgICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElO
RUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNz
Q29udGV4dEdMOjpMSU5FQVIpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9T
LCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1Rl
eHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmgK
aW5kZXggNTdhNjgzMjdiZGNmMmI1ZmQwMGRhM2I5NmFhM2U5NDNkMjU3NDQxOS4uNDJjMDJjMzg4
OTk2MDMyMGM4MWNiODg5OTA4ZWM1M2JhOWNkZjM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogCiBjbGFzcyBJbnRSZWN0
OwogCkBAIC00NSwxNSArNDUsMTUgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVk
PFRleHR1cmU+IHsKIHB1YmxpYzoKICAgICB+VGV4dHVyZSgpOwogICAgIGVudW0gRm9ybWF0IHsg
UkdCQTgsIEJHUkE4IH07Ci0gICAgc3RhdGljIFJlZlB0cjxUZXh0dXJlPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgc3RhdGlj
IFJlZlB0cjxUZXh0dXJlPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBGb3JtYXQs
IGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgdm9pZCBiaW5kVGlsZShpbnQgdGlsZSk7CiAg
ICAgdm9pZCBsb2FkKHZvaWQqIHBpeGVscyk7CiAgICAgdm9pZCB1cGRhdGVTdWJSZWN0KHZvaWQq
IHBpeGVscywgY29uc3QgSW50UmVjdCYpOwogICAgIEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdDsgfQogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV90aWxlczsgfQogcHJpdmF0ZToKLSAgICBUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
Kiwgc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjx1bnNpZ25lZD4+IHRpbGVUZXh0dXJlSWRzLCBGb3Jt
YXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1heFRleHR1cmVTaXplKTsKLSAgICBHcmFw
aGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHVuc2lnbmVkPj4gdGlsZVRleHR1cmVJZHMs
IEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBtX2NvbnRleHQ7CiAgICAgRm9ybWF0IG1fZm9ybWF0
OwogICAgIFRpbGluZ0RhdGEgbV90aWxlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHVu
c2lnbmVkPj4gbV90aWxlVGV4dHVyZUlkczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFt
ZXIuY3BwCmluZGV4IDMyYWE4NTkyMzJiMzdiMTgxZmExY2MwNWFiMGIwZjE4NzJlMjZjMmYuLmNj
NTkwYjgzOTJlMTJkN2M1MzVjZTRlM2E4YWQzZGE1NmQwODBkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dM
VmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMjA3LDcgKzIwNyw3IEBAIHN0YXRpYyBib29sIGVu
c3VyZUdzdEdMQ29udGV4dChXZWJLaXRHTFZpZGVvU2luayogc2luaykKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICNlbmRpZgogCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBjb250
ZXh0SGFuZGxlID0gc2hhcmVkQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHRHTCBjb250ZXh0SGFuZGxlID0gc2hhcmVkQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0SGFuZGxlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAK
aW5kZXggOTgwMDc4YmZkZWE0MmNiZDIzZTc1YmE1NDlhMTY3OTQ1YmUxYTUyNC4uYjVmYWIxNzlh
NGRmYmNkNjBhZTUxNzE4MzFmYjU0MWJlZDg5NDdmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTMyOTQsNyArMzI5NCw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjCiB9CiAKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0
dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBmbGlwWSkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0
VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZmQwNDc1NDc5Yzc0OGU0NDgyNGFmYmRhMGVj
MjFjZWI4MzA5YjlkMi4uZTIzOWY5NmM0Y2MwOTg5YTM5MTZhMTljMTI1OTk0NTRmNmVlZTFhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtODYs
NyArODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCaXRtYXBUZXh0dXJlR0w7CiBj
bGFzcyBHTENvbnRleHQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogY2xhc3MgSW50U2l6ZTsK
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI7CkBAIC0y
MDgsNyArMjA4LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoR1NUUkVBTUVSX0dMKQot
ICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNE
ZW51bSwgR0MzRGVudW0sIGJvb2wsIGJvb2wpIG92ZXJyaWRlOworICAgIGJvb2wgY29weVZpZGVv
VGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZv
cm0zRE9iamVjdCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVu
dW0sIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
Rm9yQ3VycmVudFRpbWUoKSBvdmVycmlkZTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0M0RJT1MuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQzRElPUy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGVlMTAzMTg2YzgwOWQyNmExMTBkMmVm
OGMwODA2NzAzMzZjM2I1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRl
eHQzRElPUy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShP
UEVOR0xfRVMpCi0KLSNkZWZpbmUgZ2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZm
ZXIKLSNkZWZpbmUgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUIGdsQmluZFJlbmRlcmJ1ZmZlcgotI2Rl
ZmluZSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
Ci0jZGVmaW5lIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUIGdsRGVsZXRlRnJhbWVidWZmZXJzCi0j
ZGVmaW5lIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMKLSNk
ZWZpbmUgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyCi0jZGVmaW5lIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRAotI2RlZmluZSBnbEdlbmVyYXRlTWlwbWFwRVhUIGdsR2VuZXJhdGVNaXBtYXAKLSNkZWZp
bmUgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5GcmFtZWJ1ZmZlcnMKLSNkZWZpbmUgZ2xHZW5S
ZW5kZXJidWZmZXJzRVhUIGdsR2VuUmVuZGVyYnVmZmVycwotI2RlZmluZSBnbEdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYKLSNkZWZpbmUgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCBnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2Ci0jZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVYVCBnbElzRnJh
bWVidWZmZXIKLSNkZWZpbmUgZ2xJc1JlbmRlcmJ1ZmZlckVYVCBnbElzUmVuZGVyYnVmZmVyCi0j
ZGVmaW5lIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKLSNk
ZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVBUFBMRQotCi0jZGVmaW5lIGdsRHJhd0FycmF5c0luc3RhbmNlZEFS
QiBnbERyYXdBcnJheXNJbnN0YW5jZWRFWFQKLSNkZWZpbmUgZ2xEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBUkIgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRFWFQKLSNkZWZpbmUgZ2xWZXJ0ZXhBdHRyaWJE
aXZpc29yQVJCIGdsVmVydGV4QXR0cmliRGl2aXNvckVYVAotCi0jZGVmaW5lIGdsQmluZFZlcnRl
eEFycmF5IGdsQmluZFZlcnRleEFycmF5T0VTCi0jZGVmaW5lIGdsRGVsZXRlVmVydGV4QXJyYXlz
IGdsRGVsZXRlVmVydGV4QXJyYXlzT0VTCi0jZGVmaW5lIGdsR2VuVmVydGV4QXJyYXlzIGdsR2Vu
VmVydGV4QXJyYXlzT0VTCi0jZGVmaW5lIGdsSXNWZXJ0ZXhBcnJheSBnbElzVmVydGV4QXJyYXlP
RVMKLQotI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgR0xfQ09MT1JfQVRUQUNITUVO
VDAKLSNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQgR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVMKLSNkZWZpbmUgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQgIEdMX0RFUFRIX0FUVEFDSE1FTlQK
LSNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQgR0xfRFJBV19GUkFNRUJVRkZFUl9BUFBM
RQotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQgR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUKLSNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfRVhUIEdMX0ZSQU1FQlVGRkVSCi0jZGVmaW5l
IEdMX01BWF9TQU1QTEVTX0VYVCBHTF9NQVhfU0FNUExFU19BUFBMRQotI2RlZmluZSBHTF9SRUFE
X0ZSQU1FQlVGRkVSX0VYVCBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FQUExFCi0jZGVmaW5lIEdMX1JF
TkRFUkJVRkZFUl9FWFQgR0xfUkVOREVSQlVGRkVSCi0jaWZuZGVmIEdMX1JHQjgKLSNkZWZpbmUg
R0xfUkdCOCBHTF9SR0IKLSNlbmRpZgotI2lmbmRlZiBHTF9SR0JBOAotI2RlZmluZSBHTF9SR0JB
OCBHTF9SR0JBCi0jZW5kaWYKLSNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlQKLSNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWIEdM
X1VOU0lHTkVEX0JZVEUKLQotI2VuZGlmIC8vIFVTRShPUEVOR0xfRVMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xFU0lPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMRVNJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOGVlMTAzMTg2YzgwOWQyNmExMTBk
MmVmOGMwODA2NzAzMzZjM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKE9QRU5HTF9FUykKKworI2RlZmluZSBnbEJpbmRGcmFt
ZWJ1ZmZlckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJF
WFQgZ2xCaW5kUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VY
VCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNF
WFQgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhU
IGdsRGVsZXRlUmVuZGVyYnVmZmVycworI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
RVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBF
WFQgZ2xHZW5lcmF0ZU1pcG1hcAorI2RlZmluZSBnbEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZy
YW1lYnVmZmVycworI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZm
ZXJzCisjZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xH
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUg
Z2xJc0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbElzUmVuZGVyYnVm
ZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhU
IGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFQUExFCisKKyNkZWZp
bmUgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQVJCIGdsRHJhd0FycmF5c0luc3RhbmNlZEVYVAorI2Rl
ZmluZSBnbERyYXdFbGVtZW50c0luc3RhbmNlZEFSQiBnbERyYXdFbGVtZW50c0luc3RhbmNlZEVY
VAorI2RlZmluZSBnbFZlcnRleEF0dHJpYkRpdmlzb3JBUkIgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
RVhUCisKKyNkZWZpbmUgZ2xCaW5kVmVydGV4QXJyYXkgZ2xCaW5kVmVydGV4QXJyYXlPRVMKKyNk
ZWZpbmUgZ2xEZWxldGVWZXJ0ZXhBcnJheXMgZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMKKyNkZWZp
bmUgZ2xHZW5WZXJ0ZXhBcnJheXMgZ2xHZW5WZXJ0ZXhBcnJheXNPRVMKKyNkZWZpbmUgZ2xJc1Zl
cnRleEFycmF5IGdsSXNWZXJ0ZXhBcnJheU9FUworCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1F
TlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4
X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUworI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
X0VYVCAgR0xfREVQVEhfQVRUQUNITUVOVAorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0VY
VCBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FQUExFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9F
WFQgR0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIEdMX01BWF9TQU1Q
TEVTX0FQUExFCisjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfRVhUIEdMX1JFQURfRlJBTUVC
VUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIK
KyNpZm5kZWYgR0xfUkdCOAorI2RlZmluZSBHTF9SR0I4IEdMX1JHQgorI2VuZGlmCisjaWZuZGVm
IEdMX1JHQkE4CisjZGVmaW5lIEdMX1JHQkE4IEdMX1JHQkEKKyNlbmRpZgorI2RlZmluZSBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NURU5DSUxfQVRUQUNITUVOVAorI2RlZmluZSBHTF9V
TlNJR05FRF9JTlRfOF84XzhfOF9SRVYgR0xfVU5TSUdORURfQllURQorCisjZW5kaWYgLy8gVVNF
KE9QRU5HTF9FUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzREFOR0xFTGF5ZXIu
Y3BwCmluZGV4IGFhM2RlYTBhOTI4NTJlZjlmMzhjZGU2NDZiNjA4MDFhZDJmZjc4YWQuLmQ4N2Qz
MmZkNjM3M2U4YmI3OGE1OTI1NWE2NDc2MjZmM2JjMzRlZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcApAQCAtMTc0LDE5ICsxNzQsMTkgQEAgYm9v
bCBHQzNEQU5HTEVMYXllcjo6QU5HTEVDb250ZXh0OjptYWtlQ29udGV4dEN1cnJlbnQoKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdDM0RBTkdMRUxh
eWVyOjpBTkdMRUNvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMIEdDM0RBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29udGV4dDsKIH0KIAotR0MzREFOR0xFTGF5ZXI6
OkdDM0RBTkdMRUxheWVyKEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCitHQzNEQU5HTEVMYXllcjo6R0MzREFOR0xF
TGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKICAgICA6IEdDM0RMYXllcihjb250ZXh0
KQogewogICAgIHN3aXRjaCAoZGVzdGluYXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CiAgICAgICAgIG1fYW5nbGVDb250ZXh0ID0g
QU5HTEVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hv
c3RXaW5kb3c6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0yMDMsNyArMjAzLDcgQEAgYm9vbCBHQzNEQU5HTEVMYXllcjo6bWFrZUNvbnRl
eHRDdXJyZW50KCkKIAogfQogCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdDM0RBTkdMRUxh
eWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBH
QzNEQU5HTEVMYXllcjo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9h
bmdsZUNvbnRleHQpOwogICAgIHJldHVybiBtX2FuZ2xlQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L3RleG1hcC9OaWNvc2lhR0MzREFOR0xFTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5oCmluZGV4IGVj
NDdlYWRmMmU5MTY1MGEyZWViZGY2NjdiODVkYmMzMDA3MzRhM2IuLjIxMWYxZTU3YmU4NDdlZDQw
YjZjZWI3YThmYWUzZDc4ZTRkNTVhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFH
QzNEQU5HTEVMYXllci5oCkBAIC0zMSw3ICszMSw3IEBACiAjaWYgVVNFKE5JQ09TSUEpICYmIFVT
RShURVhUVVJFX01BUFBFUikKIAogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIK
ICNpbmNsdWRlICJOaWNvc2lhR0MzRExheWVyLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogCkBAIC02
MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+QU5HTEVDb250ZXh0KCk7CiAK
ICAgICAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkKLSAgICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyAgICAgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKQEAgLTczLDExICs3MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIEVH
TFN1cmZhY2UgbV9zdXJmYWNlIHsgbnVsbHB0ciB9OwogICAgIH07CiAKLSAgICBHQzNEQU5HTEVM
YXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpEZXN0aW5hdGlvbik7CisgICAgR0MzREFOR0xFTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGlu
YXRpb24pOwogICAgIHZpcnR1YWwgfkdDM0RBTkdMRUxheWVyKCk7CiAKICAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpIG92ZXJyaWRlOwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QU5HTEVDb250ZXh0PiBtX2FuZ2xlQ29udGV4dDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFHQzNETGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKaW5kZXggMTZhMTQ1M2MyYjljYzFkMTYxMmVk
M2ExZTRjNjNiNmExZGVjNTA0ZC4uNGM0YzQyNjk2MTI3MWM3YjdhMTlkMjk2YTk0MDBlZmRjMGZh
YzlhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKQEAgLTQ3LDIx
ICs0NywyMSBAQCBuYW1lc3BhY2UgTmljb3NpYSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi1HQzNETGF5ZXI6OkdDM0RMYXllcihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKK0dD
M0RMYXllcjo6R0MzRExheWVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0KQogICAg
IDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2NvbnRlbnRMYXllcihOaWNvc2lhOjpDb250
ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6
Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQogewogfQogCi1HQzNETGF5ZXI6OkdDM0RMYXllcihHcmFw
aGljc0NvbnRleHQzRCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRl
c3RpbmF0aW9uKQorR0MzRExheWVyOjpHQzNETGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wm
IGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlv
bikKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9jb250ZW50TGF5ZXIoTmljb3Np
YTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKIHsKICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9u
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246Ok9mZnNjcmVlbjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbjo6T2Zmc2NyZWVu
OgogICAgICAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4
dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uOjpEaXJl
Y3RseVRvSG9zdFdpbmRvdzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0
aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3c6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03OCw3ICs3OCw3IEBAIGJvb2wgR0MzRExh
eWVyOjptYWtlQ29udGV4dEN1cnJlbnQoKQogICAgIHJldHVybiBtX2dsQ29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR0MzRExheWVy
OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHQzNE
TGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZ2xDb250ZXh0
KTsKICAgICByZXR1cm4gbV9nbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDM0RMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oCmluZGV4IGU4NTcyMTc3ZGFmY2FhY2FiM2VhMjMwOWQ0
ODRiYzM5MDQyNzhhZTMuLjIzZTRkOGM3YmZhNjg1NzlhYWY2M2I2MGE2ZTc2M2Q2OTZmMDE1NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFHQzNETGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmgKQEAgLTMwLDcgKzMwLDcgQEAK
IAogI2lmIFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
CiAjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCiAjaW5j
bHVkZSA8bWVtb3J5PgogCkBAIC00MywxOSArNDMsMTkgQEAgbmFtZXNwYWNlIE5pY29zaWEgewog
Y2xhc3MgR0MzRExheWVyIDogcHVibGljIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpD
bGllbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxp
Y2l0IEdDM0RMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCYpOwotICAgIEdDM0RMYXll
cihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpEZXN0aW5hdGlvbik7CisgICAgZXhwbGljaXQgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMJik7CisgICAgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9u
KTsKIAogICAgIHZpcnR1YWwgfkdDM0RMYXllcigpOwogCiAgICAgQ29udGVudExheWVyJiBjb250
ZW50TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllcjsgfQogICAgIHZpcnR1YWwg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwogCiAgICAgdm9pZCBzd2Fw
QnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0QmIG1fY29udGV4dDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHTENvbnRl
eHQ+IG1fZ2xDb250ZXh0OwogCiAgICAgUmVmPENvbnRlbnRMYXllcj4gbV9jb250ZW50TGF5ZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2MWMwYzZlNDg3ZDIyNjQ3MDdkNmFlN2I5MmYwN2VhMGU5YzFjYjNmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkg
JiYgVVNFKE9QRU5HTF9FUykpKQotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCi0K
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShXSU4pCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbGlmIFVTRShPUEVOR0xf
RVMpCi0jaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+Ci0jZWxpZiBVU0UoT1BFTkdMKQot
I2luY2x1ZGUgPE9wZW5HTC9nbC5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1FeHRlbnNpb25zM0RPcGVuR0w6OkV4dGVuc2lvbnMzRE9wZW5HTChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQotICAgIDog
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKGNvbnRleHQsIHVzZUluZGV4ZWRHZXRTdHJpbmcpCi17
Ci19Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTDo6fkV4dGVuc2lvbnMzRE9wZW5HTCgpID0gZGVmYXVs
dDsKLQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3Jj
WDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcg
ZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu
ZWQgbG9uZyBmaWx0ZXIpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMp
Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTApOwotICAg
IFVOVVNFRF9QQVJBTShzcmNYMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKLSAgICBVTlVT
RURfUEFSQU0oZHN0WDApOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGRzdFgxKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WTEpOwotICAgIFVOVVNFRF9QQVJBTSht
YXNrKTsKLSAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKLSAgICA6OmdsUmVzb2x2ZU11bHRpc2Ft
cGxlRnJhbWVidWZmZXJBUFBMRSgpOwotI2Vsc2UKLSAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhU
KHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwg
bWFzaywgZmlsdGVyKTsKLSNlbmRpZgotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIDo6Z2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVFWFQodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMOjpj
cmVhdGVWZXJ0ZXhBcnJheU9FUygpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBHTHVpbnQgYXJyYXkgPSAwOwotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQotICAgIGlmIChp
c1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCi0gICAgICAgIGdsR2VuVmVydGV4QXJyYXlz
KDEsICZhcnJheSk7Ci0jZWxpZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3Qp
ICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBnbEdlblZlcnRleEFycmF5c0FQ
UExFKDEsICZhcnJheSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXZvaWQgRXh0
ZW5zaW9uczNET3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFy
cmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCi0gICAgaWYgKGlzVmVy
dGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKLSAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMo
MSwgJmFycmF5KTsKLSNlbGlmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkg
JiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAotICAgIGdsRGVsZXRlVmVydGV4QXJyYXlz
QVBQTEUoMSwgJmFycmF5KTsKLSNlbmRpZgotfQotCi1HQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RP
cGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBp
ZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8
fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQotICAgIGlmIChpc1ZlcnRleEFy
cmF5T2JqZWN0U3VwcG9ydGVkKCkpCi0gICAgICAgIHJldHVybiBnbElzVmVydGV4QXJyYXkoYXJy
YXkpOwotI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9B
UFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheUFQUExF
KGFycmF5KTsKLSNlbmRpZgotICAgIHJldHVybiBHTF9GQUxTRTsKLX0KLQotdm9pZCBFeHRlbnNp
b25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQot
ewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykp
Ci0gICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKLSAgICAgICAgZ2xCaW5k
VmVydGV4QXJyYXkoYXJyYXkpOwotI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlf
b2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgZ2xCaW5kVmVydGV4
QXJyYXlBUFBMRShhcnJheSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhcnJheSk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6Omluc2VydEV2ZW50TWFya2VyRVhUKGNv
bnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFu
ZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgotICAgIHJldHVybjsKLX0K
LQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJp
bmcmKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdM
X0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KLSAgICByZXR1cm47Ci19Ci0KLXZvaWQg
RXh0ZW5zaW9uczNET3BlbkdMOjpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIg
aW4gc3VwcG9ydHMoKS4KLSAgICByZXR1cm47Ci19Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdM
OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gR0xfQU5H
TEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUg
YXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKLSAgICAvLyBleHRl
bnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRf
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUvR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUu
Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQotICAgICAgICBy
ZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJf
YmxpdCIpOwotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSIpCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsK
LSNlbHNlCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdM
X0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotI2VuZGlmCi0KLSAgICBpZiAobmFtZSA9
PSAiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpIHsKLSAgICAgICAgcmV0dXJuIChtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl9pbnN0YW5jZWRfYXJyYXlzIikgfHwgbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfaW5zdGFuY2VkX2FycmF5cyIpKQot
ICAgICAgICAgICAgJiYgKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2Ry
YXdfaW5zdGFuY2VkIikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRf
ZHJhd19pbnN0YW5jZWQiKSk7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9zUkdC
IikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVF
eHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfc1JHQiIpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJu
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfc1JHQiIpICYm
IChtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9zUkdC
IikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfZnJhbWVidWZmZXJf
c1JHQiIpKTsKLSNlbmRpZgotCi0gICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9mcmFnX2RlcHRoIikK
LSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICAgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYWdfZGVwdGgi
KTsKLSNlbmRpZgotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgR0xfT0VTX3Jn
YjhfcmdiYTguCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3JnYmE4IikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9mbG9hdCBvciBHTF9PRVNf
dGV4dHVyZV9mbG9hdCBpcyBhdmFpbGFibGUgdGhlbiB3ZSByZXBvcnQKLSAgICAvLyBHTF9PRVNf
dGV4dHVyZV9oYWxmX2Zsb2F0LCBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgYW5kIEdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIGFzIGF2YWlsYWJsZS4KLSAgICBpZiAobmFtZSA9
PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIgfHwgbmFtZSA9
PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKQotICAgICAgICByZXR1cm4gbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpIHx8IG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3RleHR1cmVfZmxvYXQiKTsKLQot
ICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgewotI2lmIChQTEFURk9STShHVEspKQotICAgICAgICBy
ZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdmVydGV4X2FycmF5
X29iamVjdCIpOwotI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qi
KTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
IkdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8v
IERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBkZXJpdmF0aXZlIGZ1bmN0
aW9ucwotICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIFVO
U0lHTkVEX0lOVCBpbmRpY2VzCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19lbGVtZW50X2luZGV4
X3VpbnQiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAobmFtZSA9PSAiR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAKLSAgICBp
ZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljIik7Ci0KLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX2RyYXdfYnVmZmVy
cyIpIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOwotI2VsaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShHVEspCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
IkdMX0FSQl9kcmF3X2J1ZmZlcnMiKTsKLSNlbHNlCi0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgc3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShJT1Nf
RkFNSUxZX1NJTVVMQVRPUikKLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3BhY2tlZF9kZXB0aF9z
dGVuY2lsIikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiCi0gICAgICAgIHx8IG5hbWUgPT0gIkdMX0FO
R0xFX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKSB7Ci0gICAgICAgIC8vIEltcGxpY2l0bHkgZW5h
YmxlZCB3aXRoIEVTIDMuMCBjb250ZXh0cy4KLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+bV9p
c0ZvcldlYkdMMjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMobmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpkcmF3
QnVmZmVyc0VYVChHQzNEc2l6ZWkgbiwgY29uc3QgR0MzRGVudW0qIGJ1ZnMpCi17Ci0gICAgLy8g
IEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zLgotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICA6OmdsRHJhd0J1ZmZlcnNBUkIobiwgYnVmcyk7Ci0jZWxpZiBQTEFURk9S
TShHVEspCi0gICAgOjpnbERyYXdCdWZmZXJzKG4sIGJ1ZnMpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0obik7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgRXh0
ZW5zaW9uczNET3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICA6
OmdsRHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0j
ZWxpZiBQTEFURk9STShDT0NPQSkKLSAgICA6OmdsRHJhd0FycmF5c0luc3RhbmNlZEFSQihtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtb2Rl
KTsKLSAgICBVTlVTRURfUEFSQU0oZmlyc3QpOwotICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHByaW1jb3VudCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBFeHRlbnNpb25z
M0RPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291
bnQpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9S
TShHVEspCi0gICAgOjpnbERyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSks
IHByaW1jb3VudCk7Ci0jZWxpZiBQTEFURk9STShDT0NPQSkKLSAgICA6OmdsRHJhd0VsZW1lbnRz
SW5zdGFuY2VkQVJCKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIFVOVVNFRF9QQVJBTShjb3VudCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHR5cGUpOwotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJB
TShwcmltY291bnQpOwotI2VuZGlmCi19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjp2ZXJ0
ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQotewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAg
IDo6Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKLSNlbGlmIFBMQVRGT1JN
KENPQ09BKQotICAgIDo6Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQVJCKGluZGV4LCBkaXZpc29yKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oZGl2aXNv
cik7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0RXh0ZW5zaW9u
cygpCi17Ci0gICAgQVNTRVJUKCFtX3VzZUluZGV4ZWRHZXRTdHJpbmcpOwotICAgIHJldHVybiBT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRF
TlNJT05TKSkpOwotfQotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQ
TEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5H
TDo6aXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgc3VwcG9ydHNWZXJ0ZXhBcnJheU9iamVjdCA9IHN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2Fy
cmF5X29iamVjdCIpOwotICAgIHJldHVybiBzdXBwb3J0c1ZlcnRleEFycmF5T2JqZWN0OwotfQot
I2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQ
SElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBV
U0UoT1BFTkdMX0VTKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQ1MjUwOGE1MzFkYWEyMGQ4YWQ5ZDk5MWZiYTk0ODViYzk5NDNlY2IuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBFeHRlbnNpb25zM0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAv
LyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29u
dGV4dDNEIGltcGxlbWVudGF0aW9ucy4KLSAgICBFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3ND
b250ZXh0M0QqLCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcpOwotICAgIHZpcnR1YWwgfkV4dGVu
c2lvbnMzRE9wZW5HTCgpOwotCi0gICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCi0gICAgdm9p
ZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9u
ZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwg
dW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpIG92ZXJyaWRlOwotCi0gICAg
UGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAg
R0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcHVzaEdyb3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAg
IHZvaWQgcG9wR3JvdXBNYXJrZXJFWFQodm9pZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3QnVm
ZmVyc0VYVChHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVtKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdF
bGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2
aXNvcikgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9u
KGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGdldEV4dGVuc2lvbnMo
KSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLSAgICBib29sIGlzVmVy
dGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYjEzZWY1OGY3NDU0YjVmZmUyNWY5MDM2NmMxYzQ0ZWYxZDI5
NzViNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
M0QpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKLSNpbmNsdWRlICJFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uaCIKLQotI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotCi0j
aWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KLSNpbmNs
dWRlIDxPcGVuR0xFUy9FUzMvZ2wuaD4KLSNlbHNlCi0jZGVmaW5lIEdMX0RPX05PVF9XQVJOX0lG
X01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAotI2luY2x1ZGUgPE9wZW5HTC9nbC5o
PgotI2luY2x1ZGUgPE9wZW5HTC9nbDMuaD4KLSN1bmRlZiBHTF9ET19OT1RfV0FSTl9JRl9NVUxU
SV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQKLSNlbmRpZgotCi0jZWxzZQotCi0jaWYgVVNF
KExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5U2hpbXMuaCIKLSNlbGlmIFVTRShPUEVOR0xfRVMp
Ci0jaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2lu
Y2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jZW5kaWYKLQotI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBib29sIHVzZUluZGV4ZWRHZXRT
dHJpbmcpCi0gICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKLSAg
ICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9pc05WSURJQShmYWxzZSkKLSAgICAsIG1f
aXNBTUQoZmFsc2UpCi0gICAgLCBtX2lzSW50ZWwoZmFsc2UpCi0gICAgLCBtX2lzSW1hZ2luYXRp
b24oZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKGZhbHNl
KQotICAgICwgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoZmFsc2UpCi0g
ICAgLCBtX3VzZUluZGV4ZWRHZXRTdHJpbmcodXNlSW5kZXhlZEdldFN0cmluZykKLXsKLSAgICBt
X3ZlbmRvciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3Ry
aW5nKEdMX1ZFTkRPUikpKTsKLSAgICBtX3JlbmRlcmVyID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfUkVOREVSRVIpKSk7Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPiB2ZW5kb3JDb21wb25lbnRzID0gbV92ZW5kb3IuY29udmVydFRvQVNDSUlMb3dl
cmNhc2UoKS5zcGxpdCgnICcpOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJu
dmlkaWEiKSkKLSAgICAgICAgbV9pc05WSURJQSA9IHRydWU7Ci0gICAgaWYgKHZlbmRvckNvbXBv
bmVudHMuY29udGFpbnMoImF0aSIpIHx8IHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImFtZCIp
KQotICAgICAgICBtX2lzQU1EID0gdHJ1ZTsKLSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250
YWlucygiaW50ZWwiKSkKLSAgICAgICAgbV9pc0ludGVsID0gdHJ1ZTsKLSAgICBpZiAodmVuZG9y
Q29tcG9uZW50cy5jb250YWlucygiaW1hZ2luYXRpb24iKSkKLSAgICAgICAgbV9pc0ltYWdpbmF0
aW9uID0gdHJ1ZTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAobV9pc0FNRCB8fCBtX2lz
SW50ZWwpCi0gICAgICAgIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24gPSB0cnVl
OwotCi0gICAgLy8gSW50ZWwgSEQgMzAwMCBkZXZpY2VzIGhhdmUgcHJvYmxlbXMgd2l0aCBsYXJn
ZSB0ZXh0dXJlcy4gPHJkYXI6Ly9wcm9ibGVtLzE2NjQ5MTQwPgotICAgIG1fcmVxdWlyZXNSZXN0
cmljdGVkTWF4aW11bVRleHR1cmVTaXplID0gbV9yZW5kZXJlci5zdGFydHNXaXRoKCJJbnRlbCBI
RCBHcmFwaGljcyAzMDAwIik7Ci0jZW5kaWYKLX0KLQotRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
Ojp+RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKCkgPSBkZWZhdWx0OwotCi1ib29sIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbjo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlm
ICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCi0gICAgICAgIGluaXRpYWxpemVB
dmFpbGFibGVFeHRlbnNpb25zKCk7Ci0KLSAgICAvLyBXZSBleHBsaWNpdGx5IGRvIG5vdCBzdXBw
b3J0IHRoaXMgZXh0ZW5zaW9uIHVudGlsCi0gICAgLy8gd2UgZml4IHRoZSBmb2xsb3dpbmcgYnVn
OgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk3MzQK
LSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUp
OwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZChjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpIHsKLSAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBl
bmFibGVkIGFscmVhZHkpCi0gICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1f
Y29udGV4dC0+bV9jb21waWxlcjsKLSAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVz
b3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGlmICghQU5HTEVSZXNv
dXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSB7Ci0gICAgICAgICAgICBBTkdMRVJlc291
cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSAxOwotICAgICAgICAgICAgY29tcGlsZXIu
c2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
bmFtZSA9PSAiR0xfRVhUX2RyYXdfYnVmZmVycyIpIHsKLSAgICAgICAgLy8gRW5hYmxlIHN1cHBv
cnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpCi0gICAgICAgIEFOR0xFV2ViS2l0
QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKLSAgICAgICAgU2hCdWls
dEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0g
ICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycykgewotICAgICAgICAg
ICAgQU5HTEVSZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycyA9IDE7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZB
TkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRS
ZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChuYW1l
ID09ICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgewotICAgICAgICAvLyBFbmFibGUgc3Vw
cG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJL
aXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1
aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsK
LSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKSB7Ci0g
ICAgICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kID0gMTsKLSAg
ICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9mcmFnX2RlcHRoIikgewotICAgICAg
ICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAg
ICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVy
OwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5n
ZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5FWFRfZnJhZ19kZXB0
aCkgewotICAgICAgICAgICAgQU5HTEVSZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGggPSAxOwotICAg
ICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmlzRW5hYmxlZChj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9j
b250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICByZXR1cm4gY29tcGlsZXIuZ2V0UmVzb3VyY2Vz
KCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwotICAgIH0KLSAgICByZXR1cm4gc3VwcG9ydHMo
bmFtZSk7Ci19Ci0KLWludCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
Ci19Ci0KLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJU
eXBlOwotCi0gICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2Nv
bXBpbGVyOwotCi0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7Ci0KLSAgICBpZiAoR0xzaGFkZXJU
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKQotICAgICAgICBzaGFkZXJU
eXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBlID0g
U0hBREVSX1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gIiI7IC8vIElu
dmFsaWQgc2hhZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBo
aWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fY29u
dGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCi0gICAgaWYgKHJlc3VsdCA9
PSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gIiI7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVz
dWx0LT52YWx1ZTsKLQotICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotICAgIFN0
cmluZyBzaGFkZXJJbmZvTG9nOwotICAgIHVpbnQ2NF90IGV4dHJhQ29tcGlsZU9wdGlvbnMgPSBT
SF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgfCBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCB8
IFNIX0lOSVRfT1VUUFVUX1ZBUklBQkxFUyB8IFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElP
TlMgfCBTSF9MSU1JVF9FWFBSRVNTSU9OX0NPTVBMRVhJVFkgfCBTSF9MSU1JVF9DQUxMX1NUQUNL
X0RFUFRIIHwgU0hfSU5JVElBTElaRV9VTklOSVRJQUxJWkVEX0xPQ0FMUzsKLQotICAgIGlmICht
X3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKQotICAgICAgICBleHRyYUNvbXBpbGVP
cHRpb25zIHw9IFNIX0VNVUxBVEVfQUJTX0lOVF9GVU5DVElPTjsKLQotICAgIFZlY3RvcjxzdGQ6
OnBhaXI8QU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBzaDo6U2hhZGVyVmFyaWFibGU+PiBzeW1ib2xz
OwotICAgIGJvb2wgaXNWYWxpZCA9IGNvbXBpbGVyLmNvbXBpbGVTaGFkZXJTb3VyY2UoZW50cnku
c291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Us
IHNoYWRlckluZm9Mb2csIHN5bWJvbHMsIGV4dHJhQ29tcGlsZU9wdGlvbnMpOwotCi0gICAgZW50
cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKLQot
ICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgc2g6OlNoYWRl
clZhcmlhYmxlPiYgcGFpciA6IHN5bWJvbHMpIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUgPSBwYWlyLnNlY29uZC5uYW1lOwotICAgICAgICBlbnRyeS5zeW1ib2xNYXAocGFpci5m
aXJzdCkuc2V0KFN0cmluZyhuYW1lLmNfc3RyKCksIG5hbWUubGVuZ3RoKCkpLCBwYWlyLnNlY29u
ZCk7Ci0gICAgfQotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1cm4gIiI7Ci0KLSAg
ICByZXR1cm4gdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCkKLXsKLSNpZiAoUExB
VEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0wpKSB8fCAoUExBVEZPUk0oR1RLKSAmJiAhVVNFKE9Q
RU5HTF9FUykpCi0gICAgaWYgKG1fdXNlSW5kZXhlZEdldFN0cmluZykgewotICAgICAgICBHTGlu
dCBudW1FeHRlbnNpb25zID0gMDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX05VTV9FWFRF
TlNJT05TLCAmbnVtRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZvciAoR0xpbnQgaSA9IDA7IGkgPCBu
dW1FeHRlbnNpb25zOyArK2kpCi0gICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRk
KGdsR2V0U3RyaW5naShHTF9FWFRFTlNJT05TLCBpKSk7Ci0KLSAgICAgICAgaWYgKCFtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX3N0b3JhZ2UiX3MpKSB7Ci0g
ICAgICAgICAgICBHTGludCBtYWpvclZlcnNpb247Ci0gICAgICAgICAgICBnbEdldEludGVnZXJ2
KEdMX01BSk9SX1ZFUlNJT04sICZtYWpvclZlcnNpb24pOwotICAgICAgICAgICAgR0xpbnQgbWlu
b3JWZXJzaW9uOwotICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9NSU5PUl9WRVJTSU9OLCAm
bWlub3JWZXJzaW9uKTsKLSAgICAgICAgICAgIGlmIChtYWpvclZlcnNpb24gPiA0IHx8IChtYWpv
clZlcnNpb24gPT0gNCAmJiBtaW5vclZlcnNpb24gPj0gMikpCi0gICAgICAgICAgICAgICAgbV9h
dmFpbGFibGVFeHRlbnNpb25zLmFkZCgiR0xfQVJCX3RleHR1cmVfc3RvcmFnZSJfcyk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lv
bnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9u
IDogZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgnICcpKQotICAgICAgICAgICAgbV9hdmFpbGFibGVF
eHRlbnNpb25zLmFkZChleHRlbnNpb24pOwotICAgIH0KLSAgICBtX2luaXRpYWxpemVkQXZhaWxh
YmxlRXh0ZW5zaW9ucyA9IHRydWU7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
OjpyZWFkblBpeGVsc0VYVChpbnQsIGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRHNpemVpLCB2b2lkICopCi17Ci0gICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjpnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50LCBpbnQsIEdDM0RzaXplaSwg
ZmxvYXQgKikKLXsKLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldG5Vbmlm
b3JtaXZFWFQoR0MzRHVpbnQsIGludCwgR0MzRHNpemVpLCBpbnQgKikKLXsKLSAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0Qp
ICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ3MjE3OTA3NzI3
Y2FlZWEyN2VmNjhhMDY5Y2MwNTMxMDgyMGQzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIDogcHVibGlj
IEV4dGVuc2lvbnMzRCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKCk7Ci0KLSAgICAvLyBFeHRlbnNp
b25zM0QgbWV0aG9kcy4KLSAgICBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBi
b29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBpbnQgZ2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpIG92ZXJyaWRlOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVh
dGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlID0gMDsKLSAgICB2b2lkIGRlbGV0ZVZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKLSAgICBHQzNEYm9vbGVhbiBp
c1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKLSAgICB2b2lk
IGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9IDA7Ci0KLSAg
ICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlk
ZSA9IDA7Ci0KLSAgICBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOwotCi0gICAgLy8gRVhUIFJvYnVzdG5lc3MgLSB1c2VzIGdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotICAgIHZvaWQgcmVhZG5QaXhlbHNFWFQoaW50IHgs
IGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0blVuaWZvcm1mdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc05WSURJQSgp
IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNOVklESUE7IH0KLSAgICBib29sIGlzQU1EKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9pc0FNRDsgfQotICAgIGJvb2wgaXNJbnRlbCgpIG92ZXJyaWRlIHsgcmV0
dXJuIG1faXNJbnRlbDsgfQotICAgIGJvb2wgaXNJbWFnaW5hdGlvbigpIG92ZXJyaWRlIHsgcmV0
dXJuIG1faXNJbWFnaW5hdGlvbjsgfQotICAgIFN0cmluZyB2ZW5kb3IoKSBvdmVycmlkZSB7IHJl
dHVybiBtX3ZlbmRvcjsgfQotCi0gICAgYm9vbCByZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxh
dGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRp
b247IH0KLSAgICBib29sIHJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7Ci0g
ICAgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiwgYm9vbCB1c2VJ
bmRleGVkR2V0U3RyaW5nKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihj
b25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOwot
ICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKLQotICAgIC8vIFdlYWsgcG9pbnRlciBiYWNr
IHRvIEdyYXBoaWNzQ29udGV4dDNECi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsK
LQotICAgIGJvb2wgbV9pc05WSURJQTsKLSAgICBib29sIG1faXNBTUQ7Ci0gICAgYm9vbCBtX2lz
SW50ZWw7Ci0gICAgYm9vbCBtX2lzSW1hZ2luYXRpb247Ci0gICAgYm9vbCBtX3JlcXVpcmVzQnVp
bHRJbkZ1bmN0aW9uRW11bGF0aW9uOwotICAgIGJvb2wgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhp
bXVtVGV4dHVyZVNpemU7Ci0KLSAgICBib29sIG1fdXNlSW5kZXhlZEdldFN0cmluZyB7IGZhbHNl
IH07Ci0KLSAgICBTdHJpbmcgbV92ZW5kb3I7Ci0gICAgU3RyaW5nIG1fcmVuZGVyZXI7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5NDFmNjQxZTE1MWYzOGJjNmVhNTY5Y2I4
ZGFmMjE4YzE2ZDk0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0j
aW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJFcG94eUVHTC5o
IgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1FeHRlbnNpb25zM0RPcGVuR0xFUzo6RXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZykKLSAgICA6IEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbihjb250ZXh0LCB1c2VJbmRleGVkR2V0U3RyaW5nKQotICAg
ICwgbV9jb250ZXh0UmVzZXRTdGF0dXMoR0xfTk9fRVJST1IpCi0gICAgLCBtX3N1cHBvcnRzT0VT
dmVydGV4QXJyYXlPYmplY3QoZmFsc2UpCi0gICAgLCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVk
UmVuZGVyVG9UZXh0dXJlKGZhbHNlKQotICAgICwgbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJy
YXlzKGZhbHNlKQotICAgICwgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUco
MCkKLSAgICAsIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcoMCkKLSAgICAs
IG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMoMCkKLSAgICAsIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNP
RVMoMCkKLSAgICAsIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMCkKLSAgICAsIG1fZ2xJc1ZlcnRl
eEFycmF5T0VTKDApCi0gICAgLCBtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCgwKQotICAg
ICwgbV9nbFJlYWRuUGl4ZWxzRVhUKDApCi0gICAgLCBtX2dsR2V0blVuaWZvcm1mdkVYVCgwKQot
ICAgICwgbV9nbEdldG5Vbmlmb3JtaXZFWFQoMCkKLSAgICAsIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZp
c29yQU5HTEUobnVsbHB0cikKLSAgICAsIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobnVs
bHB0cikKLSAgICAsIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShudWxscHRyKQotewot
fQotCi1FeHRlbnNpb25zM0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKCkgPSBkZWZh
dWx0OwotCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjppc0VuYWJsZWQoY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIC8vIFJldHVybiBmYWxzZSBpbW1lZGlhdGVseSBpZiB0aGUgZXh0ZW5z
aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcnMuCi0gICAgYm9vbCBlbmFibGVkID0g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQobmFtZSk7Ci0gICAgaWYgKCFlbmFi
bGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3IgR0xfRVhUX3JvYnVzdG5l
c3MsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgc3VwcG9ydHMgcm9idXN0IGFjY2Vzcy4KLSAgICBp
ZiAobmFtZSA9PSAiR0xfRVhUX3JvYnVzdG5lc3MiKSB7Ci0gICAgICAgIEdMaW50IHJvYnVzdEFj
Y2VzcyA9IEdMX0ZBTFNFOwotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lv
bnMzRDo6Q09OVEVYVF9ST0JVU1RfQUNDRVNTLCAmcm9idXN0QWNjZXNzKTsKLSAgICAgICAgcmV0
dXJuIHJvYnVzdEFjY2VzcyA9PSBHTF9UUlVFOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRp
c2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQs
IHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCBpbnQgdGV4dHVyZSwgaW50IGxldmVs
LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMpCi17Ci0gICAgaWYgKG1fZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRE11bHRpc2FtcGxlSU1HKQotICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IHNhbXBsZXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBpZiAobV9nbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKLSAgICAgICAgbV9nbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpibGl0RnJhbWVidWZmZXIobG9uZyAvKiBzcmNYMCAqLywgbG9uZyAvKiBzcmNZMCAqLywg
bG9uZyAvKiBzcmNYMSAqLywgbG9uZyAvKiBzcmNZMSAqLywgbG9uZyAvKiBkc3RYMCAqLywgbG9u
ZyAvKiBkc3RZMCAqLywgbG9uZyAvKiBkc3RYMSAqLywgbG9uZyAvKiBkc3RZMSAqLywgdW5zaWdu
ZWQgbG9uZyAvKiBtYXNrICovLCB1bnNpZ25lZCBsb25nIC8qIGZpbHRlciAqLykKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCi17Ci0gICAgaWYgKG1fZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVJTUcpCi0gICAgICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICBlbHNlCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9u
czNET3BlbkdMRVM6Omluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cHVzaEdy
b3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cG9wR3JvdXBNYXJrZXJFWFQodm9pZCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9nbEdlblZlcnRleEFycmF5c09FUykgewotICAg
ICAgICBHTHVpbnQgYXJyYXkgPSAwOwotICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTKDEs
ICZhcnJheSk7Ci0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsRGVs
ZXRlVmVydGV4QXJyYXlzT0VTKQotICAgICAgICBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDEs
ICZhcnJheSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNET3Bl
bkdMRVM6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBp
ZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsSXNWZXJ0ZXhBcnJheU9FUykKLSAgICAg
ICAgcmV0dXJuIG1fZ2xJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKLQotICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKFBs
YXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBpZiAobV9nbEJpbmRWZXJ0ZXhBcnJheU9FUykKLSAgICAgICAgbV9nbEJpbmRW
ZXJ0ZXhBcnJheU9FUyhhcnJheSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25z
M0RPcGVuR0xFUzo6ZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpIC8qIG4gKi8sIGNvbnN0IEdDM0Rl
bnVtKiAvKiBidWZzICovKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhlIHN1cHBvcnQu
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpn
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBkb2VzIG5v
dCBjYWxsIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIsIGJ1dCBpbnN0ZWFkIGdldEdyYXBoaWNz
UmVzZXRTdGF0dXNFWFQuCi0gICAgLy8gVGhlIHJldHVybiBjb2RlcyBmcm9tIHRoZSB0d28gZXh0
ZW5zaW9ucyBhcmUgaWRlbnRpY2FsIGFuZCB0aGVpciBwdXJwb3NlIGlzIHRoZSBzYW1lLCBzbyBp
dAotICAgIC8vIG1heSBiZSBiZXN0IHRvIHJlbmFtZSBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCkgdG8gZ2V0R3JhcGhpY3NSZXNldFN0YXR1cygpLgotICAgIGlmIChtX2NvbnRleHRSZXNldFN0
YXR1cyAhPSBHTF9OT19FUlJPUikKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dFJlc2V0U3RhdHVz
OwotICAgIGlmIChtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCkgewotICAgICAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBpbnQgcmVhc29uRm9yUmVzZXQg
PSBtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCgpOwotICAgICAgICBpZiAocmVhc29uRm9y
UmVzZXQgIT0gR0xfTk9fRVJST1IpCi0gICAgICAgICAgICBtX2NvbnRleHRSZXNldFN0YXR1cyA9
IHJlYXNvbkZvclJlc2V0OwotICAgICAgICByZXR1cm4gcmVhc29uRm9yUmVzZXQ7Ci0gICAgfQot
Ci0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZWFk
blBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9p
ZCAqZGF0YSkKLXsKLSAgICBpZiAobV9nbFJlYWRuUGl4ZWxzRVhUKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhl
IHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0g
ICAgICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVm
b3JlIHJlYWRpbmcgcGl4ZWxzLgotICAgICAgICA6OmdsRmx1c2goKTsKLQotICAgICAgICAvLyBG
SVhNRTogSWYgbm9uLUJsYWNrQmVycnkgcGxhdGZvcm1zIHVzZSB0aGlzLCB0aGV5IHdpbGwgbmVl
ZCB0byBpbXBsZW1lbnQKLSAgICAgICAgLy8gdGhlaXIgYW50aS1hbGlhc2luZyBjb2RlIGhlcmUu
Ci0gICAgICAgIG1fZ2xSZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGJ1ZlNpemUsIGRhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3Jh
bSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykKLXsKLSAg
ICBpZiAobV9nbEdldG5Vbmlmb3JtZnZFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgbV9nbEdldG5Vbmlmb3JtZnZFWFQocHJvZ3JhbSwgbG9j
YXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQot
dm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9n
cmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykKLXsKLSAg
ICBpZiAobV9nbEdldG5Vbmlmb3JtaXZFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgbV9nbEdldG5Vbmlmb3JtaXZFWFQocHJvZ3JhbSwgbG9j
YXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQot
dm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQp
Ci17Ci0gICAgaWYgKCFtX2dsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX2dsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJp
bWNvdW50KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6ZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9u
ZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBpZiAoIW1fZ2xEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9nbERyYXdFbGVtZW50
c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKLX0KLQotdm9p
ZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRl
eCwgR0MzRHVpbnQgZGl2aXNvcikKLXsKLSAgICBpZiAoIW1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
QU5HTEUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5k
ZXgsIGRpdmlzb3IpOwotfQotCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBpZiAoIW1fc3VwcG9ydHNPRVN2ZXJ0ZXhB
cnJheU9iamVjdCAmJiBuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpIHsKLSAg
ICAgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdM
QklORFZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsQmluZFZlcnRleEFy
cmF5T0VTIikpOwotICAgICAgICAgICAgbV9nbEdlblZlcnRleEFycmF5c09FUyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UEZOR0xHRU5WRVJURVhBUlJBWVNPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygi
Z2xHZW5WZXJ0ZXhBcnJheXNPRVMiKSk7Ci0gICAgICAgICAgICBtX2dsRGVsZXRlVmVydGV4QXJy
YXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0M+
KGVnbEdldFByb2NBZGRyZXNzKCJnbERlbGV0ZVZlcnRleEFycmF5c09FUyIpKTsKLSAgICAgICAg
ICAgIG1fZ2xJc1ZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTElTVkVSVEVY
QVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xJc1ZlcnRleEFycmF5T0VTIikpOwot
ICAgICAgICAgICAgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0ID0gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlIGlmICghbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSAm
JiBuYW1lID09ICJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIikgewotICAg
ICAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgPSByZWludGVy
cHJldF9jYXN0PFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0M+KGVn
bEdldFByb2NBZGRyZXNzKCJnbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUciKSk7
Ci0gICAgICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HID0gcmVp
bnRlcnByZXRfY2FzdDxQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0M+
KGVnbEdldFByb2NBZGRyZXNzKCJnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyIp
KTsKLSAgICAgICAgICAgIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUg
PSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VY
VCAmJiBuYW1lID09ICJHTF9FWFRfcm9idXN0bmVzcyIpIHsKLSAgICAgICAgICAgIG1fZ2xHZXRH
cmFwaGljc1Jlc2V0U3RhdHVzRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVEdSQVBISUNT
UkVTRVRTVEFUVVNFWFRQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZXRHcmFwaGljc1Jlc2V0
U3RhdHVzRVhUIikpOwotICAgICAgICAgICAgbV9nbFJlYWRuUGl4ZWxzRVhUID0gcmVpbnRlcnBy
ZXRfY2FzdDxQRk5HTFJFQUROUElYRUxTRVhUUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVh
ZG5QaXhlbHNFWFQiKSk7Ci0gICAgICAgICAgICBtX2dsR2V0blVuaWZvcm1mdkVYVCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UEZOR0xHRVROVU5JRk9STUZWRVhUUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3Mo
ImdsR2V0blVuaWZvcm1mdkVYVCIpKTsKLSAgICAgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWl2RVhU
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVE5VTklGT1JNSVZFWFRQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xHZXRuVW5pZm9ybWl2RVhUIikpOwotICAgICAgICB9IGVsc2UgaWYgKCFtX3N1
cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJheXMgJiYgbmFtZSA9PSAiR0xfQU5HTEVfaW5zdGFuY2Vk
X2FycmF5cyIpIHsKLSAgICAgICAgICAgIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMVkVSVEVYQVRUUklCRElWSVNPUkFOR0xFUFJPQz4oZWdsR2V0
UHJvY0FkZHJlc3MoImdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIikpOwotICAgICAgICAgICAg
bV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xEUkFX
QVJSQVlTSU5TVEFOQ0VEQU5HTEVQUk9DID4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRHJhd0FycmF5
c0luc3RhbmNlZEFOR0xFIikpOwotICAgICAgICAgICAgbV9nbERyYXdFbGVtZW50c0luc3RhbmNl
ZEFOR0xFID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xF
UFJPQyA+KGVnbEdldFByb2NBZGRyZXNzKCJnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIikp
OwotICAgICAgICAgICAgbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJHTF9FWFRfZHJhd19idWZmZXJzIikgewotICAgICAg
ICAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGUgc3VwcG9ydC4KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Z2V0RXh0ZW5z
aW9ucygpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
Pig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotCi0jZW5kaWYg
Ly8gVVNFKE9QRU5HTF9FUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ3NzJmYzZkZTM3Yjk4MTY5ZmNiM2Q1ZGJmY2VkZGExZjYxNjQ0
NjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEy
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCi0KLSNp
ZiBVU0UoT1BFTkdMX0VTKQotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2ds
Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4
dC5oPgotI2VuZGlmCi0KLSNpZm5kZWYgR0xfRVhUX3JvYnVzdG5lc3MKLS8qIHJldXNlIEdMX05P
X0VSUk9SICovCi0jZGVmaW5lIEdMX0dVSUxUWV9DT05URVhUX1JFU0VUX0VYVCAweDgyNTMKLSNk
ZWZpbmUgR0xfSU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9FWFQgMHg4MjU0Ci0jZGVmaW5lIEdMX1VO
S05PV05fQ09OVEVYVF9SRVNFVF9FWFQgMHg4MjU1Ci0jZGVmaW5lIEdMX0NPTlRFWFRfUk9CVVNU
X0FDQ0VTU19FWFQgMHg5MEYzCi0jZGVmaW5lIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVH
WV9FWFQgMHg4MjU2Ci0jZGVmaW5lIEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQgMHg4MjUy
Ci0jZGVmaW5lIEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQgMHg4MjYxCi0jZW5kaWYKLQot
I2lmbmRlZiBHTF9FWFRfcm9idXN0bmVzcwotI2RlZmluZSBHTF9FWFRfcm9idXN0bmVzcyAxCi0j
aWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCBHQzNEZW51bSBHTF9BUElFTlRS
WSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQodm9pZCk7Ci1HTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xSZWFkblBpeGVsc0VYVChHTGludCB4LCBHTGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0Mz
RHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7Ci0jZW5kaWYKLXR5cGVkZWYgR0MzRGVudW0g
KEdMX0FQSUVOVFJZUCBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DKSAodm9pZCk7
Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQUROUElYRUxTRVhUUFJPQykgKEdM
aW50IHgsIEdMaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSk7
Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklGT1JNRlZFWFRQUk9DKSAo
R0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQg
KnBhcmFtcyk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklGT1JNSVZF
WFRQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6
ZSwgR0xpbnQgKnBhcmFtcyk7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBFeHRlbnNpb25zM0RPcGVuR0xFUyA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24g
ewotcHVibGljOgotICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0
ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgotICAgIEV4dGVuc2lvbnMz
RE9wZW5HTEVTKEdyYXBoaWNzQ29udGV4dDNEKiwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKTsK
LSAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xFUygpOwotCi0gICAgdmlydHVhbCB2b2lk
IGZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2ln
bmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7Ci0KLSAg
ICAvLyBFeHRlbnNpb24zRCBtZXRob2RzCi0gICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBz
cmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9u
ZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZp
bHRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKLQot
ICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwot
ICAgIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVtKikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBw
cmltY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWlu
dCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFWFQgUm9idXN0
bmVzcyAtIHJlc2V0Ci0gICAgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSBvdmVycmlk
ZTsKLQotICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gZXRjCi0gICAgdm9pZCByZWFkblBpeGVsc0VY
VChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoK
LSAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAg
IFN0cmluZyBnZXRFeHRlbnNpb25zKCkgb3ZlcnJpZGU7Ci0KLSAgICBHQzNEZW51bSBtX2NvbnRl
eHRSZXNldFN0YXR1czsKLQotICAgIGJvb2wgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0
OwotICAgIGJvb2wgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZTsKLSAg
ICBib29sIG1fc3VwcG9ydHNBTkdMRWluc3RhbmNlZEFycmF5czsKLQotICAgIFBGTkdMRlJBTUVC
VUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUc7Ci0gICAgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJ
TUdQUk9DIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUc7Ci0gICAgUEZOR0xC
SU5EVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVM7Ci0gICAgUEZOR0xE
RUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVM7Ci0gICAg
UEZOR0xHRU5WRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVM7Ci0gICAg
UEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsSXNWZXJ0ZXhBcnJheU9FUzsKLSAgICBQRk5H
TEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVz
RVhUOwotICAgIFBGTkdMUkVBRE5QSVhFTFNFWFRQUk9DIG1fZ2xSZWFkblBpeGVsc0VYVDsKLSAg
ICBQRk5HTEdFVE5VTklGT1JNRlZFWFRQUk9DIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUOwotICAgIFBG
TkdMR0VUTlVOSUZPUk1JVkVYVFBST0MgbV9nbEdldG5Vbmlmb3JtaXZFWFQ7Ci0gICAgUEZOR0xW
RVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEU7
Ci0gICAgUEZOR0xEUkFXQVJSQVlTSU5TVEFOQ0VEQU5HTEVQUk9DIG1fZ2xEcmF3QXJyYXlzSW5z
dGFuY2VkQU5HTEU7Ci0gICAgUEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MgbV9n
bERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKE9QRU5HTF9FUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjhjYjNkNjhkNzg5NzgyNzRjYTI5ZDIyYTJmOTQ4OWIyODRmMjIxNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0wuY3BwCkBAIC0wLDAgKzEsMzE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorCisjaWYgRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0Ep
ICYmIFVTRShPUEVOR0xfRVMpKSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgiCisKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlIDxPcGVuR0xFUy9FUzIv
Z2xleHQuaD4KKyNlbGlmIFVTRShPUEVOR0wpCisjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xFU0lPUy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5z
aW9uc0dMT3BlbkdMOjpFeHRlbnNpb25zR0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQsIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZykKKyAgICA6IEV4dGVuc2lvbnNHTE9w
ZW5HTENvbW1vbihjb250ZXh0LCB1c2VJbmRleGVkR2V0U3RyaW5nKQoreworfQorCitFeHRlbnNp
b25zR0xPcGVuR0w6On5FeHRlbnNpb25zR0xPcGVuR0woKSA9IGRlZmF1bHQ7CisKKwordm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kw
LCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRz
dFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVy
KQoreworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgIFVOVVNFRF9Q
QVJBTShzcmNYMCk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kwKTsKKyAgICBVTlVTRURfUEFSQU0o
c3JjWDEpOworICAgIFVOVVNFRF9QQVJBTShzcmNZMSk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgw
KTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTApOworICAgIFVOVVNFRF9QQVJBTShkc3RYMSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRzdFkxKTsKKyAgICBVTlVTRURfUEFSQU0obWFzayk7CisgICAgVU5V
U0VEX1BBUkFNKGZpbHRlcik7CisgICAgOjpnbFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVy
QVBQTEUoKTsKKyNlbHNlCisgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAs
IHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7
CisjZW5kaWYKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKK3sKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlRVhUKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwor
fQorCitQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnNHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJy
YXlPRVMoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1
aW50IGFycmF5ID0gMDsKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikgfHwgKFBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKKyAgICBpZiAoaXNWZXJ0ZXhBcnJheU9i
amVjdFN1cHBvcnRlZCgpKQorICAgICAgICBnbEdlblZlcnRleEFycmF5cygxLCAmYXJyYXkpOwor
I2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92
ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgZ2xHZW5WZXJ0ZXhBcnJheXNBUFBMRSgxLCAmYXJyYXkp
OworI2VuZGlmCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBp
ZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZP
Uk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0
U3VwcG9ydGVkKCkpCisgICAgICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7Cisj
ZWxpZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3Zl
cnRleF9hcnJheV9vYmplY3QKKyAgICBnbERlbGV0ZVZlcnRleEFycmF5c0FQUExFKDEsICZhcnJh
eSk7CisjZW5kaWYKK30KKworR0MzRGJvb2xlYW4gRXh0ZW5zaW9uc0dMT3BlbkdMOjppc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKKyAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBv
cnRlZCgpKQorICAgICAgICByZXR1cm4gZ2xJc1ZlcnRleEFycmF5KGFycmF5KTsKKyNlbGlmIGRl
ZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2Fy
cmF5X29iamVjdAorICAgIHJldHVybiBnbElzVmVydGV4QXJyYXlBUFBMRShhcnJheSk7CisjZW5k
aWYKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpi
aW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
V0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAgIGlmIChpc1Zl
cnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCisgICAgICAgIGdsQmluZFZlcnRleEFycmF5KGFy
cmF5KTsKKyNlbGlmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xf
QVBQTEVfdmVydGV4X2FycmF5X29iamVjdAorICAgIGdsQmluZFZlcnRleEFycmF5QVBQTEUoYXJy
YXkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYXJyYXkpOworI2VuZGlmCit9CisKK3ZvaWQg
RXh0ZW5zaW9uc0dMT3BlbkdMOjppbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9k
ZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMOjpwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVidWdfbWFy
a2VyIGluIHN1cHBvcnRzKCkuCisgICAgcmV0dXJuOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTDo6cG9wR3JvdXBNYXJrZXJFWFQodm9pZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVidWdfbWFya2VyIGluIHN1cHBvcnRzKCku
CisgICAgcmV0dXJuOworfQorCitib29sIEV4dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVy
X2JsaXQgYW5kIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIGFyZSAiZmFrZSIuIFRo
ZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIG90aGVyCisgICAgLy8gZXh0ZW5zaW9ucy4gSW4gcGFy
dGljdWxhciBHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfRVhUX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlL0dMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlLgorICAgIGlmIChuYW1l
ID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICBp
ZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKQorI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29u
dGFpbnMoIkdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisjZWxzZQorICAgICAg
ICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKTsKKyNlbmRpZgorCisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMiKSB7CisgICAgICAgIHJldHVybiAobV9hdmFpbGFibGVFeHRlbnNpb25z
LmNvbnRhaW5zKCJHTF9BUkJfaW5zdGFuY2VkX2FycmF5cyIpIHx8IG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfRVhUX2luc3RhbmNlZF9hcnJheXMiKSkKKyAgICAgICAgICAgICYm
IChtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl9kcmF3X2luc3RhbmNlZCIp
IHx8IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2RyYXdfaW5zdGFuY2Vk
IikpOworICAgIH0KKworICAgIGlmIChuYW1lID09ICJHTF9FWFRfc1JHQiIpCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfRVhUX3NSR0IiKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX3NSR0IiKSAmJiAobV9hdmFpbGFibGVF
eHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfc1JHQiIpIHx8IG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2ZyYW1lYnVmZmVyX3NSR0IiKSk7CisjZW5k
aWYKKworICAgIGlmIChuYW1lID09ICJHTF9FWFRfZnJhZ19kZXB0aCIpCisjaWYgUExBVEZPUk0o
TUFDKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFnX2RlcHRoIik7CisjZW5kaWYKKwor
ICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIEdMX09FU19yZ2I4X3JnYmE4LgorICAg
IGlmIChuYW1lID09ICJHTF9PRVNfcmdiOF9yZ2JhOCIpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgLy8gSWYgR0xfQVJCX3RleHR1cmVfZmxvYXQgb3IgR0xfT0VTX3RleHR1cmVfZmxvYXQg
aXMgYXZhaWxhYmxlIHRoZW4gd2UgcmVwb3J0CisgICAgLy8gR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdCwgR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIGFuZCBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciBhcyBhdmFpbGFibGUuCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU190ZXh0
dXJlX2Zsb2F0IiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiB8fCBuYW1l
ID09ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXRfbGluZWFyIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1cmVfZmxvYXQiKSB8fCBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMoIkdMX09FU190ZXh0dXJlX2Zsb2F0Iik7CisKKyAgICAvLyBHTF9PRVNf
dmVydGV4X2FycmF5X29iamVjdAorICAgIGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5
X29iamVjdCIpIHsKKyNpZiAoUExBVEZPUk0oR1RLKSkKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyNl
bGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisjZWxzZQorICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUFBMRV92ZXJ0
ZXhfYXJyYXlfb2JqZWN0Iik7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXNrdG9wIEdMIGFs
d2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKKyAgICBpZiAo
bmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBVTlNJR05FRF9JTlQgaW5k
aWNlcworICAgIGlmIChuYW1lID09ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9zaGFkZXJfdGV4
dHVyZV9sb2QiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgCisgICAgaWYgKG5hbWUgPT0gIkdM
X0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCisgICAgICAgIHJldHVybiBtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3Bp
YyIpOworCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKSB7CisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5j
b250YWlucyhuYW1lKTsKKyNlbGlmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKQorICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfZHJhd19i
dWZmZXJzIik7CisjZWxzZQorICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHN1cHBvcnQgZm9y
IG90aGVyIHBsYXRmb3Jtcy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFU
T1IpCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpCisgICAg
ICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCIpOworCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19jb21wcmVzc2VkX0VU
QzFfUkdCOF90ZXh0dXJlIgorICAgICAgICB8fCBuYW1lID09ICJHTF9BTkdMRV9jb21wcmVzc2Vk
X3RleHR1cmVfZXRjIikgeworICAgICAgICAvLyBJbXBsaWNpdGx5IGVuYWJsZWQgd2l0aCBFUyAz
LjAgY29udGV4dHMuCisgICAgICAgIHJldHVybiBtX2NvbnRleHQtPm1faXNGb3JXZWJHTDI7Cisg
ICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KG5hbWUpOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0J1ZmZlcnNFWFQoR0Mz
RHNpemVpIG4sIGNvbnN0IEdDM0RlbnVtKiBidWZzKQoreworICAgIC8vICBGSVhNRTogaW1wbGVt
ZW50IHN1cHBvcnQgZm9yIG90aGVyIHBsYXRmb3Jtcy4KKyNpZiBQTEFURk9STShNQUMpCisgICAg
OjpnbERyYXdCdWZmZXJzQVJCKG4sIGJ1ZnMpOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIDo6
Z2xEcmF3QnVmZmVycyhuLCBidWZzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG4pOworICAg
IFVOVVNFRF9QQVJBTShidWZzKTsKKyNlbmRpZgorfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgOjpnbERyYXdBcnJheXNJ
bnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworI2VsaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgOjpnbERyYXdBcnJheXNJbnN0YW5jZWRBUkIobW9kZSwgZmlyc3QsIGNvdW50
LCBwcmltY291bnQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obW9kZSk7CisgICAgVU5VU0VE
X1BBUkFNKGZpcnN0KTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAgIFVOVVNFRF9QQVJB
TShwcmltY291bnQpOworI2VuZGlmCit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIDo6
Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwor
I2VsaWYgUExBVEZPUk0oQ09DT0EpCisgICAgOjpnbERyYXdFbGVtZW50c0luc3RhbmNlZEFSQiht
b2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSht
b2RlKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
KyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0ocHJpbWNvdW50KTsK
KyNlbmRpZgorfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNv
cihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICA6OmdsVmVydGV4QXR0
cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAgICA6
OmdsVmVydGV4QXR0cmliRGl2aXNvckFSQihpbmRleCwgZGl2aXNvcik7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGRpdmlzb3IpOworI2VuZGlmCit9
CisKK1N0cmluZyBFeHRlbnNpb25zR0xPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQoreworICAgIEFT
U0VSVCghbV91c2VJbmRleGVkR2V0U3RyaW5nKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKK30K
KworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0Ep
ICYmIFVTRShPUEVOR0xfRVMpKQorYm9vbCBFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJy
YXlPYmplY3RTdXBwb3J0ZWQoKQoreworICAgIHN0YXRpYyBjb25zdCBib29sIHN1cHBvcnRzVmVy
dGV4QXJyYXlPYmplY3QgPSBzdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsK
KyAgICByZXR1cm4gc3VwcG9ydHNWZXJ0ZXhBcnJheU9iamVjdDsKK30KKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9H
TCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnNHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2M2U5Yzk0MGQyNGQ0NDM4ZGIx
ODBhNmU2ZWEzNWQ3NGY2ZTdmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmgKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdM
Q29tbW9uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBFeHRlbnNpb25zR0xPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIGNsYXNz
IG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
IGltcGxlbWVudGF0aW9ucy4KKyAgICBFeHRlbnNpb25zR0xPcGVuR0woR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqLCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcpOworICAgIHZpcnR1YWwgfkV4dGVu
c2lvbnNHTE9wZW5HTCgpOworCisgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCisgICAgdm9p
ZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9u
ZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwg
dW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikgb3ZlcnJpZGU7CisgICAg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpIG92ZXJyaWRlOworCisgICAg
UGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlOworICAgIHZv
aWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAg
R0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgcHVzaEdyb3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAg
IHZvaWQgcG9wR3JvdXBNYXJrZXJFWFQodm9pZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3QnVm
ZmVyc0VYVChHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVtKikgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdF
bGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2
aXNvcikgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9u
KGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGdldEV4dGVuc2lvbnMo
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKKyAgICBib29sIGlzVmVy
dGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43ZjQ5NWFjZThlZGVlOTY2MmM5ZjRjYzYzNTcyNDhhZDgzMjFmZmY2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5jcHAKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkg
JiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisK
KyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2lu
Y2x1ZGUgPE9wZW5HTEVTL0VTMy9nbC5oPgorI2Vsc2UKKyNkZWZpbmUgR0xfRE9fTk9UX1dBUk5f
SUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECisjaW5jbHVkZSA8T3BlbkdML2ds
Lmg+CisjaW5jbHVkZSA8T3BlbkdML2dsMy5oPgorI3VuZGVmIEdMX0RPX05PVF9XQVJOX0lGX01V
TFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAorI2VuZGlmCisKKyNlbHNlCisKKyNpZiBV
U0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9F
UykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Cisj
aW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNlbmRpZgorCisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpFeHRlbnNpb25zR0xP
cGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIGJvb2wgdXNlSW5k
ZXhlZEdldFN0cmluZykKKyAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZh
bHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2lzTlZJRElBKGZhbHNlKQor
ICAgICwgbV9pc0FNRChmYWxzZSkKKyAgICAsIG1faXNJbnRlbChmYWxzZSkKKyAgICAsIG1faXNJ
bWFnaW5hdGlvbihmYWxzZSkKKyAgICAsIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRp
b24oZmFsc2UpCisgICAgLCBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZShm
YWxzZSkKKyAgICAsIG1fdXNlSW5kZXhlZEdldFN0cmluZyh1c2VJbmRleGVkR2V0U3RyaW5nKQor
eworICAgIG1fdmVuZG9yID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6
Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSkpOworICAgIG1fcmVuZGVyZXIgPSBTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9SRU5ERVJFUikpKTsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IHZlbmRvckNvbXBvbmVudHMgPSBtX3ZlbmRvci5jb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcgJyk7CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29u
dGFpbnMoIm52aWRpYSIpKQorICAgICAgICBtX2lzTlZJRElBID0gdHJ1ZTsKKyAgICBpZiAodmVu
ZG9yQ29tcG9uZW50cy5jb250YWlucygiYXRpIikgfHwgdmVuZG9yQ29tcG9uZW50cy5jb250YWlu
cygiYW1kIikpCisgICAgICAgIG1faXNBTUQgPSB0cnVlOworICAgIGlmICh2ZW5kb3JDb21wb25l
bnRzLmNvbnRhaW5zKCJpbnRlbCIpKQorICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOworICAgIGlm
ICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbWFnaW5hdGlvbiIpKQorICAgICAgICBtX2lz
SW1hZ2luYXRpb24gPSB0cnVlOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChtX2lzQU1E
IHx8IG1faXNJbnRlbCkKKyAgICAgICAgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlv
biA9IHRydWU7CisKKyAgICAvLyBJbnRlbCBIRCAzMDAwIGRldmljZXMgaGF2ZSBwcm9ibGVtcyB3
aXRoIGxhcmdlIHRleHR1cmVzLiA8cmRhcjovL3Byb2JsZW0vMTY2NDkxNDA+CisgICAgbV9yZXF1
aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUgPSBtX3JlbmRlcmVyLnN0YXJ0c1dpdGgo
IkludGVsIEhEIEdyYXBoaWNzIDMwMDAiKTsKKyNlbmRpZgorfQorCitFeHRlbnNpb25zR0xPcGVu
R0xDb21tb246On5FeHRlbnNpb25zR0xPcGVuR0xDb21tb24oKSA9IGRlZmF1bHQ7CisKK2Jvb2wg
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAgICAgICAgaW5p
dGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKworICAgIC8vIFdlIGV4cGxpY2l0bHkgZG8g
bm90IHN1cHBvcnQgdGhpcyBleHRlbnNpb24gdW50aWwKKyAgICAvLyB3ZSBmaXggdGhlIGZvbGxv
d2luZyBidWc6CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0OTczNAorICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3Vy
Y2UiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNp
b24obmFtZSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjplbnN1cmVFbmFi
bGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAo
aWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBp
bGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMg
QU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgaWYgKCFB
TkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAgICAgIEFO
R0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7CisgICAgICAgICAgICBj
b21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmIChuYW1lID09ICJHTF9FWFRfZHJhd19idWZmZXJzIikgeworICAgICAgICAvLyBFbmFi
bGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKKyAgICAgICAgQU5H
TEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAgICAg
ICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJj
ZXMoKTsKKyAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzKSB7Cisg
ICAgICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzID0gMTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfRFJBV19CVUZGRVJT
X0VYVCwgJkFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKKyAgICAgICAgICAgIGNvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKG5hbWUgPT0gIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7CisgICAgICAgIC8vIEVu
YWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQorICAgICAgICBB
TkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAg
ICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291
cmNlcygpOworICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9s
b2QpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2Qg
PSAxOworICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhUX2ZyYWdfZGVwdGgiKSB7
CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJl
YWR5KQorICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1f
Y29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNv
bXBpbGVyLmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9m
cmFnX2RlcHRoKSB7CisgICAgICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCA9
IDE7CisgICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwor
ICAgICAgICB9CisgICAgfQorfQorCitib29sIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6aXNF
bmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGls
ZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIHJldHVybiBjb21waWxlci5nZXRS
ZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7CisgICAgfQorICAgIHJldHVybiBz
dXBwb3J0cyhuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpO
T19FUlJPUjsKK30KKworU3RyaW5nIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFT
U0VSVChzaGFkZXIpOworICAgIGludCBHTHNoYWRlclR5cGU7CisgICAgQU5HTEVTaGFkZXJUeXBl
IHNoYWRlclR5cGU7CisKKyAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRl
eHQtPm1fY29tcGlsZXI7CisKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgR3Jh
cGhpY3NDb250ZXh0R0w6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKKworICAgIGlmIChH
THNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVIpCisgICAgICAg
IHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBpZiAoR0xzaGFkZXJU
eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHNoYWRl
clR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAi
IjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVj
dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAg
ICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybiAiIjsKKworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpTaGFkZXJTb3Vy
Y2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CisgICAgdWludDY0X3QgZXh0
cmFDb21waWxlT3B0aW9ucyA9IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyB8IFNIX1VO
Rk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTIHwgU0hfRU5GT1JD
RV9QQUNLSU5HX1JFU1RSSUNUSU9OUyB8IFNIX0xJTUlUX0VYUFJFU1NJT05fQ09NUExFWElUWSB8
IFNIX0xJTUlUX0NBTExfU1RBQ0tfREVQVEggfCBTSF9JTklUSUFMSVpFX1VOSU5JVElBTElaRURf
TE9DQUxTOworCisgICAgaWYgKG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24pCisg
ICAgICAgIGV4dHJhQ29tcGlsZU9wdGlvbnMgfD0gU0hfRU1VTEFURV9BQlNfSU5UX0ZVTkNUSU9O
OworCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxBTkdMRVNoYWRlclN5bWJvbFR5cGUsIHNoOjpTaGFk
ZXJWYXJpYWJsZT4+IHN5bWJvbHM7CisgICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIuY29tcGls
ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJh
bnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZywgc3ltYm9scywgZXh0cmFDb21waWxl
T3B0aW9ucyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOworICAgIGVudHJ5Lmlz
VmFsaWQgPSBpc1ZhbGlkOworCisgICAgZm9yIChjb25zdCBzdGQ6OnBhaXI8QU5HTEVTaGFkZXJT
eW1ib2xUeXBlLCBzaDo6U2hhZGVyVmFyaWFibGU+JiBwYWlyIDogc3ltYm9scykgeworICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSA9IHBhaXIuc2Vjb25kLm5hbWU7CisgICAgICAgIGVu
dHJ5LnN5bWJvbE1hcChwYWlyLmZpcnN0KS5zZXQoU3RyaW5nKG5hbWUuY19zdHIoKSwgbmFtZS5s
ZW5ndGgoKSksIHBhaXIuc2Vjb25kKTsKKyAgICB9CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAg
ICAgIHJldHVybiAiIjsKKworICAgIHJldHVybiB0cmFuc2xhdGVkU2hhZGVyU291cmNlOworfQor
Cit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVu
c2lvbnMoKQoreworI2lmIChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTCkpIHx8IChQTEFU
Rk9STShHVEspICYmICFVU0UoT1BFTkdMX0VTKSkKKyAgICBpZiAobV91c2VJbmRleGVkR2V0U3Ry
aW5nKSB7CisgICAgICAgIEdMaW50IG51bUV4dGVuc2lvbnMgPSAwOworICAgICAgICA6OmdsR2V0
SW50ZWdlcnYoR0xfTlVNX0VYVEVOU0lPTlMsICZudW1FeHRlbnNpb25zKTsKKyAgICAgICAgZm9y
IChHTGludCBpID0gMDsgaSA8IG51bUV4dGVuc2lvbnM7ICsraSkKKyAgICAgICAgICAgIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5hZGQoZ2xHZXRTdHJpbmdpKEdMX0VYVEVOU0lPTlMsIGkpKTsKKwor
ICAgICAgICBpZiAoIW1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1
cmVfc3RvcmFnZSJfcykpIHsKKyAgICAgICAgICAgIEdMaW50IG1ham9yVmVyc2lvbjsKKyAgICAg
ICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUFKT1JfVkVSU0lPTiwgJm1ham9yVmVyc2lvbik7Cisg
ICAgICAgICAgICBHTGludCBtaW5vclZlcnNpb247CisgICAgICAgICAgICBnbEdldEludGVnZXJ2
KEdMX01JTk9SX1ZFUlNJT04sICZtaW5vclZlcnNpb24pOworICAgICAgICAgICAgaWYgKG1ham9y
VmVyc2lvbiA+IDQgfHwgKG1ham9yVmVyc2lvbiA9PSA0ICYmIG1pbm9yVmVyc2lvbiA+PSAyKSkK
KyAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKCJHTF9BUkJfdGV4dHVy
ZV9zdG9yYWdlIl9zKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworICAg
ICAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBleHRlbnNpb24gOiBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCcgJykpCisgICAg
ICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGV4dGVuc2lvbik7CisgICAgfQorICAg
IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKwordm9pZCBFeHRl
bnNpb25zR0xPcGVuR0xDb21tb246OnJlYWRuUGl4ZWxzRVhUKGludCwgaW50LCBHQzNEc2l6ZWks
IEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIHZvaWQgKikKK3sKKyAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30K
Kwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OmdldG5Vbmlmb3JtZnZFWFQoR0MzRHVp
bnQsIGludCwgR0MzRHNpemVpLCBmbG9hdCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTENvbW1vbjo6Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGlu
dCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnNHTE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwNmIxNWIxYTcx
MDk0MDY3ODVjY2RkYmVhNzlkNjI4MzVmYjNjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbiA6IHB1YmxpYyBFeHRlbnNpb25zR0wgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1YWwgfkV4dGVuc2lvbnNHTE9wZW5HTENvbW1v
bigpOworCisgICAgLy8gRXh0ZW5zaW9uc0dMIG1ldGhvZHMuCisgICAgYm9vbCBzdXBwb3J0cyhj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGVuc3VyZUVuYWJsZWQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CisgICAgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSBvdmVycmlkZTsKKworICAg
IFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZSA9IDA7Cisg
ICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9
IDA7CisgICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBv
dmVycmlkZSA9IDA7CisgICAgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCkgb3ZlcnJpZGUgPSAwOworCisgICAgdm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWksIGNv
bnN0IEdDM0RlbnVtKikgb3ZlcnJpZGUgPSAwOworCisgICAgU3RyaW5nIGdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKworICAgIC8vIEVY
VCBSb2J1c3RuZXNzIC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKKyAgICB2b2lk
IHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXpl
LCB2b2lkICpkYXRhKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVp
bnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFt
cykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0s
IGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsK
KworICAgIGJvb2wgaXNOVklESUEoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzTlZJRElBOyB9Cisg
ICAgYm9vbCBpc0FNRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNBTUQ7IH0KKyAgICBib29sIGlz
SW50ZWwoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzSW50ZWw7IH0KKyAgICBib29sIGlzSW1hZ2lu
YXRpb24oKSBvdmVycmlkZSB7IHJldHVybiBtX2lzSW1hZ2luYXRpb247IH0KKyAgICBTdHJpbmcg
dmVuZG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV92ZW5kb3I7IH0KKworICAgIGJvb2wgcmVxdWly
ZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24oKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVpcmVz
QnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uOyB9CisgICAgYm9vbCByZXF1aXJlc1Jlc3RyaWN0ZWRN
YXhpbXVtVGV4dHVyZVNpemUoKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVpcmVzUmVzdHJpY3Rl
ZE1heGltdW1UZXh0dXJlU2l6ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOworICAgIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbihHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCosIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZyk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIGdldEV4dGVuc2lvbnMoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKyAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7
CisKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHRHTE9wZW5HTAor
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBtX2NvbnRleHQ7CisKKyAgICBib29sIG1faXNO
VklESUE7CisgICAgYm9vbCBtX2lzQU1EOworICAgIGJvb2wgbV9pc0ludGVsOworICAgIGJvb2wg
bV9pc0ltYWdpbmF0aW9uOworICAgIGJvb2wgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxh
dGlvbjsKKyAgICBib29sIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplOwor
CisgICAgYm9vbCBtX3VzZUluZGV4ZWRHZXRTdHJpbmcgeyBmYWxzZSB9OworCisgICAgU3RyaW5n
IG1fdmVuZG9yOworICAgIFN0cmluZyBtX3JlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIxZDBk
MTk3ZWM0OTA3YjhhMmMxMzc0MWY4Y2YwMmFiMjQ3YWQ5YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xF
Uy5jcHAKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dM
T3BlbkdMRVMuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNs
dWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNp
b25zR0xPcGVuR0xFUzo6RXh0ZW5zaW9uc0dMT3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQsIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZykKKyAgICA6IEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbihjb250ZXh0LCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgICwgbV9jb250
ZXh0UmVzZXRTdGF0dXMoR0xfTk9fRVJST1IpCisgICAgLCBtX3N1cHBvcnRzT0VTdmVydGV4QXJy
YXlPYmplY3QoZmFsc2UpCisgICAgLCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9U
ZXh0dXJlKGZhbHNlKQorICAgICwgbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzKGZhbHNl
KQorICAgICwgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcoMCkKKyAgICAs
IG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcoMCkKKyAgICAsIG1fZ2xCaW5k
VmVydGV4QXJyYXlPRVMoMCkKKyAgICAsIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMCkKKyAg
ICAsIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMCkKKyAgICAsIG1fZ2xJc1ZlcnRleEFycmF5T0VT
KDApCisgICAgLCBtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCgwKQorICAgICwgbV9nbFJl
YWRuUGl4ZWxzRVhUKDApCisgICAgLCBtX2dsR2V0blVuaWZvcm1mdkVYVCgwKQorICAgICwgbV9n
bEdldG5Vbmlmb3JtaXZFWFQoMCkKKyAgICAsIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUo
bnVsbHB0cikKKyAgICAsIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobnVsbHB0cikKKyAg
ICAsIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShudWxscHRyKQoreworfQorCitFeHRl
bnNpb25zR0xPcGVuR0xFUzo6fkV4dGVuc2lvbnNHTE9wZW5HTEVTKCkgPSBkZWZhdWx0OworCiti
b29sIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIC8vIFJldHVybiBmYWxzZSBpbW1lZGlhdGVseSBpZiB0aGUgZXh0ZW5zaW9uIGlzIG5v
dCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcnMuCisgICAgYm9vbCBlbmFibGVkID0gRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uOjppc0VuYWJsZWQobmFtZSk7CisgICAgaWYgKCFlbmFibGVkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGb3IgR0xfRVhUX3JvYnVzdG5lc3MsIGNoZWNr
IHRoYXQgdGhlIGNvbnRleHQgc3VwcG9ydHMgcm9idXN0IGFjY2Vzcy4KKyAgICBpZiAobmFtZSA9
PSAiR0xfRVhUX3JvYnVzdG5lc3MiKSB7CisgICAgICAgIEdMaW50IHJvYnVzdEFjY2VzcyA9IEdM
X0ZBTFNFOworICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6Q09O
VEVYVF9ST0JVU1RfQUNDRVNTLCAmcm9idXN0QWNjZXNzKTsKKyAgICAgICAgcmV0dXJuIHJvYnVz
dEFjY2VzcyA9PSBHTF9UUlVFOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1H
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxv
bmcgc2FtcGxlcykKK3sKKyAgICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1w
bGVJTUcpCisgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRh
cmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7Cisg
ICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJsaXRGcmFt
ZWJ1ZmZlcihsb25nIC8qIHNyY1gwICovLCBsb25nIC8qIHNyY1kwICovLCBsb25nIC8qIHNyY1gx
ICovLCBsb25nIC8qIHNyY1kxICovLCBsb25nIC8qIGRzdFgwICovLCBsb25nIC8qIGRzdFkwICov
LCBsb25nIC8qIGRzdFgxICovLCBsb25nIC8qIGRzdFkxICovLCB1bnNpZ25lZCBsb25nIC8qIG1h
c2sgKi8sIHVuc2lnbmVkIGxvbmcgLyogZmlsdGVyICovKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKK3sKKyAgICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUlNRykKKyAgICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdl
dCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpwdXNoR3JvdXBNYXJrZXJFWFQo
Y29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV4dGVu
c2lvbnNHTE9wZW5HTEVTOjpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmNy
ZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIEdMdWludCBh
cnJheSA9IDA7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAg
ICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJh
eXNPRVMpCisgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0xFUzo6aXNWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQorICAgICAgICByZXR1cm4gbV9n
bElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCBhcnJheSkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
IChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VT
KGFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpk
cmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgLyogbiAqLywgY29uc3QgR0MzRGVudW0qIC8qIGJ1ZnMg
Ki8pCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGUgc3VwcG9ydC4KKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitpbnQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGNhbGwgZ2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQiwgYnV0IGluc3RlYWQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0VY
VC4KKyAgICAvLyBUaGUgcmV0dXJuIGNvZGVzIGZyb20gdGhlIHR3byBleHRlbnNpb25zIGFyZSBp
ZGVudGljYWwgYW5kIHRoZWlyIHB1cnBvc2UgaXMgdGhlIHNhbWUsIHNvIGl0CisgICAgLy8gbWF5
IGJlIGJlc3QgdG8gcmVuYW1lIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSB0byBnZXRHcmFw
aGljc1Jlc2V0U3RhdHVzKCkuCisgICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVzICE9IEdMX05P
X0VSUk9SKQorICAgICAgICByZXR1cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7CisgICAgaWYgKG1f
Z2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFw
aGljc1Jlc2V0U3RhdHVzRVhUKCk7CisgICAgICAgIGlmIChyZWFzb25Gb3JSZXNldCAhPSBHTF9O
T19FUlJPUikKKyAgICAgICAgICAgIG1fY29udGV4dFJlc2V0U3RhdHVzID0gcmVhc29uRm9yUmVz
ZXQ7CisgICAgICAgIHJldHVybiByZWFzb25Gb3JSZXNldDsKKyAgICB9CisKKyAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGlu
dCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKQorewor
ICAgIGlmIChtX2dsUmVhZG5QaXhlbHNFWFQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2gg
Y2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKKyAgICAgICAgLy8gYWxs
IHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBw
aXhlbHMuCisgICAgICAgIDo6Z2xGbHVzaCgpOworCisgICAgICAgIC8vIEZJWE1FOiBJZiBub24t
QmxhY2tCZXJyeSBwbGF0Zm9ybXMgdXNlIHRoaXMsIHRoZXkgd2lsbCBuZWVkIHRvIGltcGxlbWVu
dAorICAgICAgICAvLyB0aGVpciBhbnRpLWFsaWFzaW5nIGNvZGUgaGVyZS4KKyAgICAgICAgbV9n
bFJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYnVmU2l6
ZSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25z
R0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1mdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKQoreworICAgIGlmIChtX2dsR2V0
blVuaWZvcm1mdkVYVCkgeworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgICAgICBtX2dsR2V0blVuaWZvcm1mdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6
ZSwgcGFyYW1zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKQoreworICAgIGlmIChtX2dsR2V0
blVuaWZvcm1pdkVYVCkgeworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgICAgICBtX2dsR2V0blVuaWZvcm1pdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6
ZSwgcGFyYW1zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTEVTOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQg
Zmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBpZiAo
IW1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fZ2xEcmF3
QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworfQor
Cit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghbV9nbERyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5H
TEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOworfQorCit2b2lkIEV4dGVuc2lvbnNH
TE9wZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBk
aXZpc29yKQoreworICAgIGlmICghbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSkgeworICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7
Cit9CisKK2Jvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KG5hbWUpKSB7CisgICAgICAgIGlmICghbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0ICYm
IG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgeworICAgICAgICAgICAgbV9n
bEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJS
QVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7Cisg
ICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5H
TEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFy
cmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWlu
dGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbElzVmVy
dGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+
KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBt
X3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYg
KCFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlICYmIG5hbWUgPT0gIkdM
X0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSB7CisgICAgICAgICAgICBtX2ds
RnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJl
c3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAg
IG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0
PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAg
ICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAoIW1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUICYmIG5hbWUgPT0g
IkdMX0VYVF9yb2J1c3RuZXNzIikgeworICAgICAgICAgICAgbV9nbEdldEdyYXBoaWNzUmVzZXRT
dGF0dXNFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VY
VFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQiKSk7
CisgICAgICAgICAgICBtX2dsUmVhZG5QaXhlbHNFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdM
UkVBRE5QSVhFTFNFWFRQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xSZWFkblBpeGVsc0VYVCIp
KTsKKyAgICAgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTEdFVE5VTklGT1JNRlZFWFRQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZXRuVW5pZm9y
bWZ2RVhUIikpOworICAgICAgICAgICAgbV9nbEdldG5Vbmlmb3JtaXZFWFQgPSByZWludGVycHJl
dF9jYXN0PFBGTkdMR0VUTlVOSUZPUk1JVkVYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdl
dG5Vbmlmb3JtaXZFWFQiKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fc3VwcG9ydHNBTkdMRWlu
c3RhbmNlZEFycmF5cyAmJiBuYW1lID09ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikgewor
ICAgICAgICAgICAgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygi
Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiKSk7CisgICAgICAgICAgICBtX2dsRHJhd0FycmF5
c0luc3RhbmNlZEFOR0xFID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTERSQVdBUlJBWVNJTlNUQU5D
RURBTkdMRVBST0MgPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5H
TEUiKSk7CisgICAgICAgICAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUgPSByZWlu
dGVycHJldF9jYXN0PFBGTkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DID4oZWdsR2V0
UHJvY0FkZHJlc3MoImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiKSk7CisgICAgICAgICAg
ICBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJheXMgPSB0cnVlOworICAgICAgICB9IGVsc2Ug
aWYgKG5hbWUgPT0gIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogaW1wbGVtZW50IHRoZSBzdXBwb3J0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworU3RyaW5nIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJp
bmcoR0xfRVhURU5TSU9OUykpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisKKyNlbmRpZiAvLyBVU0UoT1BFTkdM
X0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnNHTE9wZW5HTEVTLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDFjNmMwYTgwNmMz
MTlhYjYxOTY1OGZkMDZmNGVlNTQ0YmViNGJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmgKQEAg
LTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIgorCisjaWYgVVNFKE9QRU5HTF9FUykK
KworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxlcG94eS9nbC5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbmRpZgorCisj
aWZuZGVmIEdMX0VYVF9yb2J1c3RuZXNzCisvKiByZXVzZSBHTF9OT19FUlJPUiAqLworI2RlZmlu
ZSBHTF9HVUlMVFlfQ09OVEVYVF9SRVNFVF9FWFQgMHg4MjUzCisjZGVmaW5lIEdMX0lOTk9DRU5U
X0NPTlRFWFRfUkVTRVRfRVhUIDB4ODI1NAorI2RlZmluZSBHTF9VTktOT1dOX0NPTlRFWFRfUkVT
RVRfRVhUIDB4ODI1NQorI2RlZmluZSBHTF9DT05URVhUX1JPQlVTVF9BQ0NFU1NfRVhUIDB4OTBG
MworI2RlZmluZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUIDB4ODI1NgorI2Rl
ZmluZSBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUIDB4ODI1MgorI2RlZmluZSBHTF9OT19S
RVNFVF9OT1RJRklDQVRJT05fRVhUIDB4ODI2MQorI2VuZGlmCisKKyNpZm5kZWYgR0xfRVhUX3Jv
YnVzdG5lc3MKKyNkZWZpbmUgR0xfRVhUX3JvYnVzdG5lc3MgMQorI2lmZGVmIEdMX0dMRVhUX1BS
T1RPVFlQRVMKK0dMX0FQSUNBTEwgR0MzRGVudW0gR0xfQVBJRU5UUlkgZ2xHZXRHcmFwaGljc1Jl
c2V0U3RhdHVzRVhUKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUmVhZG5Q
aXhlbHNFWFQoR0xpbnQgeCwgR0xpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2
b2lkICpkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldG5Vbmlmb3JtZnZF
WFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxv
YXQgKnBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRuVW5pZm9ybWl2
RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIEdM
aW50ICpwYXJhbXMpOworI2VuZGlmCit0eXBlZGVmIEdDM0RlbnVtIChHTF9BUElFTlRSWVAgUEZO
R0xHRVRHUkFQSElDU1JFU0VUU1RBVFVTRVhUUFJPQykgKHZvaWQpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xSRUFETlBJWEVMU0VYVFBST0MpIChHTGludCB4LCBHTGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xHRVROVU5JRk9STUZWRVhUUFJPQykgKEdMdWludCBwcm9ncmFtLCBH
TGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpOwordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVROVU5JRk9STUlWRVhUUFJPQykgKEdMdWludCBw
cm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMp
OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uc0dMT3Bl
bkdMRVMgOiBwdWJsaWMgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoKKyAgICAv
LyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMIGltcGxlbWVudGF0aW9ucy4KKyAgICBFeHRlbnNpb25zR0xPcGVuR0xFUyhH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCosIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZyk7CisgICAg
dmlydHVhbCB+RXh0ZW5zaW9uc0dMT3BlbkdMRVMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0
ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7CisgICAgdmlydHVhbCB2
b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAgICAvLyBFeHRl
bnNpb24zRCBtZXRob2RzCisgICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9u
ZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwg
bG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikgb3Zl
cnJpZGU7CisgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5h
bGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpIG92ZXJy
aWRlOworICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKKworICAgIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRl
bGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIEdDM0Ri
b29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVtKikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQp
IG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcikgb3ZlcnJpZGU7CisKKyAgICAvLyBFWFQgUm9idXN0bmVzcyAtIHJl
c2V0CisgICAgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSBvdmVycmlkZTsKKworICAg
IC8vIEVYVCBSb2J1c3RuZXNzIC0gZXRjCisgICAgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwg
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlv
biwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRlOworICAgIHZvaWQg
Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBidWZTaXplLCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBib29s
IHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIFN0cmluZyBn
ZXRFeHRlbnNpb25zKCkgb3ZlcnJpZGU7CisKKyAgICBHQzNEZW51bSBtX2NvbnRleHRSZXNldFN0
YXR1czsKKworICAgIGJvb2wgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0OworICAgIGJv
b2wgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZTsKKyAgICBib29sIG1f
c3VwcG9ydHNBTkdMRWluc3RhbmNlZEFycmF5czsKKworICAgIFBGTkdMRlJBTUVCVUZGRVJURVhU
VVJFMkRNVUxUSVNBTVBMRUlNR1BST0MgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1w
bGVJTUc7CisgICAgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DIG1f
Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUc7CisgICAgUEZOR0xCSU5EVkVSVEVY
QVJSQVlPRVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVM7CisgICAgUEZOR0xERUxFVEVWRVJU
RVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVM7CisgICAgUEZOR0xHRU5W
RVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVM7CisgICAgUEZOR0xJU1ZF
UlRFWEFSUkFZT0VTUFJPQyBtX2dsSXNWZXJ0ZXhBcnJheU9FUzsKKyAgICBQRk5HTEdFVEdSQVBI
SUNTUkVTRVRTVEFUVVNFWFRQUk9DIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUOworICAg
IFBGTkdMUkVBRE5QSVhFTFNFWFRQUk9DIG1fZ2xSZWFkblBpeGVsc0VYVDsKKyAgICBQRk5HTEdF
VE5VTklGT1JNRlZFWFRQUk9DIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUOworICAgIFBGTkdMR0VUTlVO
SUZPUk1JVkVYVFBST0MgbV9nbEdldG5Vbmlmb3JtaXZFWFQ7CisgICAgUEZOR0xWRVJURVhBVFRS
SUJESVZJU09SQU5HTEVQUk9DIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEU7CisgICAgUEZO
R0xEUkFXQVJSQVlTSU5TVEFOQ0VEQU5HTEVQUk9DIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5H
TEU7CisgICAgUEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MgbV9nbERyYXdFbGVt
ZW50c0luc3RhbmNlZEFOR0xFOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKE9QRU5HTF9FUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDQ3ZTI0NzMzYTE2ZTBmZTIwMGFlMzQz
OWFjN2ZjYjgwMzZjYWFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MTcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5H
TCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkpCi0KLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRElPUy5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNE
T3BlbkdMLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRp
bmcuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lm
IFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJPcGVu
R0xTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbXBvcnQgPE9wZW5HTEVTL0VTMi9n
bGV4dC5oPgotLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KLSNkZWZpbmUgR0xfUkdCQTMyRl9B
UkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0Ci0jZGVmaW5lIEdMX1JHQjMyRl9BUkIgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODgxNQotI2VsaWYgVVNFKE9QRU5HTCkKLSNkZWZpbmUgR0xf
RE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECi0jaW5jbHVk
ZSA8T3BlbkdML2dsLmg+Ci0jaW5jbHVkZSA8T3BlbkdML2dsMy5oPgotI3VuZGVmIEdMX0RPX05P
VF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hh
bm5lbEZyb21QaXhlbHMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhl
bHMpCi17Ci0gICAgLy8gV2UgY2FuIGFzc3VtZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgYmVjYXVz
ZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMKLSAgICAvLyB1c2UgY2hlY2tlZCBhcml0aG1ldGljLgot
ICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQotICAgICAgICBwaXhlbHNbaSArIDNdID0gMjU1
OwotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252
ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IHVuc2lnbmVkIGNoYXIqIHBpeGVscykKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKLQotICAgIC8vIE5WSURJQSBkcml2ZXJzIGhhdmUgYSBidWcgd2hlcmUgY2FsbGlu
ZyByZWFkUGl4ZWxzIGluIEJHUkEgY2FuIHJldHVybiB0aGUgd3JvbmcgdmFsdWVzIGZvciB0aGUg
YWxwaGEgY2hhbm5lbCB3aGVuIHRoZSBhbHBoYSBpcyBvZmYgZm9yIHRoZSBjb250ZXh0LgotICAg
IGlmICghYXR0cnMuYWxwaGEgJiYgZ2V0RXh0ZW5zaW9ucygpLmlzTlZJRElBKCkpIHsKLSAgICAg
ICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgcGl4ZWxzKTsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIHNyYy53aWR0
aCA9IHdpZHRoOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgICAgIHNy
Yy5kYXRhID0gcGl4ZWxzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAg
ZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICAg
ICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICAgICAgZGVzdC5kYXRhID0gcGl4ZWxz
OwotCi0gICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0g
ICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgIHZJ
bWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9G
bGFncyk7Ci0jZWxzZQotICAgICAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICog
NDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAg
ICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKLSNlbmRpZgotICAg
IH0gZWxzZQotICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9C
R1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscyk7Ci0KLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgaWYgKCFhdHRycy5hbHBoYSkKLSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZy
b21QaXhlbHMod2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQotewotICAgIHZhbGlkYXRlRGVwdGhT
dGVuY2lsKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBhdXRv
IGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBzaXpl
LndpZHRoKCk7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgR0x1
aW50IGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7Ci0gICAgaWYg
KGF0dHJzLmFscGhhKSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4
OwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBH
TF9SR0I7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSB7Ci0g
ICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVp
cmVkIGFuZCBkZXB0aCBpcyBub3QuCi0gICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6
dmFsaWRhdGVBdHRyaWJ1dGVzLgotCi0gICAgICAgIEV4dGVuc2lvbnMzRCYgZXh0ZW5zaW9ucyA9
IGdldEV4dGVuc2lvbnMoKTsKLSAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3
aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQuCi0gICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRz
KCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkKLSAgICAgICAgICAgIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7Ci0gICAgICAgIGVsc2UK
LSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgICAgIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0jZWxzZQotICAg
ICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBSZXNpemUgbXVsdGlzYW1wbGUgRkJPLgotICAgIGlm
IChhdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7Ci0gICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7
Ci0gICAgICAgIC8vIFVzaW5nIG1vcmUgdGhhbiA0IHNhbXBsZXMgaXMgc2xvdyBvbiBzb21lIGhh
cmR3YXJlIGFuZCBpcyB1bmxpa2VseSB0bwotICAgICAgICAvLyBwcm9kdWNlIGEgc2lnbmlmaWNh
bnRseSBiZXR0ZXIgcmVzdWx0LgotICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWlu
KDQsIG1heFNhbXBsZUNvdW50KTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OwotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICA6OmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBs
ZUNvdW50LCBHTF9SR0JBOF9PRVMsIHdpZHRoLCBoZWlnaHQpOwotI2Vsc2UKLSAgICAgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBz
YW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSNlbmRp
ZgotICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJz
LmRlcHRoKSB7Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAg
IDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxf
QVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQotICAgICAgICAgICAg
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICAgICAgaWYgKGdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFX0VYVCkgewotICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCi0gICAgICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gcmVzaXplIHJl
Z3VsYXIgRkJPCi0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSNp
ZiBVU0UoT1BFTkdMX0VTKQotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZF
UiwgbV90ZXh0dXJlKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7
Ci0gICAgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0KTsKLSNlbHNlCi0gICAgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3Rv
cmUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJl
QmFja2luZ1N0b3JlRnJvbUxheWVyKCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7Ci0jZW5kaWYgLy8gIVVTRShPUEVOR0xfRVMp
KQotI2Vsc2UKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsK
LSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
LSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0KLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUp
IHsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRl
eHR1cmUpOwotICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwot
ICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSAgICAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5h
bENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURf
QllURSwgMCk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAg
ICB9Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZO
ZWVkZWQoaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAg
Ym9vbCBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewot
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUZCTyk7Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pCi0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJvKQotICAgICAgICAgICAgbXVz
dFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZl
cklmTmVlZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0g
ICAgaWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgp
KSB7Ci0gICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxf
QVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKLSAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQotICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9F
WFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgfQot
Ci0gICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQp
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgewotICAgICAgICAvLyBGSVhNRTogY2xl
YW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9T
Q0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3Bl
ZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5n
IHNjb3BlZERlcHRoKEdMX0RFUFRIX1RFU1QsIEdMX0ZBTFNFKTsKLSAgICBUZW1wb3JhcnlPcGVu
R0xTZXR0aW5nIHNjb3BlZFN0ZW5jaWwoR0xfU1RFTkNJTF9URVNULCBHTF9GQUxTRSk7Ci0KLSNp
ZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICBHTGludCBib3VuZEZyYW1l
QnVmZmVyOwotICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmYm91
bmRGcmFtZUJ1ZmZlcik7Ci0jZW5kaWYKLQotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
UkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSNpZiBQTEFURk9S
TShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICBVTlVTRURfUEFSQU0ocmVjdCk7Ci0gICAg
OjpnbEZsdXNoKCk7Ci0gICAgOjpnbFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQVBQTEUo
KTsKLSAgICBjb25zdCBHTGVudW0gZGlzY2FyZHNbXSA9IHsgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdMX0RFUFRIX0FUVEFDSE1FTlQgfTsKLSAgICA6OmdsRGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdM
X1JFQURfRlJBTUVCVUZGRVJfQVBQTEUsIDIsIGRpc2NhcmRzKTsKLSAgICA6OmdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKLSNlbHNlCi0gICAgSW50
UmVjdCByZXNvbHZlUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXNvbHZlUmVjdCA9IEludFJlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCk7Ci0KLSAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHJlc29sdmVSZWN0LngoKSwgcmVz
b2x2ZVJlY3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1heFkoKSwgcmVz
b2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2
ZVJlY3QubWF4WSgpLCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotI2VuZGlmCi19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmIFVTRShPUEVOR0wp
Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgREVQVEhfU1RFTkNJTDoK
LSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgaW50ZXJuYWxm
b3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUkdC
QTQ6Ci0gICAgY2FzZSBSR0I1X0ExOgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JHQkE7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUkdCNTY1OgotICAgICAgICBpbnRlcm5hbGZvcm1h
dCA9IEdMX1JHQjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICAvLyBOZWVkIHRvIGVtdWxhdGUgTUFYX0ZSQUdNRU5U
L1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgYW5kIE1BWF9WQVJZSU5HX1ZFQ1RPUlMKLSAgICAvLyBi
ZWNhdXNlIGRlc2t0b3AgR0wncyBjb3JyZXNwb25kaW5nIHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1i
ZXIgb2YgY29tcG9uZW50cwotICAgIC8vIHdoZXJlYXMgR0xFUzIgcmV0dXJuIHRoZSBudW1iZXIg
b2YgdmVjdG9ycyAoZWFjaCB2ZWN0b3IgaGFzIDQgY29tcG9uZW50cykuCi0gICAgLy8gVGhlcmVm
b3JlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBiZSBkaXZpZGVk
IGJ5IDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgc3dpdGNoIChwbmFtZSkgewot
I2lmIFVTRShPUEVOR0wpCi0gICAgY2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgot
ICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5U
UywgdmFsdWUpOwotICAgICAgICAqdmFsdWUgLz0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdM
X01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7Ci0gICAgICAgICp2YWx1ZSAv
PSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAg
ICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCg6OmdsR2V0
RXJyb3IoKSA9PSBHTF9OT19FUlJPUik7Ci0gICAgICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xf
TUFYX1ZBUllJTkdfVkVDVE9SUywgdmFsdWUpOwotICAgICAgICAgICAgaWYgKDo6Z2xHZXRFcnJv
cigpID09IEdMX0lOVkFMSURfRU5VTSkgewotICAgICAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9NQVhfVkFSWUlOR19DT01QT05FTlRTLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgKnZh
bHVlIC89IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICA6
OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICAqdmFsdWUgLz0gNDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNh
c2UgTUFYX1RFWFRVUkVfU0laRToKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9URVhUVVJF
X1NJWkUsIHZhbHVlKTsKLSAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3Ry
aWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWlu
KDQwOTYsICp2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUFYX0NVQkVfTUFQX1RF
WFRVUkVfU0laRToKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9DVUJFX01BUF9URVhUVVJF
X1NJWkUsIHZhbHVlKTsKLSAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3Ry
aWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWlu
KDEwMjQsICp2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAv
LyBTb21lIG9sZGVyIGhhcmR3YXJlIGFkdmVydGlzZXMgYSBsYXJnZXIgbWF4aW11bSB0aGFuIHRo
ZXkKLSAgICAvLyBjYW4gYWN0dWFsbHkgaGFuZGxlLiBSYXRoZXIgdGhhbiBkZXRlY3Rpbmcgc3Vj
aCBkZXZpY2VzLCBzaW1wbHkKLSAgICAvLyBjbGFtcCB0aGUgbWF4aW11bSB0byA4MTkyLCB3aGlj
aCBpcyBiaWcgZW5vdWdoIGZvciBhIDVLIGRpc3BsYXkuCi0gICAgY2FzZSBNQVhfUkVOREVSQlVG
RkVSX1NJWkU6Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfUkVOREVSQlVGRkVSX1NJWkUs
IHZhbHVlKTsKLSAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oODE5MiwgKnZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgOjpnbEdldElu
dGVnZXJ2KE1BWF9WSUVXUE9SVF9ESU1TLCB2YWx1ZSk7Ci0gICAgICAgIHZhbHVlWzBdID0gc3Rk
OjptaW4oODE5MiwgdmFsdWVbMF0pOwotICAgICAgICB2YWx1ZVsxXSA9IHN0ZDo6bWluKDgxOTIs
IHZhbHVlWzFdKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAg
ICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBl
LCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lz
aW9uKQotewotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKLSAgICBBU1NFUlQocmFuZ2Up
OwotICAgIEFTU0VSVChwcmVjaXNpb24pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMT1dfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6Ci0gICAgICAgIC8vIFRoZXNlIHZhbHVl
cyBhcmUgZm9yIGEgMzItYml0IHR3b3MtY29tcGxlbWVudCBpbnRlZ2VyIGZvcm1hdC4KLSAgICAg
ICAgcmFuZ2VbMF0gPSAzMTsKLSAgICAgICAgcmFuZ2VbMV0gPSAzMDsKLSAgICAgICAgcHJlY2lz
aW9uWzBdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TE9XX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9GTE9BVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0ZMT0FUOgotICAgICAgICAvLyBUaGVzZSB2
YWx1ZXMgYXJlIGZvciBhbiBJRUVFIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9y
bWF0LgotICAgICAgICByYW5nZVswXSA9IDEyNzsKLSAgICAgICAgcmFuZ2VbMV0gPSAxMjc7Ci0g
ICAgICAgIHByZWNpc2lvblswXSA9IDIzOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYg
IXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEdDM0RlbnVtIG9wZW5HTEZvcm1hdCA9
IGZvcm1hdDsKLSAgICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9y
bWF0OwotI2lmIFVTRShPUEVOR0wpCi0gICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpIHsKLSAgICAg
ICAgaWYgKGZvcm1hdCA9PSBHTF9SR0JBKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3Jt
YXQgPSBHTF9SR0JBMzJGX0FSQjsKLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikK
LSAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJGX0FSQjsKLSAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgaWYgKGZvcm1hdCA9
PSBHTF9SR0JBKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBMTZG
X0FSQjsKLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKLSAgICAgICAgICAgIG9w
ZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMTZGX0FSQjsKLSAgICAgICAgZWxzZSBpZiAoZm9y
bWF0ID09IEdMX0xVTUlOQU5DRSkKLSAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0g
R0xfTFVNSU5BTkNFMTZGX0FSQjsKLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0FMUEhB
KQotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9BTFBIQTE2Rl9BUkI7Ci0g
ICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpCi0gICAgICAgICAg
ICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9BUkI7Ci0gICAg
ICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZm9ybWF0
ICE9IEV4dGVuc2lvbnMzRDo6U1JHQjhfQUxQSEE4X0VYVCk7Ci0gICAgaWYgKGZvcm1hdCA9PSBF
eHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQotICAgICAgICBvcGVuR0xGb3JtYXQgPSBHTF9S
R0JBOwotICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUKQotICAg
ICAgICBvcGVuR0xGb3JtYXQgPSBHTF9SR0I7Ci0jZW5kaWYKLQotICAgIGlmIChtX3VzaW5nQ29y
ZVByb2ZpbGUpIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2Vk
IGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwg
c28gd2UgbmVlZAotICAgICAgICAvLyB0byBhZGFwdCB0aGVtLgotICAgICAgICBzd2l0Y2ggKG9w
ZW5HTEludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgQUxQSEE6Ci0gICAgICAgICAgICAv
LyBUaGUgZm9ybWF0IGlzIGEgc2ltcGxlIGNvbXBvbmVudCBjb250YWluaW5nIGFuIGFscGhhIHZh
bHVlLiBJdCBuZWVkcyB0byBiZSBiYWNrZWQgd2l0aCBhIEdMX1JFRCBwbGFuZS4KLSAgICAgICAg
ICAgIC8vIFdlIGNoYW5nZSB0aGUgZm9ybWF0cyB0byBHTF9SRUQgKGJvdGggbmVlZCB0byBiZSBH
TF9BTFBIQSBpbiBXZWJHTCkgYW5kIGluc3RydWN0IHRoZSB0ZXh0dXJlIHRvIHN3aXp6bGUKLSAg
ICAgICAgICAgIC8vIHRoZSByZWQgY29tcG9uZW50IHZhbHVlcyB3aXRoIHRoZSBhbHBoYSBjb21w
b25lbnQgdmFsdWVzLgotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xG
b3JtYXQgPSBSRUQ7Ci0gICAgICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9T
V0laWkxFX0EsIFJFRCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMVU1JTkFO
Q0VfQUxQSEE6Ci0gICAgICAgICAgICAvLyBUaGUgZm9ybWF0IGhhcyAyIGNvbXBvbmVudHMsIGFu
IGFscGhhIG9uZSBhbmQgYSBsdW1pbmFuY2Ugb25lIChzYW1lIHZhbHVlIGZvciByZWQsIGdyZWVu
IGFuZCBibHVlKS4KLSAgICAgICAgICAgIC8vIEl0IG5lZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEg
R0xfUkcgcGxhbmUsIHVzaW5nIHRoZSByZWQgY29tcG9uZW50IGZvciB0aGUgY29sb3JzIGFuZCB0
aGUgZ3JlZW4gY29tcG9uZW50Ci0gICAgICAgICAgICAvLyBmb3IgYWxwaGEuIFdlIGNoYW5nZSB0
aGUgZm9ybWF0cyB0byBHTF9SRyBhbmQgc3dpenpsZSB0aGUgY29tcG9uZW50cy4KLSAgICAgICAg
ICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gb3BlbkdMRm9ybWF0ID0gUkc7Ci0gICAgICAgICAg
ICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX1IsIFJFRCk7Ci0gICAgICAg
ICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0csIFJFRCk7Ci0gICAg
ICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0IsIFJFRCk7Ci0g
ICAgICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0EsIEdSRUVO
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2
ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIG9wZW5HTEZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0oQ09DT0EpICYmIFVT
RShPUEVOR0xfRVMpCi0gICAgOjpnbERlcHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVh
ciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFyKSk7Ci0jZWxzZQotICAgIDo6Z2xEZXB0aFJhbmdl
KHpOZWFyLCB6RmFyKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
ckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0j
aWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbENsZWFyRGVwdGhm
KHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOwotI2Vsc2UKLSAgICA6OmdsQ2xlYXJEZXB0aChk
ZXB0aCk7Ci0jZW5kaWYKLX0KLQotI2lmICFQTEFURk9STShHVEspCi1FeHRlbnNpb25zM0QmIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9u
cykKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgbV9leHRl
bnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zM0RPcGVuR0w+KHRoaXMsIGZhbHNlKTsKLSNl
bHNlCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdM
Pih0aGlzLCBpc0dMRVMyQ29tcGxpYW50KCkpOwotI2VuZGlmCi0gICAgcmV0dXJuICptX2V4dGVu
c2lvbnM7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgYXV0byBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0
d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAotICAg
IC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJl
YWRpbmcgcGl4ZWxzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGbHVzaCgp
OwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xG
bHVzaCgpOwotICAgIH0KLSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFhdHRycy5hbHBoYSAmJiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QkdS
QSkgJiYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8gfHwgKGF0dHJzLmFudGlhbGlhcyAmJiBt
X3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkKLSAgICAgICAgd2lwZUFscGhh
Q2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGRhdGEpKTsKLSNlbmRpZgotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9Q
RU5HTF9FUykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZGRlMDE1N2UxMDM5OTBlOGZiNzM3
Mzk1MDBhMTNlMTFhNjdiNDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwODcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBDaGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dA
Z21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQotCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCi0jZW5kaWYKLQotI2lmICFQTEFURk9STShDT0NP
QSkgJiYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgot
I2Vsc2UKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNlbmRpZgotI2luY2x1ZGUg
IkFOR0xFV2ViS2l0QnJpZGdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNz
aW9uLmg+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+Ci0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMu
aD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotCi0jaWYgVVNFKE9QRU5HTF9FUykK
LSNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgotI2ltcG9ydCA8T3BlbkdMRVMvRVMzL2ds
Lmg+Ci0vLyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgotI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAg
ICAgICAgICAgICAgICAgICAgICAweDg4MTQKLSNkZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODE1Ci0jZWxzZQotI2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9N
VUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQKLSNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4K
LSNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+Ci0jaW5jbHVkZSA8T3BlbkdML2dsM2V4dC5oPgotI3Vu
ZGVmIEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAot
I2VuZGlmCi0KLSNlbHNlCi0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlTaGlt
cy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCi0j
ZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgotI2VuZGlmCi0KLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcigpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0
YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFzaDsKLSAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10gewotICAgICAgICBzaGFyZWROYW1lSGFzaCA9
IG5ldyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OwotICAgIH0pOwotCi0gICAgcmV0
dXJuICpzaGFyZWROYW1lSGFzaDsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKLXsKLSAgICAqZ2V0
Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKLX0KLQotLy8g
SGFzaCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVyIHRvIGRv
Ci0vLyBzeW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBtZXRob2Qs
IGJlZm9yZQotLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIKLS8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3VycmVudCBp
bnN0YW5jZSBvZiBHcmFwaGljc0NvbnRleHQzRC4KLQotc3RhdGljIHVpbnQ2NF90IG5hbWVIYXNo
Rm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgaWYgKCFs
ZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ1N0cmluZyBuYW1lQXNDU3RyaW5nID0g
Q1N0cmluZyhuYW1lKTsKLQotICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIgbG9jYWwgbWFwLgot
ICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyID0gKmdldEN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOwotICAgIFNoYWRlck5hbWVIYXNoOjppdGVyYXRv
ciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5maW5kKG5hbWVBc0NT
dHJpbmcpOwotICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
ci0+ZW5kKCkpCi0gICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsKLQotICAgIHVuc2ln
bmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOwotCi0gICAgLy8gQ29udmVydCB0
aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1iaXQgcmVzdWx0Ci0g
ICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3VyIHRhYmxlLiBPdmVy
ZmxvdyB3b3VsZAotICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3JlIGFscmVhZHkgaGFz
aGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCi0gICAgLy8gd2UncmUgaG9waW5nIHRoYXQgb3Zl
ciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKLSAgICAvLyBkb24ndCBoYXZlIHRoYXQg
bWFueSBzeW1ib2xzKS4KLQotICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hWYWx1ZTsKLSAgICBy
ZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNp
emUoKSArIDEpOwotCi0gICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zZXQobmFtZUFz
Q1N0cmluZywgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb24pCi17Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAg
aWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMocGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgewotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1
cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7Ci0gICAgICAgICAgICAvLyBG
b3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCi0gICAgICAgICAgICBhdHRycy5kZXB0aCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9IGZhbHNl
OwotICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7Ci0gICAgfQotICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JXZWJHTDIpIHsKLSAgICAgICAgaWYgKCFleHRlbnNp
b25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7Ci0gICAg
ICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldENvbnRleHRB
dHRyaWJ1dGVzKGF0dHJzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBleHRlbnNpb25z
LmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0gICAg
fQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCi17Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29y
ZE92ZXJmbG93PiByb3dCeXRlcyA9IENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJy
ZW50V2lkdGgpICogNDsKLSAgICBpZiAocm93Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXND
aGVja2VkID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7Ci0gICAgaWYgKHRvdGFsQnl0ZXND
aGVja2VkLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCB0b3RhbEJ5
dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7Ci0KLSAgICBhdXRvIHBpeGVscyA9
IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPih0b3RhbEJ5dGVzKTsKLSAgICBpZiAoIXBp
eGVscykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxz
LmdldCgpLCB0b3RhbEJ5dGVzKTsKLQotICAgIGlmICghY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVt
dWx0aXBsaWVkQWxwaGEpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVz
OyBpICs9IDQpIHsKLSAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFscGhhLgotICAgICAgICAg
ICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tp
ICsgM10gLyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwg
cGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxz
W2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAy
NTUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCks
IEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVmZmVyLT5p
bnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICBwcmVzZW50UmVuZGVyYnVmZmVyKCk7Ci0jZW5k
aWYKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1Rv
Q2FudmFzKEltYWdlQnVmZmVyKikKLXsKLSAgICAvLyBOb3QgbmVlZGVkIGF0IHRoZSBtb21lbnQs
IHNvIHJldHVybiB0aGF0IG5vdGhpbmcgd2FzIGRvbmUuCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1SZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKQotewotICAgIC8vIFJlYWRpbmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3
b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdoaWNoIGlzCi0gICAgLy8gbG9zc3kuCi0g
ICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
SW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSk7Ci0gICAgdW5zaWduZWQg
Y2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKLSAgICBDaGVja2VkPGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gNCAqIENoZWNrZWQ8aW50LCBS
ZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50V2lkdGgpICogQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJm
bG93PihtX2N1cnJlbnRIZWlnaHQpOwotICAgIGlmICh0b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0gICAgaW50IHRvdGFsQnl0ZXMg
PSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVHZXQoKTsKLQotICAgIHJlYWRSZW5kZXJpbmdSZXN1
bHRzKHBpeGVscywgdG90YWxCeXRlcyk7Ci0KLSAgICAvLyBDb252ZXJ0IHRvIFJHQkEuCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dh
cChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQotewotICAgIGlmICht
X2xheWVyQ29tcG9zaXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0KLSNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIFRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKLSAg
ICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNF
KTsKLSNlbmRpZgotCi0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQotICAg
ICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0gICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4
dHVyZSk7Ci0gICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgOjpn
bEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIGdsRmx1c2go
KTsKLQotICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKQotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5i
b3VuZEZCTyk7Ci0gICAgZWxzZQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIHJldHVybjsKLSNlbmRpZgot
Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApOwotICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJvdW5kVGFyZ2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9U
RVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRleHR1cmUoR0xfVEVYVFVSRTApIDogMCk7Ci0gICAg
OjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCk7Ci0gICAgaWYgKG1f
c3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLSAgICA6
OmdsRmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jl
c3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKLXsKLSAgICBpZiAo
cGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBib29sIG11c3RS
ZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFz
KSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgICAgICBtdXN0UmVz
dG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7Ci0gICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGln
bm1lbnQgPSBmYWxzZTsKLSAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZw
YWNrQWxpZ25tZW50KTsKLSAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKLSAgICAgICAgOjpn
bFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKLSAgICAgICAgbXVzdFJlc3RvcmVQ
YWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIHBp
eGVscyk7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQotICAgICAgICA6Omds
UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwotCi0gICAgaWYg
KG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGlm
ICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDAp
OwotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwot
ICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
ZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFy
eU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotICAgIAot
ICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLQotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxv
YXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGlu
dCBjbGVhclN0ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBH
THVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZm
ZmZmOwotICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAg
ICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1Jf
V1JJVEVNQVNLLCBjb2xvck1hc2spOwotICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSk7Ci0KLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKLQotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsR2V0RmxvYXR2KEdM
X0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKDEpOwotICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJ
VEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKLSAg
ICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAgIGlmIChh
dHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFS
X1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKLSAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9j
YXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9T
VEVOQ0lMX0JBQ0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxN
YXNrQmFjaykpOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhm
ZmZmZmZmZik7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZm
ZmZmZmYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAg
IH0KLQotICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0gICAgOjpnbENsZWFyQ29sb3IoY2xl
YXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7
Ci0gICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNr
WzJdLCBjb2xvck1hc2tbM10pOwotICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAgICAgOjpnbERlcHRo
TWFzayhkZXB0aE1hc2spOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAg
ICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFz
a1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFz
a1NlcGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7Ci0gICAgfQotCi0gICAgaWYgKG11
c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Ci0KLSAgICA6OmdsRmx1c2go
KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmcoUGxh
dGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFk
ZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRl
eFNoYWRlcikpOwotICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVu
dFNoYWRlcikpOwotICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVu
dHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0g
ICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5nczsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlpbmdN
YXApIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9sLmtl
eTsKLSAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3IgZWFj
aCBpbmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KLSAgICAgICAgLy8gV2Ugb25seSB3YW50IGEg
c2luZ2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCi0gICAgICAgIGlmIChzeW1i
b2xOYW1lLmVuZHNXaXRoKCJdIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAv
LyBEb24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUg
PT0gImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8IHN5
bWJvbE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdN
YXAuZmluZChzeW1ib2xOYW1lKTsKLSAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZyYWdt
ZW50RW50cnkudmFyeWluZ01hcC5lbmQoKSkKLSAgICAgICAgICAgIGNvbWJpbmVkVmFyeWluZ3Mu
YWRkKHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7Ci0gICAgfQotCi0gICAgc2l6
ZV90IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7Ci0gICAgaWYgKCFudW1W
YXJ5aW5ncykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzdGQ6OnZlY3RvcjxzaDo6U2hh
ZGVyVmFyaWFibGU+IHZhcmlhYmxlczsKLSAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5lZFZh
cnlpbmdzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDogY29t
YmluZWRWYXJ5aW5ncy52YWx1ZXMoKSkKLSAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2YXJ5
aW5nU3ltYm9sKTsKLQotICAgIEdDM0RpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwotI2lmIFVT
RShPUEVOR0xfRVMpCi0gICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZt
YXhWYXJ5aW5nVmVjdG9ycyk7Ci0jZWxzZQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAg
ICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdWZWN0
b3JzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0MzRGludCBtYXhWYXJ5aW5nRmxvYXRzID0gMDsK
LSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZhcnlp
bmdGbG9hdHMpOwotICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9hdHMg
LyA0OwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRoaW5Q
YWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhT
aGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOwotICAgIEFTU0VS
VChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOwotICAgIGNvbnN0
IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIp
LT52YWx1ZTsKLSAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIHNo
OjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUubWFwcGVkTmFtZTsKLSAgICAgICAgdmVy
dGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBw
ZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUucHJlY2lzaW9uKTsKLSAgICB9Ci0KLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRyeS51bmlmb3JtTWFwKSB7Ci0gICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUubWFwcGVkTmFt
ZTsKLSAgICAgICAgY29uc3QgYXV0byYgdmVydGV4U3ltYm9sID0gdmVydGV4U3ltYm9sUHJlY2lz
aW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgo
KSkpOwotICAgICAgICBpZiAodmVydGV4U3ltYm9sICE9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1h
cC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVlICE9IGVudHJ5LnZhbHVlLnByZWNpc2lvbikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKEdDM0Rl
bnVtIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zdGF0ZS5h
Y3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChw
cm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAg
OjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
dWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1l
KTsKLSAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRv
ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAg
IDo6Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgp
LmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdM
dWludCBmYm87Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgZmJvID0gYnVmZmVyOwotICAgIGVs
c2UKLSAgICAgICAgZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0
aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmRGQk8pIHsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7Ci0gICAgICAgIG1f
c3RhdGUuYm91bmRGQk8gPSBmYm87Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5k
ZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJpbmRSZW5k
ZXJidWZmZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOwotfQotCi0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fc3RhdGUuc2V0Qm91
bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7Ci0g
ICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdD
M0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRFcXVhdGlvbihtb2RlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0Rl
bnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7
Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0
b3IsIEdDM0RlbnVtIGRmYWN0b3IpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0gICAgICAgCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0g
ZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0
UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVz
YWdlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCdWZmZXJEYXRhKHRh
cmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZm
ZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBv
ZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBz
aXplLCBkYXRhKTsKLX0KLQotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXUEUpCi12
b2lkKiBHcmFwaGljc0NvbnRleHQzRDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2Vz
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbE1hcEJ1ZmZl
clJhbmdlKHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7Ci19Ci0KLUdDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dDNEOjp1bm1hcEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51
bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciByZWFkT2Zmc2V0
LCBHQzNEaW50cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwg
d3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSwgR0MzRHNpemVpIGJ1ZlNpemUs
IEdDM0RpbnQqIHBhcmFtcykKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxm
b3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
dGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9Q
QVJBTShwbmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOwotICAgIFVOVVNFRF9QQVJB
TShwYXJhbXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVz
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9z
dGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
c2l6ZWkgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleFN0
b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5p
Zm9ybXMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1
bmlmb3JtSW5kaWNlcywgR0MzRGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwg
dW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7Ci19Ci0jZW5kaWYK
LQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6
OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xh
bXBmIGIsIEdDM0RjbGFtcGYgYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsQ2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbENsZWFyKG1hc2spOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyU3RlbmNpbChzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4s
IEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0aGUgd2F5IEFOR0xF
IG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKLSAgICAvLyBwb2ludCBhIGdsb2JhbCBoYXNobWFwIHRv
IHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgotICAgIFNoQnVpbHRJblJlc291cmNlcyBB
TkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgU2hIYXNoRnVu
Y3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlv
bjsKLSAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBuYW1lSGFzaEZvclNoYWRlcjsK
LQotICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICBuYW1lSGFzaE1hcEZv
clNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgIHNldEN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOwotICAgIG1f
Y29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLQotICAgIFN0cmluZyB0cmFu
c2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291
cmNlQU5HTEUoc2hhZGVyKTsKLQotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IHBy
ZXZpb3VzSGFzaEZ1bmN0aW9uOwotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVz
b3VyY2VzKTsKLSAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7Ci0K
LSAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNs
YXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRl
clB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgdHJhbnNsYXRl
ZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmxlbmd0aCgpOwotCi0gICAg
TE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0t
IGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0U2hhZGVyU291cmNlKHNoYWRl
cikudXRmOCgpLmRhdGEoKSk7Ci0gICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIHRyYW5zbGF0ZWQg
c2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAt
LS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVy
LCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOwotICAg
IAotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0gICAgCi0gICAgaW50IGNvbXBpbGVT
dGF0dXM7Ci0gICAgCi0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgQ09NUElMRV9TVEFUVVMs
ICZjb21waWxlU3RhdHVzKTsKLQotICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgLy8gUG9w
dWxhdGUgdGhlIHNoYWRlciBsb2cKLSAgICBHTGludCBsZW5ndGggPSAwOwotICAgIDo6Z2xHZXRT
aGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICBpZiAo
bGVuZ3RoKSB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgICAgIFZlY3RvcjxHTGNo
YXI+IGluZm8obGVuZ3RoKTsKLSAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBs
ZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICAgICAgZW50cnkubG9nID0gZ2V0VW5tYW5n
bGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLSAgICB9
Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5Lmlz
VmFsaWQgPSBmYWxzZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0cmFuc2xh
dG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21waWxlLiIpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlckRpcmVjdChQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVy
U291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNo
YWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZh
bHVlOwotCi0gICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNv
dXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291
cmNlQ1N0cmluZy5kYXRhKCk7Ci0gICAgaW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNv
dXJjZUNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0
IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1c
biIsIHNoYWRlclNvdXJjZVB0cik7Ci0KLSAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwg
JnNoYWRlclNvdXJjZVB0ciwgJnNoYWRlclNvdXJjZUxlbmd0aCk7Ci0KLSAgICA6OmdsQ29tcGls
ZVNoYWRlcihzaGFkZXIpOwotCi0gICAgaW50IGNvbXBpbGVTdGF0dXM7Ci0KLSAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwotCi0gICAg
aWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xfVFJVRSkgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0g
dHJ1ZTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBz
dWNjZWVkZWQuIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNl
OwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRl
ciBmYWlsZWQuIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRycy5hbnRp
YWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAg
IHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KSk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsK
LSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNh
bXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEN1bGxGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgQVNTRVJUKHNoYWRl
cik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9s
Q291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwg
c2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBj
YXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERpc2FibGUoY2FwKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRHJhd0FycmF5cyhtb2Rl
LCBmaXJzdCwgY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLSAgICBj
aGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUoR0Mz
RGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xFbmFibGUo
Y2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmlu
aXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFy
Z2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLSAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyb250RmFjZShtb2RlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJn
ZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Ci17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwotICAgIDo6Z2xHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0
cmlidXRlU2l6ZSk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsg
Ly8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRp
b24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAg
ICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRl
eCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRh
KCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3Ro
KSk7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRh
dGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5n
IGFjdGl2ZSBhdHRyaWJ1dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwg
dW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOwot
I2VuZGlmCi0KLSAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Ci0gICAgaW5mby50eXBlID0g
dHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQzNEaW50IHN5
bWJvbENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3Vu
dChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVMsICZzeW1ib2xD
b3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZp
bmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYg
c3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQzNEdWludCByYXdJbmRleCA9IChp
bmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6
ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXBbaW5k
ZXhdIDogLTE7Ci0KLSAgICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCByYXdJ
bmRleCwgaW5mbyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOwotICAg
IDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwg
Jm1heFVuaWZvcm1TaXplKTsKLQotICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNp
emUpOyAvLyBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWlu
YXRpb24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsK
LSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwg
aW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRh
dGEoKSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3Ro
KSk7Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRh
dGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5n
IGFjdGl2ZSB1bmlmb3JtICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVu
aWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKLSNl
bmRpZgotICAgIAotICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUg
PSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBHQzNEaW50
IHN5bWJvbENvdW50OwotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xD
b3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9s
Q291bnQpOwotICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5m
aW5kKHByb2dyYW0pOwotICAgIH0KLSAgICAKLSAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMm
IHN5bWJvbENvdW50cyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgR0MzRHVpbnQgcmF3SW5kZXggPSAo
aW5kZXggPCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXpl
KCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhd
IDogLTE7Ci0gICAgCi0gICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJh
d0luZGV4LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNE
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJv
Z3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIHVpbnQ2
NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5hbWUudXRmOCgpLmRhdGEoKSwgbmFtZS5s
ZW5ndGgoKSk7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgid2ViZ2xfIik7Ci0gICAgYXBwZW5kVW5zaWduZWRBc0hleChudW1iZXIsIGJ1aWxk
ZXIsIExvd2VyY2FzZSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotT3B0
aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRleHQzRDo6bWFwcGVkU3ltYm9sSW5TaGFkZXJTb3Vy
Y2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJj
ZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGNvbnN0IGF1
dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOwotICAg
IGF1dG8gc3ltYm9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKLSAgICBpZiAoc3ltYm9s
RW50cnkgPT0gc3ltYm9sTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgYXV0byYgbWFwcGVkTmFtZSA9IHN5bWJvbEVudHJ5LT52YWx1ZS5tYXBwZWROYW1lOwot
ICAgIHJldHVybiBTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgp
KTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQzNEc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAgIGZvciAoR0MzRHNpemVpIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAg
aWYgKG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwot
ICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hh
ZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAu
ZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgp
KSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAg
IGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkK
LSAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgICAgIG1hcHBlZE5h
bWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwg
c3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAg
cmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ltYm9sVHlwZSA9
PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBBdHRyaWJ1dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVxdWVz
dGVkIGJlZm9yZSBhbnkgc2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0gICAgICAgIC8vIGFu
ZCBhcmVuJ3QgZXZlbiByZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3JhbS4K
LSAgICAgICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgICAgICBuYW1lSGFz
aE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigpOwotICAgICAgICBz
ZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgp
KTsKLQotICAgICAgICBhdXRvIGdlbmVyYXRlZE5hbWUgPSBnZW5lcmF0ZUhhc2hlZE5hbWUobmFt
ZSk7Ci0KLSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIpOwot
Ci0gICAgICAgIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuc2V0KGdlbmVyYXRlZE5hbWUs
IG5hbWUpOwotCi0gICAgICAgIHJldHVybiBnZW5lcmF0ZWROYW1lOwotICAgIH0KLQotICAgIHJl
dHVybiBuYW1lOwotfQotCi1PcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dDNEOjpvcmln
aW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBBTkdM
RVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChy
ZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJv
bE1hcChzeW1ib2xUeXBlKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3lt
Ym9sTWFwKSB7Ci0gICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZhbHVlLm1hcHBlZE5h
bWUuY19zdHIoKSkKLSAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgfQot
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6
b3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJT
eW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBHQzNEc2l6
ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotICAgIAotICAgIGZvciAo
R0MzRHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBhdXRvIG9yaWdpbmFs
TmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9s
VHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1
cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgLy8gV2UgbWlnaHQgaGF2ZSBk
ZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCi0gICAgYXV0byBy
ZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQg
IT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKLSAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJz
ID0gcmVzdWx0LT52YWx1ZTsKLSAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5
bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuZmlyc3QsIHN5bWJvbFR5cGUsIG5h
bWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdp
bmFsTmFtZS52YWx1ZSgpOwotICAgICAgICBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbElu
U2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsK
LSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5h
bWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9M
X1RZUEVfQVRUUklCVVRFICYmICFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBBdHRyaWJ1
dGVzIGFyZSBhIHNwZWNpYWwgY2FzZTogdGhleSBtYXkgYmUgcmVxdWVzdGVkIGJlZm9yZSBhbnkg
c2hhZGVycyBoYXZlIGJlZW4gY29tcGlsZWQsCi0gICAgICAgIC8vIGFuZCBhcmVuJ3QgZXZlbiBy
ZXF1aXJlZCB0byBiZSB1c2VkIGluIGFueSBzaGFkZXIgcHJvZ3JhbS4KLQotICAgICAgICBjb25z
dCBhdXRvJiBjYWNoZWQgPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmZpbmQobmFtZSk7
Ci0gICAgICAgIGlmIChjYWNoZWQgIT0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5lbmQo
KSkKLSAgICAgICAgICAgIHJldHVybiBjYWNoZWQtPnZhbHVlOwotICAgIH0KLQotICAgIHJldHVy
biBuYW1lOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcHBlZFN5bWJvbE5hbWUo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBzaXplX3QgY291bnQsIGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBmb3IgKHNpemVfdCBzeW1ib2xUeXBlID0gMDsgc3ltYm9sVHlwZSA8PSBz
dGF0aWNfY2FzdDxzaXplX3Q+KFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5HKTsgKytzeW1ib2xU
eXBlKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAg
ICAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHNoYWRlcnNbaV0pOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgY29uc3QgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQt
PnZhbHVlLnN5bWJvbE1hcChzdGF0aWNfY2FzdDxlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZT4o
c3ltYm9sVHlwZSkpOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6
IHN5bWJvbE1hcCkgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09IHN5bWJvbEVudHJ5LnZh
bHVlLm1hcHBlZE5hbWUuY19zdHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJv
bEVudHJ5LmtleTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
bmFtZTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXBy
b2dyYW0pCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURF
Ul9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAgIExPRyhXZWJHTCwgIjo6Z2xHZXRB
dHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBt
YXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotaW50IEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJl
dHVybiAtMTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgcmV0dXJuIDo6Z2xH
ZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjptb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGJvb2wgbW92ZWRBbkVycm9yID0gZmFsc2U7
Ci0KLSAgICAvLyBTZXQgYW4gYXJiaXRyYXJ5IGxpbWl0IG9mIDEwMCBoZXJlIHRvIGF2b2lkIGNy
ZWF0aW5nIGEgaGFuZyBpZgotICAgIC8vIGEgcHJvYmxlbSBkcml2ZXIgaGFzIGEgYnVnIHRoYXQg
Y2F1c2VzIGl0IHRvIG5ldmVyIGNsZWFyIHRoZSBlcnJvci4KLSAgICAvLyBPdGhlcndpc2UsIHdl
IHdvdWxkIGp1c3QgbG9vcCB1bnRpbCB3ZSBnb3QgTk9fRVJST1IuCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0gICAgICAgIEdDM0RlbnVtIGVycm9yID0gZ2xHZXRF
cnJvcigpOwotICAgICAgICBpZiAoZXJyb3IgPT0gTk9fRVJST1IpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKLSAgICAgICAgbW92ZWRB
bkVycm9yID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbW92ZWRBbkVycm9yOwotfQotCi1H
QzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIGlmICghbV9zeW50
aGV0aWNFcnJvcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3Vy
cmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IGluIGNhc2UKLSAgICAgICAg
Ly8gdGhhdCBlcnJvciBpcyBhbHJlYWR5IHRoZXJlLCBzaW5jZSB0aGUgZXhwZWN0ZWQgYmVoYXZp
b3Igb2YgYm90aAotICAgICAgICAvLyBnbEdldEVycm9yIGFuZCBnZXRFcnJvciBpcyB0byBvbmx5
IHJlcG9ydCBlYWNoIGVycm9yIGNvZGUgb25jZS4KLSAgICAgICAgbW92ZUVycm9yc1RvU3ludGhl
dGljRXJyb3JMaXN0KCk7Ci0gICAgICAgIHJldHVybiBtX3N5bnRoZXRpY0Vycm9ycy50YWtlRmly
c3QoKTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpn
bEdldEVycm9yKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdD
M0RlbnVtIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIFN0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xIaW50KHRh
cmdldCwgbW9kZSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZl
cihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IDo6Z2xJc0J1ZmZlcihidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQz
RDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGlj
c0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQot
ewotICAgIGlmICghZnJhbWVidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNGcmFtZWJ1ZmZlckVYVChm
cmFtZWJ1ZmZlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIDo6Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29u
dGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsK
LSAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChy
ZW5kZXJidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFk
ZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgaWYgKCFzaGFkZXIpCi0gICAgICAg
IHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0
dXJlKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICByZXR1cm4gOjpnbElzVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsTGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdDM0Rz
aXplaSBjb3VudCA9IDA7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdID0geyB9Owot
ICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwotCi0g
ICAgaWYgKGNvdW50ID09IDIpCi0gICAgICAgIG1fbGlua2VkU2hhZGVyTWFwLnNldChwcm9ncmFt
LCBzdGQ6Om1ha2VfcGFpcihzaGFkZXJzWzBdLCBzaGFkZXJzWzFdKSk7Ci0KLSAgICA6OmdsTGlu
a1Byb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xQaXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9h
dCB1bml0cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsUG9seWdvbk9m
ZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxl
Q292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsK
LQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291cmNlTWFwLnNl
dChzaGFkZXIsIGVudHJ5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFj
ZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE1hc2soR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsU3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNr
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWws
IEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsU3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0Rl
bnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZh
aWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyZihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgdmFsdWUpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xVbmlmb3JtMWYobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0Mz
RGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5p
Zm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQg
djEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yZihsb2Nh
dGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkK
LXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2
MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsK
LSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZs
b2F0IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtNGYo
bG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGZs
b2F0KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRmdihs
b2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIGNvbnN0IEdDM0RpbnQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xVbmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBH
QzNEaW50IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3Jt
MmkobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFy
cmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAy
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYw
LCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKLXsKLSAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGludCB2MiwgR0MzRGludCB2MykKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2
MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5KQot
ewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXpl
LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0
KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgOS4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybU1hdHJpeDNm
dihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNp
emUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQ
cm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAg
ICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgs
IGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRl
eEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjJmdihpbmRl
eCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5k
ZXgsIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIzZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0
IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0
ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjRmdihpbmRl
eCwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29s
ZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGlu
ZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5KCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgYXJyYXkgPSAwOwotI2lmICghVVNFKE9QRU5HTF9FUykg
JiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQot
ICAgIDo6Z2xHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKLSNlbmRpZgotICAgIHJldHVybiBh
cnJheTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgKCFVU0UoT1BFTkdMX0VTKSAm
JiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCi0g
ICAgOjpnbERlbGV0ZVZlcnRleEFycmF5cygxLCAmYXJyYXkpOwotI2VuZGlmCi19Ci0KLUdDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3Qg
YXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAg
IAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQotICAgIHJl
dHVybiA6OmdsSXNWZXJ0ZXhBcnJheShhcnJheSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gR0xfRkFM
U0U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9y
bTNET2JqZWN0IGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICghVVNF
KE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRG
T1JNKENPQ09BKQotICAgIDo6Z2xCaW5kVmVydGV4QXJyYXkoYXJyYXkpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oYXJyYXkpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsR2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0gICAgCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VyNjR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50NjQqIHZh
bHVlKQotewotICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgKnZhbHVlID0gMDsKLSAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGlu
ZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0
aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4w
LgotICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChhdHRhY2htZW50
ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKLSAgICAgICAgYXR0YWNobWVudCA9IERFUFRI
X0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgotICAg
IDo6Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFBy
b2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0UHJvZ3Jh
bWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoQUNUSVZFX0FU
VFJJQlVURVMgPT0gcG5hbWUgfHwgQUNUSVZFX1VOSUZPUk1TID09IHBuYW1lKTsKLSAgICBpZiAo
IXZhbHVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5k
KHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAuZW5kKCkpIHsKLSAgICAgICAgKnZhbHVlID0gcmVzdWx0LT52YWx1ZS5jb3VudEZvclR5cGUo
cG5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuc2V0KHByb2dyYW0sIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cygpKTsKLSAg
ICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IG1fc2hhZGVyUHJvZ3Jh
bVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSktPnZhbHVlOwotCi0gICAgLy8gUmV0cmlldmUg
dGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWlsZCBhIGZpbHRlcmVkIGNvdW50LCBhbmQgYSBtYXBw
aW5nIG9mCi0gICAgLy8gb3VyIGludGVybmFsIGF0dHJpYnV0ZXMgaW5kZXhlcyB0byB0aGUgcmVh
bCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRlIE9wZW5HTC4KLSAgICBHQzNEaW50IGF0dHJpYnV0
ZUNvdW50ID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9BVFRSSUJV
VEVTLCAmYXR0cmlidXRlQ291bnQpOwotICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IGF0dHJp
YnV0ZUNvdW50OyArK2kpIHsKLSAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBnZXRB
Y3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGksIGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1l
LnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc3lt
Ym9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5hcHBlbmQoaSk7Ci0g
ICAgfQotICAgIAotICAgIC8vIERvIHRoZSBzYW1lIGZvciB1bmlmb3Jtcy4KLSAgICBHQzNEaW50
IHVuaWZvcm1Db3VudCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVf
VU5JRk9STVMsICZ1bmlmb3JtQ291bnQpOwotICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IHVu
aWZvcm1Db3VudDsgKytpKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0
QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgaSwgaW5mbyk7Ci0gICAgICAgIGlmIChpbmZvLm5h
bWUuc3RhcnRzV2l0aCgiZ2xfIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0g
ICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLmFwcGVu
ZChpKTsKLSAgICB9Ci0gICAgCi0gICAgKnZhbHVlID0gc3ltYm9sQ291bnRzLmNvdW50Rm9yVHlw
ZShwbmFtZSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5tYW5nbGVkSW5m
b0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIEdDM0RzaXplaSBjb3VudCwgY29uc3Qg
U3RyaW5nJiBsb2cpCi17Ci0gICAgTE9HKFdlYkdMLCAiT3JpZ2luYWwgU2hhZGVySW5mb0xvZzpc
biVzIiwgbG9nLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVz
c2lvbiByZWdFeHAoIndlYmdsX1swMTIzNDU2Nzg5YWJjZGVmQUJDREVGXSsiKTsKLQotICAgIFN0
cmluZ0J1aWxkZXIgcHJvY2Vzc2VkTG9nOwotICAgIAotICAgIC8vIEFOR0xFIGluc2VydHMgYSAi
I2V4dGVuc2lvbiIgbGluZSBpbnRvIHRoZSBzaGFkZXIgc291cmNlIHRoYXQKLSAgICAvLyBjYXVz
ZXMgYSB3YXJuaW5nIGluIHNvbWUgY29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5n
Ci0gICAgLy8gdGhpcyB3YXJuaW5nIHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRl
IHRoZSBjb2RlIHRoYXQKLSAgICAvLyBpcyBjYXVzaW5nIGl0LgotICAgIHN0YXRpYyBjb25zdCBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVu
c2lvbiAnR0xfQVJCX2dwdV9zaGFkZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKLSAgICBp
bnQgc3RhcnRGcm9tID0gbG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2Fybmlu
Zy5nZXQoKS5sZW5ndGgoKSA6IDA7Ci0gICAgaW50IG1hdGNoZWRMZW5ndGggPSAwOwotCi0gICAg
ZG8gewotICAgICAgICBpbnQgc3RhcnQgPSByZWdFeHAubWF0Y2gobG9nLCBzdGFydEZyb20sICZt
YXRjaGVkTGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXJ0ID09IC0xKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJv
bSwgc3RhcnQgLSBzdGFydEZyb20pKTsKLSAgICAgICAgc3RhcnRGcm9tID0gc3RhcnQgKyBtYXRj
aGVkTGVuZ3RoOwotCi0gICAgICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZFN5bWJvbCA9IGxvZy5z
dWJzdHJpbmcoc3RhcnQsIG1hdGNoZWRMZW5ndGgpOwotICAgICAgICBjb25zdCBTdHJpbmcmIG1h
cHBlZFN5bWJvbCA9IG1hcHBlZFN5bWJvbE5hbWUoc2hhZGVycywgY291bnQsIG1hbmdsZWRTeW1i
b2wpOwotICAgICAgICBMT0coV2ViR0wsICJEZW1hbmdsaW5nOiAlcyB0byAlcyIsIG1hbmdsZWRT
eW1ib2wudXRmOCgpLmRhdGEoKSwgbWFwcGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICBwcm9jZXNzZWRMb2cuYXBwZW5kKG1hcHBlZFN5bWJvbCk7Ci0gICAgfSB3aGlsZSAoc3RhcnRG
cm9tIDwgc3RhdGljX2Nhc3Q8aW50Pihsb2cubGVuZ3RoKCkpKTsKLQotICAgIHByb2Nlc3NlZExv
Zy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIGxvZy5sZW5ndGgoKSAtIHN0YXJ0RnJv
bSkpOwotCi0gICAgTE9HKFdlYkdMLCAiVW5tYW5nbGVkIFNoYWRlckluZm9Mb2c6XG4lcyIsIHBy
b2Nlc3NlZExvZy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcm9jZXNz
ZWRMb2cudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9n
cmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dy
YW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbGVuZ3RoID0gMDsK
LSAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0
aCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBH
THNpemVpIHNpemUgPSAwOwotICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKLSAgICA6
OmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkp
OwotCi0gICAgR0MzRHNpemVpIGNvdW50OwotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1sy
XTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsK
LQotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIGNvdW50LCBTdHJpbmco
aW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIAotICAgIHN3aXRjaCAocG5hbWUp
IHsKLSAgICBjYXNlIERFTEVURV9TVEFUVVM6Ci0gICAgY2FzZSBTSEFERVJfVFlQRToKLSAgICAg
ICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50
PihmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgKnZhbHVl
ID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnZhbHVlLmlzVmFsaWQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkgewotICAgICAgICAgICAgKnZhbHVlID0gMDsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAqdmFsdWUgPSBnZXRTaGFkZXJJbmZvTG9n
KHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1NPVVJD
RV9MRU5HVEg6Ci0gICAgICAgICp2YWx1ZSA9IGdldFNoYWRlclNvdXJjZShzaGFkZXIpLmxlbmd0
aCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihJTlZBTElEX0VOVU0pOwotICAgIH0KLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VS
VChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
LQotICAgIGNvbnN0IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0g
ICAgaWYgKCFlbnRyeS5pc1ZhbGlkKQotICAgICAgICByZXR1cm4gZW50cnkubG9nOwotCi0gICAg
R0xpbnQgbGVuZ3RoID0gMDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZv
KGxlbmd0aCk7Ci0gICAgOjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXpl
LCBpbmZvLmRhdGEoKSk7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNo
YWRlciwgMCB9OwotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0
cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgY29uc3QgYXV0byYg
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0K
LSAgICByZXR1cm4gcmVzdWx0LT52YWx1ZS5zb3VyY2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9j
YXRpb24sIHZhbHVlKTsKLX0KLQotR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9y
bUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9T
WU1CT0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1M
b2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWRO
YW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
R2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQotCi1HQzNEc2l6
ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBHTHZvaWQqIHBvaW50ZXIgPSAwOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihp
bmRleCwgcG5hbWUsICZwb2ludGVyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0MzRHNpemVp
cHRyPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmYsIEdDM0RpbnQgeW9mZiwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotI2lmICFVU0UoT1BFTkdMX0VT
KQotICAgIGlmICh0eXBlID09IEhBTEZfRkxPQVRfT0VTKQotICAgICAgICB0eXBlID0gR0xfSEFM
Rl9GTE9BVF9BUkI7Ci0jZW5kaWYKLQotICAgIGlmIChtX3VzaW5nQ29yZVByb2ZpbGUpICB7Ci0g
ICAgICAgIC8vIFRoZXJlIGFyZSBzb21lIGZvcm1hdCB2YWx1ZXMgdXNlZCBpbiBXZWJHTCB0aGF0
IGFyZSBkZXByZWNhdGVkIHdoZW4gdXNpbmcgYSBjb3JlIHByb2ZpbGUsIHNvIHdlIG5lZWQKLSAg
ICAgICAgLy8gdG8gYWRhcHQgdGhlbSwgYXMgd2UgZG8gaW4gR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoKS4KLSAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBI
QToKLSAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRUQgdG8gYmFjayBHTF9BTFBIQSwg
c28gZG8gaXQgaGVyZSBhcyB3ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkVEOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAg
Ly8gV2UgYXJlIHVzaW5nIEdMX1JHIHRvIGJhY2sgR0xfTFVNSU5BTkNFX0FMUEhBLCBzbyBkbyBp
dCBoZXJlIGFzIHdlbGwuCi0gICAgICAgICAgICBmb3JtYXQgPSBSRzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3Jl
IHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20g
dGhlIHN1YmltYWdlIHNpemUuCi0gICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwotICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91
bmRUZXh0dXJlKCkpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBv
ID0gMDsKLSAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuRnJh
bWVidWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVj
dCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlblJlbmRlcmJ1
ZmZlcnNFWFQoMSwgJm8pOwotICAgIHJldHVybiBvOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJB
R01FTlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOwot
fQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xH
ZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsK
LSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVy
KFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9zdGF0
ZS5ib3VuZEZCTykgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5v
dCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCi0gICAgICAgIC8vIG9wZXJhdGlvbnMgYWZ0
ZXIgaXQgZ2V0cyBkZWxldGVkLgotICAgICAgICBiaW5kRnJhbWVidWZmZXIoRlJBTUVCVUZGRVIs
IDApOwotICAgIH0KLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmZnJhbWVidWZmZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3NoYWRl
clByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgZ2xEZWxldGVQcm9n
cmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZyZW5kZXJidWZmZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2xEZWxldGVT
aGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBr
ZXlWYWx1ZSkgewotICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVy
ZTsKLSAgICB9KTsKLSAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKLSAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQucmVtb3ZlQWxsKHRleHR1cmUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcikKLXsKLSAgICAv
LyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3Ig
bGlzdCB0bwotICAgIC8vIHByZXNlcnZlIHRoZSBvcmRlciBvZiBlcnJvcnMsIHNvIGEgY2FsbGVy
IHRvIGdldEVycm9yIHdpbGwgZ2V0Ci0gICAgLy8gYW55IGVycm9ycyBmcm9tIGdsRXJyb3IgYmVm
b3JlIHRoZSBlcnJvciB3ZSBhcmUgc3ludGhlc2l6aW5nLgotICAgIG1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOwotICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgbV9s
YXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFy
a0xheWVyQ29tcG9zaXRlZCgpCi17Ci0gICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwotCi0g
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAg
Y2xpZW50LT5kaWRDb21wb3NpdGUoKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5
ZXJDb21wb3NpdGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZvcmNlQ29udGV4dExvc3QoKQotewotICAgIGZv
ciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVu
dC0+Zm9yY2VDb250ZXh0TG9zdCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWN5
Y2xlQ29udGV4dCgpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9j
bGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5yZWN5Y2xlQ29udGV4dCgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKLXsK
LSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAg
ICBjbGllbnQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRERpcmVjdChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgbV9zdGF0ZS50ZXh0
dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewot
ICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3Vu
dCwgcHJpbWNvdW50KTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpIHByaW1j
b3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUs
IGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWlu
dCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4
QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7Ci19Ci0KLSNpZiBVU0UoT1BFTkdMKSAmJiBF
TkFCTEUoV0VCR0wyKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJpbWl0aXZlUmVzdGFydElu
ZGV4KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOwotfQotI2VuZGlmCi0KLX0KLQotI2VuZGlm
IC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9Q
RU5HTF9FUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NjgyMWNhNmZkODMzODE1YjNiODNhYzJkZjc1Mzgw
MjYxNDg2MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMRVMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0Uo
T1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLQotI2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xSZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwot
Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJp
dmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNh
bGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICA6OmdsRmx1c2go
KTsKLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNz
YXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xGbHVzaCgpOwotICAg
IH0KLQotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgZGF0YSk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIDo6
Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscyk7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0g
ICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHRvdGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBp
eGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCi0gICAgfQotfQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGNv
bnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6
ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQgPSAwOwotICAgIGF1dG8gYXR0cmli
dXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbHBoYSkg
ewotICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBjb2xv
ckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICB9Ci0K
LSAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJl
ZCBhbmQgZGVwdGggaXMgbm90LgotICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzLgotICAgIGJvb2wgc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlciA9
IChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgJiYgZ2V0RXh0ZW5zaW9u
cygpLnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQotICAgIC8vIFJl
c2l6ZSByZWd1bGFyIEZCTy4KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAg
aWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8g
PSB0cnVlOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zi
byk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZv
cm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlLCAwKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9j
b21wb3NpdG9yVGV4dHVyZSkgewotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JG
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgMCk7Ci0gICAgfQotCi0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZv
cm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOwotI2VuZGlmCi0KLSAgICBFeHRlbnNpb25zM0RPcGVuR0xFUyYgZXh0ZW5zaW9u
cyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRE9wZW5HTEVTJj4oZ2V0RXh0ZW5zaW9ucygpKTsK
LSAgICBpZiAoZXh0ZW5zaW9ucy5pc0ltYWdpbmF0aW9uKCkgJiYgYXR0cmlidXRlcy5hbnRpYWxp
YXMpIHsKLSAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7Ci0gICAgICAgIDo6Z2xHZXRJbnRl
Z2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTX0lNRywgJm1heFNhbXBsZUNvdW50KTsgCi0g
ICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOwot
Ci0gICAgICAgIGV4dGVuc2lvbnMuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyhH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSwgMCwgc2FtcGxlQ291bnQpOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRo
IGJ1ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQuCi0gICAgICAgICAgICBpZiAoc3VwcG9y
dFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlcikgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAg
ICAgICAgICAgIGV4dGVuc2lvbnMucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdMX1JF
TkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAg
ICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAg
ICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xf
REVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwpIHsKLSAgICAgICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgICAgICBleHRlbnNp
b25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBs
ZUNvdW50LCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAg
ICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwg
bV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMucmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEdMX0RF
UFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgOjpn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hN
RU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgMCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgICAgIC8vIFVzZSBh
IDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgotICAgICAgICAg
ICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgICAgICAg
ICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTF9SRU5ERVJC
VUZGRVIsIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNI
TUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwg
R0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3N0ZW5j
aWxCdWZmZXIpOwotICAgICAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZShH
TF9SRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVy
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVw
dGgpIHsKLSAgICAgICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVS
QlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBt
X2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIp
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVw
Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG11c3RSZXN0
b3JlRkJPOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGlu
Z0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBXZSBkb24ndCBz
dXBwb3J0IGFudGlhbGlhc2luZyB5ZXQuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0SW50ZWdlcnYo
cG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUs
IEdDM0RpbnQqIHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pCi17Ci0gICAgQVNTRVJUKHJhbmdl
KTsKLSAgICBBU1NFUlQocHJlY2lzaW9uKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xHZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlw
ZSwgcmFuZ2UsIHByZWNpc2lvbik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0g
ICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgdGV4SW1hZ2UyRERpcmVjdCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCi17Ci0g
ICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwot
Ci0gICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChh
dHRyaWJ1dGVzLmFudGlhbGlhcyAmJiAhZ2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9JTUdf
bXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIikpIHsKLSAgICAgICAgYXR0cmlidXRlcy5h
bnRpYWxpYXMgPSBmYWxzZTsKLSAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cmlidXRl
cyk7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0Rj
bGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsRGVwdGhSYW5nZWYoek5lYXIsIHpGYXIpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbENsZWFyRGVwdGhmKGRlcHRoKTsKLX0KLQotI2lmICFQTEFU
Rk9STShHVEspCi1FeHRlbnNpb25zM0QmIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFr
ZVVuaXF1ZTxFeHRlbnNpb25zM0RPcGVuR0xFUz4odGhpcywgaXNHTEVTMkNvbXBsaWFudCgpKTsK
LSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lO
KSAmJiBVU0UoQ0EpCi1SZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlv
bikKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBv
cnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgotICAgIGlmIChkZXN0aW5h
dGlvbiA9PSBEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3cpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIAotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewot
I2lmICFVU0UoT1BFTkdMX0VTKQotICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNo
aW1zKCk7Ci0jZW5kaWYKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cmlidXRlcywgaG9zdFdpbmRvdywgcmVu
ZGVyU3R5bGUpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBHcmFwaGljc0NvbnRleHQzRCog
c2hhcmVkQ29udGV4dCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dDNEQmFzZShhdHRyaWJ1dGVzLCBk
ZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKLSAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNvbXBs
aWFudCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNMX0NPTVBBVElCSUxJVFlfT1VUUFVUKQot
ICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPih0aGlz
LCBkZXN0aW5hdGlvbikpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hh
cmVkQ29udGV4dCk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCi0gICAgdmFsaWRh
dGVBdHRyaWJ1dGVzKCk7Ci0gICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8v
IFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIGlmIChkZXN0
aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBh
IHRleHR1cmUgdG8gcmVuZGVyIGludG8uCi0gICAgICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSk7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICA6Omds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIDApOwotICAgICAgICAKLSAgICAgICAgLy8gQ3JlYXRlIGFuIEZCTy4K
LSAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIAotICAgICAgICBt
X3N0YXRlLmJvdW5kRkJPID0gbV9mYm87Ci0gICAgICAgIGlmICghYXR0cmlidXRlcy5hbnRpYWxp
YXMgJiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkKLSAgICAgICAg
ICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAg
ICAgIAotICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgICAgIGlmIChh
dHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAgIG1fc3RhdGUuYm91
bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbEdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNo
QnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKLSAgICBTaEluaXRCdWlsdEluUmVzb3Vy
Y2VzKCZBTkdMRVJlc291cmNlcyk7Ci0gICAgCi0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJp
YnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50
VW5pZm9ybVZlY3RvcnMpOwotICAgIAotICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdM
IEVTLgotICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKLSAgICAKLSAgICBH
QzNEaW50IHJhbmdlWzJdLCBwcmVjaXNpb247Ci0gICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dDNEOjpI
SUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7Ci0gICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21l
bnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7Ci0g
ICAgCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgIAot
I2lmICFVU0UoT1BFTkdMX0VTKQotICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9J
TlRfU0laRSk7Ci0gICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOwotI2VuZGlmCi0gICAg
Ci0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNE
Ojp+R3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQotICAgIGF1dG8gYXR0cmlidXRl
cyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0gICAgOjpnbERl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6dW5pcXVlX3B0cjxDb250ZXh0TG9zdENhbGxi
YWNrPikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2Fs
bGJhY2soc3RkOjp1bmlxdWVfcHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPikKLXsKLX0KLQotYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBpZiAoIW1f
cHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3ByaXZhdGUtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0dQ
VVN0YXR1cygpCi17Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250
ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIHJldHVybiBtX3ByaXZh
dGUtPnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3RleHR1cmU7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAot
ewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotfQotCi1QbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6
cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViR0xMYXllci0+cGxhdGZv
cm1MYXllcigpOwotfQotI2VuZGlmCi0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKSAmJiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiMzM2MTE4MGIx
YjJiYTZlOTEyZTQwZGQyMTUzYjRmZDM0YjQwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
Y3BwCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1vemls
bGEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhU
X0dMKQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCisjaW5jbHVkZSAiRm9ybWF0Q29udmVy
dGVyLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQgZ2V0RGF0YUZvcm1hdChHQzNEZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0MzRGVu
dW0gZGVzdGluYXRpb25UeXBlKQoreworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODsKKyAgICBz
d2l0Y2ggKGRlc3RpbmF0aW9uVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBODsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6
CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
Ujg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJBODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpTUkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBODsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBkc3RGb3Jt
YXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTE7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCNTY1
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FU
X09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0
aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OkExNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6CisgICAg
ICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZG
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNS
R0JfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zs
b2F0CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMy
RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpM
VU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1JHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQl9BTFBIQToKKyAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIGRzdEZvcm1hdDsKK30KKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
IHVucGFja0FsaWdubWVudCkKK3sKKyAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwg
dW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxp
Z25tZW50ID09IDgpOworICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAg
aWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7CisgICAgICAgIHVuc2lnbmVkIHNpemU7Cisg
ICAgICAgIEdDM0RlbnVtIGVycm9yID0gY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsICZzaXplLCBudWxscHRyKTsKKyAg
ICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHplcm8gPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hh
cj4oc2l6ZSk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXpl
KTsKKyAgICB9CisgICAgcmV0dXJuIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQ
YXJhbWV0ZXJzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdW5zaWduZWQqIGNvbXBv
bmVudHNQZXJQaXhlbCwgdW5zaWduZWQqIGJ5dGVzUGVyQ29tcG9uZW50KQoreworICAgIHN3aXRj
aCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9
IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpTUkdCX0VYVDoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpCR1JB
X0VYVDogLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gNDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0JZVEU6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdWJ5
dGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgor
ICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGJ5dGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKKyAgICAg
ICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICAgICAgKmJ5dGVzUGVy
Q29tcG9uZW50ID0gc2l6ZW9mKEdDM0RzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQ
aXhlbCA9IDE7CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdXNob3J0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
SU5UXzI0Xzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZf
MTFGXzExRl9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVf
OV85XzlfUkVWOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgKmJ5
dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgorICAgICAgICAqYnl0ZXNQZXJD
b21wb25lbnQgPSBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpJTlQ6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVv
ZihHQzNEaW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9
IHNpemVvZihHQzNEZmxvYXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpIQUxGX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxP
QVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgICpieXRlc1BlckNvbXBv
bmVudCA9IHNpemVvZihHQzNEaGFsZmZsb2F0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgorICAgICAg
ICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGZsb2F0KSArIHNpemVvZihHQzNEdWlu
dCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVy
bmFsRm9ybWF0LCBHQzNEZW51bSYgZm9ybWF0LCBHQzNEZW51bSYgdHlwZSkKK3sKKyNkZWZpbmUg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNy
bywgdHlwZU1hY3JvKSBjYXNlIGludGVybmFsRm9ybWF0TWFjcm86IFwKKyAgICAgICAgZm9ybWF0
ID0gZm9ybWF0TWFjcm87IFwKKyAgICAgICAgdHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp0eXBlTWFjcm87IFwKKyAgICAgICAgYnJlYWs7CisKKyAgICBzd2l0Y2ggKGludGVybmFsRm9y
bWF0KSB7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UkdCICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBV
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsK
KyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFO
Q0VfQUxQSEEgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEEsIFVOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
TFVNSU5BTkNFICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBICAgICAgICAgICwgVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSOCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgICAg
ICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhfU05PUk0gICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkVEICAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlIxNkYgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRCAgICAgICAgICAg
ICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMzJGICAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSRUQgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjhV
SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4SSAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJFRF9JTlRFR0VSICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSSAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX1NI
T1JUICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UjE2SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVE
X0lOVEVHRVIgICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfSU5UICAgICAg
ICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSMzJJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdF
UiAgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4ICAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkcgICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHOF9TTk9STSAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwg
QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2RiAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRyAgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7
CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMkYg
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkcgICAgICAgICAgICAgLCBGTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OlJHOFVJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIEJZVEUgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6UkcxNlVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5U
RUdFUiAgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZJICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgU0hPUlQgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpSRzMyVUkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAg
ICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMkkgICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjggICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Cisg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1ICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9T
SE9SVF81XzZfNSAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjhfU05PUk0gICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QiAgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRiAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF8xMEZf
MTFGXzExRl9SRVYgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6UkdCOV9FNSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAg
ICAgICAgLCBVTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICApOworICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RiAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IzMkYgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAs
IEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCOFVJICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAp
OworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJ
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgQllURSAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNlVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JfSU5URUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7CisgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBTSE9SVCAgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjMyVUkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9J
TlRFR0VSICAgICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkkgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTggICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAg
ICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBOCAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOF9TTk9STSAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIEJZ
VEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCNV9BMSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApOwor
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0ICAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURf
U0hPUlRfNF80XzRfNCAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMiAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICk7CisgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RiAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkEzMkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAg
ICAgICAgICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6UkdCQThJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAg
LCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUkgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAg
KTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
MTZVSSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2SSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQV9JTlRFR0VSICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkkgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgSU5UICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpSR0JBMzJVSSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
X0lOVEVHRVIgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTYg
LCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCAgICAg
ICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBP
TkVOVCwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNCAsIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAg
ICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfQ09NUE9ORU5UMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBG
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OkRFUFRIX1NURU5DSUwgICwgVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKTsK
KyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0
X1NURU5DSUw4ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAsIFVOU0lHTkVE
X0lOVF8yNF84ICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RFTkNJTDggLCBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfU1RFTkNJTCAgLCBGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpOworICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVCAgICAgICAgICAg
ICAgICwgRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVCAgICAgICAgICAgICwgVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lv
bnNHTDo6U1JHQl9BTFBIQV9FWFQgICAgICAgICAsIEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9F
WFQgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyN1bmRlZiBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGFsaWdu
bWVudCwgdW5zaWduZWQqIGltYWdlU2l6ZUluQnl0ZXMsIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRl
cykKK3sKKyAgICBBU1NFUlQoaW1hZ2VTaXplSW5CeXRlcyk7CisgICAgQVNTRVJUKGFsaWdubWVu
dCA9PSAxIHx8IGFsaWdubWVudCA9PSAyIHx8IGFsaWdubWVudCA9PSA0IHx8IGFsaWdubWVudCA9
PSA4KTsKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICB1bnNpZ25lZCBieXRlc1BlckNv
bXBvbmVudDsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWw7CisgICAgaWYgKCFjb21w
dXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBp
eGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTTsKKyAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHsKKyAgICAgICAg
KmltYWdlU2l6ZUluQnl0ZXMgPSAwOworICAgICAgICBpZiAocGFkZGluZ0luQnl0ZXMpCisgICAg
ICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSAwOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6Ok5PX0VSUk9SOworICAgIH0KKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVy
Zmxvdz4gY2hlY2tlZFZhbHVlID0gYnl0ZXNQZXJDb21wb25lbnQgKiBjb21wb25lbnRzUGVyUGl4
ZWw7CisgICAgY2hlY2tlZFZhbHVlICo9ICB3aWR0aDsKKyAgICBpZiAoY2hlY2tlZFZhbHVlLmhh
c092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFOworICAgIHVuc2lnbmVkIHZhbGlkUm93U2l6ZSA9IGNoZWNrZWRWYWx1ZS51bnNhZmVH
ZXQoKTsKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gMDsKKyAgICB1bnNpZ25lZCByZXNpZHVhbCA9
IHZhbGlkUm93U2l6ZSAlIGFsaWdubWVudDsKKyAgICBpZiAocmVzaWR1YWwpIHsKKyAgICAgICAg
cGFkZGluZyA9IGFsaWdubWVudCAtIHJlc2lkdWFsOworICAgICAgICBjaGVja2VkVmFsdWUgKz0g
cGFkZGluZzsKKyAgICB9CisgICAgLy8gTGFzdCByb3cgbmVlZHMgbm8gcGFkZGluZy4KKyAgICBj
aGVja2VkVmFsdWUgKj0gKGhlaWdodCAtIDEpOworICAgIGNoZWNrZWRWYWx1ZSArPSB2YWxpZFJv
d1NpemU7CisgICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICAqaW1hZ2VTaXplSW5C
eXRlcyA9IGNoZWNrZWRWYWx1ZS51bnNhZmVHZXQoKTsKKyAgICBpZiAocGFkZGluZ0luQnl0ZXMp
CisgICAgICAgICpwYWRkaW5nSW5CeXRlcyA9IHBhZGRpbmc7CisgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dEdMOjpOT19FUlJPUjsKK30KKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdl
RXh0cmFjdG9yOjpJbWFnZUV4dHJhY3RvcihJbWFnZSogaW1hZ2UsIERPTVNvdXJjZSBpbWFnZUh0
bWxEb21Tb3VyY2UsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSkKK3sKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgbV9pbWFnZUh0bWxEb21T
b3VyY2UgPSBpbWFnZUh0bWxEb21Tb3VyY2U7CisgICAgbV9leHRyYWN0U3VjY2VlZGVkID0gZXh0
cmFjdEltYWdlKHByZW11bHRpcGx5QWxwaGEsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFja0ltYWdlRGF0YShJbWFnZSog
aW1hZ2UsIGNvbnN0IHZvaWQqIHBpeGVscywgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBib29sIGZsaXBZLCBBbHBoYU9wIGFscGhhT3AsIERhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICFwaXhl
bHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBhY2tlZFNpemU7Cisg
ICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KKyAg
ICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0
LCAxLCAmcGFja2VkU2l6ZSwgbnVsbHB0cikgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9S
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CisK
KyAgICBpZiAoIXBhY2tQaXhlbHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4
ZWxzKSwgc291cmNlRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQs
IGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgZGF0YS5kYXRhKCksIGZsaXBZKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChJbWFnZU9ic2VydmVyKiBvYnNlcnZlciA9IGltYWdlLT5pbWFn
ZU9ic2VydmVyKCkpCisgICAgICAgIG9ic2VydmVyLT5kaWREcmF3KCppbWFnZSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmV4dHJhY3RJbWFn
ZURhdGEoSW1hZ2VEYXRhKiBpbWFnZURhdGEsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBWZWN0b3I8dWludDhfdD4mIGRh
dGEpCit7CisgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
bnQgd2lkdGggPSBpbWFnZURhdGEtPndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGltYWdlRGF0
YS0+aGVpZ2h0KCk7CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91dHB1dCBk
YXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgaWYgKGNvbXB1dGVJ
bWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnBhY2tlZFNp
emUsIG51bGxwdHIpICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOworCisgICAgaWYgKCFwYWNr
UGl4ZWxzKGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCksIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBs
eUFscGhhID8gQWxwaGFPcDo6RG9QcmVtdWx0aXBseSA6IEFscGhhT3A6OkRvTm90aGluZywgZGF0
YS5kYXRhKCksIGZsaXBZKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmV4dHJhY3RUZXh0dXJlRGF0
YSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIHVuc2lnbmVkIHVucGFja0FsaWdubWVudCwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBjb25zdCB2b2lkKiBwaXhlbHMsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkK
K3sKKyAgICAvLyBBc3N1bWVzIGZvcm1hdCwgdHlwZSwgZXRjLiBoYXZlIGFscmVhZHkgYmVlbiB2
YWxpZGF0ZWQuCisgICAgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gZ2V0RGF0YUZvcm1h
dChmb3JtYXQsIHR5cGUpOworCisgICAgLy8gUmVzaXplIHRoZSBvdXRwdXQgYnVmZmVyLgorICAg
IHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgaWYg
KCFjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50
c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVy
Q29tcG9uZW50OworICAgIGRhdGEucmVzaXplKHdpZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJQaXhl
bCk7CisKKyAgICBpZiAoIXBhY2tQaXhlbHMoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBp
eGVscyksIHNvdXJjZURhdGFGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHVucGFja0FsaWdubWVudCwg
Zm9ybWF0LCB0eXBlLCAocHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhT3A6OkRvUHJlbXVsdGlwbHkg
OiBBbHBoYU9wOjpEb05vdGhpbmcpLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lOTElORSB1bnNpZ25l
ZCBUZXhlbEJ5dGVzRm9yRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OkE4OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVI4
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlIxNkY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QkdSODoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QVJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6QUJHUjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTg6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkY6CisgICAgICAgIHJldHVybiA2
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY6CisgICAgICAgIHJldHVy
biA4OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRjoKKyAg
ICAgICAgcmV0dXJuIDEyOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkEzMkY6CisgICAgICAgIHJldHVybiAxNjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhY2tQaXhl
bHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0
LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tB
bGlnbm1lbnQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1bnNpZ25lZCBkZXN0aW5hdGlv
blR5cGUsIEFscGhhT3AgYWxwaGFPcCwgdm9pZCogZGVzdGluYXRpb25EYXRhLCBib29sIGZsaXBZ
KQoreworICAgIGludCB2YWxpZFNyYyA9IHdpZHRoICogVGV4ZWxCeXRlc0ZvckZvcm1hdChzb3Vy
Y2VEYXRhRm9ybWF0KTsKKyAgICBpbnQgcmVtYWluZGVyID0gc291cmNlVW5wYWNrQWxpZ25tZW50
ID8gKHZhbGlkU3JjICUgc291cmNlVW5wYWNrQWxpZ25tZW50KSA6IDA7CisgICAgaW50IHNyY1N0
cmlkZSA9IHJlbWFpbmRlciA/ICh2YWxpZFNyYyArIHNvdXJjZVVucGFja0FsaWdubWVudCAtIHJl
bWFpbmRlcikgOiB2YWxpZFNyYzsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcGFja2luZyBw
aXhlbHMgdG8gV2ViR0wgMiBmb3JtYXRzCisgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRURfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFf
SU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uVHlwZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hP
UlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIERhdGFGb3JtYXQgZHN0RGF0YUZvcm1hdCA9IGdldERhdGFGb3JtYXQoZGVzdGlu
YXRpb25Gb3JtYXQsIGRlc3RpbmF0aW9uVHlwZSk7CisgICAgaW50IGRzdFN0cmlkZSA9IHdpZHRo
ICogVGV4ZWxCeXRlc0ZvckZvcm1hdChkc3REYXRhRm9ybWF0KTsKKyAgICBpZiAoZmxpcFkpIHsK
KyAgICAgICAgZGVzdGluYXRpb25EYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0
aW9uRGF0YSkgKyBkc3RTdHJpZGUqKGhlaWdodCAtIDEpOworICAgICAgICBkc3RTdHJpZGUgPSAt
ZHN0U3RyaWRlOworICAgIH0KKyAgICBpZiAoIWhhc0FscGhhKHNvdXJjZURhdGFGb3JtYXQpIHx8
ICFoYXNDb2xvcihzb3VyY2VEYXRhRm9ybWF0KSB8fCAhaGFzQ29sb3IoZHN0RGF0YUZvcm1hdCkp
CisgICAgICAgIGFscGhhT3AgPSBBbHBoYU9wOjpEb05vdGhpbmc7CisKKyAgICBpZiAoc291cmNl
RGF0YUZvcm1hdCA9PSBkc3REYXRhRm9ybWF0ICYmIGFscGhhT3AgPT0gQWxwaGFPcDo6RG9Ob3Ro
aW5nKSB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IHNvdXJjZURhdGE7CisgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHB0ckVuZCA9IHNvdXJjZURhdGEgKyBzcmNTdHJpZGUgKiBoZWlnaHQ7
CisgICAgICAgIHVuc2lnbmVkIHJvd1NpemUgPSAoZHN0U3RyaWRlID4gMCkgPyBkc3RTdHJpZGU6
IC1kc3RTdHJpZGU7CisgICAgICAgIHVpbnQ4X3QqIGRzdCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihkZXN0aW5hdGlvbkRhdGEpOworICAgICAgICB3aGlsZSAocHRyIDwgcHRyRW5kKSB7CisgICAg
ICAgICAgICBtZW1jcHkoZHN0LCBwdHIsIHJvd1NpemUpOworICAgICAgICAgICAgcHRyICs9IHNy
Y1N0cmlkZTsKKyAgICAgICAgICAgIGRzdCArPSBkc3RTdHJpZGU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRm9ybWF0Q29udmVydGVyIGNvbnZlcnRlcih3
aWR0aCwgaGVpZ2h0LCBzb3VyY2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEsIHNyY1N0cmlkZSwgZHN0
U3RyaWRlKTsKKyAgICBjb252ZXJ0ZXIuY29udmVydChzb3VyY2VEYXRhRm9ybWF0LCBkc3REYXRh
Rm9ybWF0LCBhbHBoYU9wKTsKKyAgICBpZiAoIWNvbnZlcnRlci5zdWNjZXNzKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmICEoUExBVEZPUk0oQ09D
T0EpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wpCit7Cit9CisjZW5kaWYKKworI2lm
ICFQTEFURk9STShDT0NPQSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNpbXVsYXRl
Q29udGV4dENoYW5nZWQoKQoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODg4ZDYxZTgzZGY5OTcwMzQwZTk3YTIxZmJm
MDFiY2M5YTFmNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTAsMCArMSw3NDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiQU5HTEVX
ZWJLaXRCcmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTC5oIgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KKworI2lmIFVTRShDQSkK
KyNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNlbmRpZgorCisvLyBGSVhNRTogRmluZCBh
IGJldHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9SLgor
I2lmIFBMQVRGT1JNKFdJTikKKyN1bmRlZiBOT19FUlJPUgorI2VsaWYgUExBVEZPUk0oR1RLKQor
Ly8gVGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQgYmVs
b3csIHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCisjdW5kZWYgVkVSU0lPTgorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPE9wZW5HTEVT
L0VTMi9nbC5oPgorI2lmZGVmIF9fT0JKQ19fCisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+Cisj
ZW5kaWYgLy8gX19PQkpDX18KKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQorT0JKQ19DTEFTUyBD
QUxheWVyOworT0JKQ19DTEFTUyBXZWJHTExheWVyOwordHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZh
Y2UqIElPU3VyZmFjZVJlZjsKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKKworI2lmIFVTRShO
SUNPU0lBKQorbmFtZXNwYWNlIE5pY29zaWEgeworY2xhc3MgR0MzRExheWVyOworfQorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEV4dGVuc2lvbnNHTDsKKyNpZiBVU0UoQU5H
TEUpCitjbGFzcyBFeHRlbnNpb25zR0xBTkdMRTsKKyNlbGlmICFQTEFURk9STShDT0NPQSkgJiYg
VVNFKE9QRU5HTF9FUykKK2NsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTEVTOworI2VsaWYgVVNFKE9Q
RU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKK2NsYXNzIEV4dGVu
c2lvbnNHTE9wZW5HTDsKKyNlbmRpZgorY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVm
ZmVyOworY2xhc3MgSW1hZ2VEYXRhOworI2lmIFVTRShURVhUVVJFX01BUFBFUikKK2NsYXNzIFRl
eHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjsKKyNlbmRpZgorCit0eXBlZGVmIFdURjo6SGFz
aE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7CisKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMUHJpdmF0ZTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0R0wgeworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZENvbXBvc2l0ZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNl
Q29udGV4dExvc3QoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlQ29udGV4dCgp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmlj
YXRpb24oKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cq
LCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4pOworICAgIHZpcnR1YWwgfkdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBzdGF0
aWMgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGVTaGFyZWQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmIHNoYXJlZENvbnRleHQpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0woKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbnRleHRPYmo7IH0KKyAgICBQbGF0Zm9y
bTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdGV4
dHVyZTsgfQorICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PENBTGF5ZXIqPihtX3dlYkdMTGF5ZXIuZ2V0KCkpOyB9Cisj
aWYgVVNFKEFOR0xFKQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IHBsYXRm
b3JtRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheU9iajsgfQorICAgIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0xDb25maWcgcGxhdGZvcm1Db25maWcoKSBjb25zdCB7IHJldHVybiBt
X2NvbmZpZ09iajsgfQorI2VuZGlmIC8vIFVTRShBTkdMRSkKKyNlbHNlCisgICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Cisj
ZW5kaWYKKworICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICB2b2lkIGFkZENs
aWVudChDbGllbnQmIGNsaWVudCkgeyBtX2NsaWVudHMuYWRkKCZjbGllbnQpOyB9CisgICAgdm9p
ZCByZW1vdmVDbGllbnQoQ2xpZW50JiBjbGllbnQpIHsgbV9jbGllbnRzLnJlbW92ZSgmY2xpZW50
KTsgfQorCisgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1w
bGVGQk8gdG8gcmVndWxhciBGQk8uCisgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOworCisgICAg
Ly8gRXF1aXZhbGVudCB0byA6OmdsVGV4SW1hZ2UyRCgpLiBBbGxvd3MgcGl4ZWxzPT0wIHdpdGgg
bm8gYWxsb2NhdGlvbi4KKyAgICB2b2lkIHRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOworCisgICAgLy8gR2V0IGFuIGF0dHJpYnV0
ZSBsb2NhdGlvbiB3aXRob3V0IGNoZWNraW5nIHRoZSBuYW1lIC0+IG1hbmdsZWRuYW1lIG1hcHBp
bmcuCisgICAgaW50IGdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIC8vIENvbXBpbGUgYSBzaGFkZXIgd2l0
aG91dCBnb2luZyB0aHJvdWdoIEFOR0xFLgorICAgIHZvaWQgY29tcGlsZVNoYWRlckRpcmVjdChQ
bGF0Zm9ybTNET2JqZWN0KTsKKworICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4
ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgorICAgIC8vIFJldHVybiB0
cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgorICAgIC8vIEJ5IGRlZmF1bHQsIGFs
aWdubWVudCBpcyA0LCB0aGUgT3BlbkdMIGRlZmF1bHQgc2V0dGluZy4KKyAgICBib29sIHRleElt
YWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGFsaWdu
bWVudCA9IDQpOworCisgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzIGZvciB0ZXh0dXJlIHVwbG9hZGluZyBhbmQg
cGl4ZWwgcmVhZGJhY2suCisgICAgLy8KKworICAgIC8vIENvbXB1dGVzIHRoZSBjb21wb25lbnRz
IHBlciBwaXhlbCBhbmQgYnl0ZXMgcGVyIGNvbXBvbmVudAorICAgIC8vIGZvciB0aGUgZ2l2ZW4g
Zm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLiBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gZWl0
aGVyIHdhcyBhbiBpbnZhbGlkIGVudW0uCisgICAgc3RhdGljIGJvb2wgY29tcHV0ZUZvcm1hdEFu
ZFR5cGVQYXJhbWV0ZXJzKEdDM0RlbnVtIGZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0gdHlwZSwK
KyAgICAgICAgdW5zaWduZWQqIGNvbXBvbmVudHNQZXJQaXhlbCwKKyAgICAgICAgdW5zaWduZWQq
IGJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAgIC8vIENvbXB1dGVzIHRoZSBpbWFnZSBzaXplIGlu
IGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRlcyBpcyBub3QgbnVsbCwgcGFkZGluZworICAgIC8vIGlz
IGFsc28gY2FsY3VsYXRlZCBpbiByZXR1cm4uIFJldHVybnMgTk9fRVJST1IgaWYgc3VjY2VlZCwg
b3RoZXJ3aXNlCisgICAgLy8gcmV0dXJuIHRoZSBzdWdnZXN0ZWQgR0wgZXJyb3IgaW5kaWNhdGlu
ZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmU6CisgICAgLy8gICBJTlZBTElEX1ZBTFVFIGlmIHdp
ZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBvciBvdmVyZmxvdyBoYXBwZW5zLgorICAgIC8vICAgSU5W
QUxJRF9FTlVNIGlmIGZvcm1hdC90eXBlIGlzIGlsbGVnYWwuCisgICAgc3RhdGljIEdDM0RlbnVt
IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwKKyAgICAgICAgR0MzRGVu
dW0gdHlwZSwKKyAgICAgICAgR0MzRHNpemVpIHdpZHRoLAorICAgICAgICBHQzNEc2l6ZWkgaGVp
Z2h0LAorICAgICAgICBHQzNEaW50IGFsaWdubWVudCwKKyAgICAgICAgdW5zaWduZWQqIGltYWdl
U2l6ZUluQnl0ZXMsCisgICAgICAgIHVuc2lnbmVkKiBwYWRkaW5nSW5CeXRlcyk7CisKKyAgICBz
dGF0aWMgYm9vbCBwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChHQzNEZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0mIGZvcm1hdCwgR0MzRGVudW0mIHR5cGUpOworCisg
ICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZURhdGEgaW50byB0
aGUgcGFzc2VkIFZlY3RvciwKKyAgICAvLyBwYWNraW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGlu
ZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLAorICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBm
bGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBmbGFncy4gUmV0dXJucyB0cnVlCisgICAgLy8gdXBv
biBzdWNjZXNzLgorICAgIHN0YXRpYyBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiwK
KyAgICAgICAgR0MzRGVudW0gZm9ybWF0LAorICAgICAgICBHQzNEZW51bSB0eXBlLAorICAgICAg
ICBib29sIGZsaXBZLAorICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCisgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZXh0
cmFjdHMgdGhlIHVzZXItc3VwcGxpZWQgdGV4dHVyZQorICAgIC8vIGRhdGEsIGFwcGx5aW5nIHRo
ZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBoYSBwYXJhbWV0ZXJzLgorICAgIC8vIElmIHRoZSBk
YXRhIGlzIG5vdCB0aWdodGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHBhc3NlZAorICAgIC8v
IHVucGFja0FsaWdubWVudCwgdGhlIG91dHB1dCBkYXRhIHdpbGwgYmUgdGlnaHRseSBwYWNrZWQu
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGFueSBlcnJvciBv
Y2N1cnJlZC4KKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0VGV4dHVyZURhdGEodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLAorICAgICAgICB1bnNpZ25lZCB1bnBhY2tBbGlnbm1lbnQsCisgICAgICAgIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgY29uc3Qgdm9pZCogcGl4ZWxzLAor
ICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KKyAgICAvLworCisgICAgdm9pZCBhY3RpdmVU
ZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpIG92ZXJyaWRlOworICAgIHZvaWQgYXR0YWNoU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpIG92ZXJy
aWRlOworICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZEJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZv
aWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmxlbmRDb2xvcihHQzNE
Y2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBm
IGFscGhhKSBvdmVycmlkZTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJH
QiwgR0MzRGVudW0gbW9kZUFscGhhKSBvdmVycmlkZTsKKyAgICB2b2lkIGJsZW5kRnVuYyhHQzNE
ZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKSBvdmVycmlkZTsKKyAgICB2b2lkIGJsZW5k
RnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBz
cmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpIG92ZXJyaWRlOworCisgICAgdm9pZCBidWZmZXJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKSBv
dmVycmlkZTsKKyAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlw
dHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpIG92ZXJyaWRlOworICAg
IHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBH
QzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgb3ZlcnJpZGU7CisKKyAgICB2b2lk
KiBtYXBCdWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNE
c2l6ZWlwdHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKSBvdmVycmlkZTsKKyAgICBHQzNE
Ym9vbGVhbiB1bm1hcEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQpIG92ZXJyaWRlOworICAgIHZvaWQg
Y29weUJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpdGVUYXJn
ZXQsIEdDM0RpbnRwdHIgcmVhZE9mZnNldCwgR0MzRGludHB0ciB3cml0ZU9mZnNldCwgR0MzRHNp
emVpcHRyKSBvdmVycmlkZTsKKworICAgIHZvaWQgZ2V0SW50ZXJuYWxmb3JtYXRpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSwgR0MzRHNp
emVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykgb3ZlcnJpZGU7CisgICAgdm9pZCByZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxl
cywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0MzRGVudW0gcG5h
bWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKSBvdmVycmlkZTsKKworICAgIEdDM0RlbnVtIGNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlkZTsKKyAgICB2b2lk
IGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyQ29sb3Io
R0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNs
YW1wZiBhbHBoYSkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVw
dGgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgcykgb3ZlcnJpZGU7
CisgICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwg
R0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpIG92ZXJyaWRlOworICAgIHZvaWQg
Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKworICAgIHZvaWQgY29t
cHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5VGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlcikgb3ZlcnJpZGU7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KSBvdmVycmlkZTsKKyAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpIG92ZXJy
aWRlOworICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpIG92ZXJyaWRlOworICAgIHZv
aWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpIG92ZXJyaWRlOworICAgIHZvaWQgZGVwdGhS
YW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpIG92ZXJyaWRlOworICAgIHZv
aWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOworICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApIG92ZXJyaWRlOworICAgIHZvaWQg
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNv
dW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSBvdmVycmlkZTsK
KworICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBm
aW5pc2goKSBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0Mz
RGludCBsZXZlbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpIG92ZXJy
aWRlOworCisgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIG92ZXJyaWRlOworICAgIGJvb2wgZ2V0QWN0
aXZlQXR0cmliSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBB
Y3RpdmVJbmZvJik7CisgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBvdmVycmlkZTsKKyAgICBib29s
IGdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKTsKKyAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwg
UGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykgb3ZlcnJpZGU7CisgICAgR0MzRGludCBnZXRBdHRy
aWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRl
OworICAgIHZvaWQgZ2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgR0MzRGVu
dW0gZ2V0RXJyb3IoKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEZsb2F0dihHQzNEZW51bSBwbmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRJ
bnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZv
aWQgZ2V0SW50ZWdlcjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1ZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworI2lmICFVU0UoQU5HTEUpCisg
ICAgdm9pZCBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOworI2VuZGlmIC8vICFVU0Uo
QU5HTEUpCisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOworICAgIFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Rb
Ml0sIEdDM0RzaXplaSwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIFN0cmluZyBnZXRTaGFk
ZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5
cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pIG92ZXJyaWRlOworICAgIFN0
cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgU3Ry
aW5nIGdldFN0cmluZyhHQzNEZW51bSBuYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFRleFBh
cmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0
VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJp
ZGU7CisgICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSBvdmVycmlkZTsK
KyAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKSBvdmVycmlkZTsKKyAgICBHQzNE
Ym9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIEdD
M0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNE
Ym9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBH
QzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNE
Ym9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBs
aW5lV2lkdGgoR0MzRGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQgcGFyYW0pIG92ZXJyaWRlOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNE
ZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWFk
UGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworCisgICAgdm9pZCByZW5k
ZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdm9pZCBz
YW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpIG92ZXJy
aWRlOworICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNoYWRlclNvdXJjZShQ
bGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIHN0cmluZykgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykg
b3ZlcnJpZGU7CisgICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKKyAgICB2
b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNp
bE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0g
enBhc3MpIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKSBvdmVycmlk
ZTsKKworICAgIGJvb2wgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscykgb3ZlcnJpZGU7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkgb3ZlcnJpZGU7CisgICAg
dm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQgcGFyYW0pIG92ZXJyaWRlOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSBvdmVycmlkZTsKKworICAgIHZvaWQgdW5pZm9ybTFm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZv
cm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92
ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkg
b3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMmYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KSBvdmVycmlkZTsKKyAgICB2b2lk
IHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQq
IHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgeCwgR0MzRGludCB5KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKKyAgICB2b2lk
IHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5p
Zm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHop
IG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTRmKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0Rm
bG9hdCB3KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9y
bTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdD
M0RpbnQgdykgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3Jt
TWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm1N
YXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVzZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisjaWYgIVVTRShBTkdMRSkKKyAgICBib29sIGNo
ZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9y
bTNET2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKKyAgICBib29sIHByZWNpc2lvbnNNYXRj
aChQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVu
dFNoYWRlcikgY29uc3Q7CisjZW5kaWYKKworICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB4KSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFm
dihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOworICAg
IHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxv
YXQgeSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgs
IGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29u
c3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3KSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4
QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBl
LCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9m
ZnNldCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworCisgICAgdm9p
ZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB2b2lkIGRyYXdBcnJheXNJ
bnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBH
QzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdFbGVtZW50c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpIG92ZXJy
aWRlOworCisgICAgLy8gVmVydGV4QXJyYXlPamVjdCBjYWxscworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgY3JlYXRlVmVydGV4QXJyYXkoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRleEFy
cmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIEdDM0Rib29sZWFuIGlzVmVydGV4
QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBiaW5kVmVydGV4QXJy
YXkoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHBhaW50VG9DYW52YXMo
Y29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICB2
b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgp
OworICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7CisgICAgdm9pZCBmb3JjZUNvbnRl
eHRMb3N0KCk7CisgICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOworCisgICAgdm9pZCBkaXNwYXRj
aENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7CisgICAgdm9pZCBzaW11bGF0ZUNvbnRleHRD
aGFuZ2VkKCk7CisKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdl
QnVmZmVyKik7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9J
bWFnZURhdGEoKTsKKyAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFn
ZUJ1ZmZlciopOworCisjaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKKyAgICB2b2lk
IHByaW1pdGl2ZVJlc3RhcnRJbmRleChHQzNEdWludCkgb3ZlcnJpZGU7CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgdGV4SW1hZ2VJT1N1cmZhY2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSU9TdXJmYWNlUmVmLCBH
QzNEdWludCBwbGFuZSk7CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIHZvaWQgcHJlc2VudFJl
bmRlcmJ1ZmZlcigpOworI2VuZGlmCisKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCisg
ICAgdm9pZCBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKTsKKyAgICB2b2lk
IHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOworI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCisgICAgdm9pZCB1cGRhdGVDR0xD
b250ZXh0KCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQorCisg
ICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKTsKKworICAgIEdyYXBoaWNzQ29udGV4
dEdMUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uOyB9CisKKyAgICAvLyBT
dXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uCisgICAgUGxhdGZvcm0zRE9i
amVjdCBjcmVhdGVCdWZmZXIoKSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0
ZUZyYW1lYnVmZmVyKCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVQcm9n
cmFtKCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVSZW5kZXJidWZmZXIo
KSBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVNoYWRlcihHQzNEZW51bSkg
b3ZlcnJpZGU7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVUZXh0dXJlKCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAg
IHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lk
IGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lk
IGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0
ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisKKyAgICAvLyBTeW50aGVzaXpl
cyBhbiBPcGVuR0wgZXJyb3Igd2hpY2ggd2lsbCBiZSByZXR1cm5lZCBmcm9tIGEKKyAgICAvLyBs
YXRlciBjYWxsIHRvIGdldEVycm9yLiBUaGlzIGlzIHVzZWQgdG8gZW11bGF0ZSBPcGVuR0wgRVMK
KyAgICAvLyAyLjAgYmVoYXZpb3Igb24gdGhlIGRlc2t0b3AgYW5kIHRvIGVuZm9yY2UgYWRkaXRp
b25hbCBlcnJvcgorICAgIC8vIGNoZWNraW5nIG1hbmRhdGVkIGJ5IFdlYkdMLgorICAgIC8vCisg
ICAgLy8gUGVyIHRoZSBiZWhhdmlvciBvZiBnbEdldEVycm9yLCB0aGlzIHN0b3JlcyBhdCBtb3N0
IG9uZQorICAgIC8vIGluc3RhbmNlIG9mIGFueSBnaXZlbiBlcnJvciwgYW5kIHJldHVybnMgdGhl
bSBmcm9tIGNhbGxzIHRvCisgICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBh
ZGRlZC4KKyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKTsKKworICAg
IC8vIFJlYWQgcmVhbCBPcGVuR0wgZXJyb3JzLCBhbmQgbW92ZSB0aGVtIHRvIHRoZSBzeW50aGV0
aWMKKyAgICAvLyBlcnJvciBsaXN0LiBSZXR1cm4gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZXJyb3Ig
aXMgbW92ZWQuCisgICAgYm9vbCBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKwor
ICAgIC8vIFN1cHBvcnQgZm9yIGV4dGVuc2lvbnMuIFJldHVybnMgYSBub24tbnVsbCBvYmplY3Qs
IHRob3VnaCBub3QKKyAgICAvLyBhbGwgbWV0aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJp
bHkgYmUgc3VwcG9ydGVkIG9uIHRoZQorICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2Fs
bCBFeHRlbnNpb25zR0w6OnN1cHBvcnRzKCkgdG8KKyAgICAvLyBkZXRlcm1pbmUgdGhpcy4KKyAg
ICBFeHRlbnNpb25zR0wmIGdldEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKKworICAgIEludFNpemUg
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdDsKKworICAgIC8vIFBhY2tzIHRoZSBj
b250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2Ugd2hpY2ggaXMgcGFzc2VkIGluIHxwaXhlbHN8IGlu
dG8gdGhlIHBhc3NlZCBWZWN0b3IKKyAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1h
dCBhbmQgdHlwZSwgYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBBbHBoYU9wIGZsYWdzLgorICAg
IC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCisgICAgc3RhdGljIGJvb2wgcGFja0ltYWdl
RGF0YShJbWFnZSosIGNvbnN0IHZvaWQqIHBpeGVscywgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBib29sIGZsaXBZLCBBbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25t
ZW50LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisgICAgY2xhc3MgSW1hZ2VFeHRyYWN0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgSW1hZ2VFeHRyYWN0b3IoSW1hZ2UqLCBET01Tb3VyY2Us
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7
CisKKyAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRp
b24gb2YgdGhpcyBtZXRob2QgdG8gZGVhbGxvY2F0ZSBvciByZWxlYXNlIHJlc291cmNlcworICAg
ICAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlIGlmIG5lZWRlZC4KKyAgICAgICAgfklt
YWdlRXh0cmFjdG9yKCk7CisKKyAgICAgICAgYm9vbCBleHRyYWN0U3VjY2VlZGVkKCkgeyByZXR1
cm4gbV9leHRyYWN0U3VjY2VlZGVkOyB9CisgICAgICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxE
YXRhKCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQorICAgICAgICB1bnNpZ25lZCBpbWFn
ZVdpZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9CisgICAgICAgIHVuc2lnbmVkIGltYWdl
SGVpZ2h0KCkgeyByZXR1cm4gbV9pbWFnZUhlaWdodDsgfQorICAgICAgICBEYXRhRm9ybWF0IGlt
YWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsgfQorICAgICAg
ICBBbHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxwaGFPcDsgfQorICAgICAgICB1
bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpIHsgcmV0dXJuIG1faW1hZ2VTb3Vy
Y2VVbnBhY2tBbGlnbm1lbnQ7IH0KKyAgICAgICAgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJj
ZSgpIHsgcmV0dXJuIG1faW1hZ2VIdG1sRG9tU291cmNlOyB9CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhp
cyBtZXRob2QuCisgICAgICAgIC8vIEV4dHJhY3RzIHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sg
b2YgaXRzIHN0YXR1cywgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBm
b3JtYXQgYW5kIEFscGhhT3AgZXRjLAorICAgICAgICAvLyBuZWVkcyB0byBsb2NrIHRoZSByZXNv
dXJjZXMgb3IgcmVsZXZhbnQgZGF0YSBpZiBuZWVkZWQgYW5kIHJldHVybnMgdHJ1ZSB1cG9uIHN1
Y2Nlc3MKKyAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKKworI2lmIFVTRShDQUlSTykKKyAgICAg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9pbWFnZVN1cmZhY2U7CisjZWxpZiBVU0UoQ0cp
CisgICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7CisgICAgICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBtX2RlY29kZWRJbWFnZTsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gbV9waXhlbERhdGE7CisgICAgICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+IG1fZm9ybWFs
aXplZFJHQkE4RGF0YTsKKyNlbmRpZgorICAgICAgICBJbWFnZSogbV9pbWFnZTsKKyAgICAgICAg
RE9NU291cmNlIG1faW1hZ2VIdG1sRG9tU291cmNlOworICAgICAgICBib29sIG1fZXh0cmFjdFN1
Y2NlZWRlZDsKKyAgICAgICAgY29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKKyAgICAgICAg
dW5zaWduZWQgbV9pbWFnZVdpZHRoOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlSGVpZ2h0Owor
ICAgICAgICBEYXRhRm9ybWF0IG1faW1hZ2VTb3VyY2VGb3JtYXQ7CisgICAgICAgIEFscGhhT3Ag
bV9hbHBoYU9wOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50
OworICAgIH07CisKKyAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSB7IG1fZmFp
bE5leHRTdGF0dXNDaGVjayA9IHRydWU7IH0KKworICAgIEdDM0RlbnVtIGFjdGl2ZVRleHR1cmVV
bml0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdDsgfQorICAgIEdD
M0RlbnVtIGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1cnJl
bnRCb3VuZFRleHR1cmUoKTsgfQorICAgIEdDM0RlbnVtIGN1cnJlbnRCb3VuZFRhcmdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY3VycmVudEJvdW5kVGFyZ2V0KCk7IH0KKyAgICB1bnNpZ25l
ZCB0ZXh0dXJlU2VlZChHQzNEdWludCB0ZXh0dXJlKSB7IHJldHVybiBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuY291bnQodGV4dHVyZSk7IH0KKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB1c2lu
ZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OworICAgIHZvaWQgc2NyZWVuRGlkQ2hhbmdl
KFBsYXRmb3JtRGlzcGxheUlEKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIERl
c3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKKworICAgIC8vIEhlbHBlciBmb3IgcGFja0lt
YWdlRGF0YS9leHRyYWN0SW1hZ2VEYXRhL2V4dHJhY3RUZXh0dXJlRGF0YSB3aGljaCBpbXBsZW1l
bnQgcGFja2luZyBvZiBwaXhlbAorICAgIC8vIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIE9wZW5H
TCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCisgICAgLy8gQSBzb3VyY2VVbnBhY2tBbGln
bm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlCisgICAgLy8gZGF0YSBpcyB0
aWdodGx5IHBhY2tlZC4gTm9uLXplcm8gdmFsdWVzIG1heSB0YWtlIGEgc2xvdyBwYXRoLgorICAg
IC8vIERlc3RpbmF0aW9uIGRhdGEgd2lsbCBoYXZlIG5vIGdhcHMgYmV0d2VlbiByb3dzLgorICAg
IHN0YXRpYyBib29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwgRGF0YUZv
cm1hdCBzb3VyY2VEYXRhRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1
bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0
LCB1bnNpZ25lZCBkZXN0aW5hdGlvblR5cGUsIEFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0
YSwgYm9vbCBmbGlwWSk7CisKKyAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJl
cXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCisgICAgLy8gaW4gcGFydGljdWxh
ciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKKyAg
ICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRo
ZSBPcGVuR0wKKyAgICAvLyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2b2lkIHZhbGlkYXRlRGVwdGhT
dGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgdm9p
ZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICAKKyAgICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50
IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUgaW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8K
KyAgICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7CisKKyAgICAvLyBSZWFkIHJlbmRlcmluZyByZXN1
bHRzIGludG8gYSBwaXhlbCBhcnJheSB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKKyAgICAv
LyBiYWNrYnVmZmVyLgorICAgIHZvaWQgcmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hh
ciogcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSk7CisgICAgdm9pZCByZWFkUGl4ZWxzQW5kQ29udmVy
dFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1
bnNpZ25lZCBjaGFyKiBwaXhlbHMpOworCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICB2b2lkIHNl
dFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KTsKKyNlbmRpZgorCisgICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXpl
Jik7CisgICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJl
Y3QmID0gSW50UmVjdCgpKTsKKyAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklm
TmVlZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGJvb2wgYWxsb3dPZmZsaW5lUmVu
ZGVyZXJzKCkgY29uc3Q7CisjZW5kaWYKKworICAgIGludCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsK
KyAgICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OworCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKKyAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMIG1fY29udGV4dE9iaiB7IG51bGxwdHIgfTsKKyNpZiBVU0UoQU5HTEUpCisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0
ciB9OworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWcgbV9jb25maWdPYmogeyBu
dWxscHRyIH07CisjZW5kaWYgLy8gVVNFKEFOR0xFKQorI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09B
KQorCisjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0EpCisgICAgUmVmUHRyPFBsYXRmb3JtQ0FM
YXllcj4gbV93ZWJHTExheWVyOworI2VuZGlmCisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBzaDo6U2hhZGVyVmFyaWFibGU+IFNoYWRlclN5bWJvbE1hcDsKKworICAgIHN0cnVjdCBTaGFk
ZXJTb3VyY2VFbnRyeSB7CisgICAgICAgIEdDM0RlbnVtIHR5cGU7CisgICAgICAgIFN0cmluZyBz
b3VyY2U7CisgICAgICAgIFN0cmluZyB0cmFuc2xhdGVkU291cmNlOworICAgICAgICBTdHJpbmcg
bG9nOworICAgICAgICBib29sIGlzVmFsaWQ7CisgICAgICAgIFNoYWRlclN5bWJvbE1hcCBhdHRy
aWJ1dGVNYXA7CisgICAgICAgIFNoYWRlclN5bWJvbE1hcCB1bmlmb3JtTWFwOworICAgICAgICBT
aGFkZXJTeW1ib2xNYXAgdmFyeWluZ01hcDsKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQor
ICAgICAgICAgICAgOiB0eXBlKFZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAsIGlzVmFsaWQo
ZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU2hhZGVyU3lt
Ym9sTWFwJiBzeW1ib2xNYXAoZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJP
TF9UWVBFX0FUVFJJQlVURSB8fCBzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9VTklG
T1JNIHx8IHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOworICAgICAg
ICAgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTWFwOworICAgICAgICAgICAgaWYgKHN5bWJv
bFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhcnlpbmdNYXA7CisgICAgICAgICAgICByZXR1cm4gdW5pZm9ybU1hcDsKKyAgICAgICAg
fQorICAgIH07CisKKyNpZiAhVVNFKEFOR0xFKQorICAgIC8vIEZJWE1FOiBTaGFkZXJzIGFyZSBu
ZXZlciByZW1vdmVkIGZyb20gdGhpcyBtYXAsIGV2ZW4gaWYgdGhleSBhbmQgdGhlaXIgcHJvZ3Jh
bSBhcmUgZGVsZXRlZC4KKyAgICAvLyBUaGlzIGlzIGJhZCwgYW5kIGl0IGFsc28gcmVsaWVzIG9u
IHRoZSBmYWN0IHdlIG5ldmVyIHJldXNlIFBsYXRmb3JtM0RPYmplY3QgbnVtYmVycy4KKyAgICB0
eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRl
clNvdXJjZU1hcDsKKyAgICBTaGFkZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgc3RkOjpwYWlyPFBsYXRmb3JtM0RP
YmplY3QsIFBsYXRmb3JtM0RPYmplY3Q+PiBMaW5rZWRTaGFkZXJNYXA7CisgICAgTGlua2VkU2hh
ZGVyTWFwIG1fbGlua2VkU2hhZGVyTWFwOworCisgICAgc3RydWN0IEFjdGl2ZVNoYWRlclN5bWJv
bENvdW50cyB7CisgICAgICAgIFZlY3RvcjxHQzNEaW50PiBmaWx0ZXJlZFRvQWN0dWFsQXR0cmli
dXRlSW5kZXhNYXA7CisgICAgICAgIFZlY3RvcjxHQzNEaW50PiBmaWx0ZXJlZFRvQWN0dWFsVW5p
Zm9ybUluZGV4TWFwOworCisgICAgICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cygpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEdDM0RpbnQgY291bnRGb3JUeXBlKEdDM0RlbnVt
IGFjdGl2ZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChhY3RpdmVUeXBlID09
IEFDVElWRV9BVFRSSUJVVEVTIHx8IGFjdGl2ZVR5cGUgPT0gQUNUSVZFX1VOSUZPUk1TKTsKKyAg
ICAgICAgICAgIGlmIChhY3RpdmVUeXBlID09IEFDVElWRV9BVFRSSUJVVEVTKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmaWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpOwor
CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXpl
KCk7CisgICAgICAgIH0KKyAgICB9OworICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2Jq
ZWN0LCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHM+IFNoYWRlclByb2dyYW1TeW1ib2xDb3VudE1h
cDsKKyAgICBTaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAgbV9zaGFkZXJQcm9ncmFtU3ltYm9s
Q291bnRNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IEhhc2hlZFN5
bWJvbE1hcDsKKyAgICBIYXNoZWRTeW1ib2xNYXAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1h
cDsKKworICAgIFN0cmluZyBtYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFN0cmlu
ZyBtYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNv
dW50LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFN0cmluZyBvcmlnaW5hbFN5bWJvbE5hbWUo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0
cmluZyYgbmFtZSk7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBtYXBwZWRTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpOworICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJ
blNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRl
ck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRlcnM7CisjZW5kaWYgLy8gIVVTRShBTkdMRSkK
KworI2lmIFVTRShBTkdMRSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNHTEFOR0xFPiBtX2V4dGVuc2lvbnM7CisjZWxp
ZiAhUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOworICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xD
b21tb247CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNHTE9wZW5HTEVTPiBtX2V4dGVu
c2lvbnM7CisjZWxpZiBVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVO
R0xfRVMpKQorICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0w7CisgICAgZnJpZW5k
IGNsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0
ZW5zaW9uc0dMT3BlbkdMPiBtX2V4dGVuc2lvbnM7CisjZW5kaWYKKworICAgIEdyYXBoaWNzQ29u
dGV4dEdMUG93ZXJQcmVmZXJlbmNlIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uIHsg
R3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQgfTsKKyAgICBWZWN0b3I8
VmVjdG9yPGZsb2F0Pj4gbV92ZXJ0ZXhBcnJheTsKKworI2lmICFVU0UoQU5HTEUpCisgICAgQU5H
TEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgorCisgICAgR0MzRHVpbnQgbV90ZXh0
dXJlIHsgMCB9OworICAgIEdDM0R1aW50IG1fZmJvIHsgMCB9OworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICBHQzNEdWludCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworICAg
IEdDM0R1aW50IG1faW50ZXJtZWRpYXRlVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorCisgICAgR0Mz
RHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAgfTsKKyAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXIg
eyAwIH07CisgICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisKKyAgICBi
b29sIG1fbGF5ZXJDb21wb3NpdGVkIHsgZmFsc2UgfTsKKyAgICBHQzNEdWludCBtX2ludGVybmFs
Q29sb3JGb3JtYXQgeyAwIH07CisKKyNpZiBVU0UoQU5HTEUpICYmIFBMQVRGT1JNKENPQ09BKQor
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xTdXJmYWNlIG1fcGJ1ZmZlcjsKKyNlbmRpZgor
CisgICAgc3RydWN0IEdyYXBoaWNzQ29udGV4dEdMU3RhdGUgeworICAgICAgICBHQzNEdWludCBi
b3VuZEZCTyB7IDAgfTsKKyAgICAgICAgR0MzRGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRTAgfTsKKworICAgICAgICB1c2luZyBCb3VuZFRleHR1cmVN
YXAgPSBIYXNoTWFwPEdDM0RlbnVtLAorICAgICAgICAgICAgc3RkOjpwYWlyPEdDM0R1aW50LCBH
QzNEZW51bT4sCisgICAgICAgICAgICBXVEY6OkludEhhc2g8R0MzRGVudW0+LCAKKyAgICAgICAg
ICAgIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+LAorICAgICAg
ICAgICAgV1RGOjpQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPEdDM0R1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWlu
dD4+CisgICAgICAgID47CisgICAgICAgIEJvdW5kVGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7
CisgICAgICAgIEdDM0R1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBi
b3VuZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgICAgIEdDM0R1aW50IGJvdW5k
VGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKKyAg
ICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB9CisKKyAgICAgICAgR0MzRHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkg
Y29uc3QgeyByZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9CisgICAgICAg
IEdDM0RlbnVtIGJvdW5kVGFyZ2V0KEdDM0RlbnVtIHRleHR1cmVVbml0KSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4
dHVyZVVuaXQpOworICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5l
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLnNlY29uZDsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRCb3VuZFRl
eHR1cmUoR0MzRGVudW0gdGV4dHVyZVVuaXQsIEdDM0R1aW50IHRleHR1cmUsIEdDM0RlbnVtIHRh
cmdldCkKKyAgICAgICAgeworICAgICAgICAgICAgYm91bmRUZXh0dXJlTWFwLnNldCh0ZXh0dXJl
VW5pdCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwgdGFyZ2V0KSk7CisgICAgICAgIH0KKworICAg
ICAgICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0MzRHVpbnQsIFdU
Rjo6SW50SGFzaDxHQzNEdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
R0MzRHVpbnQ+PjsKKyAgICAgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50Owor
ICAgIH07CisKKyAgICBHcmFwaGljc0NvbnRleHRHTFN0YXRlIG1fc3RhdGU7CisKKyAgICAvLyBG
b3IgbXVsdGlzYW1wbGluZworICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVGQk8geyAwIH07Cisg
ICAgR0MzRHVpbnQgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKKyAgICBH
QzNEdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgeyAwIH07CisKKyAgICAvLyBFcnJvcnMg
cmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCisgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+
IG1fc3ludGhldGljRXJyb3JzOworCisjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01B
UFBFUikKKyAgICBmcmllbmQgY2xhc3MgTmljb3NpYTo6R0MzRExheWVyOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxOaWNvc2lhOjpHQzNETGF5ZXI+IG1fbmljb3NpYUxheWVyOworI2VsaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3Jt
TGF5ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXll
cj4gbV90ZXhtYXBMYXllcjsKKyNlbGlmICFQTEFURk9STShDT0NPQSkKKyAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU+IG1fcHJpdmF0ZTsKKyNlbmRpZgorCisgICAg
SGFzaFNldDxDbGllbnQqPiBtX2NsaWVudHM7CisKKyAgICBib29sIG1faXNGb3JXZWJHTDIgeyBm
YWxzZSB9OworICAgIGJvb2wgbV91c2luZ0NvcmVQcm9maWxlIHsgZmFsc2UgfTsKKworICAgIHVu
c2lnbmVkIG1fc3RhdHVzQ2hlY2tDb3VudCB7IDAgfTsKKyAgICBib29sIG1fZmFpbE5leHRTdGF0
dXNDaGVjayB7IGZhbHNlIH07CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX3ZhbyB7IDAgfTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIChVU0UoT1BF
TkdMKSB8fCBVU0UoQU5HTEUpKQorICAgIGJvb2wgbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1h
bmNlR1BVIHsgZmFsc2UgfTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmIwODZkMGM1MWZjZDE1Yjg1OTdlMmJjMDM5MDk4ZGExZjEyOTg3NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCkBAIC0wLDAgKzEsNTE2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkg
JiYgVVNFKE9QRU5HTF9FUykpKQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKyNpbmNsdWRlICJFeHRl
bnNpb25zR0xPcGVuR0wuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGVtcG9yYXJ5T3Bl
bkdMU2V0dGluZy5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RyaW5nPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRl
Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1
ZGUgIk9wZW5HTFNoaW1zLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2ltcG9ydCA8T3BlbkdM
RVMvRVMyL2dsZXh0Lmg+CisvLyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgorI2RlZmluZSBHTF9S
R0JBMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdCMzJG
X0FSQiAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE1CisjZWxpZiBVU0UoT1BFTkdMKQorI2Rl
ZmluZSBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQK
KyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+CisjdW5kZWYg
R0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgdm9p
ZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2ln
bmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICAvLyBXZSBjYW4gYXNzdW1lIHRoaXMgZG9lc24ndCBv
dmVyZmxvdyBiZWNhdXNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucworICAgIC8vIHVzZSBjaGVja2Vk
IGFyaXRobWV0aWMuCisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgIHBpeGVs
c1tpICsgM10gPSAyNTU7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQoreworICAgIGF1dG8g
YXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2
ZSBhIGJ1ZyB3aGVyZSBjYWxsaW5nIHJlYWRQaXhlbHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3
cm9uZyB2YWx1ZXMgZm9yIHRoZSBhbHBoYSBjaGFubmVsIHdoZW4gdGhlIGFscGhhIGlzIG9mZiBm
b3IgdGhlIGNvbnRleHQuCisgICAgaWYgKCFhdHRycy5hbHBoYSAmJiBnZXRFeHRlbnNpb25zKCku
aXNOVklESUEoKSkgeworICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworI2lmIFVTRShBQ0NFTEVSQVRF
KQorICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgc3JjLndpZHRoID0gd2lkdGg7CisgICAgICAgIHNyYy5yb3dCeXRlcyA9IHdp
ZHRoICogNDsKKyAgICAgICAgc3JjLmRhdGEgPSBwaXhlbHM7CisKKyAgICAgICAgdkltYWdlX0J1
ZmZlciBkZXN0OworICAgICAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgZGVzdC53
aWR0aCA9IHdpZHRoOworICAgICAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OworICAgICAg
ICBkZXN0LmRhdGEgPSBwaXhlbHM7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBm
cm9tIFJHQkEgdG8gQkdSQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEs
IDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZk
ZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgICAgIGludCB0b3RhbEJ5dGVz
ID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFs
Qnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tp
ICsgMl0pOworI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4
ZWxzKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBpZiAoIWF0dHJzLmFscGhhKQorICAgICAg
ICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOworI2Vu
ZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRl
cygpCit7CisgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3Rl
bmNpbCIpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRl
cygpOworICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBjb25zdCBpbnQg
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFs
RGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICBpZiAoYXR0cnMuYWxwaGEpIHsKKyAgICAgICAg
bV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0g
R0xfUkdCQTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBH
TF9SR0I4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisgICAgaWYgKGF0
dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cg
dGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAg
ICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMu
CisKKyAgICAgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwor
ICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2
ZSBpdC4KKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBH
TF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsKKyNlbHNlCisgICAgICAgICAgICBpbnRlcm5hbERl
cHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIFJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8uCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykg
eworICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2
KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgLy8gVXNpbmcg
bW9yZSB0aGFuIDQgc2FtcGxlcyBpcyBzbG93IG9uIHNvbWUgaGFyZHdhcmUgYW5kIGlzIHVubGlr
ZWx5IHRvCisgICAgICAgIC8vIHByb2R1Y2UgYSBzaWduaWZpY2FudGx5IGJldHRlciByZXN1bHQu
CisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291bnQp
OworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9t
dWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisjaWYgUExBVEZPUk0oQ09D
T0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIEdMX1JHQkE4X09F
Uywgd2lkdGgsIGhlaWdodCk7CisjZWxzZQorICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCisgICAgICAgIDo6Z2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKKyAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKKyAgICAgICAg
ICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYg
KGF0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgICAgICBpZiAoYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9F
WFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICB9CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIDApOworICAgICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyByZXNpemUgcmVndWxhciBGQk8KKyAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIEFTU0VS
VChtX3RleHR1cmUpOworI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShPUEVOR0xfRVMpCisg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOworICAg
IDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRU
QUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICBzZXRSZW5kZXJidWZm
ZXJTdG9yYWdlRnJvbURyYXdhYmxlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwor
I2Vsc2UKKyAgICBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5
ZXIoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV90
ZXh0dXJlLCAwKTsKKyNlbmRpZiAvLyAhVVNFKE9QRU5HTF9FUykpCisjZWxzZQorICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZl
clRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VY
VCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkgeworICAgICAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgICAgIDo6
Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgICAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgICAgIDo6Z2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgICAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKyNlbmRpZgorI2VuZGlm
CisKKyAgICBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRo
U3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJP
ID0gdHJ1ZTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAg
ICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgICAg
IG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3Rh
dGUuYm91bmRGQk8gPT0gbV9mYm8pCisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1
aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7
CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoIWF0dHJz
LmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkpIHsKKyAgICAgICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VY
VCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBp
ZiAoYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICB9CisKKyAgICBpZiAoZ2xD
aGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1Jf
VEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVy
KEdMX0RJVEhFUiwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVk
RGVwdGgoR0xfREVQVEhfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRp
bmcgc2NvcGVkU3RlbmNpbChHTF9TVEVOQ0lMX1RFU1QsIEdMX0ZBTFNFKTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgIEdMaW50IGJvdW5kRnJhbWVCdWZmZXI7
CisgICAgOjpnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZib3VuZEZyYW1l
QnVmZmVyKTsKKyNlbmRpZgorCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZS
QU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiBVU0UoT1BFTkdMX0VTKQorICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKKyAgICA6OmdsRmx1
c2goKTsKKyAgICA6OmdsUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOworICAg
IGNvbnN0IEdMZW51bSBkaXNjYXJkc1tdID0geyBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfREVQ
VEhfQVRUQUNITUVOVCB9OworICAgIDo6Z2xEaXNjYXJkRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9G
UkFNRUJVRkZFUl9BUFBMRSwgMiwgZGlzY2FyZHMpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZmZXIpOworI2Vsc2UKKyAgICBJbnRSZWN0IHJl
c29sdmVSZWN0ID0gcmVjdDsKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc29s
dmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsK
KworICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVj
dC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVj
dC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5t
YXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisjZW5kaWYKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgVVNFKE9QRU5HTCkK
KyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgor
ICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIERFUFRIX0NPTVBPTkVOVDE2OgorICAgICAgICBpbnRlcm5hbGZv
cm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSR0JB
NDoKKyAgICBjYXNlIFJHQjVfQTE6CisgICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCQTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSR0I1NjU6CisgICAgICAgIGludGVybmFsZm9ybWF0
ID0gR0xfUkdCOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIC8vIE5lZWQgdG8gZW11bGF0ZSBNQVhfRlJB
R01FTlQvVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyBhbmQgTUFYX1ZBUllJTkdfVkVDVE9SUworICAg
IC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyByZXR1cm4gdGhl
IG51bWJlciBvZiBjb21wb25lbnRzCisgICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1cm4gdGhlIG51
bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4KKyAgICAvLyBU
aGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRp
dmlkZWQgYnkgNC4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBzd2l0Y2ggKHBuYW1l
KSB7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RP
UlM6CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01Q
T05FTlRTLCB2YWx1ZSk7CisgICAgICAgICp2YWx1ZSAvPSA0OworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgorICAgICAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMsIHZhbHVlKTsKKyAgICAgICAgKnZh
bHVlIC89IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTUFYX1ZBUllJTkdfVkVDVE9SUzoK
KyAgICAgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICAgICAgQVNTRVJUKDo6
Z2xHZXRFcnJvcigpID09IEdMX05PX0VSUk9SKTsKKyAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoOjpnbEdl
dEVycm9yKCkgPT0gR0xfSU5WQUxJRF9FTlVNKSB7CisgICAgICAgICAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX01BWF9WQVJZSU5HX0NPTVBPTkVOVFMsIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAqdmFsdWUgLz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsIHZhbHVlKTsKKyAgICAg
ICAgICAgICp2YWx1ZSAvPSA0OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2VuZGlmCisg
ICAgY2FzZSBNQVhfVEVYVFVSRV9TSVpFOgorICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1RF
WFRVUkVfU0laRSwgdmFsdWUpOworICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJlcXVpcmVz
UmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQorICAgICAgICAgICAgKnZhbHVlID0gc3Rk
OjptaW4oNDA5NiwgKnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNQVhfQ1VCRV9N
QVBfVEVYVFVSRV9TSVpFOgorICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX0NVQkVfTUFQX1RF
WFRVUkVfU0laRSwgdmFsdWUpOworICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJlcXVpcmVz
UmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQorICAgICAgICAgICAgKnZhbHVlID0gc3Rk
OjptaW4oMTAyNCwgKnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIC8vIFNvbWUgb2xkZXIgaGFyZHdhcmUgYWR2ZXJ0aXNlcyBhIGxhcmdlciBtYXhpbXVtIHRo
YW4gdGhleQorICAgIC8vIGNhbiBhY3R1YWxseSBoYW5kbGUuIFJhdGhlciB0aGFuIGRldGVjdGlu
ZyBzdWNoIGRldmljZXMsIHNpbXBseQorICAgIC8vIGNsYW1wIHRoZSBtYXhpbXVtIHRvIDgxOTIs
IHdoaWNoIGlzIGJpZyBlbm91Z2ggZm9yIGEgNUsgZGlzcGxheS4KKyAgICBjYXNlIE1BWF9SRU5E
RVJCVUZGRVJfU0laRToKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9SRU5ERVJCVUZGRVJf
U0laRSwgdmFsdWUpOworICAgICAgICAqdmFsdWUgPSBzdGQ6Om1pbig4MTkyLCAqdmFsdWUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1BWF9WSUVXUE9SVF9ESU1TOgorICAgICAgICA6Omds
R2V0SW50ZWdlcnYoTUFYX1ZJRVdQT1JUX0RJTVMsIHZhbHVlKTsKKyAgICAgICAgdmFsdWVbMF0g
PSBzdGQ6Om1pbig4MTkyLCB2YWx1ZVswXSk7CisgICAgICAgIHZhbHVlWzFdID0gc3RkOjptaW4o
ODE5MiwgdmFsdWVbMV0pOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVt
IHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNE
aW50KiBwcmVjaXNpb24pCit7CisgICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5cGUpOworICAgIEFT
U0VSVChyYW5nZSk7CisgICAgQVNTRVJUKHByZWNpc2lvbik7CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgeworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkxPV19JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUVESVVN
X0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0lOVDoKKyAgICAgICAgLy8g
VGhlc2UgdmFsdWVzIGFyZSBmb3IgYSAzMi1iaXQgdHdvcy1jb21wbGVtZW50IGludGVnZXIgZm9y
bWF0LgorICAgICAgICByYW5nZVswXSA9IDMxOworICAgICAgICByYW5nZVsxXSA9IDMwOworICAg
ICAgICBwcmVjaXNpb25bMF0gPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUVESVVN
X0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhJR0hfRkxPQVQ6CisgICAgICAg
IC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGFuIElFRUUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGlu
Zy1wb2ludCBmb3JtYXQuCisgICAgICAgIHJhbmdlWzBdID0gMTI3OworICAgICAgICByYW5nZVsx
XSA9IDEyNzsKKyAgICAgICAgcHJlY2lzaW9uWzBdID0gMjM7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgaWYgKHdp
ZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR0MzRGVu
dW0gb3BlbkdMRm9ybWF0ID0gZm9ybWF0OworICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9y
bWF0ID0gaW50ZXJuYWxmb3JtYXQ7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBpZiAodHlwZSA9PSBH
TF9GTE9BVCkgeworICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCisgICAgICAgICAgICBv
cGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkEzMkZfQVJCOworICAgICAgICBlbHNlIGlmIChm
b3JtYXQgPT0gR0xfUkdCKQorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9S
R0IzMkZfQVJCOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykgeworICAg
ICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCisgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZv
cm1hdCA9IEdMX1JHQkExNkZfQVJCOworICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfUkdC
KQorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IxNkZfQVJCOworICAg
ICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFKQorICAgICAgICAgICAgb3BlbkdM
SW50ZXJuYWxGb3JtYXQgPSBHTF9MVU1JTkFOQ0UxNkZfQVJCOworICAgICAgICBlbHNlIGlmIChm
b3JtYXQgPT0gR0xfQUxQSEEpCisgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdM
X0FMUEhBMTZGX0FSQjsKKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9B
TFBIQSkKKyAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5BTkNFX0FM
UEhBMTZGX0FSQjsKKyAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOworICAgIH0KKwor
ICAgIEFTU0VSVChmb3JtYXQgIT0gRXh0ZW5zaW9uc0dMOjpTUkdCOF9BTFBIQThfRVhUKTsKKyAg
ICBpZiAoZm9ybWF0ID09IEV4dGVuc2lvbnNHTDo6U1JHQl9BTFBIQV9FWFQpCisgICAgICAgIG9w
ZW5HTEZvcm1hdCA9IEdMX1JHQkE7CisgICAgZWxzZSBpZiAoZm9ybWF0ID09IEV4dGVuc2lvbnNH
TDo6U1JHQl9FWFQpCisgICAgICAgIG9wZW5HTEZvcm1hdCA9IEdMX1JHQjsKKyNlbmRpZgorCisg
ICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgeworICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBm
b3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5n
IGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGFkYXB0IHRoZW0uCisg
ICAgICAgIHN3aXRjaCAob3BlbkdMSW50ZXJuYWxGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBBTFBI
QToKKyAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBzaW1wbGUgY29tcG9uZW50IGNvbnRh
aW5pbmcgYW4gYWxwaGEgdmFsdWUuIEl0IG5lZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEgR0xfUkVE
IHBsYW5lLgorICAgICAgICAgICAgLy8gV2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdMX1JFRCAo
Ym90aCBuZWVkIHRvIGJlIEdMX0FMUEhBIGluIFdlYkdMKSBhbmQgaW5zdHJ1Y3QgdGhlIHRleHR1
cmUgdG8gc3dpenpsZQorICAgICAgICAgICAgLy8gdGhlIHJlZCBjb21wb25lbnQgdmFsdWVzIHdp
dGggdGhlIGFscGhhIGNvbXBvbmVudCB2YWx1ZXMuCisgICAgICAgICAgICBvcGVuR0xJbnRlcm5h
bEZvcm1hdCA9IG9wZW5HTEZvcm1hdCA9IFJFRDsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmko
dGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfQSwgUkVEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgaGFz
IDIgY29tcG9uZW50cywgYW4gYWxwaGEgb25lIGFuZCBhIGx1bWluYW5jZSBvbmUgKHNhbWUgdmFs
dWUgZm9yIHJlZCwgZ3JlZW4gYW5kIGJsdWUpLgorICAgICAgICAgICAgLy8gSXQgbmVlZHMgdG8g
YmUgYmFja2VkIHdpdGggYSBHTF9SRyBwbGFuZSwgdXNpbmcgdGhlIHJlZCBjb21wb25lbnQgZm9y
IHRoZSBjb2xvcnMgYW5kIHRoZSBncmVlbiBjb21wb25lbnQKKyAgICAgICAgICAgIC8vIGZvciBh
bHBoYS4gV2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdMX1JHIGFuZCBzd2l6emxlIHRoZSBjb21w
b25lbnRzLgorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xGb3JtYXQg
PSBSRzsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVf
UiwgUkVEKTsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpa
TEVfRywgUkVEKTsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NX
SVpaTEVfQiwgUkVEKTsKKyAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJF
X1NXSVpaTEVfQSwgR1JFRU4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRleEltYWdlMkRE
aXJlY3QodGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgb3BlbkdMRm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYg
ek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNp
ZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICA6OmdsRGVwdGhSYW5nZWYo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKKyNl
bHNlCisgICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworI2VuZGlmCit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9Q
RU5HTF9FUykKKyAgICA6OmdsQ2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7
CisjZWxzZQorICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKKyNlbmRpZgorfQorCisjaWYgIVBM
QVRGT1JNKEdUSykKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEV4
dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiBVU0UoT1BFTkdMX0VTKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4
dGVuc2lvbnNHTE9wZW5HTD4odGhpcywgZmFsc2UpOworI2Vsc2UKKyAgICAgICAgbV9leHRlbnNp
b25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIGlzR0xFUzJDb21wbGlh
bnQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKK30KKyNlbmRpZgorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKKworICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxz
IHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCisgICAgLy8gYWxsIHByZXZpb3Vz
IHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgaWYgKGF0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAg
ICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRo
LCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgOjpnbEZsdXNoKCk7CisgICAgfQor
ICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0
YSk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBpZiAoIWF0dHJzLmFscGhhICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkEgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpCR1JBKSAmJiAobV9zdGF0ZS5i
b3VuZEZCTyA9PSBtX2ZibyB8fCAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8g
PT0gbV9tdWx0aXNhbXBsZUZCTykpKQorICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVs
cyh3aWR0aCwgaGVpZ2h0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkpOworI2Vu
ZGlmCit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAo
VVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MTgxMjg0MWY2YmJkODA0M2U2Mzc4NzExZjQwNmIxNjYzMTcyZGM1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtMCwwICsxLDIwODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNp
ZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVO
R0xfRVMpKQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKworI2lmICFQTEFURk9STShDT0NPQSkgJiYg
VVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5oIgorI2Vsc2UK
KyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0wuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkFOR0xF
V2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZ3VsYXJFeHByZXNzaW9uLmg+
CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKyNp
bmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaWYgVVNFKE9QRU5HTF9FUykKKyNpbXBv
cnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2ltcG9ydCA8T3BlbkdMRVMvRVMzL2dsLmg+Cisv
LyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgorI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAgICAgICAg
ICAgICAgICAgICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAgICAgICAg
ICAgICAgICAgMHg4ODE1CisjZWxzZQorI2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9H
TF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNpbmNs
dWRlIDxPcGVuR0wvZ2wzLmg+CisjaW5jbHVkZSA8T3BlbkdML2dsM2V4dC5oPgorI3VuZGVmIEdM
X0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAorI2VuZGlm
CisKKyNlbHNlCisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlTaGltcy5oIgor
I2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgor
I2VuZGlmCisKKyNlbmRpZgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFRocmVh
ZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4mIGdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
cigpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0YXRpYyBU
aHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+KiBzaGFyZWROYW1lSGFzaDsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBzaGFyZWROYW1lSGFzaCA9IG5ldyBU
aHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+OworICAgIH0pOworCisgICAgcmV0dXJuICpz
aGFyZWROYW1lSGFzaDsKK30KKworc3RhdGljIHZvaWQgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyKFNoYWRlck5hbWVIYXNoKiBzaGFkZXJOYW1lSGFzaCkKK3sKKyAgICAqZ2V0Q3VycmVu
dE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkgPSBzaGFkZXJOYW1lSGFzaDsKK30KKworLy8gSGFzaCBm
dW5jdGlvbiB1c2VkIGJ5IHRoZSBBTkdMRSB0cmFuc2xhdG9yL2NvbXBpbGVyIHRvIGRvCisvLyBz
eW1ib2wgbmFtZSBtYW5nbGluZy4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBtZXRob2QsIGJlZm9y
ZQorLy8gY2FsbGluZyBjb21waWxlU2hhZGVyIHdlIHNldCBjdXJyZW50TmFtZUhhc2hNYXBGb3JT
aGFkZXIKKy8vIHRvIHBvaW50IHRvIHRoZSBtYXAga2VwdCBieSB0aGUgY3VycmVudCBpbnN0YW5j
ZSBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKworc3RhdGljIHVpbnQ2NF90IG5hbWVIYXNo
Rm9yU2hhZGVyKGNvbnN0IGNoYXIqIG5hbWUsIHNpemVfdCBsZW5ndGgpCit7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAgQ1N0cmluZyBuYW1lQXNDU3RyaW5nID0g
Q1N0cmluZyhuYW1lKTsKKworICAgIC8vIExvb2sgdXAgbmFtZSBpbiBvdXIgbG9jYWwgbWFwLgor
ICAgIFNoYWRlck5hbWVIYXNoKiYgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyID0gKmdldEN1
cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpOworICAgIFNoYWRlck5hbWVIYXNoOjppdGVyYXRv
ciBmaW5kUmVzdWx0ID0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5maW5kKG5hbWVBc0NT
dHJpbmcpOworICAgIGlmIChmaW5kUmVzdWx0ICE9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
ci0+ZW5kKCkpCisgICAgICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZTsKKworICAgIHVuc2ln
bmVkIGhhc2hWYWx1ZSA9IG5hbWVBc0NTdHJpbmcuaGFzaCgpOworCisgICAgLy8gQ29udmVydCB0
aGUgMzItYml0IGhhc2ggZnJvbSBDU3RyaW5nOjpoYXNoIGludG8gYSA2NC1iaXQgcmVzdWx0Cisg
ICAgLy8gYnkgc2hpZnRpbmcgdGhlbiBhZGRpbmcgdGhlIHNpemUgb2Ygb3VyIHRhYmxlLiBPdmVy
ZmxvdyB3b3VsZAorICAgIC8vIG9ubHkgYmUgYSBwcm9ibGVtIGlmIHdlJ3JlIGFscmVhZHkgaGFz
aGluZyB0byB0aGUgc2FtZSB2YWx1ZSAoYW5kCisgICAgLy8gd2UncmUgaG9waW5nIHRoYXQgb3Zl
ciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQgd2UKKyAgICAvLyBkb24ndCBoYXZlIHRoYXQg
bWFueSBzeW1ib2xzKS4KKworICAgIHVpbnQ2NF90IHJlc3VsdCA9IGhhc2hWYWx1ZTsKKyAgICBy
ZXN1bHQgPSAocmVzdWx0IDw8IDMyKSArIChjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNp
emUoKSArIDEpOworCisgICAgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zZXQobmFtZUFz
Q1N0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb24pCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7CisKKyAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7
CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9y
dHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9u
cy5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAgICAg
ICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBhdHRycy5k
ZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXR0cnMuc3RlbmNpbCA9
IGZhbHNlOworICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgfQorICAg
IGlmIChhdHRycy5hbnRpYWxpYXMgJiYgIW1faXNGb3JXZWJHTDIpIHsKKyAgICAgICAgaWYgKCFl
eHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKSB7
CisgICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldENv
bnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBleHRl
bnNpb25zLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7
CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCit7CisgICAgQ2hlY2tl
ZDxpbnQsIFJlY29yZE92ZXJmbG93PiByb3dCeXRlcyA9IENoZWNrZWQ8aW50LCBSZWNvcmRPdmVy
Zmxvdz4obV9jdXJyZW50V2lkdGgpICogNDsKKyAgICBpZiAocm93Qnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+
IHRvdGFsQnl0ZXNDaGVja2VkID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisgICAgaWYg
KHRvdGFsQnl0ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGludCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7CisKKyAgICBh
dXRvIHBpeGVscyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPih0b3RhbEJ5dGVzKTsK
KyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRlcmluZ1Jl
c3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgIGlmICghY29udGV4dEF0dHJp
YnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFscGhh
LgorICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAw
XSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0
ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAg
ICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVs
c1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAgfQorCisgICAgcGFpbnRUb0NhbnZhcyhw
aXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGlt
YWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisKKyNp
ZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICBwcmVzZW50UmVuZGVyYnVm
ZmVyKCk7CisjZW5kaWYKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKikKK3sKKyAgICAvLyBOb3QgbmVl
ZGVkIGF0IHRoZSBtb21lbnQsIHNvIHJldHVybiB0aGF0IG5vdGhpbmcgd2FzIGRvbmUuCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIC8vIFJlYWRp
bmcgcHJlbXVsdGlwbGllZCBhbHBoYSB3b3VsZCBpbnZvbHZlIHVucHJlbXVsdGlwbHlpbmcsIHdo
aWNoIGlzCisgICAgLy8gbG9zc3kuCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVs
dGlwbGllZEFscGhhKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1hZ2VE
YXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gaW1hZ2VEYXRhLT5kYXRhKCkt
PmRhdGEoKTsKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVj
a2VkID0gNCAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50V2lkdGgpICog
Q2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRIZWlnaHQpOworICAgIGlmICh0
b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBpbWFnZURh
dGE7CisgICAgaW50IHRvdGFsQnl0ZXMgPSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVHZXQoKTsK
KworICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscywgdG90YWxCeXRlcyk7CisKKyAgICAv
LyBDb252ZXJ0IHRvIFJHQkEuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBp
ICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworCisg
ICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlcGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyNpZiAhVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihH
TF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNj
b3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKKyNlbmRpZgorCisgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpz
d2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4
dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJE
LCBtX3RleHR1cmUsIDApOworICAgIGdsRmx1c2goKTsKKworICAgIGlmIChtX3N0YXRlLmJvdW5k
RkJPICE9IG1fZmJvKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7CisgICAgZWxzZQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOworICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xf
VEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3N0YXRlLmJv
dW5kVGFyZ2V0KEdMX1RFWFRVUkUwKSA9PSBHTF9URVhUVVJFXzJEID8gbV9zdGF0ZS5ib3VuZFRl
eHR1cmUoR0xfVEVYVFVSRTApIDogMCk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9zdGF0ZS5h
Y3RpdmVUZXh0dXJlVW5pdCk7CisgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pCisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAq
cGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVu
dFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Cisg
ICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CisgICAgICAgIHJlc29sdmVN
dWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJl
c3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5k
RkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAg
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVu
dCA9IDQ7CisgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICA6
OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBp
ZiAocGFja0FsaWdubWVudCA+IDQpIHsKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tf
QUxJR05NRU5ULCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsK
KyAgICB9CisKKyAgICByZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KDAsIDAs
IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIHBpeGVscyk7CisKKyAgICBpZiAobXVz
dFJlc3RvcmVQYWNrQWxpZ25tZW50KQorICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19B
TElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgbV9zdGF0ZS5ib3VuZEZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghcGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGggPT0gbV9j
dXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOworICAgIGlmICh3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhl
aWdodCA9IGhlaWdodDsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHZhbGlkYXRl
QXR0cmlidXRlcygpOworCisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29y
KEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcg
c2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOworICAgIAorICAgIGJvb2wgbXVzdFJl
c3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8v
IEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltd
ID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBjbGVhclN0ZW5jaWwg
PSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9U
UlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1h
c2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOworICAgIEdMYml0
ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2
KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xv
ck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRSk7CisKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlm
IChhdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZB
TFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckRlcHRoKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAm
ZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChhdHRycy5zdGVu
Y2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAm
Y2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpn
bEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50
Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0JB
Q0tfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrQmFjaykp
OworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7
CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0JBQ0ssIDB4ZmZmZmZmZmYpOwor
ICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKworICAg
IDo6Z2xDbGVhcihjbGVhck1hc2spOworCisgICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclsw
XSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CisgICAgOjpn
bENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xv
ck1hc2tbM10pOworICAgIGlmIChhdHRycy5kZXB0aCkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbERlcHRoTWFz
ayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6
OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0JBQ0ssIHN0ZW5jaWxNYXNrQmFjayk7CisgICAgfQorCisgICAgaWYgKG11c3RS
ZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7CisKKyAgICA6OmdsRmx1c2goKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tWYXJ5aW5nc1BhY2tpbmco
UGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRT
aGFkZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZl
cnRleFNoYWRlcikpOworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFn
bWVudFNoYWRlcikpOworICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZCh2ZXJ0ZXhTaGFkZXIpLT52YWx1ZTsKKyAgICBjb25zdCBhdXRvJiBmcmFnbWVu
dEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwor
CisgICAgSGFzaE1hcDxTdHJpbmcsIHNoOjpTaGFkZXJWYXJpYWJsZT4gY29tYmluZWRWYXJ5aW5n
czsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA6IHZlcnRleEVudHJ5LnZhcnlp
bmdNYXApIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBzeW1ib2xOYW1lID0gdmVydGV4U3ltYm9s
LmtleTsKKyAgICAgICAgLy8gVGhlIHZhcnlpbmcgbWFwIGluY2x1ZGVzIHZhcmlhYmxlcyBmb3Ig
ZWFjaCBpbmRleCBvZiBhbiBhcnJheSB2YXJpYWJsZS4KKyAgICAgICAgLy8gV2Ugb25seSB3YW50
IGEgc2luZ2xlIHZhcmlhYmxlIHRvIHJlcHJlc2VudCB0aGUgYXJyYXkuCisgICAgICAgIGlmIChz
eW1ib2xOYW1lLmVuZHNXaXRoKCJdIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBEb24ndCBjb3VudCBidWlsdCBpbiB2YXJ5aW5ncy4KKyAgICAgICAgaWYgKHN5bWJvbE5h
bWUgPT0gImdsX0ZyYWdDb29yZCIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciIHx8
IHN5bWJvbE5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgY29uc3QgYXV0byYgZnJhZ21lbnRTeW1ib2wgPSBmcmFnbWVudEVudHJ5LnZhcnlp
bmdNYXAuZmluZChzeW1ib2xOYW1lKTsKKyAgICAgICAgaWYgKGZyYWdtZW50U3ltYm9sICE9IGZy
YWdtZW50RW50cnkudmFyeWluZ01hcC5lbmQoKSkKKyAgICAgICAgICAgIGNvbWJpbmVkVmFyeWlu
Z3MuYWRkKHN5bWJvbE5hbWUsIGZyYWdtZW50U3ltYm9sLT52YWx1ZSk7CisgICAgfQorCisgICAg
c2l6ZV90IG51bVZhcnlpbmdzID0gY29tYmluZWRWYXJ5aW5ncy5zaXplKCk7CisgICAgaWYgKCFu
dW1WYXJ5aW5ncykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzdGQ6OnZlY3RvcjxzaDo6
U2hhZGVyVmFyaWFibGU+IHZhcmlhYmxlczsKKyAgICB2YXJpYWJsZXMucmVzZXJ2ZShjb21iaW5l
ZFZhcnlpbmdzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiB2YXJ5aW5nU3ltYm9sIDog
Y29tYmluZWRWYXJ5aW5ncy52YWx1ZXMoKSkKKyAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayh2
YXJ5aW5nU3ltYm9sKTsKKworICAgIEdDM0RpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSAwOworI2lm
IFVTRShPUEVOR0xfRVMpCisgICAgOjpnbEdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMs
ICZtYXhWYXJ5aW5nVmVjdG9ycyk7CisjZWxzZQorICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdW
ZWN0b3JzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgR0MzRGludCBtYXhWYXJ5aW5nRmxvYXRzID0g
MDsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgJm1heFZh
cnlpbmdGbG9hdHMpOworICAgICAgICBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1heFZhcnlpbmdGbG9h
dHMgLyA0OworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBzaDo6Q2hlY2tWYXJpYWJsZXNXaXRo
aW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJpYWJsZXMpOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm0zRE9iamVj
dCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKHZlcnRleFNoYWRlcikpOwor
ICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyhmcmFnbWVudFNoYWRlcikpOwor
ICAgIGNvbnN0IGF1dG8mIHZlcnRleEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZCh2ZXJ0
ZXhTaGFkZXIpLT52YWx1ZTsKKyAgICBjb25zdCBhdXRvJiBmcmFnbWVudEVudHJ5ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOworCisgICAgSGFzaE1hcDxT
dHJpbmcsIHNoOjpHTGVudW0+IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcDsKKworICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKSB7CisgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUubWFwcGVkTmFtZTsKKyAg
ICAgICAgdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0
cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSwgZW50cnkudmFsdWUucHJlY2lzaW9uKTsKKyAgICB9
CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRyeS51bmlmb3JtTWFw
KSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtYXBwZWROYW1lID0gZW50cnkudmFsdWUu
bWFwcGVkTmFtZTsKKyAgICAgICAgY29uc3QgYXV0byYgdmVydGV4U3ltYm9sID0gdmVydGV4U3lt
Ym9sUHJlY2lzaW9uTWFwLmZpbmQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFt
ZS5sZW5ndGgoKSkpOworICAgICAgICBpZiAodmVydGV4U3ltYm9sICE9IHZlcnRleFN5bWJvbFBy
ZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVlICE9IGVudHJ5LnZhbHVlLnBy
ZWNpc2lvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworSW50U2l6ZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKG1fY3VycmVudFdp
ZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7CisgICAgOjpn
bEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3Vu
dE1hcC5yZW1vdmUocHJvZ3JhbSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFk
ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRp
b24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBT
SEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKKyAgICBMT0coV2ViR0wsICI6OmJp
bmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgp
LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIDo6Z2xCaW5kQXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgaW5kZXgsIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBmYm87Cisg
ICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAg
ZmJvID0gKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6
IG1fZmJvKTsKKyAgICBpZiAoZmJvICE9IG1fc3RhdGUuYm91bmRGQk8pIHsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRG
Qk8gPSBmYm87CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
UmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZm
ZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXJFWFQodGFyZ2V0LCByZW5kZXJidWZmZXIpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fc3RhdGUuc2V0Qm91
bmRUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQsIHRleHR1cmUsIHRhcmdldCk7Cisg
ICAgOjpnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3Jl
ZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb24oR0MzRGVu
dW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRFcXVh
dGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKG1v
ZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
K30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwg
R0MzRGVudW0gZHN0QWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2Up
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVz
YWdlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCdWZmZXJEYXRhKHRh
cmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdD
M0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRh
KTsKK30KKworI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXUEUpCit2b2lkKiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2VzcykK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbE1hcEJ1ZmZlclJh
bmdlKHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7Cit9CisKK0dDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bm1hcEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xVbm1hcEJ1ZmZlcih0YXJn
ZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0
YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cml0ZVRhcmdldCwgR0MzRGludHB0ciBy
ZWFkT2Zmc2V0LCBHQzNEaW50cHRyIHdyaXRlT2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29weUJ1ZmZlclN1YkRhdGEocmVh
ZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RHNpemVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykKK3sKKyNpZiBVU0UoT1BFTkdMX0VTKQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRh
cmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKKyAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQp
OworICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZlNpemUpOwor
ICAgIFVOVVNFRF9QQVJBTShwYXJhbXMpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFN0b3JhZ2UyRCh0
YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0Mz
RGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKQoreworICAgIEFTU0VSVChwcm9n
cmFtKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIDo6Z2xHZXRBY3RpdmVVbmlm
b3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0
YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7Cit9CisjZW5kaWYKKworR0MzRGVudW0gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1c0VYVCh0YXJnZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjbGVhckNvbG9yKEdDM0RjbGFtcGYgciwgR0MzRGNsYW1wZiBnLCBHQzNEY2xhbXBmIGIs
IEdDM0RjbGFtcGYgYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ2xl
YXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbENsZWFyKG1hc2spOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJv
b2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1
ZSB0byB0aGUgd2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKKyAgICAvLyBwb2ludCBh
IGdsb2JhbCBoYXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgorICAgIFNo
QnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IG1fY29tcGlsZXIuZ2V0UmVzb3VyY2Vz
KCk7CisgICAgU2hIYXNoRnVuY3Rpb242NCBwcmV2aW91c0hhc2hGdW5jdGlvbiA9IEFOR0xFUmVz
b3VyY2VzLkhhc2hGdW5jdGlvbjsKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBu
YW1lSGFzaEZvclNoYWRlcjsKKworICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQorICAg
ICAgICBuYW1lSGFzaE1hcEZvclNoYWRlcnMgPSBtYWtlVW5pcXVlPFNoYWRlck5hbWVIYXNoPigp
OworICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRl
cnMuZ2V0KCkpOworICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsK
KworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKworICAgIEFOR0xFUmVzb3VyY2Vz
Lkhhc2hGdW5jdGlvbiA9IHByZXZpb3VzSGFzaEZ1bmN0aW9uOworICAgIG1fY29tcGlsZXIuc2V0
UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JT
aGFkZXIobnVsbHB0cik7CisKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFk
ZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CisgICAgY29uc3QgY2hh
ciogdHJhbnNsYXRlZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsK
KyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5n
Lmxlbmd0aCgpOworCisgICAgTE9HKFdlYkdMLCAiLS0tIGJlZ2luIG9yaWdpbmFsIHNoYWRlciBz
b3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuIiwgZ2V0
U2hhZGVyU291cmNlKHNoYWRlcikudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKFdlYkdMLCAiLS0t
IGJlZ2luIHRyYW5zbGF0ZWQgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIHRyYW5zbGF0
ZWQgc2hhZGVyIHNvdXJjZSAtLS0iLCB0cmFuc2xhdGVkU2hhZGVyUHRyKTsKKworICAgIDo6Z2xT
aGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRT
aGFkZXJMZW5ndGgpOworICAgIAorICAgIDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAg
CisgICAgaW50IGNvbXBpbGVTdGF0dXM7CisgICAgCisgICAgOjpnbEdldFNoYWRlcml2KHNoYWRl
ciwgQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsKKworICAgIFNoYWRlclNvdXJjZU1h
cDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAg
IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICAvLyBQb3B1
bGF0ZSB0aGUgc2hhZGVyIGxvZworICAgIEdMaW50IGxlbmd0aCA9IDA7CisgICAgOjpnbEdldFNo
YWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKworICAgIGlmIChs
ZW5ndGgpIHsKKyAgICAgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICAgICAgVmVjdG9yPEdMY2hh
cj4gaW5mbyhsZW5ndGgpOworICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxl
bmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgICAgICBlbnRyeS5sb2cgPSBnZXRVbm1hbmds
ZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworICAgIH0K
KworICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKKyAgICAgICAgZW50cnkuaXNW
YWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0
b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUuIik7Cisg
ICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGly
ZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBT
aGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3Vs
dC0+dmFsdWU7CisKKyAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50
cnkuc291cmNlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFk
ZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKKyAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hh
ZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKKworICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBk
aXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNl
IC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKKworICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVy
LCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKKworICAgIDo6Z2xD
b21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBpbnQgY29tcGlsZVN0YXR1czsKKworICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7CisK
KyAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFs
aWQgPSB0cnVlOworICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hh
ZGVyIHN1Y2NlZWRlZC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0g
ZmFsc2U7CisgICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Yg
c2hhZGVyIGZhaWxlZC4iKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9
PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0g
bV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNz
YXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIH0K
KyAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0
YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJP
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ3VsbEZhY2UobW9k
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQzNEZW51
bSBmdW5jKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0aEZ1bmMo
ZnVuYyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQzNE
Ym9vbGVhbiBmbGFnKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZXB0
aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUo
cHJvZ3JhbSk7CisgICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGlzYWJsZShjYXApOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVp
bnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNv
dW50KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkp
OworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEVuYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Zmx1c2goKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xGbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
KHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1l
bnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdl
dCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYklt
cGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CisgICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZt
YXhBdHRyaWJ1dGVTaXplKTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNp
emUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJt
aW5hdGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAw
OworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0s
IGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1l
LmRhdGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFt
LCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVM
ZW5ndGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5h
bWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1h
cHBpbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGlu
ZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEo
KSk7CisjZW5kaWYKKworICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5
cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAg
IEdDM0RpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQ
cm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2
ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpBQ1RJVkVfQVRUUklCVVRF
UywgJnN5bWJvbENvdW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9s
Q291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICB9CisgICAgCisgICAgQWN0aXZlU2hhZGVyU3lt
Ym9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOworICAgIEdDM0R1aW50IHJh
d0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJ
bmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJ
bmRleE1hcFtpbmRleF0gOiAtMTsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHBy
b2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhVbmlm
b3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOworCisgICAgVmVjdG9yPEdMY2hhcj4g
bmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5j
bHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAg
IEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZl
VW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6
ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1i
b2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5k
YXRhKCksIG5hbWVMZW5ndGgpKTsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVu
aWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBMT0coV2ViR0wsICJQcm9n
cmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBw
cm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0
ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCisgICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1l
OworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQoreworICAgIEdDM0RpbnQgc3ltYm9sQ291bnQ7CisgICAgYXV0byByZXN1bHQgPSBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKKyAgICAgICAgZ2V0
Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpB
Q1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7CisgICAgICAgIHJlc3VsdCA9IG1fc2hhZGVy
UHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgfQorICAgIAorICAgIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKKyAg
ICBHQzNEdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0
dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVh
bFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKKyAgICAKKyAgICByZXR1cm4gZ2V0QWN0aXZl
VW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmpl
Y3QqIHNoYWRlcnMpCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4
Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKK30KKworc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hl
ZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG5hbWU7CisgICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFk
ZXIobmFtZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ3ZWJnbF8iKTsKKyAgICBhcHBl
bmRVbnNpZ25lZEFzSGV4KG51bWJlciwgYnVpbGRlciwgTG93ZXJjYXNlKTsKKyAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0
LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5
bWJvbE1hcC5maW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBwZWROYW1l
ID0gc3ltYm9sRW50cnktPnZhbHVlLm1hcHBlZE5hbWU7CisgICAgcmV0dXJuIFN0cmluZyhtYXBw
ZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOworfQorCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIEdDM0RzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXJzWzJdID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQs
IHNoYWRlcnMpOworCisgICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFw
KHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFtZSkK
KyAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgLy8g
V2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtp
bmcuCisgICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOwor
ICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0
byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBtYXBwZWROYW1l
ID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3lt
Ym9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAgICAgcmV0
dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJv
bEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1l
KTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFt
ZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xf
VFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0
ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBz
aGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJl
cXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorICAgICAgICBpZiAoIW5h
bWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9
IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgICAgIHNldEN1cnJlbnROYW1lSGFz
aE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworCisgICAgICAgIGF1
dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKKworICAgICAgICBz
ZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICAgICAgbV9wb3Nz
aWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7CisKKyAgICAg
ICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisK
K09wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3lt
Ym9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJv
bFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUubWFwcGVkTmFtZS5jX3N0cigp
KQorICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmln
aW5hbFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJv
bFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDM0RzaXplaSBj
b3VudDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQzNE
c2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1l
ID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBl
LCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBv
cmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFj
aGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3Vs
dCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBt
X2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgeworICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSBy
ZXN1bHQtPnZhbHVlOworICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7
CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxO
YW1lLnZhbHVlKCk7CisgICAgICAgIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFk
ZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAg
ICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52
YWx1ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQ
RV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMg
YXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFk
ZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVp
cmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1
dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAg
ICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5h
bWU7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFt
ZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGZvciAoc2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9
IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJv
bFR5cGUpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBjb25zdCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3Vs
dC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBl
PihzeW1ib2xUeXBlKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5
IDogc3ltYm9sTWFwKSB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnku
dmFsdWUubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3lt
Ym9sRW50cnkua2V5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biBuYW1lOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0
aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3Jh
bSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9HKFdlYkdMLCAi
OjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5k
YXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xHZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitpbnQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3Jh
bSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBt
b3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2Yg
MTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8gYSBwcm9ibGVtIGRy
aXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgor
ICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJP
Ui4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgR0Mz
RGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBOT19FUlJP
UikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOworICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBt
b3ZlZEFuRXJyb3I7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRF
cnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVy
cm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUs
IHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAgIC8vIGdsR2V0RXJy
b3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgor
ICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAgcmV0dXJu
IG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKwor
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVy
KGJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0Vu
YWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJl
dHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7
CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZy
YW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omlz
UHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVy
YnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVy
YnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAo
IXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4
dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1
cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0MzRGZs
b2F0IHdpZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5lV2lk
dGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgR0MzRHNpemVpIGNvdW50ID0gMDsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJz
KHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAg
ICAgICAgbV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRl
cnNbMF0sIHNoYWRlcnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3Rv
ciwgdW5pdHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3Zl
cmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3Vy
Y2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFz
aykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVu
YywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNp
bEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwg
R0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3Rl
bmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBm
YWNlLCBHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdD
M0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVu
Y2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBj
b25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAyLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xV
bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYx
LCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5
KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Lgor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0x
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgdjAsIEdDM0RpbnQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29u
c3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDIuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZv
cm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQg
djEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVu
aWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNv
bnN0IEdDM0RpbnQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlm
b3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50
IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxv
YXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiA0LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5
KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5Lgor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
djApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjFm
KGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJh
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQzNEdWlu
dCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQzNE
dWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGlu
ZGV4LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGlu
ZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0
dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwg
R0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZz
ZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYlBv
aW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxh
dGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXko
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBhcnJheSA9IDA7Cisj
aWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkg
fHwgUExBVEZPUk0oQ09DT0EpCisgICAgOjpnbEdlblZlcnRleEFycmF5cygxLCAmYXJyYXkpOwor
I2VuZGlmCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlm
ICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikpKSB8fCBQTEFURk9STShDT0NPQSkKKyAgICA6OmdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZh
cnJheSk7CisjZW5kaWYKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5
KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisgICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFycmF5KGFy
cmF5KTsKKyNlbmRpZgorICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisgICAgOjpn
bEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhcnJheSk7
CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYo
R0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZh
bHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2
NCogdmFsdWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICAqdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVu
YWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQg
Y3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBF
UyAzLjAuCisgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2ht
ZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIg
d29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIEFTU0VSVChBQ1RJVkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9S
TVMgPT0gcG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUgPSByZXN1
bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hh
ZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9s
Q291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFs
dWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmls
dGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmli
dXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdM
LgorICAgIEdDM0RpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAgZm9yIChH
QzNEaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJ
bmZvIGluZm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7
CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0
ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNhbWUgZm9y
IHVuaWZvcm1zLgorICAgIEdDM0RpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7CisgICAgZm9y
IChHQzNEaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZl
SW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZv
KTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1
YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFsdWUgPSBz
eW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
c1syXSwgR0MzRHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBMT0coV2Vi
R0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3
ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7Cisg
ICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNo
YWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxl
cnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhl
IHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8vIGlzIGNh
dXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVX
YXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlz
IG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0
aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKKyAgICBp
bnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFydCA9IHJl
Z0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAgICBpZiAo
c3RhcnQgPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNzZWRMb2cu
YXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOworICAg
ICAgICBzdGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAgY29uc3Qg
U3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0
aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFt
ZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJHTCwgIkRl
bWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRT
eW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVk
U3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5s
ZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0
RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0wsICJVbm1h
bmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQorCitTdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYo
cHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAg
VmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhw
cm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQzNEc2l6ZWkgY291
bnQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hh
ZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFu
Z2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNh
c2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9UWVBFOgorICAgICAgICA6OmdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENPTVBJTEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKSB7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAqdmFsdWUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKSB7CisgICAgICAgICAgICAqdmFsdWUgPSAwOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgICp2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5s
ZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoK
KyAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfRU5VTSk7CisgICAgfQorfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNo
YWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGNvbnN0IGF1dG8mIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisg
ICAgY29uc3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBp
ZiAoIWVudHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGlu
dCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xF
TkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVu
Z3RoKTsKKyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGlu
Zm8uZGF0YSgpKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVy
LCAwIH07CisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5n
KGluZm8uZGF0YSgpLCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VS
VChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBjb25zdCBhdXRv
JiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3Vs
dCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
KworICAgIHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVl
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJv
Z3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlv
biwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitHQzNEaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOwor
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1h
cHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUp
OworICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8g
JXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAg
cmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCku
ZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0
cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihp
bmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4
QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK0dDM0RzaXplaXB0ciBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEdMdm9p
ZCogcG9pbnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBw
bmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisjaWYgIVVTRShPUEVOR0xfRVMp
CisgICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxG
X0ZMT0FUX0FSQjsKKyNlbmRpZgorCisgICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAg
ICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQg
YXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAg
ICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRCgpLgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNl
IEFMUEhBOgorICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FM
UEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwuCisgICAgICAgICAgICBmb3JtYXQgPSBSRUQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAg
ICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNv
IGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgICAgIGZvcm1hdCA9IFJHOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVs
U3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIg
ZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KKyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cisg
ICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1
cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7
CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZCht
X3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJl
dHVybiBvOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
Z2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7
CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFE
RVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7Cit9CisKK1BsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblRl
eHR1cmVzKDEsICZvKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOworICAg
IHJldHVybiBvOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZm
ZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVm
ZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChmcmFtZWJ1ZmZlciA9
PSBtX3N0YXRlLmJvdW5kRkJPKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZm
ZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKKyAgICAgICAgLy8gb3BlcmF0
aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFN
RUJVRkZFUiwgMCk7CisgICAgfQorICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFt
ZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAg
ICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3N0YXRlLmJvdW5kVGV4dHVy
ZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CisgICAgICAgIHJldHVy
biBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOworICAgIH0pOworICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1v
dmVBbGwodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRo
ZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUg
Y3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCisgICAgLy8gcHJl
c2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBn
ZXQKKyAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFy
ZSBzeW50aGVzaXppbmcuCisgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRl
ZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXJrTGF5ZXJD
b21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CisKKyAgICBmb3Ig
KGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQt
PmRpZENvbXBvc2l0ZSgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsYXll
ckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCgpCit7Cisg
ICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAg
Y2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWRO
b3RpZmljYXRpb24oKQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1f
Y2xpZW50cykpCisgICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNh
dGlvbigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGly
ZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0Fy
cmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJh
eXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAgIGNoZWNrR1BV
U3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50
c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVu
c2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwg
cHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWlu
dCBkaXZpc29yKQoreworICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGlu
ZGV4LCBkaXZpc29yKTsKK30KKworI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVp
bnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFByaW1pdGl2
ZVJlc3RhcnRJbmRleChpbmRleCk7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGRi
Njc4ZGFiNjU2YjE1ZWJkYThkOTkzM2MxMTVlNmQzMThkNGM2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMRVMuY3BwCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENo
YW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKSAmJiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKworI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
CisjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxl
cigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBk
cml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcg
Y2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgorICAgIDo6Z2xGbHVz
aCgpOworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICA6OmdsRmx1c2goKTsKKyAg
ICB9CisKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEpOworCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3sK
KyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCBwaXhlbHMpOworICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQg
KiA0OworICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxz
W2ldLCBwaXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBCR1JBLgorICAgIH0KK30KKworYm9v
bCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgY29uc3QgaW50
IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMDsKKyAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJp
YnV0ZXMuYWxwaGEpIHsKKyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsK
KyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
aW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9S
R0I7CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5j
aWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAvLyBTZWUgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcy4KKyAgICBib29sIHN1cHBvcnRQYWNrZWRE
ZXB0aFN0ZW5jaWxCdWZmZXIgPSAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVw
dGgpICYmIGdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsIik7CisKKyAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCisgICAgYm9vbCBtdXN0UmVzdG9y
ZUZCTyA9IGZhbHNlOworICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7CisgICAg
ICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIH0KKworICAgIEFTU0VSVChtX3RleHR1cmUpOwor
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xG
cmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgICAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKworICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIDo6Z2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyNlbmRpZgorCisgICAgRXh0ZW5zaW9uc0dM
T3BlbkdMRVMmIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zR0xPcGVuR0xFUyY+
KGdldEV4dGVuc2lvbnMoKSk7CisgICAgaWYgKGV4dGVuc2lvbnMuaXNJbWFnaW5hdGlvbigpICYm
IGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50Owor
ICAgICAgICA6OmdsR2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfU0FNUExFU19JTUcsICZt
YXhTYW1wbGVDb3VudCk7IAorICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgs
IG1heFNhbXBsZUNvdW50KTsKKworICAgICAgICBleHRlbnNpb25zLmZyYW1lYnVmZmVyVGV4dHVy
ZTJETXVsdGlzYW1wbGVJTUcoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBH
TF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDAsIHNhbXBsZUNvdW50KTsKKworICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIC8v
IFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgorICAg
ICAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAg
ICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZF
UiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
LmRlcHRoKQorICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgZXh0ZW5zaW9ucy5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xf
UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWln
aHQpOworICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3N0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXR0
cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
cihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICBl
eHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIs
IHNhbXBsZUNvdW50LCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Cisg
ICAgICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2Ug
aGF2ZSBpdC4KKyAgICAgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVy
KSB7CisgICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAg
ICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAg
ICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdM
X0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5z
dGVuY2lsKSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JF
TkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZG
RVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhf
Q09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICA6OmdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQs
IEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVG
RkVSLCAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAg
ICAvLyBGSVhNRTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKwor
ICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JikKK3sK
KyAgICAvLyBGSVhNRTogV2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0LgorICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChH
QzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5n
ZSwgR0MzRGludCogcHJlY2lzaW9uKQoreworICAgIEFTU0VSVChyYW5nZSk7CisgICAgQVNTRVJU
KHByZWNpc2lvbik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0U2hh
ZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCBwcmVj
aXNpb24pOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIGlmICh3
aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRleElt
YWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAg
IHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKwor
ICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0
cmlidXRlcy5hbnRpYWxpYXMgJiYgIWdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfSU1HX211
bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpKSB7CisgICAgICAgIGF0dHJpYnV0ZXMuYW50
aWFsaWFzID0gZmFsc2U7CisgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
OworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShH
QzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7Cit9CisK
KyNpZiAhUExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMJiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1f
ZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMsIGlzR0xF
UzJDb21wbGlhbnQoKSk7CisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENBKQorUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCit7CisgICAgLy8gVGhpcyBpbXBs
ZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0
byB0aGUgSG9zdFdpbmRvdy4KKyAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRp
cmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3Mg
PSB0cnVlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAg
ICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworI2VuZGlmCisgICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7Cit9CisK
K0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqIHNoYXJlZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVz
LCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKKyAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNv
bXBsaWFudCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNMX0NPTVBBVElCSUxJVFlfT1VUUFVU
KQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2
YXRlPih0aGlzLCBkZXN0aW5hdGlvbikpCit7CisgICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250
ZXh0LCAhc2hhcmVkQ29udGV4dCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgCisg
ICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAg
IGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKSB7CisgICAgICAgIC8v
IENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgICAgIDo6Z2xHZW5UZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZSk7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
ICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRl
IGFuIEZCTy4KKyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIAor
ICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9mYm87CisgICAgICAgIGlmICghYXR0cmlidXRl
cy5hbnRpYWxpYXMgJiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkK
KyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAg
ICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICAgICAgOjpnbEdlbkZyYW1l
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIG1f
c3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICAgICAgOjpnbEdlblJl
bmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAg
ICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9u
LgorICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWls
dEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisgICAgCisgICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3Jz
KTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdl
VW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfQ09N
QklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFn
ZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9y
bVZlY3RvcnMpOworICAgIAorICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgor
ICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICAKKyAgICBHQzNEaW50
IHJhbmdlWzJdLCBwcmVjaXNpb247CisgICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpGUkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpISUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7CisgICAgQU5HTEVSZXNvdXJjZXMu
RnJhZ21lbnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lv
bik7CisgICAgCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwor
ICAgIAorI2lmICFVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dS
QU1fUE9JTlRfU0laRSk7CisgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlm
CisgICAgCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9CisKK0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKwor
ICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0
cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbERl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAg
ICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICB9CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6dW5p
cXVlX3B0cjxDb250ZXh0TG9zdENhbGxiYWNrPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPEVycm9y
TWVzc2FnZUNhbGxiYWNrPikKK3sKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9
CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRm
b3JtQ29udGV4dCgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmU7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25z
dAoreworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViR0xMYXll
ci0+cGxhdGZvcm1MYXllcigpOworfQorI2VuZGlmCisKK30KKworI2VuZGlmIC8vIEVOQUJMRShH
UkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWIwMjdjYTc0OGRiNWM4MjA0MzFiN2Y5NDgxODFiOTk5ZDBiMzlhMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMjc5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfR0wpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KworI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKyNpbmNsdWRlIDxzeXMvc3lzY3Rs
Lmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShB
TkdMRSkpCisjaW5jbHVkZSAiU3dpdGNoaW5nR1BVQ2xpZW50LmgiCisjaW5jbHVkZSA8T3BlbkdM
L09wZW5HTC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEhBVkUoQVBQ
TEVfR1JBUEhJQ1NfQ09OVFJPTCkKKworZW51bSB7CisgICAga0FHQ09wZW4sCisgICAga0FHQ0Ns
b3NlCit9OworCitzdGF0aWMgaW9fY29ubmVjdF90IGF0dGFjaFRvQXBwbGVHcmFwaGljc0NvbnRy
b2woKQoreworICAgIG1hY2hfcG9ydF90IG1hc3RlclBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAg
ICAKKyAgICBpZiAoSU9NYXN0ZXJQb3J0KE1BQ0hfUE9SVF9OVUxMLCAmbWFzdGVyUG9ydCkgIT0g
S0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAg
Q0ZEaWN0aW9uYXJ5UmVmIGNsYXNzVG9NYXRjaCA9IElPU2VydmljZU1hdGNoaW5nKCJBcHBsZUdy
YXBoaWNzQ29udHJvbCIpOworICAgIGlmICghY2xhc3NUb01hdGNoKQorICAgICAgICByZXR1cm4g
TUFDSF9QT1JUX05VTEw7CisgICAgCisgICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OworICAg
IGlvX2l0ZXJhdG9yX3QgaXRlcmF0b3I7CisgICAgaWYgKChrZXJuUmVzdWx0ID0gSU9TZXJ2aWNl
R2V0TWF0Y2hpbmdTZXJ2aWNlcyhtYXN0ZXJQb3J0LCBjbGFzc1RvTWF0Y2gsICZpdGVyYXRvcikp
ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOworICAgIAor
ICAgIGlvX3NlcnZpY2VfdCBzZXJ2aWNlT2JqZWN0ID0gSU9JdGVyYXRvck5leHQoaXRlcmF0b3Ip
OworICAgIElPT2JqZWN0UmVsZWFzZShpdGVyYXRvcik7CisgICAgaWYgKCFzZXJ2aWNlT2JqZWN0
KQorICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAgaW9fY29ubmVjdF90
IGRhdGFQb3J0OworICAgIElPT2JqZWN0UmV0YWluKHNlcnZpY2VPYmplY3QpOworICAgIGtlcm5S
ZXN1bHQgPSBJT1NlcnZpY2VPcGVuKHNlcnZpY2VPYmplY3QsIG1hY2hfdGFza19zZWxmKCksIDAs
ICZkYXRhUG9ydCk7CisgICAgSU9PYmplY3RSZWxlYXNlKHNlcnZpY2VPYmplY3QpOworICAgIAor
ICAgIHJldHVybiAoa2VyblJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpID8gZGF0YVBvcnQgOiBNQUNI
X1BPUlRfTlVMTDsKK30KKworc3RhdGljIGJvb2wgaGFzTXV4Q2FwYWJpbGl0eSgpCit7CisgICAg
aW9fY29ubmVjdF90IGRhdGFQb3J0ID0gYXR0YWNoVG9BcHBsZUdyYXBoaWNzQ29udHJvbCgpOwor
ICAgIAorICAgIGlmIChkYXRhUG9ydCA9PSBNQUNIX1BPUlRfTlVMTCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChJT0Nvbm5lY3RDYWxsU2Nh
bGFyTWV0aG9kKGRhdGFQb3J0LCBrQUdDT3BlbiwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0
cikgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIElPQ29ubmVjdENhbGxTY2FsYXJNZXRob2Qo
ZGF0YVBvcnQsIGtBR0NDbG9zZSwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAg
ICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGZhbHNlOwor
ICAgIAorICAgIElPU2VydmljZUNsb3NlKGRhdGFQb3J0KTsKKyAgICAKKyAgICBpZiAocmVzdWx0
KSB7CisgICAgICAgIC8vIFRoaXMgaXMgZGV0ZWN0aW5nIE1hYyBoYXJkd2FyZSB3aXRoIGFuIElu
dGVsIGc1NzUgR1BVLCB3aGljaAorICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIG1ha2UgYXZh
aWxhYmxlIHRvIG11eGluZy4KKyAgICAgICAgLy8gQmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBB
cHBsZSdzIE9wZW5HTCB0ZWFtLCBzdWNoIGRldmljZXMKKyAgICAgICAgLy8gaGF2ZSBmb3VyIG9y
IGZld2VyIHByb2Nlc3NvcnMuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zMDA2MDM3OD4K
KyAgICAgICAgaW50IG5hbWVzWzJdID0geyBDVExfSFcsIEhXX05DUFUgfTsKKyAgICAgICAgaW50
IGNwdUNvdW50OworICAgICAgICBzaXplX3QgY3B1Q291bnRMZW5ndGggPSBzaXplb2YoY3B1Q291
bnQpOworICAgICAgICBzeXNjdGwobmFtZXMsIDIsICZjcHVDb3VudCwgJmNwdUNvdW50TGVuZ3Ro
LCBudWxscHRyLCAwKTsKKyAgICAgICAgcmVzdWx0ID0gY3B1Q291bnQgPiA0OworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMo
KQoreworICAgIHN0YXRpYyBib29sIGNhbk11eCA9IGhhc011eENhcGFiaWxpdHkoKTsKKyAgICBy
ZXR1cm4gY2FuTXV4OworfQorI2VuZGlmIC8vIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkK
KworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI+IHNfbWFuYWdlcjsKKyAgICByZXR1cm4gc19t
YW5hZ2VyOworfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENH
RGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9pZCopCit7CisgICAgTE9HKFdlYkdM
LCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVk
Iik7CisgICAgaWYgKGZsYWdzICYga0NHRGlzcGxheVNldE1vZGVGbGFnKQorICAgICAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250
ZXh0cygpOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2Vy
Ojp1cGRhdGVBbGxDb250ZXh0cygpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5H
TCkgfHwgVVNFKEFOR0xFKSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHQgOiBtX2NvbnRl
eHRzKSB7CisgICAgICAgIGNvbnRleHQtPnVwZGF0ZUNHTENvbnRleHQoKTsKKyAgICAgICAgY29u
dGV4dC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIH0KKyNlbmRp
ZgorfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OnNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIGNvbnN0
IEhvc3RXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHRBbmRX
aW5kb3cgOiBtX2NvbnRleHRXaW5kb3dNYXApIHsKKyAgICAgICAgaWYgKGNvbnRleHRBbmRXaW5k
b3cudmFsdWUgPT0gd2luZG93KSB7CisgICAgICAgICAgICBjb250ZXh0QW5kV2luZG93LmtleS0+
c2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCk7CisgICAgICAgICAgICBMT0coV2ViR0wsICJDaGFu
Z2luZyBjb250ZXh0ICglcCkgdG8gZGlzcGxheSAoJWQpLiIsIGNvbnRleHRBbmRXaW5kb3cua2V5
LCBkaXNwbGF5SUQpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKiBjb250ZXh0LCBIb3N0V2luZG93KiB3aW5kb3cpCit7CisgICAgQVNTRVJUKGNvbnRleHQp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oTUFD
KSAmJiAhRU5BQkxFKFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQorICAgIGlmICgh
bV9jb250ZXh0cy5zaXplKCkpCisgICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0
aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29uZmlndXJlZCwgbnVsbHB0cik7CisjZW5kaWYKKwor
ICAgIEFTU0VSVCghbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSk7CisgICAgbV9jb250ZXh0
cy5hcHBlbmQoY29udGV4dCk7CisgICAgbV9jb250ZXh0V2luZG93TWFwLnNldChjb250ZXh0LCB3
aW5kb3cpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3Zl
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3sKKyAgICBpZiAoIW1f
Y29udGV4dHMuY29udGFpbnMoY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHRzLnJlbW92ZUZpcnN0KGNvbnRleHQpOworICAgIG1fY29udGV4dFdpbmRvd01hcC5yZW1vdmUo
Y29udGV4dCk7CisgICAgcmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShjb250
ZXh0KTsKKyAgICAKKyNpZiBQTEFURk9STShNQUMpICYmICFFTkFCTEUoV0VCUFJPQ0VTU19XSU5E
T1dTRVJWRVJfQkxPQ0tJTkcpCisgICAgaWYgKCFtX2NvbnRleHRzLnNpemUoKSkKKyAgICAgICAg
Q0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29uZmln
dXJlZCwgbnVsbHB0cik7CisjZW5kaWYKK30KKworSG9zdFdpbmRvdyogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyOjpob3N0V2luZG93Rm9yQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0V2luZG93TWFwLmNv
bnRhaW5zKGNvbnRleHQpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0V2luZG93TWFwLmdldChjb250
ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRl
eHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRl
eHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEFTU0VSVChtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKTsK
KyAgICBBU1NFUlQoIW1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29udGFpbnMo
Y29udGV4dCkpOworICAgIAorICAgIExPRyhXZWJHTCwgIlRoaXMgY29udGV4dCAoJXApIHJlcXVp
cmVzIHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iLCBjb250ZXh0KTsKKyAgICBtX2NvbnRleHRz
UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLmFkZChjb250ZXh0KTsKKyAgICAKKyAgICB1cGRhdGVI
aWdoUGVyZm9ybWFuY2VTdGF0ZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlcjo6cmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5jb250
YWlucyhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIExPRyhXZWJHTCwgIlRo
aXMgY29udGV4dCAoJXApIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgaGlnaC1wZXJmb3JtYW5jZSBH
UFUuIiwgY29udGV4dCk7CisgICAgbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5y
ZW1vdmUoY29udGV4dCk7CisgICAgCisgICAgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnVwZGF0ZUhpZ2hQZXJm
b3JtYW5jZVN0YXRlKCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBV
U0UoQU5HTEUpKQorICAgIGlmICghaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uu
c2l6ZSgpKSB7CisgICAgICAgIAorICAgICAgICBpZiAobV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNl
R1BVVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgTE9HKFdlYkdMLCAiQ2FuY2VsIHBl
bmRpbmcgdGltZXIgZm9yIHR1cm5pbmcgb2ZmIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOworICAg
ICAgICAgICAgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuc3RvcCgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFtX3JlcXVlc3RpbmdIaWdoUGVyZm9ybWFuY2UpIHsKKyAgICAg
ICAgICAgIExPRyhXZWJHTCwgIlJlcXVlc3QgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOwor
ICAgICAgICAgICAgbV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNlID0gdHJ1ZTsKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgICAgICAgICBTd2l0Y2hpbmdHUFVDbGllbnQ6OnNpbmdsZXRvbigpLnJl
cXVlc3RIaWdoUGVyZm9ybWFuY2VHUFUoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBEb24ndCBpbW1lZGlhdGVseSB0dXJuIG9mZiB0aGUgaGlnaC1wZXJm
b3JtYW5jZSBHUFUuIFRoZSB1c2VyIG1pZ2h0IGJlCisgICAgICAgIC8vIHN3YXBwaW5nIGJhY2sg
YW5kIGZvcnRoIGJldHdlZW4gdGFicyBvciB3aW5kb3dzLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBj
YXVzZQorICAgICAgICAvLyBjaHVybiBpZiB3ZSBjYW4gYXZvaWQgaXQuCisgICAgICAgIGlmICgh
bV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiU2V0IGEgdGltZXIgdG8gcmVsZWFzZSB0aGUgaGlnaC1wZXJmb3JtYW5j
ZSBHUFUuIik7CisgICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NlIHRoaXMgdmFsdWUgYXMgYSBT
ZXR0aW5nLCB3aGljaCB3b3VsZCByZXF1aXJlIHRoaXMgY2xhc3MKKyAgICAgICAgICAgIC8vIHRv
IHJlZmVyZW5jZSBhIGZyYW1lLCBwYWdlIG9yIGRvY3VtZW50LgorICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IFNlY29uZHMgdGltZVRvS2VlcEhpZ2hQZXJmb3JtYW5jZUdQVUFsaXZlIHsgMTBfcyB9
OworICAgICAgICAgICAgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuc3RhcnRPbmVT
aG90KHRpbWVUb0tlZXBIaWdoUGVyZm9ybWFuY2VHUFVBbGl2ZSk7CisgICAgICAgIH0KKyAgICB9
CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc2Fi
bGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKCkKK3sKKyAgICBpZiAobV9jb250ZXh0c1Jl
cXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cmVxdWVzdGluZ0hpZ2hQZXJmb3JtYW5jZSA9IGZhbHNlOworI2lmIFBMQVRGT1JNKE1BQykgJiYg
KFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCisgICAgU3dpdGNoaW5nR1BVQ2xpZW50OjpzaW5n
bGV0b24oKS5yZWxlYXNlSGlnaFBlcmZvcm1hbmNlR1BVKCk7CisjZW5kaWYKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlY3ljbGVDb250ZXh0SWZOZWNlc3Nhcnko
KQoreworICAgIGlmIChoYXNUb29NYW55Q29udGV4dHMoKSkgeworICAgICAgICBMT0coV2ViR0ws
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIgcmVjeWNsZWQgY29udGV4dCAoJXApLiIs
IG1fY29udGV4dHNbMF0pOworICAgICAgICBtX2NvbnRleHRzWzBdLT5yZWN5Y2xlQ29udGV4dCgp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMzOWE3MzBkZDMwYWIwYzdiMThkM2RmOWJjNWRiY2U2
MzQ2ODYzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaApAQCAtMCwwICsxLDkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2lmIFBM
QVRGT1JNKE1BQykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlv
bi5oPgorI2luY2x1ZGUgPE9wZW5HTC9DR0xUeXBlcy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w7CitjbGFzcyBIb3N0V2luZG93OworCit1c2luZyBQbGF0Zm9y
bURpc3BsYXlJRCA9IHVpbnQzMl90OworCisjaWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9M
KQorV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNMb3dBbmRIaWdoUG93ZXJHUFVzKCk7CisjZW5kaWYK
KworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKKyAgICBmcmllbmQgTmV2
ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyJiBzaGFyZWRNYW5hZ2VyKCk7
CisgICAgCisgICAgdm9pZCBhZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgSG9z
dFdpbmRvdyopOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCopOworCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvd0ZvckNvbnRleHQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGFkZENvbnRleHRSZXF1aXJpbmdI
aWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIHJlbW92
ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
KTsKKyAgICAKKyAgICB2b2lkIHJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKKyAgICBib29s
IGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dHMuc2l6ZSgpID49
IE1heENvbnRleHRzOyB9CisgICAgCisgICAgdm9pZCB1cGRhdGVBbGxDb250ZXh0cygpOworCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgc2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxh
eUlELCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQg
ZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdl
U3VtbWFyeUZsYWdzLCB2b2lkKik7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyKCkKKyAgICAgICAgOiBtX2Rpc2FibGVIaWdoUGVyZm9y
bWFuY2VHUFVUaW1lcigqdGhpcywgJkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6ZGlz
YWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyRmlyZWQpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKKyAgICB2b2lkIGRpc2FibGVIaWdoUGVy
Zm9ybWFuY2VHUFVUaW1lckZpcmVkKCk7CisKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqPiBtX2NvbnRleHRzOworICAgIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
LCBIb3N0V2luZG93Kj4gbV9jb250ZXh0V2luZG93TWFwOworICAgIEhhc2hTZXQ8R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlOworICAg
IAorICAgIFRpbWVyIG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyOworICAgIGJvb2wg
bV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNlIHsgZmFsc2UgfTsKK307CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y4
MmFiMTRkNDhlNmQ3ZDQ0ZTZjMmE2ZDEyMGUxOWU4NTk0ZDMzMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTFByaXZhdGUuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dM
KQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5oIgorCisjaW5jbHVk
ZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworCisjaWYg
VVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VT
KQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2Vs
c2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMUHJpdmF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRlc3RpbmF0
aW9uKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246Ok9m
ZnNjcmVlbjoKKyAgICAgICAgbV9nbENvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVl
bkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0
aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3c6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
UHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSgpID0gZGVmYXVsdDsKKwor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgp
Cit7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8gbV9nbENvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpIDogZmFsc2U7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xQcml2YXRlOjpwbGF0Zm9ybUNvbnRleHQoKQoreworICAgIHJldHVybiBt
X2dsQ29udGV4dCA/IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IEdMQ29udGV4dDo6
Y3VycmVudCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdhZmY0Njc2MTJk
MTA1Y2M2M2U2MzI2OWIzMmZjZGQ4YzJlMWE3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFBy
aXZhdGUuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAq
ICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwVGV4dHVyZUdMOwor
CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0
aW5hdGlvbik7CisgICAgfkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSgpOworICAgIGJv
b2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBw
bGF0Zm9ybUNvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250
ZXh0PiBtX2dsQ29udGV4dDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5n
LmNwcAppbmRleCBiY2Q3MjQ2OGUwNWM3MjRiMzBmZTVlZjRkMWMyMzliYjdhNTdmNGU5Li42ODFi
OThhMGY5OTNjZTM3MjhiOTgzMjNkNTA2MGQwZjI4YmI0NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFy
eU9wZW5HTFNldHRpbmcuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwg
VVNFKE9QRU5HTF9FUykpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0Uo
T1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKICNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0
aW5nLmgiCiAKICNpZiBVU0UoTElCRVBPWFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcu
aAppbmRleCAzYjg1NDMxMjk2YzM4MWFkNGI1ZDE0YWVlZTE2MmM5ODJlNTA1ZTYyLi5mMzk0M2E5
NjlmOWYzZWE1YTRlNmVmYTNiNmM2ZTY4NmYwZGRiNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVu
R0xTZXR0aW5nLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMz
RC5oIgogCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIChVU0UoT1BFTkdMKSB8
fCBVU0UoT1BFTkdMX0VTKSkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVT
RShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9CaXRtYXBUZXh0dXJlR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKaW5kZXggNjQyYmYwZTk2MDEwOWJkMzQ3NjM3Yzhk
YzBmZmY0Mzg4NDRkNjFkMC4uODI2ZDJkYTViZGVlYjY3OTVmZDA3ZjE1MTQyNDE4MGM4YWI1ZDBj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0Jp
dG1hcFRleHR1cmVHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4
dDNEVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYWEyZTA2NGUyMDBhZGEzN2U0MzNiNWNiNjQ0NGRiMzEzYzVhZTU5NC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFw
cGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2luY2x1ZGUgPEFOR0xFL1NoYWRl
ckxhbmcuaD4KLQotI2lmIFVTRShBTkdMRSkKLSNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAK
LS8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkg
cG9pbnRzIGZvciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNkZWZp
bmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBHTGVnbENv
bnRleHQ7Ci0jaW5jbHVkZSA8QU5HTEUvZWdsLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+
Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlf
cG9pbnRzX2VnbC5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRv
Z2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4K
LSNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUu
aD4KLSNpZiBkZWZpbmVkKEFib3ZlKQotI3VuZGVmIEFib3ZlCi0jZW5kaWYKLSNpZiBkZWZpbmVk
KEJlbG93KQotI3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKE5vbmUpCi0jdW5kZWYg
Tm9uZQotI2VuZGlmCi0jZWxpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4K
LSNlbGlmICFVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYK
LQotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgotI2VsaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgotI2Vsc2UK
LSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNlbmRpZgotCi0jaWYgVVNFKE5JQ09T
SUEpCi0jaWYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIk5pY29zaWFHQzNEQU5HTEVMYXllci5oIgot
I2Vsc2UKLSNpbmNsdWRlICJOaWNvc2lhR0MzRExheWVyLmgiCi0jZW5kaWYKLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgTWF4QWN0aXZlQ29udGV4
dHMgPSAxNjsKLXN0YXRpYyBEZXF1ZTxHcmFwaGljc0NvbnRleHQzRCosIE1heEFjdGl2ZUNvbnRl
eHRzPiYgYWN0aXZlQ29udGV4dHMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1
ZTxHcmFwaGljc0NvbnRleHQzRCosIE1heEFjdGl2ZUNvbnRleHRzPj4gc19hY3RpdmVDb250ZXh0
czsKLSAgICByZXR1cm4gc19hY3RpdmVDb250ZXh0czsKLX0KLQotUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmli
dXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQz
RDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlv
biBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9z
dFdpbmRvdy4KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5VG9I
b3N0V2luZG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAg
aWYgKCFpbml0aWFsaXplZCkgewotI2lmICFVU0UoT1BFTkdMX0VTKSAmJiAhVVNFKExJQkVQT1hZ
KSAmJiAhVVNFKEFOR0xFKQotICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1z
KCk7Ci0jZW5kaWYKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAo
IXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgY29udGV4dHMg
PSBhY3RpdmVDb250ZXh0cygpOwotICAgIGlmIChjb250ZXh0cy5zaXplKCkgPj0gTWF4QWN0aXZl
Q29udGV4dHMpCi0gICAgICAgIGNvbnRleHRzLmZpcnN0KCktPnJlY3ljbGVDb250ZXh0KCk7Ci0K
LSAgICAvLyBDYWxsaW5nIHJlY3ljbGVDb250ZXh0KCkgYWJvdmUgc2hvdWxkIGhhdmUgbGVhZCB0
byB0aGUgZ3JhcGhpY3MgY29udGV4dCBiZWluZwotICAgIC8vIGRlc3Ryb3llZCBhbmQgdGh1cyBy
ZW1vdmVkIGZyb20gdGhlIGFjdGl2ZSBjb250ZXh0cyBsaXN0LgotICAgIGlmIChjb250ZXh0cy5z
aXplKCkgPj0gTWF4QWN0aXZlQ29udGV4dHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgLy8gQ3JlYXRlIHRoZSBHcmFwaGljc0NvbnRleHQzRCBvYmplY3QgZmlyc3QgaW4gb3JkZXIg
dG8gZXN0YWJsaXN0IGEgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgdGhyZWFkLgotICAgIGF1dG8g
Y29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0
V2luZG93LCBkZXN0aW5hdGlvbikpOwotCi0jaWYgVVNFKExJQkVQT1hZKSAmJiBVU0UoT1BFTkdM
X0VTKQotICAgIC8vIEJhaWwgaWYgR0xFUzMgd2FzIHJlcXVlc3RlZCBidXQgY2Fubm90IGJlIHBy
b3ZpZGVkLgotICAgIGlmIChhdHRyaWJ1dGVzLmlzV2ViR0wyICYmICFlcG94eV9pc19kZXNrdG9w
X2dsKCkgJiYgZXBveHlfZ2xfdmVyc2lvbigpIDwgMzApCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotI2VuZGlmCi0KLSAgICBjb250ZXh0cy5hcHBlbmQoY29udGV4dC5nZXQoKSk7Ci0gICAgcmV0
dXJuIGNvbnRleHQ7Ci19Ci0KLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhv
c3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdy
YXBoaWNzQ29udGV4dDNEKiBzaGFyZWRDb250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0M0RC
YXNlKGF0dHJpYnV0ZXMsIGRlc3RpbmF0aW9uLCBzaGFyZWRDb250ZXh0KQotewotICAgIEFTU0VS
VF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwotI2lmIFVTRShOSUNPU0lB
KQotICAgIG1fbmljb3NpYUxheWVyID0gV1RGOjptYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RBTkdM
RUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOwotI2Vsc2UKLSAgICBtX3RleG1hcExheWVyID0g
V1RGOjptYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRl
c3RpbmF0aW9uKTsKLSNlbmRpZgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgdmFs
aWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIGlmIChk
ZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKSB7Ci0gICAgICAgIC8vIENyZWF0
ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCi0gICAgICAgIGdsOjpHZW5UZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FOR0xFLCBtX3RleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAg
ICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
TkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6
QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOwotCi0gICAgICAgIC8v
IENyZWF0ZSBhbiBGQk8uCi0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsK
LSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwg
Jm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQU5HTEUsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICBnbDo6VGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAg
ICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOwotCi0gICAgICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0
dXJlKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xF
LCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwg
R0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RB
TkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAg
ICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7Ci0jZW5k
aWYKLQotICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgICAgIGlmIChh
dHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAgIG1fc3RhdGUuYm91
bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6Okdl
blJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICAg
ICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICBnbDo6R2VuUmVuZGVy
YnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5z
dGVuY2lsKQotICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5j
aWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8
IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdsOjpD
bGVhckNvbG9yKDAsIDAsIDAsIDApOwotfQotI2Vsc2UKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9z
dFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3Jh
cGhpY3NDb250ZXh0M0QqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHQzREJh
c2UoYXR0cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCi17Ci0gICAgQVNTRVJU
X1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7Ci0jaWYgVVNFKE5JQ09TSUEp
Ci0gICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RMYXllcj4oKnRo
aXMsIGRlc3RpbmF0aW9uKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOwotI2Vu
ZGlmCi0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZhbGlkYXRlQXR0cmlidXRl
cygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBo
YXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCi0KLSAgICBpZiAoZGVzdGluYXRpb24gPT0g
RGVzdGluYXRpb246Ok9mZnNjcmVlbikgewotICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRv
IHJlbmRlciBpbnRvLgotICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0g
ICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgICAg
ICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKLQotICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgotICAgICAgICA6OmdsR2VuRnJh
bWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIG1fZmJvKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAg
ICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICAgICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAg
ICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2lu
dGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICA6
OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwot
Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSNlbmRpZgotCi0g
ICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICAgICAgaWYgKGF0dHJpYnV0
ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211
bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9
IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAm
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKLSNpZiBVU0UoT1BFTkdMX0VTKQot
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2xHZW5S
ZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0
ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2ls
IHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJz
KDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiAhVVNF
KE9QRU5HTF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUp
OwotCi0gICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0g
ICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJz
aW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhh
dCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lv
biAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xF
V2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9t
IHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5l
ZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRl
ZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJl
TWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRp
b246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHQzRCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdp
bGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDM0Rp
bnQgY3VycmVudFZBTyA9IDA7Ci0gICAgICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfQVJSQVlfQklORElORywgJmN1cnJlbnRWQU8pOwotICAgICAgICBpZiAoIWN1cnJl
bnRWQU8pIHsKLSAgICAgICAgICAgIG1fdmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKLSAgICAg
ICAgICAgIGJpbmRWZXJ0ZXhBcnJheShtX3Zhbyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBGb3IgbG93ZXIgdmVyc2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBv
dXRwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xF
V2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09NUEFUSUJJTElUWV9PVVRQVVQpOwotCi0gICAgICAgIC8v
IEdMX1BPSU5UX1NQUklURSBpcyBuZWVkZWQgaW4gbG93ZXIgdmVyc2lvbnMuCi0gICAgICAgIDo6
Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKLSAgICB9Ci0jZWxzZQotICAgIC8vIEFkanVzdCB0
aGUgc2hhZGVyIHNwZWNpZmljYXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4g
V2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1ZXN0ZWQuCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2Vi
S2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBhdHRyaWJ1dGVzLmlzV2ViR0wyID8gU0hfV0VCR0wy
X1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKLSNlbmRpZgotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6
YXRpb24uCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIHNoOjpJ
bml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZlcnRleEF0dHJpYnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdf
VkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKLSAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAm
QU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
JkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2Vz
Lk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZv
ciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0g
ICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwotICAgIGdldFNoYWRlclByZWNpc2lvbkZv
cm1hdChHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHQz
RDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZy
YWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24p
OwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAg
OjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkK
LUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0
dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAg
aWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
bV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAg
ICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkK
LSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0
cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChtX2RlcHRo
QnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVm
ZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgIGlm
IChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAg
Z2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2VuZGlmCi0K
LSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0ZXhBcnJh
eShtX3Zhbyk7Ci0jZW5kaWYKLQotICAgIGF1dG8qIGFjdGl2ZUNvbnRleHQgPSBhY3RpdmVDb250
ZXh0cygpLnRha2VMYXN0KFt0aGlzXShhdXRvKiBpdCkgewotICAgICAgICByZXR1cm4gaXQgPT0g
dGhpczsKLSAgICB9KTsKLSAgICBBU1NFUlRfVU5VU0VEKGFjdGl2ZUNvbnRleHQsICEhYWN0aXZl
Q29udGV4dCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAg
ICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgOjpn
bERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAg
YXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1
dGVzLmFudGlhbGlhcykgewotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8
fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMo
MSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJp
YnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0jaWYgVVNFKE9QRU5HTF9FUykK
LSAgICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwotCi0gICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIp
Ci0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7
Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAg
OjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9
Ci0gICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLSAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRl
VGV4dHVyZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSAgICBpZiAobV92YW8pCi0gICAg
ICAgIGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKLSNlbmRpZgotCi0gICAgYXV0byogYWN0aXZl
Q29udGV4dCA9IGFjdGl2ZUNvbnRleHRzKCkudGFrZUxhc3QoW3RoaXNdKGF1dG8qIGl0KSB7Ci0g
ICAgICAgIHJldHVybiBpdCA9PSB0aGlzOwotICAgIH0pOwotICAgIEFTU0VSVF9VTlVTRUQoYWN0
aXZlQ29udGV4dCwgISFhY3RpdmVDb250ZXh0KTsKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNF
KE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKCkK
LXsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Ci17Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
cmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNlbHNlCi0gICAgcmV0
dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29udGV4dCgpOwotI2VuZGlmCi19Ci0KLVBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fdGV4dHVyZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4g
dHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICByZXR1cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKLSNl
bHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXIuZ2V0KCk7Ci0jZW5kaWYKLX0KLQotI2lmIFBM
QVRGT1JNKEdUSykgJiYgIVVTRShBTkdMRSkKLUV4dGVuc2lvbnMzRCYgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25zKSB7Ci0jaWYgVVNF
KE9QRU5HTF9FUykKLSAgICAgICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24g
R0xFUzIuCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3Bl
bkdMRVM+KHRoaXMsICBmYWxzZSk7Ci0jZWxzZQotICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIg
b24gd2UgdXNlIHRoZSBDb3JlIHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0
cmluZ2kuCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3Bl
bkdMPih0aGlzLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7Ci0jZW5k
aWYKLSAgICB9Ci0gICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Ci19Ci0jZW5kaWYKLQotI2lmIChQ
TEFURk9STShHVEspICYmICFVU0UoQU5HTEUpKSB8fCBQTEFURk9STShXSU4pCi12b2lkKiBHcmFw
aGljc0NvbnRleHQzRDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0Rz
aXplaXB0ciwgR0MzRGJpdGZpZWxkKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCi17Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlCdWZmZXJTdWJEYXRh
KEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRy
KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdD
M0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
QzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UyRChHQzNEZW51bSwgR0MzRHNp
emVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UzRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwg
R0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgVmVjdG9y
PEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0b3I8R0MzRGludD4mKQotewotfQotI2VuZGlmCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05U
RVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0Nv
bnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmYTcyZTBjYWNiM2IzNzA2OTU5
NWRkZThkMmE1MGQwMDUxOThiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cApAQCAtMCwwICsxLDUyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckdDM0RQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgor
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
CisjaWYgVVNFKEFOR0xFKQorI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tpcCB0
aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9y
IG5vdy4KKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdM
RV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNp
bmNsdWRlIDxBTkdMRS9lZ2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNpbmNsdWRl
IDxBTkdMRS9lZ2xleHRfYW5nbGUuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWds
Lmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KKyNp
bmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2luY2x1ZGUg
PEFOR0xFL2dsMmV4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorI2lmIGRl
ZmluZWQoQWJvdmUpCisjdW5kZWYgQWJvdmUKKyNlbmRpZgorI2lmIGRlZmluZWQoQmVsb3cpCisj
dW5kZWYgQmVsb3cKKyNlbmRpZgorI2lmIGRlZmluZWQoTm9uZSkKKyN1bmRlZiBOb25lCisjZW5k
aWYKKyNlbGlmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxlcG94eS9nbC5oPgorI2VsaWYgIVVT
RShPUEVOR0xfRVMpCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaWYgVVNF
KEFOR0xFKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjZWxpZiBVU0UoT1BFTkdM
X0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTklDT1NJQSkKKyNpZiBV
U0UoQU5HTEUpCisjaW5jbHVkZSAiTmljb3NpYUdDM0RBTkdMRUxheWVyLmgiCisjZWxzZQorI2lu
Y2x1ZGUgIk5pY29zaWFHQzNETGF5ZXIuaCIKKyNlbmRpZgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBNYXhBY3RpdmVDb250ZXh0cyA9IDE2Owor
c3RhdGljIERlcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgTWF4QWN0aXZlQ29udGV4dHM+
JiBhY3RpdmVDb250ZXh0cygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgTWF4QWN0aXZlQ29udGV4dHM+PiBzX2FjdGl2ZUNvbnRl
eHRzOworICAgIHJldHVybiBzX2FjdGl2ZUNvbnRleHRzOworfQorCitSZWZQdHI8R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sKKyAgICAv
LyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5n
IGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgorICAgIGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0
aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBz
dWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisjaWYgIVVTRShPUEVOR0xf
RVMpICYmICFVU0UoTElCRVBPWFkpICYmICFVU0UoQU5HTEUpCisgICAgICAgIHN1Y2Nlc3MgPSBp
bml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyNlbmRpZgorICAgICAgICBpbml0aWFsaXplZCA9IHRy
dWU7CisgICAgfQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvJiBjb250ZXh0cyA9IGFjdGl2ZUNvbnRleHRzKCk7CisgICAgaWYgKGNvbnRleHRz
LnNpemUoKSA+PSBNYXhBY3RpdmVDb250ZXh0cykKKyAgICAgICAgY29udGV4dHMuZmlyc3QoKS0+
cmVjeWNsZUNvbnRleHQoKTsKKworICAgIC8vIENhbGxpbmcgcmVjeWNsZUNvbnRleHQoKSBhYm92
ZSBzaG91bGQgaGF2ZSBsZWFkIHRvIHRoZSBncmFwaGljcyBjb250ZXh0IGJlaW5nCisgICAgLy8g
ZGVzdHJveWVkIGFuZCB0aHVzIHJlbW92ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbnRleHRzIGxpc3Qu
CisgICAgaWYgKGNvbnRleHRzLnNpemUoKSA+PSBNYXhBY3RpdmVDb250ZXh0cykKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBDcmVhdGUgdGhlIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMIG9iamVjdCBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc3QgYSBjdXJyZW50IGNvbnRleHQg
b24gdGhpcyB0aHJlYWQuCisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIGRlc3RpbmF0aW9uKSk7CisK
KyNpZiBVU0UoTElCRVBPWFkpICYmIFVTRShPUEVOR0xfRVMpCisgICAgLy8gQmFpbCBpZiBHTEVT
MyB3YXMgcmVxdWVzdGVkIGJ1dCBjYW5ub3QgYmUgcHJvdmlkZWQuCisgICAgaWYgKGF0dHJpYnV0
ZXMuaXNXZWJHTDIgJiYgIWVwb3h5X2lzX2Rlc2t0b3BfZ2woKSAmJiBlcG94eV9nbF92ZXJzaW9u
KCkgPCAzMCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIGNvbnRleHRz
LmFwcGVuZChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gY29udGV4dDsKK30KKworI2lmIFVT
RShBTkdMRSkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChh
dHRyaWJ1dGVzLCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKHNoYXJlZENvbnRleHQsICFzaGFyZWRDb250ZXh0KTsKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICBtX25pY29zaWFMYXllciA9IFdURjo6bWFrZVVuaXF1ZTxOaWNvc2lhOjpHQzNEQU5HTEVMYXll
cj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXllciA9IFdURjo6
bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI+KCp0aGlzLCBkZXN0aW5h
dGlvbik7CisjZW5kaWYKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZhbGlkYXRl
QXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBU
aGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBpZiAoZGVzdGlu
YXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVhdGUgYSB0
ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fdGV4
dHVyZSk7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdM
RSwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAg
Z2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OkJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwKTsKKworICAgICAgICAvLyBDcmVh
dGUgYW4gRkJPLgorICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAg
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICAgICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FOR0xFLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5H
TEVfQU5HTEUsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6
OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKKworICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV9p
bnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9U
T19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgICAgICBn
bDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOworI2VuZGlmCisK
KyAgICAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgICAgICBpZiAoYXR0cmli
dXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICBtX3N0YXRlLmJvdW5kRkJP
ID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5k
ZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1f
c3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZl
cnMoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCkKKyAgICAgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVm
ZmVyKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbDo6Q2xlYXJD
b2xvcigwLCAwLCAwLCAwKTsKK30KKyNlbHNlCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVz
dGluYXRpb24sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0KQorICAgIDog
R3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7Cisj
aWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6
OkdDM0RMYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXll
ciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVz
dGluYXRpb24pOworI2VuZGlmCisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZh
bGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBpZiAo
ZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVh
dGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmUpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAg
ICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKyAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRl
eHR1cmUpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICAgICAgOjpnbEdlblRl
eHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgICAgICA6OmdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICAgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAg
OjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NM
QU1QX1RPX0VER0UpOworCisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKKyNlbmRpZgorCisgICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsR2VuRnJhbWVi
dWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgbV9z
dGF0ZS5ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgICAgICA6OmdsR2VuUmVu
ZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgICAg
ICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisg
ICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsK
KyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisg
ICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgZ2xHZW5S
ZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAg
ICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
IH0KKyAgICB9CisKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRF
WF9QUk9HUkFNX1BPSU5UX1NJWkUpOworCisgICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52
ZXJzaW9uKCkgPj0gMzIwKSB7CisgICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7CisK
KyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHBy
b2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAg
ICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4KKyAgICAg
ICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVU
KTsKKworICAgICAgICAvLyBGcm9tIHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENv
cmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KKyAgICAgICAgLy8g
QSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcg
R0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcworICAgICAg
ICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0
aGF0IGNvbnRleHQuCisgICAgICAgIEdDM0RpbnQgY3VycmVudFZBTyA9IDA7CisgICAgICAgIGdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORywg
JmN1cnJlbnRWQU8pOworICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsKKyAgICAgICAgICAgIG1f
dmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSht
X3Zhbyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgbG93ZXIgdmVy
c2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRlciBjb21w
aWxlci4KKyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09N
UEFUSUJJTElUWV9PVVRQVVQpOworCisgICAgICAgIC8vIEdMX1BPSU5UX1NQUklURSBpcyBuZWVk
ZWQgaW4gbG93ZXIgdmVyc2lvbnMuCisgICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRF
KTsKKyAgICB9CisjZWxzZQorICAgIC8vIEFkanVzdCB0aGUgc2hhZGVyIHNwZWNpZmljYXRpb24g
ZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1
ZXN0ZWQuCisgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVU
LCBhdHRyaWJ1dGVzLmlzV2ViR0wyID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsK
KyNlbmRpZgorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVz
b3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5H
TEVSZXNvdXJjZXMpOworCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwor
ICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZBUllJTkdfVkVDVE9S
UywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAm
QU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9S
UywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8g
QWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJh
d0J1ZmZlcnMgPSAxOworCisgICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOworICAgIGdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRf
U0hBREVSLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVj
aXNpb24pOworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5n
ZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5zZXRSZXNv
dXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
Cit9CisjZW5kaWYKKworI2lmIFVTRShBTkdMRSkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0
dXJlKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRv
clRleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4
dHVyZSk7CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVz
KCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkRlbGV0
ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlm
IChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGds
OjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkg
eworI2lmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQorICAgICAg
ICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKworICAgICAg
ICBpZiAobV9zdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJz
KDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNp
bEJ1ZmZlcikKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1f
ZmJvKTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkRlbGV0ZVRleHR1
cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworI2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8p
CisgICAgaWYgKG1fdmFvKQorICAgICAgICBkZWxldGVWZXJ0ZXhBcnJheShtX3Zhbyk7CisjZW5k
aWYKKworICAgIGF1dG8qIGFjdGl2ZUNvbnRleHQgPSBhY3RpdmVDb250ZXh0cygpLnRha2VMYXN0
KFt0aGlzXShhdXRvKiBpdCkgeworICAgICAgICByZXR1cm4gaXQgPT0gdGhpczsKKyAgICB9KTsK
KyAgICBBU1NFUlRfVU5VU0VEKGFjdGl2ZUNvbnRleHQsICEhYWN0aXZlQ29udGV4dCk7Cit9Cisj
ZWxzZQorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAg
ICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERl
bGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0
byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVz
LmFudGlhbGlhcykgeworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAg
ICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fZGVwdGhCdWZmZXIpOworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisg
ICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7Cisj
ZW5kaWYKKyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9Cisg
ICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4
dHVyZSk7CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAg
IGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKKyNlbmRpZgorCisgICAgYXV0byogYWN0aXZlQ29u
dGV4dCA9IGFjdGl2ZUNvbnRleHRzKCkudGFrZUxhc3QoW3RoaXNdKGF1dG8qIGl0KSB7CisgICAg
ICAgIHJldHVybiBpdCA9PSB0aGlzOworICAgIH0pOworICAgIEFTU0VSVF9VTlVTRUQoYWN0aXZl
Q29udGV4dCwgISFhY3RpdmVDb250ZXh0KTsKK30KKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYg
VVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BV
U3RhdHVzKCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0Cit7CisjaWYgVVNF
KE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29udGV4dCgpOworI2Vu
ZGlmCit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRm
b3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dHVyZTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisjaWYg
VVNFKE9QRU5HTF9FUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gJm1f
bmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFw
TGF5ZXIuZ2V0KCk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShBTkdM
RSkKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEV4dGVuc2lvbnMo
KQoreworICAgIGlmICghbV9leHRlbnNpb25zKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAg
ICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24gR0xFUzIuCisgICAgICAgIG1f
ZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMsICBmYWxz
ZSk7CisjZWxzZQorICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIgb24gd2UgdXNlIHRoZSBDb3Jl
IHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0cmluZ2kuCisgICAgICAgIG1f
ZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMPih0aGlzLCBHTENvbnRl
eHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0
dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKworI2lmIChQTEFURk9STShHVEspICYmICFV
U0UoQU5HTEUpKSB8fCBQTEFURk9STShXSU4pCit2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0ciwgR0Mz
RGJpdGZpZWxkKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitHQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRh
KEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRy
KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1h
dGl2KEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCit7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNE
c2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uy
RChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQzNEZW51
bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkK
K3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMo
UGxhdGZvcm0zRE9iamVjdCwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0
b3I8R0MzRGludD4mKQoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCmlu
ZGV4IDg5OGVlMzQzNTUyYTYzZDAzZDIxNDQyZmZhYzlhOTQ4YWQ5NWQzYWQuLjBjMmEwMTk2MDU3
YjBhODA4M2Q0MzFkNmFlNmViYmY1MDI3ZjllNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgiCiAK
LSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAm
JiAhVVNFKE5JQ09TSUEpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShU
RVhUVVJFX01BUFBFUikgJiYgIVVTRShOSUNPU0lBKQogCiAjaW5jbHVkZSAiQml0bWFwVGV4dHVy
ZUdMLmgiCiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCkBAIC0zMCwxNCArMzAsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OlRleHR1
cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQorVGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5h
dGlvbiBkZXN0aW5hdGlvbikKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogewogICAgIHN3aXRj
aCAoZGVzdGluYXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlv
bjo6T2Zmc2NyZWVuOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0
aW9uOjpPZmZzY3JlZW46CiAgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVP
ZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVz
dGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYxLDcgKzYxLDcg
QEAgYm9vbCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVu
dCgpCiAgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAot
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6
OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIFRleHR1
cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9nbENvbnRleHQpOwogICAgIHJldHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRm
b3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmUKICAg
ICAgICAgICAgIG1fY29udGV4dC5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgICAgICBtX2Nv
bnRleHQucmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0Lm1f
c3RhdGUuYm91bmRGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0Lm1fc3RhdGUuYm91bmRGQk8pOwog
CiAgICAgICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQgJiYgcHJldmlvdXNBY3RpdmVDb250
ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQogICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEyMCw0ICsxMjAsNCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciYgdGV4dHVyZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2VuZGlmIC8v
IEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdDM0RQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgKaW5kZXggYjhlODFmMTFi
MjE4YzA0ZTA2NTQ0MWZiYjY5Y2RhNGY2OWUzZjVkZi4uMGNmNjBmNTczZDhiZjZlZTg3MmE5MjQz
NmQwZjUyOWY5MDdkOTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRm
b3JtTGF5ZXIuaApAQCAtMTksOSArMTksOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJM
RShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoTklD
T1NJQSkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCkBAIC0zNCwxMSAr
MzQsMTEgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRl
eHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0Mz
RFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0M0QmLCBHcmFwaGljc0NvbnRleHQzRDo6RGVz
dGluYXRpb24pOworICAgIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCYsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKCk7CiAKICAgICBib29s
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxh
dGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0
Zm9ybUNvbnRleHQoKSBjb25zdDsKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBv
dmVycmlkZTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0g
ICAgR3JhcGhpY3NDb250ZXh0M0QmIG1fY29udGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYgbV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IG1fZ2xDb250
ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNTgsNCArNTgsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2VuZGlmIC8vIEVOQUJM
RShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCmluZGV4IDYxNjM1ZTUyYTY3Njk1ODM0MzNlZDBlMzAzMjI5Zjg1YzFlYzA1ZWMu
LjZiNDc5MjU3YTYxODlmOTI1MzYzMDc0NjUzNTU3ODM5Y2FhNGM1OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyR0wuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wu
aCIKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlUG9vbC5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHTENvbnRleHQuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHQzRERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHQzRERpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWIzOTZhNDlmOTMxYTE0ODJhYjgyYmY5MTNlYmZlZWRkYmE2ZDUwZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0REaXJlY3QyRC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShESVJFQ1Qy
RCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRy
YWN0b3IoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFj
dG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlKQotewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNh
bnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoIWltYWdlUGl4
ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0Uo
RElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2JjZmJmMjkxNjc2MjUzYWJmNTU2ZjdkMDMxY2E4YjYzZTgzYzlhMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRH
TERpcmVjdDJELmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
ICYmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdl
RXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQoreworICAgIGlmICgh
bV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
YWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5
KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKaW5kZXggZjFhMTY0ZDE3MzA1ZWRmMWZlNmVkYmExZDhjOTg0MDMz
YzhkNTRhMC4uYmE5NDE4YzUwYzc5ZjAzODk1ZTM3YmM3YjM3N2ZhYTkzYjU1NzNiNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzAyLDcgKzMwMiw3IEBACiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNjcxYWRhYTg1NTE2
ZGUzMmMzMzk2Y2U4OWMwYmVhNzAyNDk2ZTBjLi5mZjUyZDI1MzZmNTY1ZmEyOTViZWI2MjAxMjY4
YTBmMzMzMTcwZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTIzNyw3ICsyMzcsNyBAQCBzZXQo
UGx1Z2luUHJvY2Vzc19MSUJSQVJJRVMKICAgICBXZWJLaXQKICkKIAotaWYgKEVOQUJMRV9HUkFQ
SElDU19DT05URVhUXzNEKQoraWYgKEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMKQogICAgICMg
Rm9yIHBsYXRmb3JtcyB0aGF0IHdhbnQgdG8gdXNlIHN5c3RlbS1wcm92aWRlZCBPcGVuR0wgKEVT
KSAvIEVHTCBoZWFkZXJzLAogICAgICMgdGhlc2UgaW5jbHVkZSBkaXJlY3RvcmllcywgbGlicmFy
aWVzIG9yIGRlZmluaXRpb25zIG5lZWQgdG8gYmUKICAgICAjIGFkZGVkIGJlZm9yZSB0aGUgQU5H
TEUgZGlyZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsv
V2F5bGFuZENvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dheWxh
bmRDb21wb3NpdG9yLmNwcAppbmRleCBjMzU0MDk5ZmU5NDk4ZmUwNjI5Nzc1NjlkOGU0ZTRlZGNm
NjdhMjAwLi41MGYwODZlZGUyZWYzM2VjOGQ5YTMyOWQyNDQxMGE2N2U3NGI4YTFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAKQEAg
LTQxLDkgKzQxLDkgQEAKICNpZiBVU0UoT1BFTkdMX0VTKQogI2luY2x1ZGUgPEdMRVMyL2dsMi5o
PgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRXh0ZW5zaW9u
czNET3BlbkdMRVMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmg+
CiAjZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvRXh0ZW5zaW9uczNET3BlbkdMLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9FeHRlbnNpb25zR0xPcGVuR0wuaD4KICNpbmNsdWRlIDxXZWJDb3JlL09wZW5H
TFNoaW1zLmg+CiAjZW5kaWYKIApAQCAtNDI3LDkgKzQyNyw5IEBAIGJvb2wgV2F5bGFuZENvbXBv
c2l0b3I6OmluaXRpYWxpemVFR0woKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBVU0Uo
T1BFTkdMX0VTKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0xFUz4gZ2xF
eHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zM0RPcGVuR0xFUz4obnVsbHB0ciwgIGZh
bHNlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+IGdsRXh0ZW5z
aW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KG51bGxwdHIsICBmYWxzZSk7
CiAjZWxzZQotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0w+IGdsRXh0ZW5z
aW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMPihudWxscHRyLCBHTENvbnRleHQ6
OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVu
c2lvbnNHTE9wZW5HTD4gZ2xFeHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xPcGVu
R0w+KG51bGxwdHIsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKICNl
bmRpZgogICAgIGlmIChnbEV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfRUdMX2ltYWdlIikg
fHwgZ2xFeHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKQog
ICAgICAgICBnbEltYWdlVGFyZ2V0VGV4dHVyZTJEID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEVH
TElNQUdFVEFSR0VUVEVYVFVSRTJET0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRUdMSW1h
Z2VUYXJnZXRUZXh0dXJlMkRPRVMiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAKaW5kZXggYzM1OTNhZjM1
NDNlM2MwMjVmOTZiYzQzYzE0NDNjNmU0MGY3MWYzYi4uZGU5Mzk2N2VmZGY5MmIzYzhmN2I4MzQ0
YzQ5ZDAwYjY1NmQ5Y2EzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L0hpZ2hQZXJmb3JtYW5jZUdQVU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9IaWdoUGVyZm9ybWFuY2VHUFVNYW5hZ2VyLmNwcApAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxPcGVuR0wvQ0dMVHlwZXMuaD4KICNpbmNs
dWRlIDxPcGVuR0wvT3BlbkdMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQz
RE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUu
Y3BwCmluZGV4IDQ3ZmFhZmNjODE2MzQ4YmJmYzJiNDc1OTRlYzZiZDJjNWM2OWJmNzguLjZiODll
ZjlmYTBkYWMyOWFjY2JmNDY4YTY3ZDhkYzllMjkzYjA0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0
ZVJlbW90ZS5jcHAKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29ucwog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3Rl
Ojpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZW51bSwgYm9vbCwgYm9vbCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZW51bSwgYm9vbCwgYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5oCmluZGV4IGZhYTJlYzlhMzIxYjc4NDlk
NDY4NjE0ZmNlOGJhOTk3MTFhMWQ3MmQuLjVkYWVkNjVmMDdiMTdlOGNjMTk2OWE1NDQ2ODJhOGU2
ZjZkYTMyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuaApAQCAtMTg0LDcgKzE4NCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJh
bWVJbkNvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1
cmUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51
bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgZmlu
YWw7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0Mz
RGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgZmluYWw7CiAg
ICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIGZp
bmFsOwogCiAgICAgdm9pZCBzZXRQcmVsb2FkKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpQcmVsb2Fk
KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggZWQ0MmJkMTk5OGU0YWRlYzhkMjFmNDVlNjFjYTBlN2RiOTgxZWY5MS4uYTM2MGZlNTY3
NGIzMDY1MTk3ZmZlOWVhYTU4NTNmNTU5YjM1YmU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GdWxsc2NyZWVuTWFuYWdlci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0M0QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQXR0YWNobWVudEVsZW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSFRNTEltYWdlRWxlbWVudC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBjMzU4ZWUyYzE0ZTc4YzNiNzI3M2NjNTk3
NTExNGMxNTg5ZWZhOWFkLi4yYWE4ZTc2ZTRjYjg5YTNmZmZiN2QyZTNmYjJiZDg2YmQxMGY5MWNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbQpAQCAtNjgsNyArNjgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dDNELmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCBhZTNkMmM3ZDQy
Yjg2MjRlODQ1ZDAwZDNmZDhlYjE0OGE4ODlhYTBhLi5hYjU2Y2I1NTg3N2E5MzllYmIwZGZhZjBm
MzIxNjg2MzE5ZjMwODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTExMCw3ICsxMTAsNyBAQAogI2lmIFBMQVRGT1JNKE1B
QykKICNpbXBvcnQgIldLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMuaCIKICNpbXBvcnQg
IldlYlN3aXRjaGluZ0dQVUNsaWVudC5oIgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQzRE1hbmFnZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lTWFjLmg+CiAjaW1wb3J0
IDxwYWwvc3BpL21hYy9OU1Njcm9sbGVySW1wU1BJLmg+CiAjZW5kaWYKQEAgLTgwMyw3ICs4MDMs
NyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNjcm9sbGVyU3R5bGVQcmVmZXJlbmNlQ2hhbmdlZChib29s
IHVzZU92ZXJsYXlTY3JvbGxiYXJzKQogCiB2b2lkIFdlYlByb2Nlc3M6OmRpc3BsYXlDb25maWd1
cmF0aW9uQ2hhbmdlZChDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5SUQsIENHRGlzcGxheUNoYW5n
ZVN1bW1hcnlGbGFncyBmbGFncykKIHsKLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQoZGlzcGxheUlELCBmbGFncywgbnVsbHB0cik7CisgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKGRpc3Bs
YXlJRCwgZmxhZ3MsIG51bGxwdHIpOwogfQogICAgIAogdm9pZCBXZWJQcm9jZXNzOjpkaXNwbGF5
V2FzUmVmcmVzaGVkKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21h
a2UKaW5kZXggYWY4ZmI2ZGFlYmM0NTZmMmM2NDE4MjA2OGEyYzg0NTVjZDUyZThjOS4uY2FlYjlk
N2ZmZDFjODYwZGYwM2Q3MWNiYzQwZjI1ZjI2MTdmMzQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL2Nt
YWtlL09wdGlvbnNGVFcuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UK
QEAgLTI0Niw3ICsyNDYsNyBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9N
QVBQRVJfR0wgT04pCiAjU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NL
RVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSIE9GRikKIAotc2V0KEVOQUJMRV9HUkFQ
SElDU19DT05URVhUXzNEIE9OKQorc2V0KEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMIE9OKQog
c2V0KFVTRV9BTkdMRV9FR0wgT04pCiAKIHNldChXVEZfTElCUkFSWV9UWVBFIFNIQVJFRCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09w
dGlvbnNHVEsuY21ha2UKaW5kZXggYTkxZmMyZDA1MDc0ZTNmNmFjZjllYTZjNDFkOWJkM2VlOTQ5
OTExMS4uYmE3ZjM1MmEyYWRjZjcxODA1MTFjZDBhNDA0YTAxNWMxMzhhZGZkOSAxMDA2NDQKLS0t
IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlv
bnNHVEsuY21ha2UKQEAgLTI5Niw3ICsyOTYsNyBAQCBpZiAoRU5BQkxFX09QRU5HTCkKICAgICAg
ICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRWl0aGVyIEdMWCBvciBFR0wgaXMgbmVlZGVkIGZvciBF
TkFCTEVfT1BFTkdMLiIpCiAgICAgZW5kaWYgKCkKIAotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIFRSVUUpCisgICAgU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgVFJVRSkKIAogICAgIFNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBUUlVFKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc01hYy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zTWFj
LmNtYWtlCmluZGV4IDI2NGNmZjBkZWRlY2U5NmUwZDljYmI1MzA3YTAwYjQ0Mzc2YjZiMjYuLjY3
MmQ3Nzc3MmUyM2NiMzk0NGEzMjc1ZjZlZmU1ZjNlMzEwZGQ1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zTWFjLmNt
YWtlCkBAIC0xMTMsNyArMTEzLDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX1hTTFQgUFJJVkFURSBPTikKIAogV0VCS0lUX09QVElPTl9FTkQoKQogCi1zZXQoRU5B
QkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgT04pCitzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRf
R0wgT04pCiBzZXQoRU5BQkxFX1dFQktJVF9MRUdBQ1kgT04pCiBzZXQoRU5BQkxFX1dFQktJVCBP
TikKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UKaW5kZXggNTkzNTkxMWRkOWQ1
NDhlYmJhYTk2OTE5NDI1MzY1YTk0NWIyNzA2MS4uYzcwZTA0MWIwZGNjNGZiYWQ2MWIxYzkyZGVi
OWY0MDVjODEwZTYzYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlv
bi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlCkBAIC0x
MTMsNyArMTEzLDcgQEAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NL
RVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX1VOSVhfRE9NQUlOX1NPQ0tFVFMgT04pCiAKICMgUmVuZGVyaW5nIG9wdGlvbnMK
LVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIE9OKQor
U0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04pCiBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MgT04pCiBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX05JQ09TSUEgVFJVRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNt
YWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggZDM0OWMyYzM3YzBlODg4
ZmRiYTY5YmZiNjExMDY3Y2Y0MWQ2MTM5ZC4uMmZiYmI1ODFjMDJiNmY0ODM0YWU4YWZmYTU1NGRm
MGZiMmUzMTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTE5NSw3ICsxOTUsNyBAQCBpZiAo
V1RGX0NQVV9BUk0gT1IgV1RGX0NQVV9NSVBTKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9DQVBTVE9ORSAke0RFVkVMT1BFUl9NT0RFfSkKIGVuZGlmICgpCiAKLVNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIFRSVUUpCitTRVRfQU5EX0VY
UE9TRV9UT19CVUlMRChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCBUUlVFKQogCiBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVIgVFJVRSkKIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBUUlVFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fp
cm8uY21ha2UKaW5kZXggZDQ3MWQ1OWNlMTY4MzYxZDU3ZmZkZmUyZjdiYjdjNzI0NTlhMTgwMS4u
MDI5YmE0N2ZmODQ3ODBlZDVmMzBjMGQzZTFkYjM5NGMyOWMzYjA2MCAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c1dpbkNhaXJvLmNtYWtlCkBAIC0zNiw3ICszNiw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9URVhUVVJFX01BUFBFUl9HTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9N
RURJQV9GT1VOREFUSU9OIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RP
Ul9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogCi1zZXQoRU5BQkxF
X0dSQVBISUNTX0NPTlRFWFRfM0QgT04pCitzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wg
T04pCiBzZXQoRU5BQkxFX1dFQktJVCBPTikKIAogc2V0KFVTRV9BTkdMRV9FR0wgT04pCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjkwMWExMjY3
MzA4ZDc0MDdiYTNhMjI1MzUzZjQ2ZWVlMDRiZTc4MC4uMmNjMGVhNDVkNzA3ZGExN2NmZjM0N2Mx
ZjZhNmFjOTlkZGQ3ZTRlMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxk
aW5vQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3Jh
cGhpY3NDb250ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGlj
c0NvbnRleHRHTAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19D
T05URVhUXzNEKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMg
R3JhcGhpY3NDb250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3Bl
bkdMIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vY29uZmlnL3dhdGNobGlzdDoKKwogMjAyMC0wMS0wMyAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiAxNTArIGZs
YWt5IGZhaWx1cmVzIG9uIHNvbWUgYm90cyAoY29sb3IgbWlzbWF0Y2hlcykKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0CmluZGV4IDQyY2E2MDU4ZThj
NDYwYTUwMWRjODg0YTkzMGJlYTY3MTc4Yzc3YzUuLjIzYTMzNDg4MzNlY2EzMGIxM2E2NzI3ZmMw
MjI5Nzc5YjZhMjM5NGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NvbmZpZy93YXRjaGxpc3QKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29u
ZmlnL3dhdGNobGlzdApAQCAtMTYzLDEwICsxNjMsMTEgQEAKICAgICAgICAgIldlYkdMIjogewog
ICAgICAgICAgICAgImZpbGVuYW1lIjogciJTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy8uKldl
YkdMLioiCiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy8uKldlYkdMLioiCisgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZSIKICAgICAgICAgICAgICAgICAgICAgICAgIHIifFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdSIKICAgICAgICAgICAgICAgICAgICAg
ICAgIHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAgICAg
ICAgICAgICAgICAgICAgIHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xF
LioiCi0gICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy8uKkdyYXBoaWNzQ29udGV4dDNELioiCisgICAgICAgICAgICAgICAgICAgICAgICBy
InxTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy8uKkdyYXBoaWNzQ29udGV4dEdMLioi
CiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRSIsCiAg
ICAgICAgIH0sCiAgICAgICAgICJGaWx0ZXJzIjogewpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIv
Q2hhbmdlTG9nCmluZGV4IGQ1NWNjZmM3M2U1NjFhNjc4YTBkMmFkYmE1MTkxZjczYjcwNjQwM2Qu
LmUyMmZmOTIyYmJmNTk0NzhmNWM0OWI4OWQ3YzE4MmFkM2IzMDNmOTAgMTAwNjQ0Ci0tLSBhL0No
YW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wMS0wNSAgRGVh
biBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIEdyYXBoaWNzQ29u
dGV4dDNEIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU3NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgYWxsIHRoZSBHcmFwaGljc0NvbnRleHQzRCB0aGlu
Z3MgdG8gR3JhcGhpY3NDb250ZXh0R0wKKyAgICAgICAgKGluY2x1ZGVzIEV4dGVuc2lvbnMzRCBh
bmQgR1JBUEhJQ1NfQ09OVEVYVF8zRCkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RCYXNl
IG5vdyBiZWNvbWVzIEdyYXBoaWNzQ29udGV4dEdMLgorICAgICAgICBHcmFwaGljc0NvbnRleHQz
RCBpcyBub3cgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKHNpbmNlIGl0IHJlcHJlc2VudHMKKyAg
ICAgICAgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJKS4KKworICAgICAgICAq
IFNvdXJjZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0ZU
Vy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZToKKyAgICAg
ICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc01hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21h
a2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRp
b25zV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21h
a2U6CisKIDIwMjAtMDEtMDMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIHNvbWUgc2hhcmVkIHNjaGVtZXMgdG8gdGhlIFdlYktpdC54Y3dvcmtz
cGFjZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5j
ZVRlc3RzL0NoYW5nZUxvZwppbmRleCAyY2VhZmVkNmRjZTJkMDNlYWUzYTZmMWYxNTU1NTQ3ZmEz
MDY0NzZkLi4yMDJjYjNkOTk0MDEwMzI2YTUyZWJjMmIxYzk0Nzc0MTM5MTJjOTM3IDEwMDY0NAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5v
QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhp
Y3NDb250ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGljc0Nv
bnRleHRHTAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19DT05U
RVhUXzNEKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMgR3Jh
cGhpY3NDb250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3BlbkdM
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogU3RpdGNoTWFya2VyL3d0
Zi9GZWF0dXJlRGVmaW5lcy5oOgorICAgICAgICAqIFN0aXRjaE1hcmtlci93dGYvUGxhdGZvcm0u
aDoKKwogMjAxOS0xMi0xNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIFN0eWxlQmVuY2ggc3VidGVzdCBmb3IgZHluYW1pYyBtZWRpYSBxdWVyeSBwZXJm
b3JtYW5jZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0Zl
YXR1cmVEZWZpbmVzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVy
ZURlZmluZXMuaAppbmRleCBhZDRiOTFlZTgyNDVmMTc2OTg3ZjM3YmIyNzVhMGRlNjc2NmU0YjVj
Li5lMWI2ZmZlMGE4Yjg3MWVmMGFmZjlhYWZkOWVmOTM0NjZlYTBkMmQyIDEwMDY0NAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaApAQCAtNjc2
LDggKzY3Niw4IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gV2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBk
YXRlIHRoZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBmaWxlCiAjZGVmaW5lIEVOQUJMRV9XRUJH
TCAwCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEKQot
I2RlZmluZSBFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBFTkFCTEVfV0VCR0wKKyNpZiAhZGVm
aW5lZChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyNkZWZpbmUgRU5BQkxFX0dSQVBISUNT
X0NPTlRFWFRfR0wgRU5BQkxFX1dFQkdMCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9X
RUJfQU5JTUFUSU9OUykKQEAgLTczMCw4ICs3MzAsOCBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdl
IHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmls
ZQogI2Vycm9yICJFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykgcmVxdWlyZXMgRU5BQkxFKFRPVUNI
X0VWRU5UUykiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJHTCkgJiYgIUVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKQotI2Vycm9yICJFTkFCTEUoV0VCR0wpIHJlcXVpcmVzIEVOQUJMRShHUkFQ
SElDU19DT05URVhUXzNEKSIKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF9HTCkKKyNlcnJvciAiRU5BQkxFKFdFQkdMKSByZXF1aXJlcyBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHTDIpICYmICFFTkFCTEUo
V0VCR0wpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUGxh
dGZvcm0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IDYwYmU4ZjM0ZjBjNDQxYTIwOTgxMWY1MGY2Yzk2NDZmZmNmYWQ5MjQuLjIyMmVkNzc5OTE5
NTdkMDlmZmY3YWU1N2Q3NzZhMWM2MDRiYzJjMGMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Rp
dGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCkBAIC05OTAsNyArOTkwLDcgQEAKICNkZWZpbmUgVVNF
X1RFWFRVUkVfTUFQUEVSIDEKICNlbmRpZgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgIWRlZmluZWQoVVNFX1RFWFRVUkVfTUFQUEVS
X0dMKQorI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpICYmICFkZWZpbmVkKFVTRV9URVhUVVJFX01BUFBFUl9HTCkKICNkZWZpbmUgVVNFX1RFWFRV
UkVfTUFQUEVSX0dMIDEKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386854</attachid>
            <date>2020-01-06 09:36:18 -0800</date>
            <delta_ts>2020-01-06 09:36:18 -0800</delta_ts>
            <desc>EWS test</desc>
            <filename>bug-205778-20200107043615.patch</filename>
            <type>text/plain</type>
            <size>1743517</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAyYmVlNWI1ZTk2ZmRhMmYxNTQyYjhm
M2M2MmQyOGZmYjRhZjA5ZTAuLmE1ZGQxNzhlODg1ZjBjYTBhYWZkZTc5YWZmYWNlMWYxYTg3Mjkw
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGlj
c0NvbnRleHRHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA1Nzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29u
dGV4dEdMCisgICAgICAgIChpbmNsdWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRF
WFRfM0QpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFw
aGljc0NvbnRleHRHTC4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMIChzaW5jZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wg
aW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSSkuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmlu
ZXMuaDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAyMC0wMS0wNSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRnVydGhlciBzaW1wbGlmeSBTdHJpbmdC
dWlsZGVyIHVzYWdlIGJ5IHN0YW5kYXJkaXppbmcgaGV4IGZvcm1hdGluZyB0byBhIHNpbmdsZSBo
ZXgoKSBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNjYTVmNWE5NDBhY2IyOTViZTk4NjI0ZmFlMjA5
ZDk0YzUzY2JlYmEuLjM2NTE2ZWRiMjVhNmViZTM4ZmRlYTExODliMjc4MzliMDlhYTY4MGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNzIgQEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFw
aGljc0NvbnRleHRHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA1Nzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVuYW1lIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNz
Q29udGV4dEdMCisgICAgICAgIChpbmNsdWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NP
TlRFWFRfM0QpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBH
cmFwaGljc0NvbnRleHRHTC4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMIChzaW5jZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVu
R0wgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSSkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4u
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1H
VEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1QbGF5U3RhdGlvbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAq
IFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9BTkdM
RUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVmVydGV4QXJy
YXlPYmplY3QuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5j
cHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHA6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHA6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0R3JvdXAuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmpl
Y3QuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xEZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJz
LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFF1ZXJ5
LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFF1ZXJ5Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFNhbXBsZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJl
ZE9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU3luYy5jcHA6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xTeW5jLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHA6
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9D
aHJvbWUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9XZWJH
TFN0YXRlVHJhY2tlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uc0dMLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dMQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0RCYXNlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RB
TkdMRS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRENhaXJvLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRHTENHLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW06IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQz
RENvY29hLm1tLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5t
bToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL0dyYXBoaWNzQ29udGV4dEdMTkVPTi5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0Nv
bnRleHQzRE5FT04uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2Fj
aGVDVi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1t
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RleHR1cmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0
dXJlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRl
eHQzRElPUy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05p
Y29zaWFHQzNEQU5HTEVMYXllci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnNHTE9wZW5HTC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnNHTE9wZW5HTENvbW1vbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zR0xPcGVuR0xFUy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21t
b24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xFUy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNETWFuYWdlci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xQcml2YXRlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHQzRFRleHR1cmVNYXBwZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xE
aXJlY3QyRC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0M0REaXJlY3QyRC5jcHAuCisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuY3BwOgorCiAyMDIwLTAxLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTI3MjQpOiBVbmFibGUgdG8gdGFw
IG9uIHBsYXkgYnV0dG9uIG9uIGdvb2dsZSB2aWRlbyAnU2VlIHRoZSB0b3Agc2VhcmNoIHRyZW5k
cyBvZiAyMDE5JwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCA1Mjg1NmM4MzQ5OWRhYzczNjNiMzNiYmI4MTEwMjZmZjQ5
MTZhYzMyLi5kMTZhYzQ4YzY5ZGVhYTI2NmNiNTc2OGM2NTAwMjVmOTVmNjIwYmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhpY3NDb250
ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGljc0NvbnRleHRH
TAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19DT05URVhUXzNE
KS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMgR3JhcGhpY3ND
b250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3BlbkdMIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldheWxhbmRDb21wb3NpdG9yOjppbml0aWFsaXplRUdMKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvbWFjL0hpZ2hQZXJmb3JtYW5jZUdQVU1hbmFnZXIuY3BwOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZh
dGVSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAq
IFdlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpkaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorCiAyMDIwLTAxLTA2ICBS
b2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBHbG9i
YWxGcmFtZUlEIGZyb20gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkCmRpZmYgLS1naXQgYS9T
b3VyY2UvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvQ01ha2VMaXN0cy50eHQKaW5kZXggOGJjZWQ2
ODU2OTg3MWE3OGVkOTFjMzFkNTVjMWJiNzQxYzg5MTZmYS4uNjJiMDU2YzdlY2U3NjI2OThjNjI4
NTQzMzcxZWU0YzIwNThhYTZlNiAxMDA2NDQKLS0tIGEvU291cmNlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9DTWFrZUxpc3RzLnR4dApAQCAtMTMsNyArMTMsNyBAQCBlbmRpZiAoKQogCiBh
ZGRfc3ViZGlyZWN0b3J5KEphdmFTY3JpcHRDb3JlKQogCi1pZiAoRU5BQkxFX0dSQVBISUNTX0NP
TlRFWFRfM0QpCitpZiAoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wpCiAgICAgYWRkX3N1YmRp
cmVjdG9yeShUaGlyZFBhcnR5L0FOR0xFKQogZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvRmVhdHVyZURlZmluZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVz
LmgKaW5kZXggNjgyYTFlODk1YTJmNmMwZjJkNTVmYmQwMWI2YWQ1MzAxY2YwMDA2Ni4uOTgwNDU5
M2YxNjc4ODFjMTgzMzRlYWVlZWZmZmM1NGM2NWI0ZDMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5l
cy5oCkBAIC03MjIsOCArNzIyLDggQEAgdGhlIHB1YmxpYyBpT1MgU0RLLiBTZWUgPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzE3OTE2Nz4uICovCiAjZGVmaW5lIEVOQUJMRV9XRUJHTCAwCiAjZW5kaWYK
IAotI2lmICFkZWZpbmVkKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEKQotI2RlZmluZSBFTkFC
TEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBFTkFCTEVfV0VCR0wKKyNpZiAhZGVmaW5lZChFTkFCTEVf
R1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyNkZWZpbmUgRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wg
RU5BQkxFX1dFQkdMCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfQVJDSElWRSkK
QEAgLTc2NCw4ICs3NjQsOCBAQCB0aGUgcHVibGljIGlPUyBTREsuIFNlZSA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTc5MTY3Pi4gKi8KICNlcnJvciAiRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpIHJl
cXVpcmVzIEVOQUJMRShUT1VDSF9FVkVOVFMpIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCR0wp
ICYmICFFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNlcnJvciAiRU5BQkxFKFdFQkdMKSBy
ZXF1aXJlcyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkiCisjaWYgRU5BQkxFKFdFQkdMKSAm
JiAhRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisjZXJyb3IgIkVOQUJMRShXRUJHTCkgcmVx
dWlyZXMgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpIgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
V0VCR0wyKSAmJiAhRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggMGQ2NWIzNjQwNzFlYjEx
NTUxNDZiNDdjYTQ1Y2I3NTQyYjhmNGUxMy4uMjdiMGY0ZmY4OTA4OWQzZmFhOWZkMTgzMzVlM2Y5
NGUzMDViNWI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC0xMTQ4LDcgKzExNDgsNyBAQAogI2VuZGlmCiAj
ZW5kaWYKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfM0QpICYmICFkZWZpbmVkKFVTRV9URVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVIpICYmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAhZGVmaW5lZChVU0Vf
VEVYVFVSRV9NQVBQRVJfR0wpCiAjZGVmaW5lIFVTRV9URVhUVVJFX01BUFBFUl9HTCAxCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA0ZmM4M2NmMmI5ODY5NDJlNjRlMDBjMzkzZWJj
ZmJmZTIyMDJjOWYwLi41NjczMjA0YjQwNDg3YmY3N2I2MzEzOTkwNGJhN2JiMTk2NGRjMWMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTQ4OCwxMSArMTQ4OCwxMSBAQCBpZiAoRU5BQkxFX1FV
T1RBKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCkK
K2lmIChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAKICAgICApCiAKICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyBBTkdMRUZyYW1ld29yaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IGFhMTYwM2NlM2MzM2U3ZGNjMjFjZTJiOGM1MGFhZjIzODc2NWFhNjcuLjU3ZGQx
NGUyODMwYmMxNTdlM2NiNjRkY2E1NzZkOTJhNDAxZDExYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMTAyNiw3ICsxMDI2LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5zaW9uczNELmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zR0wuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQzRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKQEAgLTEwNTcs
MTAgKzEwNTcsMTAgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
ZGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNEQmFzZS5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0RBdHRyaWJ1dGVzLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRE1hbmFnZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aApAQCAtMTEyMyw3ICsxMTIzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoQ2FjaGUuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1dpbmRSdWxlLmgKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lv
bnMzREFOR0xFLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdM
RS5oCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAg
LTExNDIsOSArMTE0Miw5IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9ybURpc3BsYXlMaWJXUEUuaAog
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgKIAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UKaW5kZXggMTEyN2JlZDBhODJkOGMyNWU3MDA5YWQ5Yjc1NzI4NTU2MDI1YzhhMy4u
ZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC0xMjksNyArMTI5LDcgQEAgZWxzZSAoKQogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYWRpZW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dDNEQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUZUVy5jbWFrZQppbmRleCA1YzBjYTM4YTFkM2IzMmUxNmJiOGUyODE4YWI3ZDMzNTQwZGM3ZmYz
Li5hZTkxYTc2Mzg0NDI0M2IzMTRiMzcwZTRkOGExNzU4NjFkOGZmMDFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUZUVy5jbWFrZQpAQCAtNDYsMTYgKzQ2LDE2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0SW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXku
Y3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcAogCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVT
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21t
b24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVT
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xFUy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1w
b3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVVdGlsaXRpZXMuY3BwCkBAIC03OCw3ICs3OCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRERpcmVjdDJELmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IGEzMGE1NDVjYzYzNTE0MzFlOTM2OTc4NjJmYTM4OWIwZjk2OTNlN2MuLmNkOTI1MzE5
ZDM5MzQ1YWYwYTkyNjZlN2Y4YzI4NjlkZjYzN2ZkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC0xMzEsMjggKzEzMSwyOCBAQCBlbmRpZiAoKQogCiBpZiAoVVNFX0FOR0xFX1dFQkdM
KQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAKICAgICApCiBlbHNlICgpCiAg
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29t
bW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdM
U2V0dGluZy5jcHAKICAgICApCiAKICAgICBpZiAoVVNFX09QRU5HTF9FUykKICAgICAgICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKyAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNw
cAogICAgICAgICApCiAgICAgZW5kaWYgKCkKIAogICAgIGlmIChVU0VfT1BFTkdMKQogICAgICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcAorICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5j
cHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5j
bWFrZQppbmRleCA3MWYwODA1ZDBmMWM2MGJlMWNiODAwMzMyZjQwZGRkNmU3YmYyZDhhLi5jMDNj
ZTZiNTEzMTgyMWEwMWNjN2Q2NjUzZDE2OTE5MWRiYjc5YTgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQpAQCAtMjg2LDcgKzI4Niw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50Q0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMwNCw3ICszMDQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTM0NiwxMCArMzQ2LDEwIEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9w
ZW5HTC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdM
Q29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTEJhc2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQ29tbW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1w
b3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVDRy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtUGxheVN0
YXRpb24uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCmlu
ZGV4IDI2NzhjMzFhZDYyYmRiODI2OTc5ZmJiNzNhM2NlMTM1ZGQzNDZlNjYuLmNiMWE4YjllZTNl
YjZmMDdkNDRkZmRhYWYxN2M4Nzg5NDYzYWZiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1Q
bGF5U3RhdGlvbi5jbWFrZQpAQCAtMzcsNyArMzcsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFuaW1hdG9yR2VuZXJpYy5jcHAKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVH
TC5jcHAKQEAgLTQ1LDEwICs0NCwxMSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9ybURpc3BsYXlMaWJXUEUuY3BwCiAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5H
TENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCiAKICAgICBwbGF0Zm9ybS9saWJ3cGUvUGFzdGVi
b2FyZExpYldQRS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZDFmZDRlYjEyZGQ5
NzExMDAxODBlYTgwNTZlZDQ4NjU2OWZjOTA2ZS4uMjUwYTBiMzVjMDQwMmY2NzlkYWU0OWI0YTIw
YzViYTE5ZDY1ZmViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTM3LDE0ICszNywx
MyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2F1ZGlvL1Bs
YXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKLQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9H
TENvbnRleHRFR0wuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0xFUy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxpdGllcy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
aW5kZXggOTI5N2QwNDRlNDQ4Mjc4ZGJlN2M5MTY5YmIzMjZjOWRmYjcwNDI1Yi4uYWNhZTZmZTM4
ZGRlMjZjMjhjZjVkNDQ5MTFmYzVhYzMwYjI1ODY3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4NTcs
OCArMTg1Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudElt
YWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RNYW5hZ2VyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCkBAIC0xOTQ3LDYgKzE5NDYsOCBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9pc28vSVNPU2NoZW1lVHlwZUJveC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2lzby9JU09U
cmFja0VuY3J5cHRpb25Cb3guY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPVlRUQ3VlLmNw
cAogCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3Bw
CisKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuY3BwCiAKIHBs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQKaW5kZXggMjRmNWMwNThmYWNiODA2ZTk3ODk0N2I0MDJhODk3OTI0NTc3ODRm
NC4uZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CkBAIC0yMjYsOCArMjI2LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5YmFja1RhcmdldFBpY2tlci5jcHAKIAogLy8gVGhlc2Ugc291cmNlcyBjYW4ndCBiZSB1bmlm
aWVkIHdpdGggb3RoZXJzIGluIGNhc2UgdGhleSBhcmUgbWVyZ2VkCiAvLyB3aXRoIGZpbGVzIHRo
YXQgdXNlIHRoZSBzeXN0ZW0gT3BlbkdMLgotcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5z
aW9uczNEQU5HTEUuY3BwIEBuby11bmlmeQotcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0M0RBTkdMRS5jcHAgQG5vLXVuaWZ5CitwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9F
eHRlbnNpb25zR0xBTkdMRS5jcHAgQG5vLXVuaWZ5CitwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9H
cmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAgQG5vLXVuaWZ5CiAKIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9iakNJbXBsLm1tIEBuby11bmlmeQpA
QCAtMjg1LDcgKzI4NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvRmxvYXRTaXplQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAot
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtMzA1LDcgKzMw
NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvQ29sb3JDb2NvYS5tbQotcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0M0RDb2NvYS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29j
b2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQpAQCAtMzc1LDEwICszNzUs
MTEgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1N3aXRjaGluZ0dQVUNsaWVudC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYktp
dE5TSW1hZ2VFeHRyYXMubW0KIAotcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24u
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcu
Y3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlQ0cuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNHVEsudHh0CmluZGV4IGMyYzI3MDliODc5YTgzODY5Mjg5ZmUyODcxMzU3Y2RlNjI2YTFhYTQu
LjcyMDVlMjBkM2FiNGUzOWZiZWU0YmI5NDMxYWVjYjRiY2NjMjhiZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNH
VEsudHh0CkBAIC02OSw3ICs2OSw2IEBAIHBsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKIHBs
YXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmljLmNwcAogCiBwbGF0Zm9ybS9ncmFw
aGljcy9HTENvbnRleHQuY3BwIEBuby11bmlmeQotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNw
cCBAbm8tdW5pZnkKIAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2Vu
ZENhaXJvWDExLmNwcCBAbm8tdW5pZnkKQEAgLTkyLDYgKzkxLDggQEAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNz
L2xpYndwZS9QbGF0Zm9ybURpc3BsYXlMaWJXUEUuY3BwCiAKK3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwCisKIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGlj
cy93YXlsYW5kL1BsYXRmb3JtRGlzcGxheVdheWxhbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0Cmlu
ZGV4IDVhYjIxMTk0ZTdjNDA0ZDRmMjgwMTk4MzlmMzI4ZDY1NjY2ZjRhZWEuLmI1Yzg5MTUwODg3
ODM4MzIwYzVlMzk0ZmI4ZjBiZGRhODQ0M2M4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBAIC02
Miw3ICs2Miw2IEBAIHBhZ2Uvc2Nyb2xsaW5nL2dlbmVyaWMvU2Nyb2xsaW5nVGhyZWFkR2VuZXJp
Yy5jcHAKIHBsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3Mv
R0xDb250ZXh0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiBwbGF0Zm9ybS9n
cmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcApAQCAtNzAsMTAgKzY5LDExIEBAIHBsYXRmb3Jt
L2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0xMaWJXUEUuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNz
L2xpYndwZS9QbGF0Zm9ybURpc3BsYXlMaWJXUEUuY3BwCiAKLXBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwIEBuby11bmlmeQotcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAotcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBAbm8tdW5pZnkKK3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAorcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0YS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZjkzYjhiNDc0
MDNkOGI2YzE2YzRjMGQ4NGFmMGJjZDExOGRjYTczLi5kNGZiMGQzNjgyYmVjYjVkNDI4MGE3ZmZm
MjZiY2I1ZGRhMDk2Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MTMsNyArOTEzLDcgQEAKIAkJMzEzNTkxMEExRTdEREM3
MzAwRjMwNjMwIC8qIFJUQ1NkcFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMzU5MTA0MUU3RERDNjAwMEYzMDYzMCAvKiBSVENTZHBUeXBlLmgg
Ki87IH07CiAJCTMxMzU5MTBCMUU3RERDNzMwMEYzMDYzMCAvKiBSVENTaWduYWxpbmdTdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzNTkxMDUx
RTdEREM2MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRlLmggKi87IH07CiAJCTMxM0JDRTFD
MjM1RTNCRTUwMEZDMzlFNSAvKiBFbGVtZW50Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFMUIyMzVFM0JEQjAwRkMzOUU1IC8qIEVs
ZW1lbnRDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMzEzREU4NzAyM0E5Njk3MzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzREU4
NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dDNEQmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTMxM0RFODcwMjNBOTY5NzMw
MDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzREU4NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNz
Q29udGV4dEdMLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzE0MDM3OUIxMjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwMzc5NzEy
NEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTQwMzc5RDEyNEJFQTdGMDBBRjQw
RTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDAzNzk5MTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZp
Y2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovOyB9OwogCQkzMTQwQzUyMDFGREYxNTFBMDBEMkE4
NzMgLyogT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQwQzUxRTFGREYxNTFBMDBEMkE4NzMg
LyogT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi87IH07CkBAIC05NDcsNiAr
OTQ3LDcgQEAKIAkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVk
UGx1Z0luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MUU4RDhCQjE2MEJDOTRDMDA0Q0U4RjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTk4NDgwMTFB
MUQ4MTdCMDBBMTMzMTggLyogQW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOTg0N0ZGMUExRDgxNjcwMEExMzMxOCAvKiBBbmlt
YXRpb25FdmVudC5oICovOyB9OwogCQkzMTk4NDgwQzFBMUU2Q0U4MDBBMTMzMTggLyogSlNBbmlt
YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzE5ODQ4MDQxQTFFNkI1RDAwQTEzMzE4IC8qIEpTQW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsK
KwkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5
QTcyODcyM0MyNjdFNzAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMxOUFF
MDY0MTQyRDZCMjQwMDY1NjNBMSAvKiBTdHlsZUZpbHRlckRhdGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUFFMDYyMTQyRDZCMjQwMDY1NjNBMSAv
KiBTdHlsZUZpbHRlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkzMTlGQkQ1RjE1RDJGNDY0MDA5NjQwQTYgLyogQ2FjaGVkSW1hZ2VDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUZC
RDVEMTVEMkY0NDQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNsaWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMxQTA4OTU2MUU3MzhENTkwMDNC
NjYwOSAvKiBKU1dlYkdQVUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzFBMDg5MUQxRTczOEQ1OTAwM0I2NjA5IC8qIEpTV2ViR1BVQnVmZmVy
LmggKi87IH07CkBAIC05NjksNyArOTcwLDcgQEAKIAkJMzFBMDg5ODkxRTczOEQ1QTAwM0I2NjA5
IC8qIEpTV2ViR1BVVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzFBMDg5NTAxRTczOEQ1OTAwM0I2NjA5IC8qIEpTV2ViR1BVVGV4dHVyZS5o
ICovOyB9OwogCQkzMUEwODk4QzFFNzM4RDVBMDAzQjY2MDkgLyogSlNXZWJHUFVUZXh0dXJlRGVz
Y3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFBMDg5NTMxRTczOEQ1OTAwM0I2NjA5IC8qIEpTV2ViR1BVVGV4dHVyZURlc2NyaXB0b3IuaCAq
LzsgfTsKIAkJMzFBNzk1QzcxODg4QkNCMjAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUE3OTVD
MjE4ODhCNzI0MDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCAqLzsgfTsKLQkJMzFB
QjUwMDAxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUFCNEZGRjEyMjg3OEEyMDAx
QTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLzsgfTsKKwkJMzFBQjUwMDAxMjI4NzhB
MjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQUI0RkZGMTIyODc4QTIwMDFBN0RC
MCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmggKi87IH07CiAJCTMxQzBGRjIyMEU0
Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZGMUMwRTRDRUI2RTAwN0Q2RkU1IC8q
IFdlYktpdEFuaW1hdGlvbkV2ZW50LmggKi87IH07CiAJCTMxQzBGRjI1MEU0Q0VCNkUwMDdENkZF
NSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFGMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRUcmFu
c2l0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGM0UwRTRDRUZBQzAwN0Q2RkU1IC8qIEpTV2Vi
S2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxQzBGRjNBMEU0Q0VGQUMwMDdENkZFNSAvKiBKU1dlYktpdEFuaW1hdGlvbkV2
ZW50LmggKi87IH07CkBAIC0xMjE1LDcgKzEyMTYsNyBAQAogCQk0NEEyOEFBRjEyREZCOEJGMDBB
RTkyM0IgLyogTWF0aE1MTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICov
OyB9OwogCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyogU2Nyb2xsYmFyVGhlbWVJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTg1MEYz
RDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5oICovOyB9OwogCQk0NEM5OTE5RjBG
M0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTlEMEYzRDIxMEUwMDU4NjY3MCAvKiBUaGVtZUlPUy5o
ICovOyB9OwotCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NERBQjVCMDE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi87
IH07CisJCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zR0xPcGVuR0xDb21t
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0REFC
NUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCAqLzsgfTsK
IAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUw
MDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDUxMjUwMjMxNURDRTM3RDAwMkY4NEUyIC8qIFNwaW5C
dXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NTEyNTAyMTE1RENFMzdEMDAyRjg0RTIgLyogU3BpbkJ1dHRvbkVsZW1lbnQuaCAqLzsg
fTsKIAkJNDUzRUI2MzcxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTNFQjYzNTE1OUM1NzA0
MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMwOCw3ICsxMzA5LDcgQEAKIAkJNDlDN0I5RTAxMDQy
RDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8q
IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OwogCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xTaGFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOUMzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oICovOyB9
OwogCQk0OUM3QjlFNjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDNjEwNDJEMzJGMDAw
OUQ0NDcgLyogV2ViR0xUZXh0dXJlLmggKi87IH07Ci0JCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0
NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0I5RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4
dDNELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlGQjEwNDJE
MzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUQ1REMyQzBGNDIzQTczMDA4RjIw
RkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RDVEQzI4MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQ5RDVEQzJFMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlENURDMkEwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNDlFOTExQzQwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFC
NDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjAxMiw3ICsyMDEzLDYgQEAK
IAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdEluaXRp
YXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZD
NjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3Jz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkUw
QjkwNjkyMzIxQTY4RDAwNjIyM0IyIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTBCOTA2NTIzMjFB
NjhDMDA2MjIzQjIgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuaCAqLzsgfTsKIAkJNkUw
RTU2OUMxODNCRkZFNjAwRTBFOEQ1IC8qIEZsb2F0Um91bmRlZFJlY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMEU1NjlBMTgzQkZGRTYwMEUwRThE
NSAvKiBGbG9hdFJvdW5kZWRSZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNkUyMUM2QzAxMTI2MzM4NTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29u
dGV4dDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFMjFDNkJGMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgKi87IH07
CiAJCTZFMjQyQjJCMjMzNTk0MDUwMDJDQURENCAvKiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEMxLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI0
MkIyQTIzMzU5M0Q4MDAyQ0FERDQgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5oICov
OyB9OwogCQk2RTI0MkIyQzIzMzU5NDA5MDAyQ0FERDQgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0
dXJlRVRDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RTI0MkIyODIzMzU5M0Q3MDAyQ0FERDQgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmgg
Ki87IH07CiAJCTZFM0ZBRDM5MTQ3MzNGNDAwMEU0MjMwNiAvKiBKU1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RTNGQUQzNzE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Qy5oICovOyB9OwpAQCAtMjAyNCwxMiArMjAyNCwxMiBAQAogCQk2RTQ3RTY2MTEwQjc5NDRCMDBC
MTg2QzggLyogV2ViR0xBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFNDdFNjVGMTBCNzk0NEIwMEIxODZDOCAvKiBXZWJHTEFueS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFNEFCQ0Q1MTM4RUEw
QjcwMDcxRDI5MSAvKiBKU0hUTUxVbmtub3duRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0QUJDRDMxMzhFQTBCNzAwNzFEMjkxIC8qIEpT
SFRNTFVua25vd25FbGVtZW50LmggKi87IH07CiAJCTZFNEU5MUFGMTBGN0ZCMzEwMEEyNzc5QyAv
KiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTRFOTFBQTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1MTI4
MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsgfTsKLQkJNkU2N0QyQTkx
MjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVu
c2lvbnMzRC5oICovOyB9OwotCQk2RTcyRjU0QzIyOURDRDBDMDBCM0UxNTEgLyogRXh0ZW5zaW9u
czNEQU5HTEUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVuc2lvbnMzREFOR0xFLmNwcCAqLzsg
fTsKLQkJNkU3MkY1NEUyMjlEQ0QxMDAwQjNFMTUxIC8qIEdyYXBoaWNzQ29udGV4dDNEQU5HTEUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyN0Yy
NDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwICovOyB9Owor
CQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMT3BlbkdMLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNTEyODBFOEE0
MDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMT3BlbkdMLmggKi87IH07CisJCTZFNjdEMkE5MTI4MEU4
QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25z
R0wuaCAqLzsgfTsKKwkJNkU3MkY1NEMyMjlEQ0QwQzAwQjNFMTUxIC8qIEV4dGVuc2lvbnNHTEFO
R0xFLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
MjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi87IH07CisJ
CTZFNzJGNTRFMjI5RENEMTAwMEIzRTE1MSAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjdGMjQyMjI5
OENFNEIwMEYxRjYzMiAvKiBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCAqLzsgfTsKIAkJNkU3
MkY1NEYyMjlEQ0QxMzAwQjNFMTUxIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI5MDg2MTIyOURCOTUw
MDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcCAqLzsgfTsKLQkJNkU3MkY1NTAy
MjlEQ0QxNzAwQjNFMTUxIC8qIEV4dGVuc2lvbnMzREFOR0xFLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyog
RXh0ZW5zaW9uczNEQU5HTEUuaCAqLzsgfTsKKwkJNkU3MkY1NTAyMjlEQ0QxNzAwQjNFMTUxIC8q
IEV4dGVuc2lvbnNHTEFOR0xFLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0ZW5zaW9uc0dMQU5HTEUu
aCAqLzsgfTsKIAkJNkU3MkY1NTEyMjlEQ0QxQTAwQjNFMTUxIC8qIFRlbXBvcmFyeUFOR0xFU2V0
dGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUy
OTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5oICovOyB9Owog
CQk2RTg0RTlFMTE3NjY4QkYxMDA4MTVCNjggLyogUmFzdGVyU2hhcGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODRFOURGMTc2NjhCQUQwMDgxNUI2
OCAvKiBSYXN0ZXJTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTZFOEFDREVEMjMzNDVDQkMwMDI0QUFGNSAvKiBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlRVRDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RThBQ0RFQjIzMzQ1Q0FGMDAyNEFBRjUgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5o
ICovOyB9OwpAQCAtMjIyMSw3ICsyMjIxLDcgQEAKIAkJN0MyRkE2MTIxRUE5NUEzQzAwQTAzMTA4
IC8qIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyRkE2MTAxRUE5NUEzMjAwQTAzMTA4IC8qIFJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0Q29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi87IH07CiAJ
CTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMwRDk4MTFGODE1QUMxMDAyNjgz
NTYgLyogSlNBYm9ydFNpZ25hbC5oICovOyB9OwotCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMg
LyogR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMzMEEwMTFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhp
Y3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJN0MzMzBBMDIxREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdDMzMwQTA4MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzMzBBMDYxREY5Rjk1
MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmggKi87IH07CiAJCTdDM0E5MUU2MUM5NjNC
ODgwMEQxQTdFMyAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0E5MUU1MUM5NjNCODgwMEQxQTdFMyAvKiBD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3QzNCNzk3MTE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VI
YW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDM0I3OTZGMTkwODc1N0IwMEI0N0EyRCAvKiBVc2VyTWVzc2FnZUhhbmRsZXIuY3BwICovOyB9
OwpAQCAtNDI0Myw3ICs0MjQzLDYgQEAKIAkJRDA1Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZv
cm1hdEJsb2NrQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5o
ICovOyB9OwogCQlEMDZDMEQ4RjBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0Q29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA2QzBE
OEQwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuaCAqLzsgfTsKIAkJRDA3
REVBQkEwQTM2NTU0QTAwQ0EzMEY4IC8qIEluc2VydExpc3RDb21tYW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDdERUFCODBBMzY1NTRBMDBDQTMw
RjggLyogSW5zZXJ0TGlzdENvbW1hbmQuaCAqLzsgfTsKLQkJRDA4NDNBNEIyMEZFQkUzRDAwRkU4
NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA4NDNBNEEyMEZFQkUzRDAwRkU4NjBFIC8qIEdyYXBo
aWNzQ29udGV4dDNETWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUQwODZGRTk4MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDg2RkU5
NjA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5oICovOyB9OwogCQlEMDhCMDBFNDIw
QTI4MjU5MDAwNEJDMEEgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwQTIwRDU0MjA5MkEwQTYwMEUw
QzI1OSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5oICovOyB9OwogCQlEMEEzQTczMTE0
MDVBMzk4MDBGQjhFRDMgLyogUmVzb3VyY2VMb2FkZXJPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEEzQTczMDE0MDVBMzk4MDBGQjhFRDMg
LyogUmVzb3VyY2VMb2FkZXJPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcwMDQsOCArNzAwMyw4IEBACiAJCTMxMzU5MTA1MUU3RERD
NjAwMEYzMDYzMCAvKiBSVENTaWduYWxpbmdTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSVENTaWduYWxpbmdTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTM1OTEwQzFFN0REQ0I2MDBGMzA2MzAgLyogUlRDQnVuZGxlUG9saWN5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0J1bmRsZVBvbGljeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMTNCQ0UxQjIzNUUzQkRCMDBGQzM5RTUgLyogRWxlbWVudENv
bnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudENvbnRleHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzEzREU4NkQyM0E5Njk2NjAwOEZDNDdC
IC8qIEdyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzREJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0M0RC
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNE
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTNERTg2RDIzQTk2OTY2MDA4
RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE0MDM3OTcxMjRCRUE3RjAwQUY0MEU0IC8qIFdl
YkNvcmVNb3Rpb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkNvcmVNb3Rpb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNDAz
Nzk4MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9uTWFuYWdlci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVNb3Rpb25NYW5hZ2VyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQwMzc5OTEyNEJFQTdGMDBBRjQwRTQgLyog
RGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTcwOTAsNiArNzA4OSw3IEBACiAJCTMxOTg0ODAwMUExRDgxNjcwMEExMzMxOCAv
KiBBbmltYXRpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQW5pbWF0aW9uRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTk4NDgwMzFBMUU2QjVEMDBB
MTMzMTggLyogSlNBbmltYXRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0FuaW1hdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzE5ODQ4MDQxQTFFNkI1RDAwQTEzMzE4IC8qIEpTQW5pbWF0aW9uRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBbmltYXRpb25FdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTlBNzI4NzIzQzI2N0U3MDA4NTM1M0MgLyogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTlBRTA2MTE0MkQ2QjI0MDA2NTYzQTEgLyogU3R5bGVGaWx0ZXJEYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlRmlsdGVyRGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxOUFFMDYyMTQyRDZCMjQwMDY1NjNB
MSAvKiBTdHlsZUZpbHRlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3R5bGVGaWx0ZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxOUJERTRG
MUU3QTg1OEEwMEJBMjk2QyAvKiBKU1JUQ0ljZVRyYW5zcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JUQ0ljZVRyYW5zcG9ydC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03MTQyLDcgKzcxNDIsNyBAQAogCQkzMUE3OTVDMzE4ODhCNzI0
MDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEFOR0xFSW5zdGFuY2VkQXJyYXlzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzFBNzk1QzQxODg4QkFEMTAwMzgyRjkwIC8qIEpTQU5HTEVJbnN0YW5jZWRBcnJheXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBTkdMRUluc3RhbmNlZEFy
cmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQTc5NUM1MTg4OEJBRDEw
MDM4MkY5MCAvKiBKU0FOR0xFSW5zdGFuY2VkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNE
SU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNE
SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxQUI0RkZGMTIyODc4QTIwMDFB
N0RCMCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFDMEZGMUIwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFu
aW1hdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YktpdEFuaW1hdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFD
MEZGMUMwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEFuaW1hdGlvbkV2ZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQzBGRjFEMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRB
bmltYXRpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0QW5pbWF0aW9u
RXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY5Niw4ICs3Njk2LDgg
QEAKIAkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGhlbWVJT1MubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ0RDhEQTk4MTM5NTQ1QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1l
bnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR01QYXRoRWxlbWVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RDhEQTlBMTM5NTQ1Q0QwMDMzN0I3NSAvKiBTVkdB
bmltYXRlTW90aW9uRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQW5pbWF0
ZU1vdGlvbkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0NERBQjVB
RjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFF
NCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ0REFCNUFGMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zR0xPcGVuR0xD
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDREQUI1
QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRFODhFNEMyMzY5MTI4QTAwOUI0ODQ3IC8qIEhp
Z2hsaWdodE1hcC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSGlnaGxpZ2h0TWFwLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRFODhFNEQyMzY5MTI4QjAwOUI0ODQ3IC8q
IEhpZ2hsaWdodFJhbmdlR3JvdXAuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEhpZ2hsaWdo
dFJhbmdlR3JvdXAuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEU4OEU1MDIz
NkE1NkFDMDA5QjQ4NDcgLyogSGlnaGxpZ2h0TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhpZ2hsaWdo
dE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg5NCw3ICs3ODk0LDcgQEAK
IAkJNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFRleHR1cmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0
dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMVGV4dHVyZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlDNzEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xUZXh0dXJlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTFRleHR1cmUuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcg
LyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R3JhcGhpY3NDb250ZXh0M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5
RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCQThDMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0Rv
Y3VtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RG9jdW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUQ1REMy
NzBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUQ1REMyODBGNDIzQTczMDA4
RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTc5MzIsNyArNzkzMiw3IEBACiAJCTQ5RUVEMTRCMTA1MTk3MTkw
MDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTRDMTA1MTk3MUEw
MDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2
NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNE
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHQzRENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUZGQkYx
QzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RkZCRjNEMTFDOTNF
RTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkdMTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGM0Ux
MUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJHTExheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyogRm9ybUFzc29jaWF0ZWRFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Bc3NvY2lhdGVkRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MjYwLDE1ICs5MjYwLDE1
IEBACiAJCTZFMEI5MDY4MjMyMUE2OEQwMDYyMjNCMiAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
RVRDMS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlRVRDMS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMEU1
Njk5MTgzQkZGRTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRSZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0Um91bmRlZFJlY3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RTBFNTY5QTE4M0JGRkU2MDBFMEU4RDUgLyogRmxvYXRSb3Vu
ZGVkUmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFJvdW5kZWRS
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFMjFDNkJGMTEyNjMzODUwMEE3
QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRENHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNE
Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTIxQzZCRjExMjYzMzg1MDBB
N0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFw
aGljc0NvbnRleHRHTENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUyNDJC
MjYyMzM1OTNENzAwMkNBREQ0IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwOyBwYXRoID0g
Li4vLi4vLi4vLi4vLi4vLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RTI0MkIyODIzMzU5M0Q3MDAyQ0FERDQgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0
dXJlRVRDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5oOyBw
YXRoID0gLi4vLi4vLi4vLi4vLi4vLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkUyNDJCMjkyMzM1OTNENzAwMkNBREQ0IC8qIEpTV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUVUQzEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJHTENvbXByZXNzZWRUZXh0
dXJlRVRDMS5jcHA7IHBhdGggPSAuLi8uLi8uLi8uLi8uLi8uLi9XZWJLaXRCdWlsZC9EZWJ1Zy9E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTI0MkIyQTIzMzU5M0Q4MDAyQ0FERDQgLyog
SlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVFVEMxLmg7IHBhdGggPSAuLi8uLi8uLi8uLi8uLi8uLi9XZWJLaXRCdWls
ZC9EZWJ1Zy9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVU
QzEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFG
NjMyIC8qIEdyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zM0RB
TkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25z
M0RBTkdMRS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFMjdGMjQ0MjI5QzlG
OEQwMEYxRjYzMiAvKiBFeHRlbnNpb25zM0RBTkdMRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeHRlbnNpb25zM0RBTkdMRS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRH
TEFOR0xFLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyN0YyNDMyMjlDOUY4
NDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnNHTEFOR0xFLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xF
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnNHTEFOR0xFLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMjkwODYxMjI5REI5NTAwMDA5ODZFMiAv
KiBUZW1wb3JhcnlBTkdMRVNldHRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFOR0xFU2V0dGlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhcnlBTkdMRVNldHRp
bmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUzRkFEMzYxNDczM0Y0MDAwRTQy
MzA2IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MjkwLDkgKzkyOTAsOSBAQAogCQk2RTRBQkNE
MzEzOEVBMEI3MDA3MUQyOTEgLyogSlNIVE1MVW5rbm93bkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MVW5rbm93bkVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNkU0RTkxQUExMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xDb250
ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRFOTFBQjEw
RjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVu
R0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uczNE
T3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU2N0QyQTUxMjgwRThB
NDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTE9w
ZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25z
R0xPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTY3RDJBNTEyODBF
OEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMT3BlbkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4dGVuc2lvbnNHTE9wZW5HTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnNHTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RTg0RTlERTE3NjY4QkFEMDA4MTVCNjggLyogUmFzdGVyU2hhcGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFzdGVyU2hhcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTg0RTlERjE3NjY4QkFEMDA4MTVCNjgg
LyogUmFzdGVyU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFzdGVy
U2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4QUNERTkyMzM0NUNBRjAw
MjRBQUY1IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05ODI3LDcgKzk4MjcsNyBAQAogCQk3QzMwRDk4MDFGODE1QUMxMDAyNjgzNTYgLyog
SlNBYm9ydENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNB
Ym9ydENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMEQ5ODEx
RjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzMwRDk4MjFGODE1QUMyMDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Fib3J0U2lnbmFsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNz
Q29udGV4dDNEQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDMxREY5RTk1
QjAwRDMzOTVDIC8qIFBvc2l0aW9uT3B0aW9ucy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUG9zaXRpb25PcHRpb25zLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDUxREY5Rjk1MTAwRDMzOTVD
IC8qIEpTUG9zaXRpb25PcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTUG9zaXRpb25PcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MzMzBBMDYxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUG9zaXRpb25PcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDY5MSw3ICsxMDY5MSw3IEBACiAJCTkzMzA5REQ1MDk5
RTY0OTEwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4
MSAvKiBTaGFyZWRUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFy
ZWRUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUVBMTA5OUVCNzhD
MDA1NkU1ODEgLyogVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MzMyQUIzRDE2NTE1
RDc3MDBEODI3RUMgLyogR3JhcGhpY3NDb250ZXh0M0RORU9OLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETkVPTi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5MzMyQUIzRDE2NTE1RDc3MDBEODI3RUMgLyogR3JhcGhpY3NDb250ZXh0
R0xORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4
dEdMTkVPTi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMyQUI4NzE2NTNBOTc5
MDBEODI3RUMgLyogRkVCbGVuZE5FT04uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRkVCbGVuZE5FT04uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMkFCODgx
NjUzQTk3OTAwRDgyN0VDIC8qIEZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMyQUI4OTE2NTNBOTc5MDBEODI3RUMgLyogRkVH
YXVzc2lhbkJsdXJORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZFR2F1
c3NpYW5CbHVyTkVPTi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA5MzMsNyAr
MTA5MzMsNyBAQAogCQk5NTIwNzYwMDFGMjY3NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsVHJhY2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTUyMDc2MDExRjI2NzVGOTAwN0QyQUFCIC8qIENhbGxUcmFjZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FsbFRyYWNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NTIw
NzYwMjFGMjY3NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlclR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhbGxUcmFjZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NkFCQTQy
MjE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NkFCQTQyMjE0QkNC
ODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21t
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzA1OTk3NTEwN0Q5NzUyMDBB
NTBBN0MgLyogUG9saWN5Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb2xpY3lDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTcwNTk5NzYxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUG9saWN5Q2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NzBCNzI4OTE0NEZGQUM2MDBGMDBBMzcgLyogRXZlbnRJbnRlcmZhY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV2ZW50SW50ZXJmYWNlcy5oOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FdmVudEludGVyZmFjZXMuaDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE0MjM5LDggKzE0MjM5LDcgQEAKIAkJRDA3REVB
QjgwQTM2NTU0QTAwQ0EzMEY4IC8qIEluc2VydExpc3RDb21tYW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNlcnRMaXN0Q29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEMDg0MDMzQTIyMUNCRjU0MDAwMDcyMDUgLyogR1BVQnVmZmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdQVUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQwODQwMzNEMjIxRTE4NjQwMDAwNzIwNSAvKiBXZWJHUFVCaW5kR3JvdXBEZXNjcmlw
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJpbmRHcm91cERlc2NyaXB0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMDg0M0E0QTIwRkVCRTNEMDBGRTg2MEUg
LyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dDNETWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMDg0M0E0QzIw
RkVDMTY1MDBGRTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUQwODQzQTRDMjBGRUMxNjUwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NUU2NEEy
MjM2REVBRTAwQzNFMUUyIC8qIEdQVUJpbmRHcm91cE1ldGFsLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gR1BVQmluZEdyb3VwTWV0YWwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQwODZGRTk2MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtDb21tYW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDA4NkZFOTcwOUQ1M0FBQjAwNUJDNzREIC8qIFVubGlua0NvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5rQ29tbWFuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU5Myw3ICsxNTU5Miw3IEBACiAJCUZC
OTJERjQ5MTVGRUQwODcwMDk5NDQzMyAvKiBDbGlwUGF0aE9wZXJhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwUGF0aE9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGQjk2NUI4MTE3QkJCNUY5MDBFODM1QjkgLyogQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGaWx0ZXJJbWFn
ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCOTY1QjgyMTdCQkI2MkMw
MEU4MzVCOSAvKiBDU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlckltYWdlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGQkMy
MjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCRDZBRjgyMTVFRjIx
QTMwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCYXNpY1NoYXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZCRDZBRjgzMTVFRjIxQTMwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCYXNpY1NoYXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGQkQ2QUY4NDE1RUYyMUQ0MDA4QjcxMTAgLyogQmFzaWNTaGFwZUZ1bmN0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNpY1NoYXBlRnVuY3Rp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NDQ2LDcgKzE4NDQ1LDcg
QEAKIAkJCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyogRGlzcGxheVJlZnJlc2hNb25pdG9y
SU9TLm1tICovLAogCQkJCTFBQzJEODlDMUIxRTI5MUYwMEQ1MkU4NyAvKiBGb250QW50aWFsaWFz
aW5nU3RhdGVTYXZlci5oICovLAogCQkJCTM3MjdERkQ0MTQyQUFFNDUwMEQ0NDlDQiAvKiBGb250
Q2FjaGVJT1MubW0gKi8sCi0JCQkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNz
Q29udGV4dDNESU9TLmggKi8sCisJCQkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaCAqLywKIAkJCQlGRUQxM0QzRjBDRUE5Mzk0MDBEODk0
NjYgLyogSWNvbklPUy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gaW9zOwpAQCAtMjA5MTYsOSAr
MjA5MTUsOSBAQAogCQk2RTI3RjI0MTIyOThDRTJFMDBGMUY2MzIgLyogYW5nbGUgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZFMjdGMjQzMjI5QzlGODQw
MEYxRjYzMiAvKiBFeHRlbnNpb25zM0RBTkdMRS5jcHAgKi8sCi0JCQkJNkUyN0YyNDQyMjlDOUY4
RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnMzREFOR0xFLmggKi8sCi0JCQkJNkUyN0YyNDIyMjk4Q0U0
QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwICovLAorCQkJCTZFMjdGMjQz
MjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgKi8sCisJCQkJNkUyN0Yy
NDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8sCisJCQkJNkUyN0Yy
NDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwICovLAogCQkJ
CTZFMjkwODYxMjI5REI5NTAwMDA5ODZFMiAvKiBUZW1wb3JhcnlBTkdMRVNldHRpbmcuY3BwICov
LAogCQkJCTZFMjkwODYzMjI5REI5NzAwMDA5ODZFMiAvKiBUZW1wb3JhcnlBTkdMRVNldHRpbmcu
aCAqLywKIAkJCSk7CkBAIC0yMTcyMyw3ICsyMTcyMiw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTkzMzJBQjg2MTY1M0E5NzkwMEQ4MjdFQyAvKiBmaWx0ZXJz
ICovLAotCQkJCTkzMzJBQjNEMTY1MTVENzcwMEQ4MjdFQyAvKiBHcmFwaGljc0NvbnRleHQzRE5F
T04uaCAqLywKKwkJCQk5MzMyQUIzRDE2NTE1RDc3MDBEODI3RUMgLyogR3JhcGhpY3NDb250ZXh0
R0xORU9OLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGFybTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0yNDg4Nyw5ICsyNDg4Niw5IEBACiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKIAkJCQlCMjc1MzUyRDBCMDUzODE0MDAyQ0U2NEYg
LyogRmxvYXRTaXplQ0cuY3BwICovLAogCQkJCUJDNTNDNjBBMERBNTZDRjEwMDIxRUI1RCAvKiBH
cmFkaWVudENHLmNwcCAqLywKLQkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhp
Y3NDb250ZXh0M0RDRy5jcHAgKi8sCiAJCQkJQjJFRDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdy
YXBoaWNzQ29udGV4dENHLmNwcCAqLywKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyog
R3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKKwkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyog
R3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYw
IC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCiAJCQkJQjJBMTBCOTMw
QjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAogCQkJCTIyOTJCMjdCMTM1
NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCkBAIC0yNDk5Nyw3ICsy
NDk5Niw3IEBACiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNo
TW9uaXRvck1hbmFnZXIuaCAqLywKIAkJCQkzMURDREY0MTFEQTFDNDU0MDBFQTVCOTMgLyogRXh0
ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVu
ZGVkQ29sb3IuaCAqLywKLQkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9u
czNELmggKi8sCisJCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTC5o
ICovLAogCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmNwcCAqLywK
IAkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludC5oICovLAogCQkJCUIy
RTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovLApAQCAtMjUwNTgs
MTMgKzI1MDU3LDkgQEAKIAkJCQkyRDJGQzA1NzE0NjBDRDZGMDAyNjM2MzMgLyogR3JhZGllbnRJ
bWFnZS5oICovLAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRl
eHQuY3BwICovLAogCQkJCUIyQTAxNTkzMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0NvbnRl
eHQuaCAqLywKLQkJCQk2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0
M0QuY3BwICovLAotCQkJCTQ5QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRl
eHQzRC5oICovLAotCQkJCTdDMzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRl
eHQzREF0dHJpYnV0ZXMuaCAqLywKLQkJCQkzMTNERTg2RDIzQTk2OTY2MDA4RkM0N0IgLyogR3Jh
cGhpY3NDb250ZXh0M0RCYXNlLmNwcCAqLywKLQkJCQkzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0Ig
LyogR3JhcGhpY3NDb250ZXh0M0RCYXNlLmggKi8sCi0JCQkJRDA4NDNBNEMyMEZFQzE2NTAwRkU4
NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAgKi8sCi0JCQkJRDA4NDNBNEEyMEZF
QkUzRDAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oICovLAorCQkJCTMxM0RF
ODZEMjNBOTY5NjYwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5jcHAgKi8sCisJCQkJMzEz
REU4NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dEdMLmggKi8sCisJCQkJN0Mz
MzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICov
LAogCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNw
cCAqLywKIAkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1w
bC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNw
cCAqLywKQEAgLTI1Mjk4LDggKzI1MjkzLDggQEAKIAkJCQkxQzEyQUMyODFFRTc3OEFFMDA3OUUw
QTAgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgKi8sCiAJCQkJMUMxMkFD
MjkxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuaCAq
LywKIAkJCQlCNTMyMEQ2QTEyMkEyNEU5MDAyRDE0NDAgLyogRm9udFBsYXRmb3JtRGF0YUNvY29h
Lm1tICovLAotCQkJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQz
RENvY29hLm1tICovLAogCQkJCUIyNzdCNDAzMEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGljc0Nv
bnRleHRDb2NvYS5tbSAqLywKKwkJCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSAqLywKIAkJCQlDREE1OTU5NjIxNDZERjc4MDBBODQx
ODUgLyogSEVWQ1V0aWxpdGllc0NvY29hLmggKi8sCiAJCQkJQ0RBNTk1OTcyMTQ2REY3ODAwQTg0
MTg1IC8qIEhFVkNVdGlsaXRpZXNDb2NvYS5tbSAqLywKIAkJCQkyRDBCNEFBOTE4REExQ0NEMDA0
MzRERTEgLyogSU9TdXJmYWNlLmggKi8sCkBAIC0yODUzMSwxMiArMjg1MjYsMTYgQEAKIAkJRkJD
MjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9wZW5nbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVu
c2lvbnMzRE9wZW5HTC5jcHAgKi8sCi0JCQkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRE9wZW5HTC5oICovLAotCQkJCTQ0REFCNUFGMTVBNjIzNTgwMDk3QzFFNCAvKiBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovLAotCQkJCTQ0REFCNUIwMTVBNjIzNTgwMDk3
QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCAqLywKLQkJCQlGQkMyMjBERTEyMzdG
QkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICovLAotCQkJCTk2QUJB
NDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAg
Ki8sCisJCQkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTE9wZW5HTC5j
cHAgKi8sCisJCQkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTE9wZW5H
TC5oICovLAorCQkJCTQ0REFCNUFGMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zR0xPcGVu
R0xDb21tb24uY3BwICovLAorCQkJCTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNp
b25zR0xPcGVuR0xDb21tb24uaCAqLywKKwkJCQk2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyog
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwICovLAorCQkJCTQ5QzdCOUZCMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oICovLAorCQkJCUZCQzIyMERFMTIzN0ZC
RUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwICovLAorCQkJCTk2
QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5j
cHAgKi8sCisJCQkJRDA4NDNBNEMyMEZFQzE2NTAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlci5jcHAgKi8sCisJCQkJMzE5QTcyODcyM0MyNjdFNzAwODUzNTNDIC8qIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oICovLAogCQkJCTdBMjlCQTY5MTg3Qjc4MUMw
MEYyOUNFQiAvKiBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCAqLywKIAkJCQk3QTI5QkE2NzE4
N0I3MzIyMDBGMjlDRUIgLyogVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oICovLAogCQkJKTsKQEAg
LTI5ODQ5LDEwICsyOTg0OCwxMCBAQAogCQkJCTkzRDE5NjMxMUQ2Q0FCNzYwMEZDN0U0NyAvKiBF
eGNlcHRpb25Pci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2RDAwRDBGQzMx
IC8qIEV4dGVuZGFibGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0
MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQk2
RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLywK
LQkJCQk2RTcyRjU1MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0ZW5zaW9uczNEQU5HTEUuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RP
cGVuR0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFFNCAvKiBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTZFNjdEMkE5MTI4
MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFNzJG
NTUwMjI5RENEMTcwMEIzRTE1MSAvKiBFeHRlbnNpb25zR0xBTkdMRS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnNHTE9wZW5HTC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUy
QUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzQzMDRC
MTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVyZUxPRC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzcyODY5NEYxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDA0OCwxMiArMzAwNDcsMTIgQEAKIAkJCQlCMjIy
Nzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDQ4MUYwNDE0NkI1QzZCMDBBQTc4MzQgLyogR3JhZGllbnRJbWFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBo
aWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKLQkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5
NUMgLyogR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
MTNERTg3MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0M0RCYXNlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkzMUFCNTAwMDEyMjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0
M0RJT1MuaCBpbiBIZWFkZXJzICovLAotCQkJCUQwODQzQTRCMjBGRUJFM0QwMEZFODYwRSAvKiBH
cmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNDkwN0U0MTI1
QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzEzREU4NzAyM0E5Njk3MzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dEdMLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcg
LyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxQUI1MDAw
MTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTlBNzI4ODIzQzI2N0ZFMDA4NTM1M0MgLyogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREFDQjlFOTIzNzU1RDAwMDBC
NEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3
MDgwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NM
YXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzU5OCw3ICszMzU5Nyw3IEBACiAJCQkJQkUyMzQ4
MEMxOEE5ODcwQjAwRTRCNkU4IC8qIERhdGFDdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDQ2
M0NGNjgyMjEyRkE2ODAwMUE4NTc3IC8qIERhdGFEZXRlY3RvcnNDb3JlU29mdExpbmsubW0gaW4g
U291cmNlcyAqLywKIAkJCQk1MTVCRTE4RjFENTRGNUZCMDBERDdDNjggLyogRW1wdHlHYW1lcGFk
UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU3MkY1NEMyMjlEQ0QwQzAwQjNFMTUx
IC8qIEV4dGVuc2lvbnMzREFOR0xFLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFNzJGNTRDMjI5
RENEMEMwMEIzRTE1MSAvKiBFeHRlbnNpb25zR0xBTkdMRS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxQTRCQjBBMTk1NEQ2MTYwMEZBNUMyRSAvKiBHYW1lcGFkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxOEY0RkY2MTk0Q0E0RTYwMDgxQkFBRSAvKiBHYW1lcGFkQnV0dG9u
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM2MDYsOCArMzM2MDUsNyBAQAogCQkJCTUxQTlEOUU5
MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTVCRTE5MTFENTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTgzNzk2NENGMUY4REI2OUQwMDIxOEVBMCAvKiBHZW9sb2NhdGlvblBvc2l0
aW9uRGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTZFMjFDNkMwMTEyNjMzODUwMEE3QkUw
MiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2RTcyRjU0RTIy
OURDRDEwMDBCM0UxNTEgLyogR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk2RTcyRjU0RTIyOURDRDEwMDBCM0UxNTEgLyogR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzNFNTEwQjE4REY4RjM1MDBDMTEyRjcgLyogSFRN
TENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4RDA2QjNBMEEyNjVEQ0QwMDVFNzIw
MyAvKiBIVE1MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDOTAwQzMxOTQzQzBGQzAw
ODYyNUI1IC8qIEhUVFBIZWFkZXJOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IDY0MzEyMWI1OWIyY2YyOTJiYTYwZjU4
ODAyNDBjZjg3M2MxMThiY2EuLmNjOTNhZGE5NWE1YjNkYWRkNzY1NTRhOTdmYTBhZWU5NTdlOWU1
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtMjk0LDcg
KzI5NCw3IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRl
eHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zCiAgICAgcGxheWVyLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dChjb250ZXh0LCBkZXN0UmVjdCk7CiB9CiAKLWJvb2wgSFRNTFZpZGVv
RWxlbWVudDo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBI
VE1MVmlkZW9FbGVtZW50Ojpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCiB7CiAgICAgaWYgKCFwbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAppbmRleCBiM2EwNmRkY2Y2YzZhMGE1NGQy
ZDc3OWMyOTQ3ZjU2MjZmMDRjMDk0Li40Yzg4MjA4NDRmYTRjN2M5MjVkM2U5YzZjOWRkMDIwYTI0
M2I2NDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaApAQCAtNzQsNyAr
NzQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBVc2VkIGJ5IFdlYkdMIHRvIGRvIEdQVS1HUFUgdGV4
dHVyZXMgY29weSBpZiBwb3NzaWJsZS4KICAgICAvLyBTZWUgbW9yZSBkZXRhaWxzIGF0IE1lZGlh
UGxheWVyOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoKSBkZWZpbmVkIGluIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmguCi0gICAgYm9vbCBj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKKyAgICBib29sIGNvcHlWaWRlb1RleHR1
cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOwogCiAgICAgYm9vbCBzaG91bGREaXNwbGF5UG9zdGVy
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBkaXNwbGF5TW9kZSgpID09IFBvc3RlciB8fCBkaXNwbGF5
TW9kZSgpID09IFBvc3RlcldhaXRpbmdGb3JWaWRlbzsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggOWY3OGU4YjJiZWNiMThiOTg5ZjYyOGRlMTNjMTNlZGE5
MGI2YjI5MS4uMDkxYTM2OTkyYTljMzVmMTMwZjg1ZGNjODE4Zjk1OTdlMjcyZGVjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJU
b0ltYWdlQml0bWFwKCkKICAgICAgICAgaWYgKCFpbWFnZUJpdG1hcC0+YnVmZmVyKCkpCiAgICAg
ICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKLSAg
ICAgICAgYXV0byogZ2MzZCA9IHdlYkdMQ29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKKyAg
ICAgICAgYXV0byogZ2MzZCA9IHdlYkdMQ29udGV4dC0+Z3JhcGhpY3NDb250ZXh0R0woKTsKICAg
ICAgICAgZ2MzZC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoaW1hZ2VCaXRtYXAtPmJ1
ZmZlcigpKTsKIAogICAgICAgICAvLyBGSVhNRTogVGhlIHRyYW5zZmVyIGFsZ29yaXRobSByZXF1
aXJlcyB0aGF0IHRoZSBjYW52YXMgZWZmZWN0aXZlbHkKQEAgLTE1NSw5ICsxNTUsOSBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9J
bWFnZUJpdG1hcCgpCiAgICAgICAgIC8vIG5lZWQgdG8gZXJhc2Ugd2hhdCdzIHRoZXJlLgogCiAg
ICAgICAgIEdDM0RmbG9hdCBjbGVhckNvbG9yWzRdOwotICAgICAgICBnYzNkLT5nZXRGbG9hdHYo
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICAg
ICAgZ2MzZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9DTEVBUl9WQUxVRSwg
Y2xlYXJDb2xvcik7CiAgICAgICAgIGdjM2QtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAg
ICAgIGdjM2QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CVUZGRVJfQklUKTsKKyAgICAgICAgZ2MzZC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0R0w6
OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgICAgICBnYzNkLT5j
bGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNs
ZWFyQ29sb3JbM10pOwogCiAgICAgICAgIHJldHVybiB7IFdURk1vdmUoaW1hZ2VCaXRtYXApIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFy
cmF5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5
cy5jcHAKaW5kZXggNzQwZDU0YjI1NDc1Y2Y3ODMyNDQ2ZTdhYjczYWZjYWMyZWYzNTgzYi4uOGQ3
NGU0MDk4MjM3NTYwMDE4ZWMwZTM5YTkxZTk2YzcwMWU3OTJhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcApAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgIkFOR0xFSW5zdGFuY2VkQXJyYXlzLmgiCiAKICNpZiBQTEFURk9S
TShHVEspIHx8IFVTRShBTkdMRSkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRl
ICJFeHRlbnNpb25zR0wuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3
ICszOCw3IEBAIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29u
dGV4dCkKIHsKICNpZiBVU0UoQU5HTEUpCi0gICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgp
LT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmVu
c3VyZUVuYWJsZWQoIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKICNlbmRpZgogfQogCkBA
IC01MywxMyArNTMsMTMgQEAgYm9vbCBBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwor
ICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5z
dXBwb3J0cygiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7CiAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICNlbGlmIFBMQVRGT1JN
KEdUSykKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNp
b25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKKyAgICByZXR1cm4g
Y29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdM
X0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRl
eHQpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAppbmRleCA0MmJiM2UyOTM1OGE4ZTEwZWQ2ODI5
MGYzOTY3ODQ5OTg0ZmQ1MjUxLi40MTBjZWE1ZjRkYmE1ODYxNDdmODJlZTc4YjVkYmE3OTk5MTk3
YTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJh
eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJy
YXlPYmplY3QuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NjEsMTMgKzYxLDEzIEBAIHZvaWQgT0VTVmVydGV4QXJyYXlPYmplY3Q6OmRlbGV0ZVZlcnRleEFy
cmF5T0VTKFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMqIGFycmF5CiAgICAgaWYgKCFhcnJheU9i
amVjdC0+aXNEZWZhdWx0T2JqZWN0KCkgJiYgYXJyYXlPYmplY3QgPT0gc3RhdGljX2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Jj4obV9jb250ZXh0KS5tX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qp
CiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCY+KG1fY29udGV4dCku
c2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChudWxscHRyKTsKIAotICAgIGFycmF5T2JqZWN0LT5k
ZWxldGVPYmplY3QobV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIGFycmF5T2Jq
ZWN0LT5kZWxldGVPYmplY3QobV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCkpOwogfQogCiBH
QzNEYm9vbGVhbiBPRVNWZXJ0ZXhBcnJheU9iamVjdDo6aXNWZXJ0ZXhBcnJheU9FUyhXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTKiBhcnJheU9iamVjdCkKIHsKICAgICByZXR1cm4gYXJyYXlPYmpl
Y3QgJiYgIW1fY29udGV4dC5pc0NvbnRleHRMb3N0KCkgJiYgYXJyYXlPYmplY3QtPmhhc0V2ZXJC
ZWVuQm91bmQoKQotICAgICAgICAmJiBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0
RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXlPYmplY3QtPm9iamVjdCgpKTsKKyAg
ICAgICAgJiYgbV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5p
c1ZlcnRleEFycmF5T0VTKGFycmF5T2JqZWN0LT5vYmplY3QoKSk7CiB9CiAKIHZvaWQgT0VTVmVy
dGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyhXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTKiBhcnJheU9iamVjdCkKQEAgLTc2LDExICs3NiwxMSBAQCB2b2lkIE9FU1ZlcnRleEFycmF5
T2JqZWN0OjpiaW5kVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyogYXJy
YXlPYgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXJyYXlPYmplY3QgJiYgKGFycmF5T2Jq
ZWN0LT5pc0RlbGV0ZWQoKSB8fCAhYXJyYXlPYmplY3QtPnZhbGlkYXRlKG51bGxwdHIsIGNvbnRl
eHQoKSkpKSB7Ci0gICAgICAgIG1fY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8mIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+
Z2V0RXh0ZW5zaW9ucygpOworICAgIGF1dG8mIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpOwogICAgIGF1dG8mIGNvbnRleHQgPSBkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KG1fY29udGV4dCk7CiAgICAgaWYgKGFycmF5T2Jq
ZWN0ICYmICFhcnJheU9iamVjdC0+aXNEZWZhdWx0T2JqZWN0KCkgJiYgYXJyYXlPYmplY3QtPm9i
amVjdCgpKSB7CiAgICAgICAgIGV4dGVuc2lvbnMuYmluZFZlcnRleEFycmF5T0VTKGFycmF5T2Jq
ZWN0LT5vYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDBiM2RiZmZmZTFiMGRjM2Y1MGIxYWJjMTg1
MTE3Y2EzNzZmMWJmY2EuLmU5MjMwODNlMjM0Y2JiOWU4NzcwOTIxMWUyNTUxNWNmOTg4YmQzZWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgogI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxWaWRlb0VsZW1lbnQuaCIKQEAgLTY3LDcgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoV2ViR0wyUmVuZGVyaW5nQ29udGV4dCk7
CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBHcmFwaGljc0NvbnRleHQzREF0
dHJpYnV0ZXMgYXR0cmlidXRlcykKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250
ZXh0PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIHsKICAgICBhdXRvIHJlbmRl
cmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4obmV3
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7CiAKQEAgLTc2LDcg
Kzc2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXMKICAgICByZXR1cm4gcmVuZGVyaW5nQ29u
dGV4dDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFwaGlj
c0NvbnRleHQzRD4mJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w+JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCiB7CiAgICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywg
V1RGTW92ZShjb250ZXh0KSwgYXR0cmlidXRlcykpOwogCkBAIC04NSwxMiArODUsMTIgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZShDYW52YXNCYXMKICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KIAot
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNl
JiBjYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiBjYW52
YXMsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAgIDogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZShjYW52YXMsIGF0dHJpYnV0ZXMpCiB7CiB9CiAKLVdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFz
LCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0RBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMpCitXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJSZW5kZXJp
bmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
PiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogICAg
IDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShjYW52YXMsIFdURk1vdmUoY29udGV4dCksIGF0
dHJpYnV0ZXMpCiB7CiAgICAgaW5pdGlhbGl6ZVNoYWRlckV4dGVuc2lvbnMoKTsKQEAgLTE0Miw3
ICsxNDIsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBjb25zdCBBcnJheUJ1ZmZlclZpZXcmCiB7CiAgICAgYXV0byBvcHRpb25hbEVs
ZW1lbnRTaXplID0gYXJyYXlCdWZmZXJWaWV3RWxlbWVudFNpemUoZGF0YSk7CiAgICAgaWYgKCFv
cHRpb25hbEVsZW1lbnRTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJ1ZmZlckRhdGEiLCAiSW52YWxpZCB0eXBl
IG9mIEFycmF5IEJ1ZmZlciBWaWV3Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImJ1ZmZlckRhdGEiLCAiSW52YWxpZCB0
eXBlIG9mIEFycmF5IEJ1ZmZlciBWaWV3Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
YXV0byBlbGVtZW50U2l6ZSA9IG9wdGlvbmFsRWxlbWVudFNpemUudmFsdWUoKTsKQEAgLTE1Nywx
MyArMTU3LDEzIEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIGNvbnN0IEFycmF5QnVmZmVyVmlldyYKICAgICAgICAgfHwgY2hlY2tlZEJ5
dGVMZW5ndGguaGFzT3ZlcmZsb3dlZCgpCiAgICAgICAgIHx8IGNoZWNrZWRCeXRlU3JjT2Zmc2V0
LnVuc2FmZUdldCgpID4gZGF0YS5ieXRlTGVuZ3RoKCkKICAgICAgICAgfHwgY2hlY2tlZEJ5dGVM
ZW5ndGgudW5zYWZlR2V0KCkgPiBkYXRhLmJ5dGVMZW5ndGgoKSAtIGNoZWNrZWRCeXRlU3JjT2Zm
c2V0LnVuc2FmZUdldCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzcmNPZmZzZXQgb3IgbGVuZ3Ro
IGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNyY09mZnNldCBvciBsZW5n
dGggaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0
byBzbGljZSA9IFVpbnQ4QXJyYXk6OnRyeUNyZWF0ZShkYXRhLnBvc3NpYmx5U2hhcmVkQnVmZmVy
KCksIGRhdGEuYnl0ZU9mZnNldCgpICsgY2hlY2tlZEJ5dGVTcmNPZmZzZXQudW5zYWZlR2V0KCks
IGNoZWNrZWRCeXRlTGVuZ3RoLnVuc2FmZUdldCgpKTsKICAgICBpZiAoIXNsaWNlKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAi
YnVmZmVyRGF0YSIsICJDb3VsZCBub3QgY3JlYXRlIGludGVybWVkaWF0ZSBBcnJheUJ1ZmZlclZp
ZXciKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6Ok9VVF9P
Rl9NRU1PUlksICJidWZmZXJEYXRhIiwgIkNvdWxkIG5vdCBjcmVhdGUgaW50ZXJtZWRpYXRlIEFy
cmF5QnVmZmVyVmlldyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEodGFyZ2V0LCBCdWZmZXJEYXRhU291cmNlKHNsaWNl
LmdldCgpKSwgdXNhZ2UpOwpAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQs
IGNvCiB7CiAgICAgYXV0byBvcHRpb25hbEVsZW1lbnRTaXplID0gYXJyYXlCdWZmZXJWaWV3RWxl
bWVudFNpemUoZGF0YSk7CiAgICAgaWYgKCFvcHRpb25hbEVsZW1lbnRTaXplKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImJ1ZmZlclN1YkRhdGEiLCAiSW52YWxpZCB0eXBlIG9mIEFycmF5IEJ1ZmZlciBWaWV3Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgImJ1ZmZlclN1YkRhdGEiLCAiSW52YWxpZCB0eXBlIG9mIEFycmF5IEJ1ZmZlciBWaWV3
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBlbGVtZW50U2l6ZSA9IG9wdGlv
bmFsRWxlbWVudFNpemUudmFsdWUoKTsKQEAgLTE4OCwxMyArMTg4LDEzIEBAIHZvaWQgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9u
ZyBvZmZzZXQsIGNvCiAgICAgICAgIHx8IGNoZWNrZWRCeXRlTGVuZ3RoLmhhc092ZXJmbG93ZWQo
KQogICAgICAgICB8fCBjaGVja2VkQnl0ZVNyY09mZnNldC51bnNhZmVHZXQoKSA+IGRhdGEuYnl0
ZUxlbmd0aCgpCiAgICAgICAgIHx8IGNoZWNrZWRCeXRlTGVuZ3RoLnVuc2FmZUdldCgpID4gZGF0
YS5ieXRlTGVuZ3RoKCkgLSBjaGVja2VkQnl0ZVNyY09mZnNldC51bnNhZmVHZXQoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImJ1ZmZlclN1YkRhdGEiLCAic3JjT2Zmc2V0IG9yIGxlbmd0aCBpcyBvdXQgb2YgYm91bmRzIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyU3ViRGF0YSIsICJzcmNPZmZzZXQgb3IgbGVuZ3RoIGlzIG91dCBvZiBib3Vu
ZHMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gc2xpY2UgPSBVaW50OEFy
cmF5Ojp0cnlDcmVhdGUoZGF0YS5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpLCBkYXRhLmJ5dGVPZmZz
ZXQoKSArIGNoZWNrZWRCeXRlU3JjT2Zmc2V0LnVuc2FmZUdldCgpLCBjaGVja2VkQnl0ZUxlbmd0
aC51bnNhZmVHZXQoKSk7CiAgICAgaWYgKCFzbGljZSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgImJ1ZmZlclN1YkRhdGEiLCAi
Q291bGQgbm90IGNyZWF0ZSBpbnRlcm1lZGlhdGUgQXJyYXlCdWZmZXJWaWV3Iik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpPVVRfT0ZfTUVNT1JZLCAiYnVm
ZmVyU3ViRGF0YSIsICJDb3VsZCBub3QgY3JlYXRlIGludGVybWVkaWF0ZSBBcnJheUJ1ZmZlclZp
ZXciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjA1LDE5ICsyMDUsMTkgQEAgdm9p
ZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpjb3B5QnVmZmVyU3ViRGF0YShHQzNEZW51bSByZWFk
VGFyZ2V0LCBHQzNEZW51bSB3cmkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKChyZWFkVGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiAmJiB3cml0ZVRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIHx8ICh3cml0ZVRhcmdldCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIgJiYgcmVhZFRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlC
dWZmZXJTdWJEYXRhIiwgIkVpdGhlciBib3RoIHRhcmdldHMgbmVlZCB0byBiZSBFTEVNRU5UX0FS
UkFZX0JVRkZFUiBvciBuZWl0aGVyIHNob3VsZCBiZSBFTEVNRU5UX0FSUkFZX0JVRkZFUi4iKTsK
KyAgICBpZiAoKHJlYWRUYXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlf
QlVGRkVSICYmIHdyaXRlVGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUikKKyAgICAgICAgfHwgKHdyaXRlVGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUiAmJiByZWFkVGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAiRWl0
aGVyIGJvdGggdGFyZ2V0cyBuZWVkIHRvIGJlIEVMRU1FTlRfQVJSQVlfQlVGRkVSIG9yIG5laXRo
ZXIgc2hvdWxkIGJlIEVMRU1FTlRfQVJSQVlfQlVGRkVSLiIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChyZWFkT2Zmc2V0IDwgMCB8fCB3cml0ZU9mZnNldCA8IDAgfHwgc2l6ZSA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1
ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IFJlZlB0cjxXZWJHTEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFt
ZXRlcnMoImNvcHlCdWZmZXJTdWJEYXRhIiwgcmVhZFRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlNUQVRJQ19EUkFXKTsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IHdyaXRlQnVmZmVyID0gdmFs
aWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiY29weUJ1ZmZlclN1YkRhdGEiLCB3cml0ZVRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBSZWZQdHI8V2ViR0xCdWZm
ZXI+IHJlYWRCdWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJjb3B5QnVmZmVy
U3ViRGF0YSIsIHJlYWRUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEFUSUNfRFJBVyk7Cisg
ICAgUmVmUHRyPFdlYkdMQnVmZmVyPiB3cml0ZUJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImNvcHlCdWZmZXJTdWJEYXRhIiwgd3JpdGVUYXJnZXQsIEdyYXBoaWNzQ29udGV4
dEdMOjpTVEFUSUNfRFJBVyk7CiAgICAgaWYgKCFyZWFkQnVmZmVyIHx8ICF3cml0ZUJ1ZmZlcikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIkludmFsaWQgcmVhZFRhcmdldCBvciB3cml0ZVRh
cmdldCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIkludmFsaWQgcmVhZFRhcmdldCBvciB3
cml0ZVRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMjUsMTIgKzIyNSwx
MiBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaQogICAgIENoZWNrZWQ8R0MzRGludHB0ciwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRXcml0ZU9mZnNldCh3cml0ZU9mZnNldCk7CiAgICAgQ2hlY2tl
ZDxHQzNEc2l6ZWlwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU2l6ZShzaXplKTsKICAgICBp
ZiAoY2hlY2tlZFJlYWRPZmZzZXQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRXcml0ZU9mZnNl
dC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFNpemUuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
Y29weUJ1ZmZlclN1YkRhdGEiLCAiT2Zmc2V0IG9yIHNpemUgaXMgdG9vIGJpZyIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNv
cHlCdWZmZXJTdWJEYXRhIiwgIk9mZnNldCBvciBzaXplIGlzIHRvbyBiaWciKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmICghd3JpdGVCdWZmZXItPmFzc29jaWF0ZUNvcHlCdWZm
ZXJTdWJEYXRhKCpyZWFkQnVmZmVyLCBjaGVja2VkUmVhZE9mZnNldC51bnNhZmVHZXQoKSwgY2hl
Y2tlZFdyaXRlT2Zmc2V0LnVuc2FmZUdldCgpLCBjaGVja2VkU2l6ZS51bnNhZmVHZXQoKSkpIHsK
LSAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Cisg
ICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNDgsMjkgKzI0OCwyOSBAQCB2b2lkIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxv
bmcgc3JjQnl0ZQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIgPSB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHRHTDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1
ZmZlclN1YkRhdGEiLCAiTm8gV2ViR0xCdWZmZXIgaXMgYm91bmQgdG8gdGFyZ2V0Iik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
TiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiTm8gV2ViR0xCdWZmZXIgaXMgYm91bmQgdG8gdGFyZ2V0
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBGSVhNRTogSW1wbGVtZW50ICJJ
ZiB0YXJnZXQgaXMgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUiwgYW5kIGFueSB0cmFuc2Zvcm0g
ZmVlZGJhY2sgb2JqZWN0IGlzIGN1cnJlbnRseSBhY3RpdmUsIGFuIElOVkFMSURfT1BFUkFUSU9O
IGVycm9yIGlzIGdlbmVyYXRlZC4iCiAKICAgICBpZiAoIWRzdERhdGEpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0
QnVmZmVyU3ViRGF0YSIsICJOdWxsIGRzdERhdGEiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0
YSIsICJOdWxsIGRzdERhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8g
b3B0aW9uYWxFbGVtZW50U2l6ZSA9IGFycmF5QnVmZmVyVmlld0VsZW1lbnRTaXplKCpkc3REYXRh
KTsKICAgICBpZiAoIW9wdGlvbmFsRWxlbWVudFNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3Vi
RGF0YSIsICJJbnZhbGlkIHR5cGUgb2YgQXJyYXkgQnVmZmVyIFZpZXciKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0
QnVmZmVyU3ViRGF0YSIsICJJbnZhbGlkIHR5cGUgb2YgQXJyYXkgQnVmZmVyIFZpZXciKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIGVsZW1lbnRTaXplID0gb3B0aW9uYWxFbGVt
ZW50U2l6ZS52YWx1ZSgpOwogICAgIGF1dG8gZHN0RGF0YUxlbmd0aCA9IGRzdERhdGEtPmJ5dGVM
ZW5ndGgoKSAvIGVsZW1lbnRTaXplOwogCiAgICAgaWYgKGRzdE9mZnNldCA+IGRzdERhdGFMZW5n
dGgpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJkc3RPZmZzZXQgaXMgbGFyZ2VyIHRo
YW4gdGhlIGxlbmd0aCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRC
dWZmZXJTdWJEYXRhIiwgImRzdE9mZnNldCBpcyBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRo
ZSBkZXN0aW5hdGlvbiBidWZmZXIuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI4
MCwxNyArMjgwLDE3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyU3Vi
RGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNCeXRlCiAgICAgQ2hlY2tlZDxHQzNE
dWludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3B5TGVuZ3RoKGNvcHlMZW5ndGgpOwogICAg
IGF1dG8gY2hlY2tlZERlc3RpbmF0aW9uRW5kID0gY2hlY2tlZERzdE9mZnNldCArIGNoZWNrZWRD
b3B5TGVuZ3RoOwogICAgIGlmIChjaGVja2VkRGVzdGluYXRpb25FbmQuaGFzT3ZlcmZsb3dlZCgp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiZHN0T2Zmc2V0ICsgY29weUxlbmd0aCBp
cyB0b28gaGlnaCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgImRzdE9mZnNldCArIGNv
cHlMZW5ndGggaXMgdG9vIGhpZ2giKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChjaGVja2VkRGVzdGluYXRpb25FbmQudW5zYWZlR2V0KCkgPiBkc3REYXRhTGVuZ3RoKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiZW5kIG9mIHdyaXR0ZW4gZGVzdGluYXRpb24gaXMg
cGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIs
ICJlbmQgb2Ygd3JpdHRlbiBkZXN0aW5hdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZl
ciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHNyY0J5dGVPZmZzZXQgPCAw
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAic3JjQnl0ZU9mZnNldCBpcyBsZXNzIHRo
YW4gMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgInNyY0J5dGVPZmZzZXQgaXMgbGVz
cyB0aGFuIDAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjk5LDE3ICsyOTksMTcg
QEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJTdWJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgbG9uZyBsb25nIHNyY0J5dGUKICAgICBDaGVja2VkPEdDM0RpbnRwdHIsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkRWxlbWVudFNpemUoZWxlbWVudFNpemUpOwogICAgIGF1dG8gY2hl
Y2tlZFNvdXJjZUVuZCA9IGNoZWNrZWRTcmNCeXRlT2Zmc2V0ICsgY2hlY2tlZENvcHlMZW5ndGhQ
dHIgKiBjaGVja2VkRWxlbWVudFNpemU7CiAgICAgaWYgKGNoZWNrZWRTb3VyY2VFbmQuaGFzT3Zl
cmZsb3dlZCgpIHx8IGNoZWNrZWRTb3VyY2VFbmQudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVM
ZW5ndGgoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIlBhcmFtZXRlcnMgd291bGQg
cmVhZCBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNvdXJjZSBidWZmZXIiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0QnVmZmVyU3ViRGF0YSIsICJQYXJhbWV0ZXJzIHdvdWxkIHJlYWQgb3V0c2lkZSB0aGUgYm91
bmRzIG9mIHRoZSBzb3VyY2UgYnVmZmVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIC8vIEZJWE1FOiBDb2FsZXNjZSBtdWx0aXBsZSBnZXRCdWZmZXJTdWJE
YXRhKCkgY2FsbHMgdG8gdXNlIGEgc2luZ2xlIG1hcCgpIGNhbGwKLSAgICB2b2lkKiBwdHIgPSBt
X2NvbnRleHQtPm1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgY2hlY2tlZFNyY0J5dGVPZmZzZXQudW5z
YWZlR2V0KCksIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oY2hlY2tlZENvcHlMZW5ndGhQdHIu
dW5zYWZlR2V0KCkgKiBjaGVja2VkRWxlbWVudFNpemUudW5zYWZlR2V0KCkpLCBHcmFwaGljc0Nv
bnRleHQzRDo6TUFQX1JFQURfQklUKTsKKyAgICB2b2lkKiBwdHIgPSBtX2NvbnRleHQtPm1hcEJ1
ZmZlclJhbmdlKHRhcmdldCwgY2hlY2tlZFNyY0J5dGVPZmZzZXQudW5zYWZlR2V0KCksIHN0YXRp
Y19jYXN0PEdDM0RzaXplaXB0cj4oY2hlY2tlZENvcHlMZW5ndGhQdHIudW5zYWZlR2V0KCkgKiBj
aGVja2VkRWxlbWVudFNpemUudW5zYWZlR2V0KCkpLCBHcmFwaGljc0NvbnRleHRHTDo6TUFQX1JF
QURfQklUKTsKICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KGRzdERhdGEtPmJhc2VBZGRy
ZXNzKCkpICsgZHN0RGF0YS0+Ynl0ZU9mZnNldCgpICsgZHN0T2Zmc2V0ICogZWxlbWVudFNpemUs
IHB0ciwgY29weUxlbmd0aCAqIGVsZW1lbnRTaXplKTsKICAgICBpZiAoIW1fY29udGV4dC0+dW5t
YXBCdWZmZXIodGFyZ2V0KSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJGYWlsZWQgd2hp
bGUgdW5tYXBwaW5nIGJ1ZmZlciIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgIkZhaWxl
ZCB3aGlsZSB1bm1hcHBpbmcgYnVmZmVyIik7CiAjZW5kaWYKICAgICBtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwogfQpAQCAtMzI5LDM5ICszMjksMzkgQEAgc3Rh
dGljIGJvb2wgaXNSZW5kZXJhYmxlSW50ZXJuYWxmb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQpCiB7CiAgICAgLy8gT3BlbkdMIEVTIDM6IGludGVybmFsZm9ybWF0IG11c3QgYmUgYSBjb2xv
ci1yZW5kZXJhYmxlLCBkZXB0aC1yZW5kZXJhYmxlLCBvciBzdGVuY2lsLXJlbmRlcmFibGUgZm9y
bWF0LCBhcyBzaG93biBpbiBUYWJsZSAxIGJlbG93LgogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSODoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRzE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBODoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQThJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVO
VDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyVUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1JHQjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjVfQTE6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgz
MkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9JTkRFWDg6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNzMs
MTQgKzM3MywxNCBAQCBXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRlcm5h
bGZvcm1hdFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDMwogICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKHBuYW1l
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVTKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRJbnRlcm5hbGZvcm1hdFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgaWYgKHBuYW1lICE9IEdy
YXBoaWNzQ29udGV4dEdMOjpTQU1QTEVTKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAogICAgIGludCBudW1WYWx1ZXMgPSAwOwogI2lmIFVTRShPUEVOR0xfRVMpCi0gICAg
bV9jb250ZXh0LT5nZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpOVU1fU0FNUExFX0NPVU5UUywgMSwgJm51bVZhbHVlcyk7CisgICAg
bV9jb250ZXh0LT5nZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIEdy
YXBoaWNzQ29udGV4dEdMOjpOVU1fU0FNUExFX0NPVU5UUywgMSwgJm51bVZhbHVlcyk7CiAKICAg
ICBHQzNEaW50IHBhcmFtc1tudW1WYWx1ZXNdOwogICAgIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxm
b3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgbnVtVmFsdWVzLCBwYXJhbXMp
OwpAQCAtMzg4LDIxICszODgsMjEgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Z2V0SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzMKICAgICAvLyBP
biBkZXNrdG9wIE9wZW5HTCA0LjEgb3IgYmVsb3cgd2UgbXVzdCBlbXVsYXRlIGdsR2V0SW50ZXJu
YWxmb3JtYXRpdi4KIAogICAgIC8vIEdMX0lOVkFMSURfRU5VTSBpcyBnZW5lcmF0ZWQgaWYgdGFy
Z2V0IGlzIG5vdCBHTF9SRU5ERVJCVUZGRVIuCi0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlciIs
ICJpbnZhbGlkIHRhcmdldCIpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgLy8gR0xf
SU5WQUxJRF9FTlVNIGlzIGdlbmVyYXRlZCBpZiBpbnRlcm5hbGZvcm1hdCBpcyBub3QgY29sb3It
LCBkZXB0aC0sIG9yIHN0ZW5jaWwtcmVuZGVyYWJsZS4KICAgICBpZiAoIWlzUmVuZGVyYWJsZUlu
dGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW50ZXJuYWxmb3JtYXRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBpbnRlcm5hbCBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEludGVybmFsZm9ybWF0
UGFyYW1ldGVyIiwgImludmFsaWQgaW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAogICAgIFZlY3RvcjxHQzNEaW50PiBzYW1wbGVzOwogICAgIC8vIFRo
ZSB3YXkgSSB1bmRlcnN0YW5kIHRoaXMgaXMgdGhhdCB0aGlzIHdpbGwgcmV0dXJuIGEgTUlOSU1V
TSBudW1TYW1wbGVzIGZvciBhbGwgYWNjZXBldGVkIGludGVybmFsZm9ybWF0cy4KICAgICAvLyBI
b3dldmVyLCB0aGUgdHJ1ZSB2YWx1ZSBvZiB0aGlzIG9uIHN1cHBvcnRlZCBHTCB2ZXJzaW9ucyBp
cyBnbGVhbmVkIHZpYSBhIGdldEludGVybmFsZm9ybWF0aXYgY2FsbCB0aGF0IGRlcGVuZHMgb24g
aW50ZXJuYWxmb3JtYXQuCi0gICAgaW50IG51bVNhbXBsZXNNYXNrID0gZ2V0SW50UGFyYW1ldGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfU0FNUExFUyk7CisgICAgaW50IG51bVNhbXBsZXNNYXNr
ID0gZ2V0SW50UGFyYW1ldGVyKEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfU0FNUExFUyk7CiAKICAg
ICB3aGlsZSAobnVtU2FtcGxlc01hc2sgPiAwKSB7CiAgICAgICAgIHNhbXBsZXMuYXBwZW5kKG51
bVNhbXBsZXNNYXNrKTsKQEAgLTQzOSw1NyArNDM5LDU3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwg
R0MzCiB7CiAgICAgLy8gVG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIFdlYkdMIDEsIGFs
c28gYWNjZXB0cyBpbnRlcm5hbCBmb3JtYXQgREVQVEhfU1RFTkNJTCwKICAgICAvLyB3aGljaCBz
aG91bGQgYmUgbWFwcGVkIHRvIERFUFRIMjRfU1RFTkNJTDggYnkgaW1wbGVtZW50YXRpb25zLgot
ICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJ
TCkKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9T
VEVOQ0lMODsKKyAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX1NURU5DSUwpCisgICAgICAgIGludGVybmFsZm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIMjRfU1RFTkNJTDg7CiAKICAgICAvLyBFUyAzOiBHTF9JTlZBTElEX09QRVJBVElPTiBp
cyBnZW5lcmF0ZWQgaWYgaW50ZXJuYWxmb3JtYXQgaXMgYSBzaWduZWQgb3IgdW5zaWduZWQgaW50
ZWdlciBmb3JtYXQgYW5kIHNhbXBsZXMgaXMgZ3JlYXRlciB0aGFuIDAuCiAgICAgaWYgKGlzSW50
ZWdlckZvcm1hdChpbnRlcm5hbGZvcm1hdCkgJiYgc2FtcGxlcyA+IDApIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlIiwgIm11bHRpc2FtcGxpbmcgbm90IHN1cHBvcnRl
ZCBmb3IgdGhpcyBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlIiwgIm11bHRpc2FtcGxpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBmb3JtYXQiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkExNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
MTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4SToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2
VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09N
UE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJG
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2SToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOEk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJVSToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjVfQTE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9JTkRFWDg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4OgogICAgICAgICBtX2NvbnRl
eHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5k
aW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMjRfU1RF
TkNJTDg6CiAgICAgICAgIGlmICghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzCiAg
ICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxm
b3JtYXQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3Rv
cmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdl
IiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBhcHBseVN0ZW5jaWxUZXN0KCk7CkBAIC01MDcsODggKzUwNyw4OCBAQCB2b2lkIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0
YXJnZXQsIEdDMwogYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleFN0b3Jh
Z2VGdW5jUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAogICAgIGlmICh3aWR0aCA+IG1fbWF4VGV4dHVyZVNpemUgfHwgaGVpZ2h0ID4gbV9t
YXhUZXh0dXJlU2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJ0ZXh0dXJlIGRpbWVuc2lvbnMgYXJl
IGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHRleHR1cmUgc2l6ZSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJ0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHRleHR1cmUg
c2l6ZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgIGlmICh0YXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVApIHsKICAgICAgICAgaWYgKHdp
ZHRoICE9IGhlaWdodCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdodCBm
b3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQgZm9y
IGN1YmUgbWFwIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgIH0gZWxzZSBpZiAodGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBpZiAobGV2
ZWxzIDwgMCB8fCBsZXZlbHMgPiBtX21heFRleHR1cmVMZXZlbCkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJudW1iZXIgb2YgbGV2ZWxzIGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
bnVtYmVyIG9mIGxldmVscyBpcyBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhfU05PUk06
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIx
NlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ukc4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZGOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkcxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4X1NOT1JNOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBGOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjlfRTU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyRjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOEk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTI6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQThJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0Ey
VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
MzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NU
RU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlI4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
OFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlIzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyRjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyVUk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCODoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
OF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I5X0U1OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2VUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNS
R0I4X0FMUEhBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9STToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQyNDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDMy
Rl9TVEVOQ0lMODoKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiVW5rbm93biBpbnRlcm5hbEZvcm1hdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJVbmtub3duIGlu
dGVybmFsRm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTYxMSw3
ICs2MTEsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3JhZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAodGV4dHVyZS0+aW1tdXRhYmxlKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4U3RvcmFnZTJEIiwgInRl
eFN0b3JhZ2UyRCBhbHJlYWR5IGNhbGxlZCBvbiB0aGlzIHRleHR1cmUiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidGV4
U3RvcmFnZTJEIiwgInRleFN0b3JhZ2UyRCBhbHJlYWR5IGNhbGxlZCBvbiB0aGlzIHRleHR1cmUi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB0ZXh0dXJlLT5zZXRJbW11dGFibGUoKTsK
QEAgLTYyMSw4ICs2MjEsOCBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3Jh
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogICAgIHsKICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0OwogICAgICAgICBHQzNEZW51bSB0eXBlOwotICAgICAgICBpZiAo
IUdyYXBoaWNzQ29udGV4dDNEOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFN0b3JhZ2UyRCIs
ICJUZXh0dXJlIGhhcyB1bmtub3duIGludGVybmFsIGZvcm1hdCIpOworICAgICAgICBpZiAoIUdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZv
cm1hdChpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInRleFN0b3JhZ2Uy
RCIsICJUZXh0dXJlIGhhcyB1bmtub3duIGludGVybmFsIGZvcm1hdCIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZl
bHMsIEdDMwogCiAgICAgICAgIHVuc2lnbmVkIHNpemU7CiAgICAgICAgIEdDM0RlbnVtIGVycm9y
ID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRo
LCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgaWYgKGVy
cm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgewogICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoZXJyb3IsICJ0ZXhTdG9yYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjQwLDEzICs2NDAsMTMgQEAgdm9pZCBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWkgbGV2ZWxzLCBHQzMKICAgICAgICAgbWVtc2V0KGRhdGEuZGF0YSgpLCAwLCBzaXplKTsK
IAogICAgICAgICBmb3IgKEdDM0RzaXplaSBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyArK2xl
dmVsKSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIGxldmVsLCAw
LCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7
Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRo
LCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ksIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT50
ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1ksIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBk
YXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIGxldmVsLCAwLCAw
LCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7Ci0g
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBs
ZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICBpZiAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhl
aWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1gsIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0
eXBlLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIGxldmVs
LCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ksIGxldmVsLCAwLCAwLCBsZXZlbFdp
ZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1osIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1osIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBl
LCBkYXRhLmRhdGEoKSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2Nv
bnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgMCwgMCwgbGV2ZWxXaWR0aCwgbGV2
ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkpOwogICAgICAgICAgICAgbGV2ZWxX
aWR0aCA9IHN0ZDo6bWF4KDEsIGxldmVsV2lkdGggLyAyKTsKQEAgLTY1NSwxNSArNjU1LDE1IEBA
IHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpIGxldmVscywgR0MzCiAgICAgfQogCiAgICAgZm9yIChHQzNEc2l6ZWkgbGV2
ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgKytsZXZlbCkgewotICAgICAgICBpZiAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgICAgICB0ZXh0
dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbElu
Zm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgbGV2ZWws
IGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgbGV2ZWwsIGludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWSwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgICAgICAgICB0ZXh0dXJl
LT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWiwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8o
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSk7CisgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
Q1VCRV9NQVApIHsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKTsKKyAg
ICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIHRleHR1
cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5m
byhHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCBsZXZlbCwg
aW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKTsKKyAgICAg
ICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAg
ICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpOwog
ICAgIH0KIH0KIApAQCAtODc3LDE3ICs4NzcsMTcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZF
Ul9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNs
ZWFyIiwgImludmFsaWQgbWFzayIpOworICAgIGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHRH
TDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklU
IHwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjbGVhciIs
ICJpbnZhbGlkIG1hc2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjb25zdCBjaGFy
KiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250
ZXh0M0QoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24p
OworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dEdMKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgImNsZWFyIiwgcmVhc29uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVCkgJiYgaXNJbnRlZ2VyRm9ybWF0KG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRD
b2xvckJ1ZmZlckZvcm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhciIsICJjYW5ub3QgY2xlYXIgYW4g
aW50ZWdlciBidWZmZXIiKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgKG1hc2sg
JiBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCkgJiYgaXNJbnRlZ2VyRm9ybWF0
KG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpKSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJjbGVhciIsICJjYW5ub3QgY2xlYXIgYW4gaW50ZWdlciBidWZmZXIiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQpAQCAtOTMyLDI1
ICs5MzIsMjUgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpkcmF3QnVmZmVycyhjb25z
dCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKQogICAgIGNvbnN0IEdDM0RlbnVtKiBidWZzID0g
YnVmZmVycy5kYXRhKCk7CiAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAg
ICBpZiAobiAhPSAxKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZmZXJzIiwgIm1vcmUgdGhhbiBvbmUgYnVm
ZmVyIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZmZXJzIiwgIm1vcmUgdGhhbiBvbmUgYnVmZmVyIik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGJ1ZnNbMF0gIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJBQ0sgJiYgYnVmc1swXSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnMiLCAiQkFDSyBvciBOT05FIik7CisgICAgICAg
IGlmIChidWZzWzBdICE9IEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLICYmIGJ1ZnNbMF0gIT0gR3Jh
cGhpY3NDb250ZXh0R0w6Ok5PTkUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZmZXJzIiwgIkJBQ0sg
b3IgTk9ORSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEJl
Y2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVkIG9uIGFsbCBjdXJyZW50IFdlYktpdCBw
b3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBDT0xPUl9BVFRBQ0hNRU5UMC4KLSAgICAg
ICAgR0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSykg
PyBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgOiBHcmFwaGljc0NvbnRleHQz
RDo6Tk9ORTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmRy
YXdCdWZmZXJzRVhUKDEsICZ2YWx1ZSk7CisgICAgICAgIEdDM0RlbnVtIHZhbHVlID0gKGJ1ZnNb
MF0gPT0gR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0spID8gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9S
X0FUVEFDSE1FTlQwIDogR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CisgICAgICAgIGdyYXBoaWNz
Q29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5kcmF3QnVmZmVyc0VYVCgxLCAmdmFsdWUpOwog
ICAgICAgICBzZXRCYWNrRHJhd0J1ZmZlcihidWZzWzBdKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAobiA+IGdldE1heERyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnMiLCAi
bW9yZSB0aGFuIG1heCBkcmF3IGJ1ZmZlcnMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0J1ZmZlcnMiLCAibW9y
ZSB0aGFuIG1heCBkcmF3IGJ1ZmZlcnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICAg
ICAgaWYgKGJ1ZnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUgJiYgYnVmc1tpXSAhPSBz
dGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
ICsgaSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QnVmZmVycyIsICJDT0xPUl9BVFRBQ0hNRU5U
aSBvciBOT05FIik7CisgICAgICAgICAgICBpZiAoYnVmc1tpXSAhPSBHcmFwaGljc0NvbnRleHRH
TDo6Tk9ORSAmJiBidWZzW2ldICE9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRl
eHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpKSkgeworICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZm
ZXJzIiwgIkNPTE9SX0FUVEFDSE1FTlRpIG9yIE5PTkUiKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTk2MSwyNCArOTYxLDI0IEBAIHZvaWQg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0J1ZmZlcnMoY29uc3QgVmVjdG9yPEdDM0RlbnVt
PiYgYnVmZmVycykKIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJpdihH
QzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwgSW50MzJMaXN0JiYsIEdDM0R1aW50
KQogewogICAgIHN3aXRjaCAoYnVmZmVyKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1I6CiAgICAgICAgIGlmIChk
cmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IGdldE1heERyYXdCdWZmZXJzKCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY2xlYXJCdWZmZXJpdiIsICJidWZmZXIgaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgImNsZWFyQnVmZmVyaXYiLCAiYnVmZmVyIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFRPRE86IENhbGwgY2xlYXJCdWZm
ZXJpdiwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5oCiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTDoKICAgICAgICAgaWYgKGRyYXdidWZmZXIpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZm
ZXJpdiIsICJidWZmZXIgaW5kZXggbXVzdCBiZSAwIik7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVyaXYi
LCAiYnVmZmVyIGluZGV4IG11c3QgYmUgMCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIC8vIFRPRE86IENhbGwgY2xlYXJCdWZmZXJpdiwgcmVxdWlyZXMgZ2wzLmgg
YW5kIEVTMy9nbC5oCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfU1RFTkNJTDoKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcml2Iiwg
ImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIENPTE9SIG9yIFNURU5DSUwiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xl
YXJCdWZmZXJpdiIsICJidWZmZXIgYXJndW1lbnQgbXVzdCBiZSBDT0xPUiBvciBTVEVOQ0lMIik7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTk4NiwxOCArOTg2LDE4IEBAIHZvaWQgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJpdihHQzNEZW51bSBidWZmZXIsIEdDM0Rp
bnQgZHJhd2J1ZmZlciwKIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJ1
aXYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsIFVpbnQzMkxpc3QmJiwgR0Mz
RHVpbnQpCiB7CiAgICAgc3dpdGNoIChidWZmZXIpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUjoKICAgICAgICAg
aWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gZ2V0TWF4RHJhd0J1ZmZlcnMoKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjbGVhckJ1ZmZlcnVpdiIsICJidWZmZXIgaW5kZXggb3V0IG9mIHJhbmdlIik7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgImNsZWFyQnVmZmVydWl2IiwgImJ1ZmZlciBpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBUT0RPOiBDYWxsIGNs
ZWFyQnVmZmVydWl2LCByZXF1aXJlcyBnbDMuaCBhbmQgRVMzL2dsLmgKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEg6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
U1RFTkNJTDoKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcnVpdiIsICJidWZmZXIg
YXJndW1lbnQgbXVzdCBiZSBDT0xPUiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcnVpdiIsICJidWZm
ZXIgYXJndW1lbnQgbXVzdCBiZSBDT0xPUiIpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBA
IC0xMDA1LDI0ICsxMDA1LDI0IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJC
dWZmZXJ1aXYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsCiB2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50
IGRyYXdidWZmZXIsIEZsb2F0MzJMaXN0JiYsIEdDM0R1aW50KQogewogICAgIHN3aXRjaCAoYnVm
ZmVyKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1I6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Q09MT1I6CiAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3
YnVmZmVyID49IGdldE1heERyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJmdiIs
ICJidWZmZXIgaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVyZnYiLCAi
YnVmZmVyIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIC8vIFRPRE86IENhbGwgY2xlYXJCdWZmZXJmdiwgcmVxdWlyZXMgZ2wzLmgg
YW5kIEVTMy9nbC5oCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIOgogICAgICAgICBpZiAo
ZHJhd2J1ZmZlcikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcmZ2IiwgImJ1ZmZlciBpbmRleCBtdXN0
IGJlIDAiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIgaW5kZXggbXVzdCBiZSAw
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gVE9ETzogQ2Fs
bCBjbGVhckJ1ZmZlcmZ2LCByZXF1aXJlcyBnbDMuaCBhbmQgRVMzL2dsLmgKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKICAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcmZ2IiwgImJ1ZmZlciBhcmd1bWVudCBtdXN0
IGJlIENPTE9SIE9SIERFUFRIIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVyIGFy
Z3VtZW50IG11c3QgYmUgQ09MT1IgT1IgREVQVEgiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
fQpAQCAtMTAzMCwxOCArMTAzMCwxOCBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyQnVmZmVyZnYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsCiB2b2lkIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQnVmZmVyZmkoR0MzRGVudW0gYnVmZmVyLCBHQzNE
aW50IGRyYXdidWZmZXIsIEdDM0RmbG9hdCwgR0MzRGludCkKIHsKICAgICBzd2l0Y2ggKGJ1ZmZl
cikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKICAgICAgICAgaWYgKGRyYXdidWZm
ZXIpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIgaW5kZXggbXVzdCBiZSAwIik7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVyIGluZGV4IG11c3QgYmUgMCIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFRPRE86IENhbGwgY2xlYXJC
dWZmZXJmaSwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5oCiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUw6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTDoKICAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJjbGVhckJ1ZmZlcmZ2IiwgImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIERFUFRI
X1NURU5DSUwiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIgYXJndW1lbnQgbXVz
dCBiZSBERVBUSF9TVEVOQ0lMIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTEyMjcs
MTYgKzEyMjcsMTYgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyUmFu
Z2UoR0MzRGVudW0sIEdDM0R1aW50LCBXZWJHTEJ1ZmZlciosIEcKIFdlYkdMQW55IFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OmdldEluZGV4ZWRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
dWludCkKIHsKICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUl9CSU5ESU5HOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5JRk9STV9CVUZGRVJfU1RBUlQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRJbmRleGVkUGFyYW1ldGVyIiwg
InBhcmFtZXRlciBuYW1lIG5vdCB5ZXQgc3VwcG9ydGVkIik7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVJfU0laRToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEluZGV4ZWRQYXJhbWV0
ZXIiLCAicGFyYW1ldGVyIG5hbWUgbm90IHlldCBzdXBwb3J0ZWQiKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEluZGV4ZWRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW5kZXhlZFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIH0KQEAgLTEy
NTMsMjAgKzEyNTMsMjAgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0
aXZlVW5pZm9ybXMoV2ViR0xQcm9ncmFtJiBwcm9ncmFtLCBjb25zdAogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTklGT1JNX1RZUEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9T
SVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQkxPQ0tfSU5ERVg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9PRkZTRVQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5JRk9STV9BUlJBWV9TVFJJREU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5JRk9STV9NQVRSSVhfU1RSSURFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOSUZPUk1fSVNfUk9XX01BSk9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
SUZPUk1fVFlQRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX1NJWkU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CTE9DS19JTkRFWDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX09GRlNFVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTklGT1JNX0FSUkFZX1NUUklERToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpVTklGT1JNX01BVFJJWF9TVFJJREU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5J
Rk9STV9JU19ST1dfTUFKT1I6CiAgICAgICAgIHsKICAgICAgICAgICAgIFZlY3RvcjxHQzNEaW50
PiBwYXJhbXModW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsKICAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0QWN0aXZlVW5pZm9ybXMocHJvZ3JhbS5vYmplY3QoKSwgdW5pZm9ybUluZGljZXMsIHBu
YW1lLCBwYXJhbXMpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1zKTsKICAgICAg
ICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRBY3RpdmVVbmlmb3JtcyIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU0sICJnZXRBY3RpdmVVbmlmb3JtcyIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIH0KQEAgLTEzMTksNyArMTMx
OSw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVmVydGV4QXJyYXkoV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdCogYXJyYXlPYmplCiAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheShu
dWxscHRyKTsgLy8gVGhlIGRlZmF1bHQgVkFPIHdhcyByZW1vdmVkIGluIE9wZW5HTCAzLjMgYnV0
IG5vdCBmcm9tIFdlYkdMIDI7IGJpbmQgdGhlIGRlZmF1bHQgZm9yIFdlYkdMIHRvIHVzZS4KICNl
bmRpZgogICAgIAotICAgIGFycmF5T2JqZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0
M0QoKSk7CisgICAgYXJyYXlPYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHRHTCgp
KTsKIH0KIAogR0MzRGJvb2xlYW4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6aXNWZXJ0ZXhBcnJh
eShXZWJHTFZlcnRleEFycmF5T2JqZWN0KiBhcnJheU9iamVjdCkKQEAgLTEzMzksNyArMTMzOSw3
IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YmluZFZlcnRleEFycmF5KFdlYkdMVmVy
dGV4QXJyYXlPYmplY3QqIGFycmF5T2JqZWN0CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAoYXJyYXlPYmplY3QgJiYgKGFycmF5T2JqZWN0LT5pc0RlbGV0ZWQoKSB8fCAhYXJyYXlPYmpl
Y3QtPnZhbGlkYXRlKDAsICp0aGlzKSB8fCAhbV9jb250ZXh0T2JqZWN0cy5jb250YWlucyhhcnJh
eU9iamVjdCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhcnJheU9iamVjdCAmJiAhYXJyYXlPYmplY3Qt
PmlzRGVmYXVsdE9iamVjdCgpICYmIGFycmF5T2JqZWN0LT5vYmplY3QoKSkgewpAQCAtMTM4MCw3
ICsxMzgwLDcgQEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChXZWJH
TENvbXByZXNzZWRUZXh0dXJlRVRDMSwgbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlRVRDMSwgIldF
QkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiwgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzE6
OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDLCBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQywgIldFQktJVF9X
RUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiLCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEM6OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEMsIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMsICJXRUJHTF9j
b21wcmVzc2VkX3RleHR1cmVfczN0YyIsIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBw
b3J0ZWQoKnRoaXMpKTsKLSAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdlYkdMRGVwdGhUZXh0dXJl
LCBtX3dlYmdsRGVwdGhUZXh0dXJlLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIsIFdlYkdMRGVwdGhU
ZXh0dXJlOjpzdXBwb3J0ZWQoKmdyYXBoaWNzQ29udGV4dDNEKCkpKTsKKyAgICBFTkFCTEVfSUZf
UkVRVUVTVEVEKFdlYkdMRGVwdGhUZXh0dXJlLCBtX3dlYmdsRGVwdGhUZXh0dXJlLCAiV0VCR0xf
ZGVwdGhfdGV4dHVyZSIsIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoKmdyYXBoaWNzQ29u
dGV4dEdMKCkpKTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdlYkdMRGVidWdSZW5kZXJlcklu
Zm8sIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbywgIldFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8i
LCB0cnVlKTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdlYkdMRGVidWdTaGFkZXJzLCBtX3dl
YmdsRGVidWdTaGFkZXJzLCAiV0VCR0xfZGVidWdfc2hhZGVycyIsIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiX3Mp
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0MTksNyArMTQxOSw3IEBAIE9wdGlvbmFsPFZl
Y3RvcjxTdHJpbmc+PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNp
b25zKCkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4
dHVyZV9wdnJ0YyJfcyk7CiAgICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBw
b3J0ZWQoKnRoaXMpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3Rl
eHR1cmVfczN0YyJfcyk7Ci0gICAgaWYgKFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoKmdy
YXBoaWNzQ29udGV4dDNEKCkpKQorICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVk
KCpncmFwaGljc0NvbnRleHRHTCgpKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVw
dGhfdGV4dHVyZSJfcyk7CiAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Il9z
KTsKICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFk
ZXJfc291cmNlIl9zKSkKQEAgLTE0MzIsMTIgKzE0MzIsMTIgQEAgT3B0aW9uYWw8VmVjdG9yPFN0
cmluZz4+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQog
c3RhdGljIGJvb2wgdmFsaWRhdGVEZWZhdWx0RnJhbWVidWZmZXJBdHRhY2htZW50KEdDM0RlbnVt
JiBhdHRhY2htZW50KQogewogICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJBQ0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkFDSzoK
ICAgICAgICAgLy8gQmVjYXVzZSB0aGUgYmFja2J1ZmZlciBpcyBzaW11bGF0ZWQgb24gYWxsIGN1
cnJlbnQgV2ViS2l0IHBvcnRzLCB3ZSBuZWVkIHRvIGNoYW5nZSBCQUNLIHRvIENPTE9SX0FUVEFD
SE1FTlQwLgotICAgICAgICBhdHRhY2htZW50ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwOworICAgICAgICBhdHRhY2htZW50ID0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9S
X0FUVEFDSE1FTlQwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUw6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTQ1MCwxMiAr
MTQ1MCwxMiBAQCBXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZwogICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJUYXJnZXQoZnVuY3Rpb25OYW1lLCB0
YXJnZXQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gdGFyZ2V0RnJhbWVi
dWZmZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSA/
IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIGF1
dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFE
X0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJC
aW5kaW5nOwogCiAgICAgaWYgKCF0YXJnZXRGcmFtZWJ1ZmZlcikgewogICAgICAgICAvLyBPcGVu
R0wgRVMgMzogRGVmYXVsdCBmcmFtZWJ1ZmZlciBpcyBib3VuZC4KICAgICAgICAgaWYgKCF2YWxp
ZGF0ZURlZmF1bHRGcmFtZWJ1ZmZlckF0dGFjaG1lbnQoYXR0YWNobWVudCkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBhdHRhY2htZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQogICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKQEAgLTE0NjcsMjAgKzE0NjcsMjAgQEAg
V2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmcKIAogICAgIGF1dG8gb2JqZWN0ID0gbWFrZVJlZlB0cih0
YXJnZXRGcmFtZWJ1ZmZlci0+Z2V0QXR0YWNobWVudE9iamVjdChhdHRhY2htZW50KSk7CiAgICAg
aWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBpZiAocG5hbWUg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4
dEdMOjpOT05FKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIHN3aXRjaCAocG5hbWUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JF
RF9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfR1JFRU5fU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0JMVUVfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEU6IHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9T
SVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
R1JFRU5fU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEU6IHsKICAg
ICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVl
KTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMTQ4OSw0MSArMTQ4OSw0MSBAQCBXZWJHTEFu
eSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoR0MzRGVudW0gdGFyZwogICAgIAogICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CiAg
ICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9O
QU1FOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CiAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVJlZlB0cihyZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSY+KCpvYmplY3Qp
KTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9URVhUVVJFX0xFVkVMOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORzogewor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfTEVWRUw6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HOiB7CiAgICAg
ICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwg
JnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3Ig
dGV4dHVyZSBhdHRhY2htZW50Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9iamVjdC0+
aXNSZW5kZXJidWZmZXIoKSk7CiAgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZG
RVIpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX09CSkVDVF9OQU1FOgogICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIocmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlciY+KCpvYmplY3QpKTsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyA6IHsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9D
T0xPUl9FTkNPRElORyA6IHsKICAgICAgICAgICAgIGF1dG8mIHJlbmRlckJ1ZmZlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXImPigqb2JqZWN0KTsKICAgICAgICAgICAgIGF1
dG8gZm9ybWF0ID0gcmVuZGVyQnVmZmVyLmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAg
ICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTgKLSAgICAgICAg
ICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfU1JHQjhf
RVRDMgotICAgICAgICAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMKLSAgICAgICAgICAgICAgICB8fCBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhB
MV9FVEMyKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihH
cmFwaGljc0NvbnRleHQzRDo6U1JHQik7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTgKKyAgICAgICAgICAgICAgICB8fCBmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfU1JHQjhfRVRDMgorICAgICAgICAgICAgICAg
IHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
RVRDMl9FQUMKKyAgICAgICAgICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6U1JH
Qik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKICAgICAgICAgfQog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KQEAgLTE1MzcsMzYg
KzE1MzcsMzYgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3QKIGJvb2wgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlclRhcmdldChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIHRhcmdldCkKIHsKICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRSQVdfRlJBTUVCVUZGRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9G
UkFNRUJVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0ZSQU1FQlVGRkVSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVI6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB0YXJnZXQiKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVOb25EZWZhdWx0RnJhbWVidWZmZXJBdHRhY2htZW50KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gYXR0YWNobWVudCkKIHsKICAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hN
RU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBkZWZhdWx0OgotICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkpKQorICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHcmFwaGljc0NvbnRleHRHTDo6Q09M
T1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFw
aGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBhdHRhY2htZW50Iik7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBHQzNEaW50IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dE1heERyYXdCdWZmZXJzKCkKIHsKICAgICBpZiAoIW1fbWF4RHJhd0J1ZmZlcnMpCi0gICAgICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9EUkFXX0JVRkZF
UlMsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHRHTDo6TUFYX0RSQVdfQlVGRkVSUywgJm1fbWF4RHJhd0J1ZmZlcnMpOwog
ICAgIHJldHVybiBtX21heERyYXdCdWZmZXJzOwogfQogCkBAIC0xNTc0LDcgKzE1NzQsNyBAQCBH
QzNEaW50IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQog
ewogICAgIC8vIERyYXdCdWZmZXJzIHJlcXVpcmVzIE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA9PSBN
QVhfRFJBV19CVUZGRVJTCiAgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9EUkFXX0JVRkZF
UlMsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgICAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRFJBV19CVUZGRVJTLCAmbV9tYXhDb2xvckF0dGFj
aG1lbnRzKTsKICAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwogfQogCkBAIC0xNTgy
LDU4ICsxNTgyLDU4IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVy
U3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVyCiB7CiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFn
ZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0
R0w6OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIHRh
cmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghbV9yZW5kZXJidWZmZXJC
aW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJl
bmRlcmJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJl
bmRlcmJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3JhZ2Ui
LCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0dXJuOwogICAgIHN3aXRjaCAoaW50ZXJuYWxm
b3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJV
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0Ey
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhVSToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4
VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVO
VDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
OEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ix
MF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSRzE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJ
TF9JTkRFWDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4OgogICAg
ICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldElzVmFsaWQodHJ1ZSk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEgzMkZfU1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9T
VEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4Ogog
ICAgICAgICBpZiAoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJi
dWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZW5kZXJi
dWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
dGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CkBAIC0xNjQyLDcgKzE2NDIs
NyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcgogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZv
cm1hdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwpAQCAt
MTY1NCwxMyArMTY1NCwxMyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmhpbnQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBp
c1ZhbGlkID0gZmFsc2U7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQ6CiAgICAgICAgIGlzVmFsaWQgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKCFpc1ZhbGlkKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJoaW50
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9kZSk7CkBA
IC0xNjcwLDk3ICsxNjcwLDk3IEBAIEdDM0RlbnVtIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmJh
c2VJbnRlcm5hbEZvcm1hdEZyb21JbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpCiB7CiAgICAgLy8g
SGFuZGxlcyBzaXplZCwgdW5zaXplZCwgYW5kIGNvbXByZXNzZWQgaW50ZXJuYWwgZm9ybWF0cy4K
ICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhfU05PUk06Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfUjExX0VBQzoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOgotICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJFRDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhVSToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjMyVUk6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lO
VEVHRVI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QUkVTU0VEX1JHMTFfRUFDOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkcxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJV
SToKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyRjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJF
U1NFRF9SR0I4X0VUQzI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9T
UkdCOF9FVEMyOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyVUk6Ci0gICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVI7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
MzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9B
TFBIQTFfRVRDMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1JHQkE4
X0VUQzJfRUFDOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0VUQzJfRUFDOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTJV
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEz
Mkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUk6Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBP
TkVOVDMyRjoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05F
TlQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMODoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoKLSAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhfU05PUk06
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfUjEx
X0VBQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1NJR05FRF9SMTFf
RUFDOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJFRDsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlIxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyVUk6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHRHTDo6UkVEX0lOVEVHRVI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyRjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1JHMTFfRUFDOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgorICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJHOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
OEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHMzJVSToKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRF
R0VSOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1
NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyRjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4SToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0I4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2VUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyVUk6
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBI
QTFfRVRDMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1NSR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01Q
UkVTU0VEX1JHQkE4X0VUQzJfRUFDOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUk6Cisg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9DT01QT05FTlQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVO
Q0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CiAg
ICAgICAgIHJldHVybiBpbnRlcm5hbGZvcm1hdDsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
OworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkU7CiAgICAgfQogfQogCiBi
b29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmlzSW50ZWdlckZvcm1hdChHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGJhc2VJbnRlcm5hbEZvcm1hdEZyb21JbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RURfSU5URUdFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURf
SU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkFfSU5URUdFUjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE3NzEsMzI5ICsxNzcxLDMyOSBAQCBXZWJHTEFueSBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9URVhUVVJFOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZs
b2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBX0JJVFM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEFfQklUUzoKICAgICAgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmFscGhhKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUl9CSU5ESU5HOgogICAgICAgICByZXR1cm4gbV9i
b3VuZEFycmF5QnVmZmVyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVh
blBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfQ09M
T1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfQ09MT1I6CiAgICAgICAgIHJl
dHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpCTEVORF9EU1RfQUxQSEE6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX1JHQjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9EU1RfUkdCOgogICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX0VRVUFUSU9OX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJM
RU5EX0VRVUFUSU9OX0FMUEhBOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX1JH
QjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9FUVVBVElPTl9SR0I6CiAgICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkJMRU5EX1NSQ19BTFBIQToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX1NSQ19SR0I6CiAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QkxVRV9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMVUVfQklUUzoK
ICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Q09MT1JfQ0xFQVJfVkFMVUU6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRF
TUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9XUklURU1BU0s6CiAgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgogICAgICAgICByZXR1
cm4gVWludDMyQXJyYXk6OnRyeUNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRh
KCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q1VMTF9GQUNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVTExf
RkFDRToKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkNVTExfRkFDRV9NT0RFOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJP
R1JBTToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDVVJSRU5UX1BST0dSQU06CiAgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRQcm9ncmFtOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQklUUzoKICAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRoKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NMRUFSX1ZBTFVFOgogICAgICAgICByZXR1
cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0ZVTkM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfRlVOQzoKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSF9SQU5HRToKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9URVNUOgogICAgICAgICByZXR1cm4gZ2V0Qm9v
bGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
V1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1dSSVRFTUFTSzoK
ICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpESVRI
RVI6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CiAgICAg
ICAgIHJldHVybiBtYWtlUmVmUHRyKG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVu
dEFycmF5QnVmZmVyKCkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQklORElO
RzoKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJP
TlRfRkFDRToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKICAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpHUkVFTl9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkdSRUVOX0JJ
VFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOgog
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgogICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FX1dJRFRIOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVfV0lEVEg6CiAg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CiAgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKICAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5U
X1VOSUZPUk1fVkVDVE9SUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFOgogICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9TSVpFOgogICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkFSWUlOR19WRUNUT1JTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9W
QVJZSU5HX1ZFQ1RPUlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX0FUVFJJQlM6CiAgICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpN
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5J
Rk9STV9WRUNUT1JTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVU5J
Rk9STV9WRUNUT1JTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpNQVhfVklFV1BPUlRfRElNUzoKICAgICAgICAgcmV0dXJuIGdldFdl
YkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UEFDS19BTElHTk1FTlQ6CiAgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBP
TFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09O
X09GRlNFVF9GQUNUT1I6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9GSUxMOgogICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9M
WUdPTl9PRkZTRVRfVU5JVFM6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkVEX0JJVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5H
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgogICAg
ICAgICByZXR1cm4gbV9yZW5kZXJidWZmZXJCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkVSOgog
ICAgICAgICByZXR1cm4gIldlYktpdCBXZWJHTCJfc3RyOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBM
RV9CVUZGRVJTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CiAgICAgICAgIHJldHVy
biBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FN
UExFX0NPVkVSQUdFX1ZBTFVFOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6U0FNUExFUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9CT1g6CiAgICAgICAgIHJldHVybiBnZXRXZWJH
TEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUOgog
ICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1cm4g
IldlYkdMIEdMU0wgRVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250
ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSI7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX0ZBSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAgICByZXR1cm4gIldlYkdMIEdMU0wg
RVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0R0w6OlNIQURJ
TkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U1RFTkNJTF9CQUNLX0ZBSUw6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX0ZVTkM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX0ZVTkM6CiAgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKICAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JBQ0tfUkVGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
QkFDS19SRUY6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19WQUxVRV9NQVNLOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19WQUxVRV9NQVNLOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQkFDS19XUklURU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJ
VFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CSVRTOgogICAgICAgICBp
ZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQ0xFQVJfVkFMVUU6CiAgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfRkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0ZBSUw6CiAg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUxfRlVOQzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhf
RkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJ
TDoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKICAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX1JFRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lM
X1JFRjoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUxfVEVTVDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVkFMVUVfTUFTSzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1ZBTFVFX01BU0s6CiAgICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U1RFTkNJTF9XUklURU1BU0s6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1VCUElYRUxfQklUUzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVUJQSVhFTF9CSVRTOgogICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0JJTkRJTkdfMkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9CSU5E
SU5HXzJEOgogICAgICAgICByZXR1cm4gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZTJEQmluZGluZzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0JJTkRJTkdfQ1VCRV9NQVA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9C
SU5ESU5HX0NVQkVfTUFQOgogICAgICAgICByZXR1cm4gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVU
ZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5Q
QUNLX0FMSUdOTUVOVDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgogICAgICAgICByZXR1cm4g
bV91bnBhY2tGbGlwWTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVM
VElQTFlfQUxQSEFfV0VCR0w6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX1BS
RU1VTFRJUExZX0FMUEhBX1dFQkdMOgogICAgICAgICByZXR1cm4gbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NP
TlZFUlNJT05fV0VCR0w6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0NPTE9S
U1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKICAgICAgICAgcmV0dXJuIG1fdW5wYWNrQ29sb3JzcGFj
ZUNvbnZlcnNpb247Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFTkRPUjoKICAgICAgICAgcmV0dXJuICJXZWJLaXQiX3N0
cjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlZFUlNJT046CiAgICAgICAgIHJldHVybiAiV2ViR0wgMi4wIl9zdHI7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VklFV1BPUlQ6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1l
dGVyKHBuYW1lKTsKICAgICBjYXNlIFdlYkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VEX1JF
TkRFUkVSX1dFQkdMOgogICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKSB7CiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgICAgIHJldHVybiAiQXBwbGUgR1BVIl9z
dHI7CiAjZWxzZQotICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJFUik7CisgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkVSKTsKICNlbmRpZgogICAgICAgICB9
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdf
cmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZv
OjpVTk1BU0tFRF9WRU5ET1JfV0VCR0w6CiAgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm8pCi0gICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3ND
b250ZXh0M0Q6OlZFTkRPUik7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICAg
ICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dEdMOjpWRU5ET1Ip
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVn
X3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8g
RVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgY2FzZSBFeHRlbnNpb25zR0w6Ok1B
WF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljCiAgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAgICAg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJF
X01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIoRXh0ZW5zaW9uc0dMOjpNQVhfVEVY
VFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQ6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF8zRF9U
RVhUVVJFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYXzNEX1RFWFRVUkVf
U0laRToKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BWF9BUlJBWV9URVhUVVJFX0xBWUVSUzoKICAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTE9SX0FUVEFDSE1FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DT0xP
Ul9BVFRBQ0hNRU5UUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1f
Q09NUE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklORURfRlJB
R01FTlRfVU5JRk9STV9DT01QT05FTlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50NjRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9VTklG
T1JNX0JMT0NLUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklORURfVU5J
Rk9STV9CTE9DS1M6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9STV9DT01Q
T05FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DT01CSU5FRF9WRVJURVhf
VU5JRk9STV9DT01QT05FTlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50NjRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9EUkFXX0JVRkZFUlM6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0RSQVdfQlVGRkVSUzoKICAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0VMRU1FTlRfSU5ERVg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0VMRU1FTlRf
SU5ERVg6CiAgICAgICAgIHJldHVybiBnZXRJbnQ2NFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0VMRU1FTlRTX0lORElDRVM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6TUFYX0VMRU1FTlRTX0lORElDRVM6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9FTEVN
RU5UU19WRVJUSUNFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRUxFTUVOVFNf
VkVSVElDRVM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5U
UzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzoKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1B
WF9QUk9HUkFNX1RFWEVMX09GRlNFVDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1NBTVBMRVM6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1NBTVBMRVM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9TRVJWRVJf
V0FJVF9USU1FT1VUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9TRVJWRVJfV0FJ
VF9USU1FT1VUOgogICAgICAgICByZXR1cm4gZ2V0SW50NjRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0xPRF9CSUFTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX0xPRF9CSUFTOgogICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6TUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05F
TlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBB
UkFURV9BVFRSSUJTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRF
X0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RSQU5TRk9STV9G
RUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVU5JRk9STV9CTE9D
S19TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9VTklGT1JNX0JMT0NLX1NJ
WkU6CiAgICAgICAgIHJldHVybiBnZXRJbnQ2NFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzoKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZBUllJTkdfQ09NUE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpN
QVhfVkFSWUlOR19DT01QT05FTlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX09VVFBVVF9DT01Q
T05FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfT1VUUFVUX0NP
TVBPTkVOVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUzoKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6IAorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOiAKICAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1JTl9QUk9HUkFNX1RFWEVMX09GRlNFVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpNSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQ6CiAgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBBQ0tfUk9XX0xFTkdUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQQUNLX1JPV19M
RU5HVEg6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfU0tJUF9QSVhFTFM6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UEFDS19TS0lQX1BJWEVMUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19TS0lQX1JPV1M6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UEFDS19TS0lQX1JPV1M6CiAgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19JTUFHRV9IRUlHSFQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0lN
QUdFX0hFSUdIVDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1JPV19MRU5HVEg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VU5QQUNLX1JPV19MRU5HVEg6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19TS0lQ
X0lNQUdFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfU0tJUF9JTUFHRVM6
CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19TS0lQX1BJWEVMUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlBBQ0tfU0tJUF9QSVhFTFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19TS0lQX1JPV1M6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX1NLSVBfUk9XUzoKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkFTVEVSSVpFUl9ESVNDQVJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJBU1RFUkla
RVJfRElTQ0FSRDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6CiAgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U0FNUExFX0NPVkVSQUdFOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0FDVElW
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZF
OgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOgogICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOgogICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfQVJSQVlfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfQVJS
QVlfQklORElORzoKICAgICAgICAgaWYgKG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+aXNEZWZh
dWx0T2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdCY+KCptX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JV
RkZFUjA6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIxOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpEUkFXX0JVRkZFUjM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19C
VUZGRVI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSNToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RFJBV19CVUZGRVI3OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdf
QlVGRkVSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIxMDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpEUkFXX0JVRkZFUjExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRS
QVdfQlVGRkVSMTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIxMzoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjE0OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMTU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RFJBV19CVUZGRVIwOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVS
MToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIzOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRSQVdfQlVGRkVSNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZF
UjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVI2OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSNzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEUkFXX0JVRkZFUjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZG
RVI5OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSMTA6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIxMToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEUkFXX0JVRkZFUjEyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdf
QlVGRkVSMTM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIxNDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjE1OgogICAgICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmdldERyYXdCdWZmZXIocG5hbWUpOwogICAgICAgICByZXR1cm4gbV9iYWNrRHJhd0J1ZmZl
cjsgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
QURfRlJBTUVCVUZGRVJfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUFE
X0ZSQU1FQlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBtX3JlYWRGcmFtZWJ1ZmZlckJp
bmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HOiAgIAotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVJfQklORElORzoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0JVRkZFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0JJTkRJTkc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9CSU5ESU5HXzJEX0FSUkFZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
QklORElOR18zRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSX0JJTkRJTkc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9C
VUZGRVJfQklORElORzoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJwYXJhbWV0ZXIgbmFtZSBub3QgeWV0
IHN1cHBvcnRlZCIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfUkVBRF9CVUZG
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfUEFDS19CVUZGRVJfQklORElORzogICAKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6U0FNUExFUl9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
SUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAicGFyYW1ldGVyIG5hbWUg
bm90IHlldCBzdXBwb3J0ZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiB9CkBAIC0yMTIyLDEzICsyMTIyLDEzIEBAIGJvb2wgV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUs
IHVuc2lnCiAgICAgaWYgKCFtYXhJbmRleCkgewogICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhp
bXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRl
eC4KICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0JZVEU6CiAgICAgICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1Ynl0ZT4o
YnVmZmVyLCAwLCBudW1FbGVtZW50cyk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgogICAgICAgICAgICAgbWF4SW5kZXggPSBnZXRN
YXhJbmRleDxHQzNEdXNob3J0PihidWZmZXIsIDAsIG51bUVsZW1lbnRzIC8gc2l6ZW9mKEdDM0R1
c2hvcnQpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVDoKICAgICAgICAgICAgIG1heEluZGV4ID0gZ2V0TWF4SW5kZXg8R0MzRHVpbnQ+KGJ1
ZmZlciwgMCwgbnVtRWxlbWVudHMgLyBzaXplb2YoR0MzRHVpbnQpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtMjE1NCwxNCArMjE1NCwxNCBAQCBib29sIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51
bSB0eXBlLCB1bnNpZwogYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQogewogICAg
IHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfU1VCVFJBQ1Q6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1JTjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVg6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RlVOQ19BREQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGVU5DX1JFVkVS
U0VfU1VCVFJBQ1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUlOOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6Ok1BWDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgbW9kZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtMjE2OSwx
OSArMjE2OSwxOSBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRF
cXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDMwogYm9vbCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBjYXApCiB7CiAgICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9P
RkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9f
Q09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkFTVEVSSVpFUl9ESVNDQVJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRJVEhF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6U0NJU1NPUl9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNU
RU5DSUxfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSQVNURVJJWkVSX0RJU0NB
UkQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgY2FwYWJpbGl0eSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGNhcGFiaWxp
dHkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA5MmMxODMy
YjllYzlhMzM1Y2Q5ODA1ZDkwMzk3NTI0M2MwZDMwMmMxLi5jZWQxOGNkNGZhOGRhYWQ4YzI0NjBi
NWE3OWMyMTMzMjc2ODUwYjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC00MSw4ICs0MSw4IEBAIGNsYXNzIFdlYkdM
VmVydGV4QXJyYXlPYmplY3Q7CiBjbGFzcyBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDog
cHVibGljIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoV2ViR0wyUmVuZGVyaW5nQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIEdy
YXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0Nv
bnRleHQzRD4mJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwg
R3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgUmVmPEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMPiYmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwogCiAgICAg
Ly8gQnVmZmVyIG9iamVjdHMKICAgICB1c2luZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpi
dWZmZXJEYXRhOwpAQCAtMjA2LDggKzIwNiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGhpbnQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0
ZXMpOwotICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGlj
c0NvbnRleHQzRD4mJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzKTsKKyAgICBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMp
OworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTD4mJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKIAogICAgIGJv
b2wgaXNXZWJHTDIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgKaW5kZXggNjVjMDgzNDQ4ZWZiMmQ3
YjM1ZTUyZmJhMmRjNzRmNWNkOTJjN2U0Mi4uNmY0M2MwNDEwN2IzNjFkMTRjOTk5ZjZkOThjNTBk
YzcwNDVhZjNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xB
Y3RpdmVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJ
bmZvLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wu
aCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1
ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAKaW5k
ZXggZDg3Y2FlMjUwNjNjNzZhN2Y3ZDAzYjI2Yzg4MjNmNmU3MjIxNzljNC4uYjhlZTI1ZmFjZjY4
NTBmMDJmZGRjNDg2ODY1MmEwY2I1M2M2ZjgwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQnVmZmVyLmNwcApAQCAtNDIsNyArNDIsNyBAQCBSZWY8V2ViR0xCdWZmZXI+IFdl
YkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogV2ViR0xC
dWZmZXI6OldlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6
IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKIHsKLSAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpKTsKKyAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29u
dGV4dEdMKCktPmNyZWF0ZUJ1ZmZlcigpKTsKICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsK
IH0KIApAQCAtNTEsNyArNTEsNyBAQCBXZWJHTEJ1ZmZlcjo6fldlYkdMQnVmZmVyKCkKICAgICBk
ZWxldGVPYmplY3QoMCk7CiB9CiAKLXZvaWQgV2ViR0xCdWZmZXI6OmRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2
b2lkIFdlYkdMQnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQzZC0+
ZGVsZXRlQnVmZmVyKG9iamVjdCk7CiB9CkBAIC02Miw3ICs2Miw3IEBAIGJvb2wgV2ViR0xCdWZm
ZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RzaXplaXB0
ciBieXRlTGVuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAobV90YXJnZXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKICAgICAgICAg
aWYgKGJ5dGVMZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fYnl0ZUxlbmd0aCA9IGJ5dGVMZW5n
dGg7CkBAIC04MiwxOCArODIsMTggQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVy
RGF0YUltcGwoY29uc3Qgdm9pZCogZGF0YSwgR0MzRHNpemVpcHRyIGJ5dGVMZW4KICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBtX2VsZW1lbnRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVI6CiAgICAgICAgIG1f
Ynl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1
bHQ6CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgc3dpdGNoIChtX3RhcmdldCkgewotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JFQURfQlVGRkVSOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpDT1BZX1JFQURfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
T1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxf
UEFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1VOUEFD
S19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVG
RkVSOgogICAgICAgICAgICAgbV9ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xMzUsNyArMTM1LDcgQEAgYm9vbCBXZWJHTEJ1
ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwoR0MzRGludHB0ciBvZmZzZXQsIGNvbnN0
IHZvaWQqIGRhdGEKICAgICB9CiAKICAgICBzd2l0Y2ggKG1fdGFyZ2V0KSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVI6CiAgICAgICAgIGNsZWFyQ2FjaGVkTWF4
SW5kaWNlcygpOwogICAgICAgICBpZiAoYnl0ZUxlbmd0aCkgewogICAgICAgICAgICAgaWYgKCFt
X2VsZW1lbnRBcnJheUJ1ZmZlcikKQEAgLTE0MywxNyArMTQzLDE3IEBAIGJvb2wgV2ViR0xCdWZm
ZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGFJbXBsKEdDM0RpbnRwdHIgb2Zmc2V0LCBjb25zdCB2
b2lkKiBkYXRhCiAgICAgICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG1fZWxlbWVudEFycmF5QnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0LCBkYXRhLCBieXRlTGVuZ3Ro
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlf
QlVGRkVSOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogI2lmIEVOQUJMRShX
RUJHTDIpCiAgICAgICAgIHN3aXRjaCAobV90YXJnZXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09QWV9XUklURV9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBJWEVMX1BBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhF
TF9VTlBBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklG
T1JNX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9SRUFEX0JV
RkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9XUklURV9CVUZGRVI6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1BBQ0tfQlVGRkVSOgorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUjoKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTE5NCw3ICsxOTQsNyBAQCBib29s
IFdlYkdMQnVmZmVyOjphc3NvY2lhdGVDb3B5QnVmZmVyU3ViRGF0YShjb25zdCBXZWJHTEJ1ZmZl
ciYgcmVhZEJ1ZmZlciwgR0MzRAogICAgIH0KIAogICAgIHN3aXRjaCAobV90YXJnZXQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKICAgICAgICAgY2xlYXJD
YWNoZWRNYXhJbmRpY2VzKCk7CiAgICAgICAgIGlmIChzaXplKSB7CiAgICAgICAgICAgICBpZiAo
IW1fZWxlbWVudEFycmF5QnVmZmVyKQpAQCAtMjAyLDE3ICsyMDIsMTcgQEAgYm9vbCBXZWJHTEJ1
ZmZlcjo6YXNzb2NpYXRlQ29weUJ1ZmZlclN1YkRhdGEoY29uc3QgV2ViR0xCdWZmZXImIHJlYWRC
dWZmZXIsIEdDM0QKICAgICAgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4obV9lbGVtZW50QXJyYXlCdWZmZXItPmRhdGEoKSkgKyB3cml0ZU9mZnNldCwgc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHJlYWRCdWZmZXIuZWxlbWVudEFycmF5QnVmZmVyKCkt
PmRhdGEoKSkgKyByZWFkT2Zmc2V0LCBzaXplKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBkZWZhdWx0OgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIHN3aXRjaCAobV90YXJn
ZXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVGRkVSOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlBJWEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQ
SVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TklGT1JNX0JVRkZFUjoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAjZW5k
aWYKQEAgLTI1OCwxNyArMjU4LDE3IEBAIHZvaWQgV2ViR0xCdWZmZXI6OnNldFRhcmdldChHQzNE
ZW51bSB0YXJnZXQsIGJvb2wgZm9yV2ViR0wyKQogICAgIC8vIEluIFdlYkdMLCBhIGJ1ZmZlciBp
cyBib3VuZCB0byBvbmUgdGFyZ2V0IGluIGl0cyBsaWZldGltZQogICAgIGlmIChtX3RhcmdldCkK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlf
QlVGRkVSKQorICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZF
UiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQog
ICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKICAgICBlbHNlIGlmIChmb3JXZWJHTDIpIHsKICNp
ZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JFQURfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZ
X1JFQURfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1dSSVRF
X0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfUEFDS19CVUZG
RVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1VOUEFDS19CVUZGRVI6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSOgogICAg
ICAgICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7CiAgICAgICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKaW5kZXggZTMzZDk3MzdjMzU5MjM5ODMyYzZk
YTVmM2Y1ODA4ZmI0YTY3ODkwMy4uYmQ0M2NkZDA5OTQ3NzdkZWQ3NTdlY2I4MjhiYTg3NzdkOGY5
ODM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCkBAIC02Nyw3
ICs2Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKICAgICBHQzNEZW51bSBtX3RhcmdldCB7IDAgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RD
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVB
U1RDLmNwcAppbmRleCAxMzJmM2U2MGI3YmE2MzMxYTM5ZGQ4OGI3NjFiMDJjNTA3YmFlMmM0Li4x
YmZmNDNiNzdlNzhjOGQxNjM4ZTI4NzkxNzAwMjJjYmMyZWE4ZGVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEMu
Y3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJF
eHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogCkBAIC0zNiw0MSArMzYsNDEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFTVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBU1RDKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250
ZXh0KQotICAgICwgbV9pc0hEUlN1cHBvcnRlZChjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0
Y19oZHIiX3MpKQotICAgICwgbV9pc0xEUlN1cHBvcnRlZChjb250ZXh0LmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Np
b25fYXN0Y19sZHIiX3MpKQorICAgICwgbV9pc0hEUlN1cHBvcnRlZChjb250ZXh0LmdyYXBoaWNz
Q29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfS0hSX3RleHR1cmVfY29t
cHJlc3Npb25fYXN0Y19oZHIiX3MpKQorICAgICwgbV9pc0xEUlN1cHBvcnRlZChjb250ZXh0Lmdy
YXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfS0hSX3RleHR1
cmVfY29tcHJlc3Npb25fYXN0Y19sZHIiX3MpKQogewotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250
ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0tIUl90ZXh0dXJlX2Nv
bXByZXNzaW9uX2FzdGNfaGRyIl9zKTsKLSAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lv
bl9hc3RjX2xkciJfcyk7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRl
bnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19o
ZHIiX3MpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygp
LmVuc3VyZUVuYWJsZWQoIkdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyIl9zKTsK
IAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUik7
Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSKTsK
LSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFIpOwot
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUik7Ci0g
ICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9BU1RDXzEweDVfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFIpOwot
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUik7
Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tI
Uik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hS
KTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIp
OworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUik7
CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSKTsK
KyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUik7
CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hS
KTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJf
S0hSKTsKICAgICAKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSKTsKLSAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ181eDRfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVf
S0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSKTsKLSAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ182eDZfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSKTsK
LSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ184eDhfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUik7Ci0gICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzEweDhfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIpOwotICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTJfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSKTsKKyAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ181eDRfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVf
S0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSKTsKKyAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ182eDZfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSKTsK
KyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ184eDhfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUik7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzEweDhfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTJfS0hSKTsKIH0KIAogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEM6On5XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVNUQygpID0gZGVmYXVsdDsKQEAgLTk0LDggKzk0LDggQEAgVmVjdG9yPFN0
cmluZz4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEM6OmdldFN1cHBvcnRlZFByb2ZpbGVzKCkK
IAogYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQzo6c3VwcG9ydGVkKGNvbnN0IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ3Jh
cGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9LSFJfdGV4dHVy
ZV9jb21wcmVzc2lvbl9hc3RjX2hkciJfcykKLSAgICAgICAgfHwgY29udGV4dC5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0tIUl90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2FzdGNfbGRyIl9zKTsKKyAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRH
TCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9u
X2FzdGNfaGRyIl9zKQorICAgICAgICB8fCBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdl
dEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19s
ZHIiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwCmluZGV4
IDIxNjhkYTM1ZmJhZjY5Yzg0NDg5NDI4NzI2MmJiNjFiMGQ4Nzc4ZmYuLjlmODFmYjA4MWUxNWU4
YjZhZTllYjcwYjVhYTY4MTc0YzQyYzg5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwCkBAIC0yOSwxOCAr
MjksMTggQEAKIAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKIAotI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQz
RCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQU1EX2NvbXByZXNzZWRfQVRD
X3RleHR1cmUiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lv
bnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSIpOwogCi0g
ICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfQVRDX1JHQl9BTUQpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRCk7
Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRCk7CisgICAgY29udGV4dC5h
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfQVRDX1JH
Ql9BTUQpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRCk7CisgICAgY29udGV4
dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfQVRD
X1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRCk7CiB9CiAKIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVBVEM6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKCkgPSBkZWZhdWx0OwpAQCAtNTIsNyAr
NTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDOjpnZXROYW1lKCkgY29uc3QKIAogYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
OjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKIHsKLSAgICBy
ZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9y
dHMoIkdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlIik7CisgICAgcmV0dXJuIGNvbnRleHQu
Z3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTURfY29t
cHJlc3NlZF9BVENfdGV4dHVyZSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
RVRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVFVEMuY3BwCmluZGV4IGY0Yzk0YTZkNjNmNDliMjY2ODFkYTM1NzYyNWJjYmQ1MWQxYmM3NjQu
LmE2YTU0YWExNTM3MDg2ZmUyOWYxYzYyZTczYTliMDEzNWFmM2Y3ODEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMu
Y3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogI2luY2x1ZGUgIldlYkdM
Q29tcHJlc3NlZFRleHR1cmVFVEMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYsMTggKzM2LDE4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEM6OldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVFVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKICAgICA6IFdlYkdM
RXh0ZW5zaW9uKGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5n
ZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfY29tcHJlc3NlZF90ZXh0dXJl
X2V0YyIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygp
LmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKTsKIAotICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1IxMV9FQUMpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDKTsKLSAgICBjb250ZXh0LmFkZENv
bXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SRzExX0VBQyk7
Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0I4X0VUQzIpOwotICAgIGNvbnRl
eHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NS
R0I4X0VUQzIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyKTsKLSAgICBj
b250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFD
KTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMpOworICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1IxMV9FQUMpOworICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1NJR05FRF9SMTFfRUFDKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SRzExX0VBQyk7CisgICAgY29udGV4dC5hZGRD
b21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1JH
MTFfRUFDKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9SR0I4X0VUQzIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0VUQzIpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQo
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDKTsKKyAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfRVRDMl9FQUMpOwogfQogCiBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDOjp+V2ViR0xD
b21wcmVzc2VkVGV4dHVyZUVUQygpID0gZGVmYXVsdDsKQEAgLTU5LDcgKzU5LDcgQEAgV2ViR0xF
eHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzo6Z2V0TmFt
ZSgpIGNvbnN0CiAKIGJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHQu
Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdMRV9j
b21wcmVzc2VkX3RleHR1cmVfZXRjIik7CisgICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250
ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdMRV9jb21wcmVzc2VkX3Rl
eHR1cmVfZXRjIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmNw
cAppbmRleCBiZGMzYmVlMGE4NzZhY2Y2OTgxYjAwNDhjNjc1MDNkM2M0Y2ZiY2U2Li5mYjNkZmVh
ZmZhNjBiZjU4ZTJiNmRlYjQxNDE1OGNkM2YxOWU3ODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwCkBA
IC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdMKQogI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVFVEMxLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRl
ICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzE6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEMxKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVu
c2lvbihjb250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0
ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0
dXJlIik7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCku
ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiKTsKIAot
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpFVEMx
X1JHQjhfT0VTKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnNHTDo6RVRDMV9SR0I4X09FUyk7CiB9CiAKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMx
Ojp+V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEoKSA9IGRlZmF1bHQ7CkBAIC01MCw3ICs1MCw3
IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEMxOjpnZXROYW1lKCkgY29uc3QKIAogYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMTo6
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAgcmV0
dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRz
KCJHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZSIpOworICAgIHJldHVybiBjb250
ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VT
X2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKaW5kZXggNGJkMGFmNDc0MDkwNDE4MzU0YjY1NjAzYTdi
NjBjNWRmZTJkOThmNi4uOTM1OTlhYzNjN2U3OWJjMDk2OTAwZTdmZDQyMWZjMDQ1ZDM0ZjdmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsMTIgKzM3LDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6V2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAgICAg
OiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0
M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0lNR190ZXh0dXJlX2NvbXBy
ZXNzaW9uX3B2cnRjIik7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRl
bnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMi
KTsKIAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HKTsKLSAgICBjb250ZXh0LmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQ
UFYxX0lNRyk7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HKTsKLSAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BW
UlRDXzJCUFBWMV9JTUcpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQo
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HKTsKKyAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JfUFZSVENfMkJQUFYxX0lNRyk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HKTsKKyAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcpOwogfQogCiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEM6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSA9IGRlZmF1bHQ7CkBAIC01NCw3
ICs1NCw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVQVlJUQzo6Z2V0TmFtZSgpIGNvbnN0CiAKIGJvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKIHsK
LSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCku
c3VwcG9ydHMoIkdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIik7CisgICAgcmV0dXJu
IGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJH
TF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKaW5kZXggNWRmZjE5MDRkNzY5NDIwOWNlOTk2ZmIwMmVm
NDU5Y2I2MGE2MjNjZC4uYTNkMTUxZWQ5Y2EzNmVkNTMxZTE4NGZjYmNhNDU0MGJlZDYxOWFiNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDLmNwcApAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsMTUgKzM3LDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogICAgIDogV2Vi
R0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAgICBhdXRvJiBleHRlbnNpb25zID0gY29udGV4dC5n
cmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CisgICAgYXV0byYgZXh0ZW5zaW9u
cyA9IGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpOwogICAgIGV4
dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSIp
OwogICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVz
c2lvbl9keHQzIik7CiAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUiKTsKIAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCk7Ci0g
ICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCk7Cisg
ICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQpOwor
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCk7CiB9CiAKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDOjp+V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSA9IGRlZmF1bHQ7CkBAIC01Nyw3ICs1
Nyw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpnZXROYW1lKCkgY29uc3QKIAogYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Qzo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0gICAg
YXV0byYgZXh0ZW5zaW9ucyA9IGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5z
aW9ucygpOworICAgIGF1dG8mIGV4dGVuc2lvbnMgPSBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdM
KCktPmdldEV4dGVuc2lvbnMoKTsKICNpZiBVU0UoQU5HTEUpCiAgICAgcmV0dXJuIGV4dGVuc2lv
bnMuc3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEiKQogICAgICAgICAm
JiBleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMi
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0
cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5oCmluZGV4IGVhNjc0MjM5YzAwMDg2Y2I4M2MwMzMzNmExZjE2MzcxMGViNmVmOWMuLjk4
OGQzNjgyM2Q1OGNlMWY5ZjE3MmM5NTlhYjA3ZDFlOGIwMzRjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgKQEAgLTI5LDEy
ICsyOSwxMiBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0RBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVz
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgV2ViR0xQb3dlclByZWZlcmVuY2Ug
PSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTsKLXVzaW5nIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXMgPSBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXM7Cit1c2luZyBXZWJHTFBvd2Vy
UHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOwordXNpbmcgV2Vi
R0xDb250ZXh0QXR0cmlidXRlcyA9IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlczsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRHcm91cC5jcHAKaW5kZXggOWRkZWYxNThjZDBhY2RlNmI2OGNhZGRkMmJjOTNj
ZWQ1YTgzZGVmYS4uNDJiOWNjZjQyM2UyMDMwZGY2NGMxZjY1OTRiYWQzOWU1ZWRiOWIxYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcApA
QCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlICJXZWJHTFNoYXJl
ZE9iamVjdC5oIgogCkBAIC00NCwxMCArNDQsMTAgQEAgV2ViR0xDb250ZXh0R3JvdXA6On5XZWJH
TENvbnRleHRHcm91cCgpCiAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwogfQogCi1H
cmFwaGljc0NvbnRleHQzRCYgV2ViR0xDb250ZXh0R3JvdXA6OmdldEFHcmFwaGljc0NvbnRleHQz
RCgpCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgV2ViR0xDb250ZXh0R3JvdXA6OmdldEFHcmFw
aGljc0NvbnRleHRHTCgpCiB7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRzLmlzRW1wdHkoKSk7Ci0g
ICAgcmV0dXJuICooKm1fY29udGV4dHMuYmVnaW4oKSktPmdyYXBoaWNzQ29udGV4dDNEKCk7Cisg
ICAgcmV0dXJuICooKm1fY29udGV4dHMuYmVnaW4oKSktPmdyYXBoaWNzQ29udGV4dEdMKCk7CiB9
CiAKIHZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmFkZENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEdyb3VwLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bnRleHRHcm91cC5oCmluZGV4IGVhY2QyMmVjNzYzYWUwM2MyNmUwMTRmM2Q1MGYwN2VkNmI1OTEz
NjcuLjYzZDFkMjkwMTlhNzFkNzc4ZWNlYzNjOTEzZmI0ZjFhYjFhNTIwNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaApAQCAtNDIsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QmKTsKICAg
ICB2b2lkIHJlbW92ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCYpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0M0QmIGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworICAgIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMJiBnZXRBR3JhcGhpY3NDb250ZXh0R0woKTsKIAogICAgIHZvaWQgbG9zZUNvbnRleHRH
cm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcAppbmRl
eCA2YTFjN2FiMjk5OWM4NDVjZTlmZTQzMTI5MTQwZWMzY2JiYzQwNWVhLi40NTE0MTI4YjUxZjg0
ZWI3YzcwYjgwMjFmNTlkODc1ZDFmNTU4YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKQEAgLTQ3LDE1ICs0NywxNSBAQCB2b2lk
IFdlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29udGV4dCgpCiB7CiAgICAgZGV0YWNoKCk7CiAg
ICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBkZWxldGVPYmplY3QobV9jb250ZXh0LT5ncmFw
aGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgZGVsZXRlT2JqZWN0KG1fY29udGV4dC0+Z3JhcGhp
Y3NDb250ZXh0R0woKSk7CiAgICAgICAgIG1fY29udGV4dC0+cmVtb3ZlQ29udGV4dE9iamVjdCgq
dGhpcyk7CiAgICAgICAgIG1fY29udGV4dCA9IG51bGxwdHI7CiAgICAgfQogfQogCi1HcmFwaGlj
c0NvbnRleHQzRCogV2ViR0xDb250ZXh0T2JqZWN0OjpnZXRBR3JhcGhpY3NDb250ZXh0M0QoKSBj
b25zdAorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIFdlYkdMQ29udGV4dE9iamVjdDo6Z2V0QUdy
YXBoaWNzQ29udGV4dEdMKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ID8gbV9jb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jb250ZXh0
ID8gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHRHTCgpIDogbnVsbHB0cjsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAppbmRleCAz
NmYyMjQ4NTI0MDJkOWViNTgxZmM1MDExYTUwODc3NGNiMmJlNmMxLi5jMzhlNjQ4NzIzZTQ3YjU3
MjNmMDkwNWI4NWRiMjFmMzhiMTE1MWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTENvbnRleHRPYmplY3QuaApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiAvLyBXZWJH
TENvbnRleHRPYmplY3QgdGhlIGJhc2UgY2xhc3MgZm9yIG9iamVjdHMgdGhhdCBhcmUgb3duZWQg
YnkgYSBzcGVjaWZpYwpAQCAtNTcsNyArNTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVy
biBtX2NvbnRleHQ7CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGlj
c0NvbnRleHQzRCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiBnZXRBR3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBtX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAKaW5kZXggYjhhODIxYmI3ZWU3
ZTU3MjRmMzZhMzgxN2FjZjAwNGVlNGY0NWVlNS4uYzU1ODQ4YmY3ZjU2YjA2N2Q4NzQ2NmI0OGM4
NmZhNzE2M2Y0MzJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xEZWJ1Z1NoYWRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdTaGFkZXJzLmNwcApAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiV2ViR0xEZWJ1
Z1NoYWRlcnMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVu
c2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNs
dWRlICJXZWJHTFNoYWRlci5oIgogCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIFdlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAg
ICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFi
bGVkKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKTsKKyAgICBjb250ZXh0Lmdy
YXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BTkdM
RV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKTsKIH0KIAogV2ViR0xEZWJ1Z1NoYWRlcnM6On5X
ZWJHTERlYnVnU2hhZGVycygpID0gZGVmYXVsdDsKQEAgLTU0LDcgKzU0LDcgQEAgU3RyaW5nIFdl
YkdMRGVidWdTaGFkZXJzOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKFdlYkdMU2hhZGVyJiBz
aGFkZXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBpZiAoIW1fY29udGV4dC52YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlIiwgJnNoYWRlcikpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBtX2NvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VB
TkdMRShzaGFkZXIub2JqZWN0KCkpOworICAgIHJldHVybiBtX2NvbnRleHQuZ3JhcGhpY3NDb250
ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShz
aGFkZXIub2JqZWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHAKaW5kZXggMGQxYjdh
NzUxYWNkN2E4MTRhNGRlNTEzYzk5ZjI2OWQ2ZmE5MGQwMy4uNDUzMWU5ZjZjYTFhZjA2MjhhNDZk
N2VkYjZjNzM1MTBjODQ4MTI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVwdGhUZXh0dXJlLmNwcApAQCAtMjksMTUgKzI5LDE1IEBACiAKICNpbmNsdWRlICJX
ZWJHTERlcHRoVGV4dHVyZS5oIgogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVk
ZSAiRXh0ZW5zaW9uc0dMLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV2ViR0xEZXB0aFRl
eHR1cmU6OldlYkdMRGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX09FU19kZXB0
aF90ZXh0dXJlIik7Ci0gICAgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNp
b25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQVJCX2RlcHRoX3RleHR1cmUiKTsKKyAgICBjb250ZXh0
LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9P
RVNfZGVwdGhfdGV4dHVyZSIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0
RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FSQl9kZXB0aF90ZXh0dXJlIik7CiB9CiAK
IFdlYkdMRGVwdGhUZXh0dXJlOjp+V2ViR0xEZXB0aFRleHR1cmUoKSA9IGRlZmF1bHQ7CkBAIC00
Nyw5ICs0Nyw5IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMRGVwdGhUZXh0
dXJlOjpnZXROYW1lKCkgY29uc3QKICAgICByZXR1cm4gV2ViR0xEZXB0aFRleHR1cmVOYW1lOwog
fQogCi1ib29sIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoR3JhcGhpY3NDb250ZXh0M0Qm
IGNvbnRleHQpCitib29sIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmIGNvbnRleHQpCiB7Ci0gICAgRXh0ZW5zaW9uczNEJiBleHRlbnNpb25zID0g
Y29udGV4dC5nZXRFeHRlbnNpb25zKCk7CisgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0g
Y29udGV4dC5nZXRFeHRlbnNpb25zKCk7CiAgICAgcmV0dXJuIGV4dGVuc2lvbnMuc3VwcG9ydHMo
IkdMX09FU19kZXB0aF90ZXh0dXJlIikKICAgICAgICAgfHwgZXh0ZW5zaW9ucy5zdXBwb3J0cygi
R0xfQVJCX2RlcHRoX3RleHR1cmUiKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTERlcHRoVGV4dHVyZS5oCmluZGV4IDUyY2U5NmRhYzg5YTQzNzFjNzNlZTMzYTVmNTQ3
YjA2Y2M0MmI3YTguLjBmOGI5OWQ0MjQ0ZGUzYjJiODNhNmJmZmUyMjRhOGIyM2FjNjcxMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaApAQCAt
MzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgV2ViR0xEZXB0aFRleHR1cmUoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogICAgIHZpcnR1YWwgfldlYkdMRGVwdGhUZXh0dXJl
KCk7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoR3JhcGhpY3NDb250ZXh0M0QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKIAogICAg
IEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKaW5kZXggNjUwOWE5MjI0
NzJmMWUwNzlhYzkxMTM0YTNmNjk3ZGE4ZTJjNjM4ZS4uY2UzNDVlNjk4MmQzMWVmYTkzYjNmOTI4
MTVmMGMwZDcwYjdlYjlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xEcmF3QnVmZmVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xEcmF3QnVmZmVycy5jcHAKQEAgLTI4LDE0ICsyOCwxNCBAQAogI2lmIEVOQUJMRShXRUJHTCkK
ICNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0Qu
aCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBX
ZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGNvbnRl
eHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdM
X0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdl
dEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CiB9CiAK
IFdlYkdMRHJhd0J1ZmZlcnM6On5XZWJHTERyYXdCdWZmZXJzKCkgPSBkZWZhdWx0OwpAQCAtNDgs
OSArNDgsOSBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTERyYXdCdWZmZXJz
OjpnZXROYW1lKCkgY29uc3QKIGJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7CiAjaWYgVVNFKEFOR0xFKQotICAgIHJl
dHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0
cygiR0xfRVhUX2RyYXdfYnVmZmVycyIpOworICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29u
dGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIp
OwogI2Vsc2UKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRl
bnNpb25zKCkuc3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKQorICAgIHJldHVybiBjb250
ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhU
X2RyYXdfYnVmZmVycyIpCiAgICAgICAgICYmIHNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKGNv
bnRleHQpOwogI2VuZGlmCiB9CkBAIC02MywyNSArNjMsMjUgQEAgdm9pZCBXZWJHTERyYXdCdWZm
ZXJzOjpkcmF3QnVmZmVyc1dFQkdMKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZmZlcnMpCiAg
ICAgY29uc3QgR0MzRGVudW0qIGJ1ZnMgPSBidWZmZXJzLmRhdGEoKTsKICAgICBpZiAoIW1fY29u
dGV4dC5tX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBpZiAobiAhPSAxKSB7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc1dFQkdMIiwgIm1vcmUgdGhhbiBvbmUgYnVmZmVyIik7
CisgICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc1dFQkdMIiwgIm1vcmUgdGhhbiBvbmUgYnVm
ZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGJ1ZnNb
MF0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0sgJiYgYnVmc1swXSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORSkgewotICAgICAgICAgICAgbV9jb250ZXh0LnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdCdWZmZXJzV0VCR0wiLCAi
QkFDSyBvciBOT05FIik7CisgICAgICAgIGlmIChidWZzWzBdICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpCQUNLICYmIGJ1ZnNbMF0gIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpIHsKKyAgICAgICAg
ICAgIG1fY29udGV4dC5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJkcmF3QnVmZmVyc1dFQkdMIiwgIkJBQ0sgb3IgTk9ORSIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGJhY2tidWZm
ZXIgaXMgc2ltdWxhdGVkIG9uIGFsbCBjdXJyZW50IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0byBj
aGFuZ2UgQkFDSyB0byBDT0xPUl9BVFRBQ0hNRU5UMC4KLSAgICAgICAgR0MzRGVudW0gdmFsdWUg
PSAoYnVmc1swXSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSykgPyBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDAgOiBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAg
bV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5kcmF3QnVmZmVy
c0VYVCgxLCAmdmFsdWUpOworICAgICAgICBHQzNEZW51bSB2YWx1ZSA9IChidWZzWzBdID09IEdy
YXBoaWNzQ29udGV4dEdMOjpCQUNLKSA/IEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hN
RU5UMCA6IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOworICAgICAgICBtX2NvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmRyYXdCdWZmZXJzRVhUKDEsICZ2YWx1ZSk7
CiAgICAgICAgIG1fY29udGV4dC5zZXRCYWNrRHJhd0J1ZmZlcihidWZzWzBdKTsKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAobiA+IG1fY29udGV4dC5nZXRNYXhEcmF3QnVmZmVycygpKSB7Ci0g
ICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc1dFQkdMIiwgIm1vcmUgdGhhbiBtYXggZHJhdyBi
dWZmZXJzIik7CisgICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc1dFQkdMIiwgIm1vcmUgdGhh
biBtYXggZHJhdyBidWZmZXJzIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChidWZzW2ldICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FICYmIGJ1ZnNbaV0gIT0gc3RhdGlj
X2Nhc3Q8R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDBfRVhUICsgaSkp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnNXRUJHTCIsICJDT0xPUl9B
VFRBQ0hNRU5UaV9FWFQgb3IgTk9ORSIpOworICAgICAgICAgICAgaWYgKGJ1ZnNbaV0gIT0gR3Jh
cGhpY3NDb250ZXh0R0w6Ok5PTkUgJiYgYnVmc1tpXSAhPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4o
RXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UMF9FWFQgKyBpKSkgeworICAgICAgICAgICAg
ICAgIG1fY29udGV4dC5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJkcmF3QnVmZmVyc1dFQkdMIiwgIkNPTE9SX0FUVEFDSE1FTlRpX0VYVCBv
ciBOT05FIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC05MiwxOCArOTIsMTggQEAgdm9pZCBXZWJHTERyYXdCdWZmZXJzOjpkcmF3QnVmZmVy
c1dFQkdMKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZmZlcnMpCiAvLyBzdGF0aWMKIGJvb2wg
V2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYgd2ViZ2xDb250ZXh0KQogewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gd2ViZ2xDb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIGNvbnRleHQgPSB3ZWJnbENvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0wo
KTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHdlIG1ha2Ugc3VyZSBHTF9FWFRfZHJh
d19idWZmZXJzIGlzIHN1cHBvcnRlZC4KICAgICBHQzNEaW50IG1heERyYXdCdWZmZXJzID0gMDsK
ICAgICBHQzNEaW50IG1heENvbG9yQXR0YWNobWVudHMgPSAwOwotICAgIGNvbnRleHQtPmdldElu
dGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtYXhEcmF3QnVmZmVy
cyk7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRU
QUNITUVOVFNfRVhULCAmbWF4Q29sb3JBdHRhY2htZW50cyk7CisgICAgY29udGV4dC0+Z2V0SW50
ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1heERyYXdCdWZmZXJz
KTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9DT0xPUl9BVFRB
Q0hNRU5UU19FWFQsICZtYXhDb2xvckF0dGFjaG1lbnRzKTsKICAgICBpZiAobWF4RHJhd0J1ZmZl
cnMgPCA0IHx8IG1heENvbG9yQXR0YWNobWVudHMgPCA0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBQbGF0Zm9ybTNET2JqZWN0IGZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVy
KCk7Ci0gICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgZmJvKTsKKyAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBmYm8pOwogCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBidWZm
ZXJbNF0gPSB7IDAsIDAsIDAsIDAgfTsgLy8gdGV4dHVyZXMgYXJlIHJlcXVpcmVkIHRvIGJlIGlu
aXRpYWxpemVkIGZvciBvdGhlciBwb3J0cy4KICAgICBib29sIHN1cHBvcnRzRGVwdGggPSBjb250
ZXh0LT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX09FU19kZXB0aF90ZXh0dXJlIikKQEAg
LTExMywxNCArMTEzLDE0IEBAIGJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xS
ZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgd2ViCiAgICAgUGxhdGZvcm0z
RE9iamVjdCBkZXB0aFN0ZW5jaWwgPSAwOwogICAgIGlmIChzdXBwb3J0c0RlcHRoU3RlbmNpbCkg
ewogICAgICAgICBkZXB0aFN0ZW5jaWwgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAg
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBk
ZXB0aFN0ZW5jaWwpOwotICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgMSwg
MSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9JTlRfMjRfOCwgYnVmZmVyKTsKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCk7CisgICAgICAg
IGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMLCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfU1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84LCBi
dWZmZXIpOwogICAgIH0KICAgICBQbGF0Zm9ybTNET2JqZWN0IGRlcHRoID0gMDsKICAgICBpZiAo
c3VwcG9ydHNEZXB0aCkgewogICAgICAgICBkZXB0aCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUo
KTsKLSAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIGRlcHRoKTsKLSAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVCwg
MSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVCwgYnVmZmVyKTsKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIGRlcHRoKTsKKyAgICAgICAgY29udGV4
dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVCwgYnVmZmVyKTsK
ICAgICB9CiAKICAgICBWZWN0b3I8UGxhdGZvcm0zRE9iamVjdD4gY29sb3JzOwpAQCAtMTI5LDMw
ICsxMjksMzAgQEAgYm9vbCBXZWJHTERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVt
ZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiB3ZWIKICAgICBmb3IgKEdDM0RpbnQgaSA9
IDA7IGkgPCBtYXhBbGxvd2VkQnVmZmVyczsgKytpKSB7CiAgICAgICAgIFBsYXRmb3JtM0RPYmpl
Y3QgY29sb3IgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CiAgICAgICAgIGNvbG9ycy5hcHBl
bmQoY29sb3IpOwotICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgY29sb3IpOwotICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBidWZmZXIpOwotICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCArIGksIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb2xvciwgMCk7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NP
TVBMRVRFKSB7CisgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFXzJELCBjb2xvcik7CisgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCAxLCAx
LCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X0JZVEUsIGJ1ZmZlcik7CisgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FU
VEFDSE1FTlQwICsgaSwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIGNvbG9yLCAwKTsK
KyAgICAgICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09N
UExFVEUpIHsKICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBpZiAoc3VwcG9ydHNEZXB0aCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIGRlcHRoLCAwKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgICAgICBjb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV8yRCwgZGVwdGgsIDApOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgICAgICAgICBvayA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIDApOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c0RlcHRoU3RlbmNpbCkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOworICAgICAgICAgICAgY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV8yRCwgZGVwdGhTdGVuY2lsLCAwKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgICAgICAgICAgb2sg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIDApOworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNI
TUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICAgICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV8yRCwgMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKaW5kZXggZmMwY2RlNjY1
NzEwNjFhN2RlMTQ2Y2RmN2RkZDlmNWYxYTU1MWQ4NC4uYjkzNjlmODc2NjM5Y2NmMzJiOWNiYzVm
MjgzNWUyNjZhYjk0YzM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkK
IAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgog
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVy
cy5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKQEAgLTUxLDkgKzUx
LDkgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICB2
b2lkIHNldEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7Ci0gICAgICAgIHZvaWQgb25EZXRhY2hlZChH
cmFwaGljc0NvbnRleHQzRCopIG92ZXJyaWRlOwotICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGlj
c0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwotICAgICAgICB2b2lk
IHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVudW0gYXR0YWNobWVudCkgb3ZlcnJp
ZGU7CisgICAgICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopIG92
ZXJyaWRlOworICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdD
M0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOworICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CiAKICAg
ICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkgeyB9OwogCkBAIC0xMTEsMjYgKzEx
MSwyNiBAQCBuYW1lc3BhY2UgewogICAgICAgICAgICAgbV9yZW5kZXJidWZmZXItPnNldEluaXRp
YWxpemVkKCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6
Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgdm9pZCBXZWJHTFJl
bmRlcmJ1ZmZlckF0dGFjaG1lbnQ6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IGNvbnRleHQpCiAgICAgewogICAgICAgICBtX3JlbmRlcmJ1ZmZlci0+b25EZXRhY2hlZChjb250
ZXh0KTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6YXR0
YWNoKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHQzNEZW51bSBhdHRhY2htZW50KQorICAg
IHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50OjphdHRhY2goR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAgICAgewogICAgICAgICBQ
bGF0Zm9ybTNET2JqZWN0IG9iamVjdCA9IG9iamVjdE9yWmVybyhtX3JlbmRlcmJ1ZmZlci5nZXQo
KSk7Ci0gICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgb2JqZWN0KTsKKyAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBHcmFwaGljc0Nv
bnRleHRHTDo6UkVOREVSQlVGRkVSLCBvYmplY3QpOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xS
ZW5kZXJidWZmZXJBdHRhY2htZW50Ojp1bmF0dGFjaChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgR0MzRGVudW0gYXR0YWNobWVudCkKKyAgICB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyQXR0YWNo
bWVudDo6dW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQpCiAgICAgewogI2lmICFVU0UoQU5HTEUpCi0gICAgICAgIGlmIChhdHRhY2ht
ZW50ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgICAgICAgICAgY29udGV4dC0+
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgeworICAgICAgICAgICAgY29udGV4dC0+
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlJF
TkRFUkJVRkZFUiwgMCk7CisgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIsIDApOwog
ICAgICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwg
YXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CiAgICAgfQog
CiAgICAgY2xhc3MgV2ViR0xUZXh0dXJlQXR0YWNobWVudCA6IHB1YmxpYyBXZWJHTEZyYW1lYnVm
ZmVyOjpXZWJHTEF0dGFjaG1lbnQgewpAQCAtMTQ3LDkgKzE0Nyw5IEBAIG5hbWVzcGFjZSB7CiAg
ICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBib29sIGlzSW5p
dGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgdm9pZCBzZXRJbml0aWFsaXplZCgp
IG92ZXJyaWRlOwotICAgICAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqKSBv
dmVycmlkZTsKLSAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0M0QqLCBHQzNEZW51
bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0Nv
bnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOworICAgICAgICB2b2lkIG9u
RGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKSBvdmVycmlkZTsKKyAgICAgICAgdm9p
ZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBHQzNEZW51bSBhdHRhY2htZW50KSBv
dmVycmlkZTsKKyAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogCiAgICAgICAgIFdlYkdMVGV4dHVyZUF0
dGFjaG1lbnQoKSB7IH07CiAKQEAgLTIxMSwyNiArMjExLDI2IEBAIG5hbWVzcGFjZSB7CiAgICAg
ICAgIC8vIFRleHR1cmVzIGFyZSBhc3N1bWVkIHRvIGJlIGluaXRpYWxpemVkLgogICAgIH0KIAot
ICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6b25EZXRhY2hlZChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKKyAgICB2b2lkIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQ6Om9uRGV0YWNo
ZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQpCiAgICAgewogICAgICAgICBtX3Rl
eHR1cmUtPm9uRGV0YWNoZWQoY29udGV4dCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFRleHR1
cmVBdHRhY2htZW50OjphdHRhY2goR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQpCisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphdHRhY2goR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAgICAg
ewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCA9IG9iamVjdE9yWmVybyhtX3RleHR1
cmUuZ2V0KCkpOwotICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIG1fdGFyZ2V0LCBvYmplY3QsIG1f
bGV2ZWwpOworICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0Nv
bnRleHRHTDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIG1fdGFyZ2V0LCBvYmplY3QsIG1fbGV2
ZWwpOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6dW5hdHRhY2go
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCisgICAgdm9p
ZCBXZWJHTFRleHR1cmVBdHRhY2htZW50Ojp1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCogY29udGV4dCwgR0MzRGVudW0gYXR0YWNobWVudCkKICAgICB7CiAjaWYgIVVTRShBTkdMRSkK
LSAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5D
SUxfQVRUQUNITUVOVCkgewotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQVRUQUNITUVOVCwgbV90YXJnZXQsIDAsIG1fbGV2ZWwpOwotICAgICAgICAgICAgY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBtX3RhcmdldCwgMCwgbV9sZXZl
bCk7CisgICAgICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0FUVEFDSE1FTlQsIG1fdGFyZ2V0LCAwLCBtX2xldmVsKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCwgbV90YXJnZXQsIDAsIG1f
bGV2ZWwpOwogICAgICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBhdHRhY2ht
ZW50LCBtX3RhcmdldCwgMCwgbV9sZXZlbCk7CisgICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQs
IG1fdGFyZ2V0LCAwLCBtX2xldmVsKTsKICAgICB9CiAKICAgICBib29sIGlzQXR0YWNobWVudENv
bXBsZXRlKFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudCogYXR0YWNoZWRPYmplY3Qs
IEdDM0RlbnVtIGF0dGFjaG1lbnQsIGNvbnN0IGNoYXIqKiByZWFzb24pCkBAIC0yMzgsOCArMjM4
LDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgQVNTRVJUKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFj
aGVkT2JqZWN0LT5pc1ZhbGlkKCkpOwogICAgICAgICBBU1NFUlQocmVhc29uKTsKICAgICAgICAg
R0MzRGVudW0gZm9ybWF0ID0gYXR0YWNoZWRPYmplY3QtPmdldEZvcm1hdCgpOwotICAgICAgICB1
bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0YWNobWVu
dFR5cGUoYXR0YWNobWVudCk7Ci0gICAgICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Q2xlYXJCaXRzQnlGb3JtYXQoZm9ybWF0KTsKKyAgICAgICAgdW5zaWduZWQgbmVl
ZCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBl
KGF0dGFjaG1lbnQpOworICAgICAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCk7CiAKICAgICAgICAgaWYgKChuZWVk
ICYgaGF2ZSkgIT0gbmVlZCkgewogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IHR5
cGUgaXMgbm90IGNvcnJlY3QgZm9yIGF0dGFjaG1lbnQiOwpAQCAtMjQ5LDggKzI0OSw4IEBAIG5h
bWVzcGFjZSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0dGFjaG1lbnQgaGFzIGEgMCBkaW1l
bnNpb24iOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGlm
ICgoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCB8fCBh
dHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQpCi0gICAg
ICAgICAgICAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwpIHsK
KyAgICAgICAgaWYgKChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRB
Q0hNRU5UIHx8IGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNI
TUVOVCkKKyAgICAgICAgICAgICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
U1RFTkNJTCkgewogICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudCBERVBUSF9TVEVOQ0lM
IG5vdCBhbGxvd2VkIG9uIERFUFRIIG9yIFNURU5DSUwgYXR0YWNobWVudCI7CiAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yNzIsNyArMjcyLDcgQEAgV2ViR0xGcmFtZWJ1
ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgpCiAg
ICAgOiBXZWJHTENvbnRleHRPYmplY3QoY3R4KQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZh
bHNlKQogewotICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJh
bWVidWZmZXIoKSk7CisgICAgc2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRleHRHTCgpLT5jcmVh
dGVGcmFtZWJ1ZmZlcigpKTsKIH0KIAogV2ViR0xGcmFtZWJ1ZmZlcjo6fldlYkdMRnJhbWVidWZm
ZXIoKQpAQCAtMzExLDcgKzMxMSw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6YXR0YWNoKEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIGF0dGFjaG1lbnRQb2ludCkKICAgICBBU1NFUlQo
aXNCb3VuZCgpKTsKICAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50T2JqZWN0
ID0gZ2V0QXR0YWNobWVudChhdHRhY2htZW50KTsKICAgICBpZiAoYXR0YWNobWVudE9iamVjdCkK
LSAgICAgICAgYXR0YWNobWVudE9iamVjdC0+YXR0YWNoKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0M0QoKSwgYXR0YWNobWVudFBvaW50KTsKKyAgICAgICAgYXR0YWNobWVudE9iamVjdC0+YXR0
YWNoKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKSwgYXR0YWNobWVudFBvaW50KTsKIH0K
IAogV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZmZXI6OmdldEF0dGFjaG1lbnRPYmpl
Y3QoR0MzRGVudW0gYXR0YWNobWVudCkgY29uc3QKQEAgLTMzNiwyMCArMzM2LDIwIEBAIHZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKEdD
M0RlbnVtIGF0dGFjaG1lbnQpCiAKICAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2ht
ZW50T2JqZWN0ID0gZ2V0QXR0YWNobWVudChhdHRhY2htZW50KTsKICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdCkgewotICAgICAgICBhdHRhY2htZW50T2JqZWN0LT5vbkRldGFjaGVkKGNvbnRleHQo
KS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIGF0dGFjaG1lbnRPYmplY3QtPm9uRGV0
YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgpKTsKICAgICAgICAgbV9hdHRhY2ht
ZW50cy5yZW1vdmUoYXR0YWNobWVudCk7CiAgICAgICAgIGRyYXdCdWZmZXJzSWZOZWNlc3Nhcnko
ZmFsc2UpOwogI2lmICFVU0UoQU5HTEUpCiAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6
Ci0gICAgICAgICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQs
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UKTsKLSAgICAgICAgICAgIGF0dGFj
aChHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNI
TUVOVCk7CisgICAgICAgICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNI
TUVOVDoKLSAgICAgICAgICAgIGF0dGFjaChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCk7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAg
ICBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCwgR3Jh
cGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICAg
ICAgICAgIGF0dGFjaChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgYXR0YWNo
KEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICNlbmRpZgpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVt
b3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdlYkdMU2hhcmVkT2JqZWN0KiBhCiAg
ICAgICAgICAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50T2JqZWN0ID0gZW50
cnkudmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdC0+aXNTaGFy
ZWRPYmplY3QoYXR0YWNobWVudCkpIHsKICAgICAgICAgICAgICAgICBHQzNEZW51bSBhdHRhY2ht
ZW50VHlwZSA9IGVudHJ5LmtleTsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0LT51
bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCksIGF0dGFjaG1lbnRUeXBlKTsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0LT51bmF0dGFjaChjb250ZXh0KCktPmdy
YXBoaWNzQ29udGV4dEdMKCksIGF0dGFjaG1lbnRUeXBlKTsKICAgICAgICAgICAgICAgICByZW1v
dmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudFR5cGUpOwogICAgICAg
ICAgICAgICAgIGNoZWNrTW9yZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0z
ODQsNyArMzg0LDcgQEAgR0MzRHNpemVpIFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yQnVmZmVy
V2lkdGgoKSBjb25zdAogewogICAgIGlmICghb2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCk7CisgICAgUmVmUHRyPFdlYkdMQXR0
YWNobWVudD4gYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0R0w6OkNP
TE9SX0FUVEFDSE1FTlQwKTsKICAgICBpZiAoIWF0dGFjaG1lbnQpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC0zOTUsNyArMzk1LDcgQEAgR0MzRHNpemVpIFdlYkdMRnJhbWVidWZmZXI6OmdldENv
bG9yQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0
YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDApOworICAgIFJlZlB0
cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29u
dGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCk7CiAgICAgaWYgKCFhdHRhY2htZW50KQogICAgICAg
ICByZXR1cm4gMDsKIApAQCAtNDA2LDcgKzQwNiw3IEBAIEdDM0RlbnVtIFdlYkdMRnJhbWVidWZm
ZXI6OmdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3QKIHsKICAgICBpZiAoIW9iamVjdCgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50
ID0gZ2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDApOwor
ICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdy
YXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCk7CiAgICAgaWYgKCFhdHRhY2htZW50
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gYXR0YWNobWVudC0+Z2V0Rm9ybWF0KCk7
CkBAIC00MjIsMjkgKzQyMiwyOSBAQCBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpjaGVja1N0
YXR1cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAgIGZvciAoYXV0byYgZW50cnkgOiBt
X2F0dGFjaG1lbnRzKSB7CiAgICAgICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1l
bnQgPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFpc0F0dGFjaG1lbnRDb21wbGV0
ZShhdHRhY2htZW50LmdldCgpLCBlbnRyeS5rZXksIHJlYXNvbikpCi0gICAgICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
KyAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOwogICAgICAgICBpZiAoIWF0dGFjaG1lbnQtPmlzVmFsaWQoKSkgewog
ICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGlzIG5vdCB2YWxpZCI7Ci0gICAgICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwor
ICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9VTlNVUFBP
UlRFRDsKICAgICAgICAgfQogICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50Rm9ybWF0ID0gYXR0
YWNobWVudC0+Z2V0Rm9ybWF0KCk7CiAKICAgICAgICAgLy8gQXR0YWNoaW5nIGFuIFNSR0JfRVhU
IGZvcm1hdCBhdHRhY2htZW50IHRvIGEgZnJhbWVidWZmZXIgaXMgaW52YWxpZC4KLSAgICAgICAg
aWYgKGF0dGFjaG1lbnRGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCkKKyAgICAgICAg
aWYgKGF0dGFjaG1lbnRGb3JtYXQgPT0gRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVCkKICAgICAgICAg
ICAgIGF0dGFjaG1lbnRGb3JtYXQgPSAwOwogCiAgICAgICAgIGlmICghYXR0YWNobWVudEZvcm1h
dCkgewogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGlzIGFuIHVuc3VwcG9ydGVk
IGZvcm1hdCI7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHRHTDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAg
ICAgICAgIHN3aXRjaCAoZW50cnkua2V5KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0FUVEFDSE1FTlQ6CiAgICAgICAgICAgICBoYXZlRGVwdGggPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5U
OgogICAgICAgICAgICAgaGF2ZVN0ZW5jaWwgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
OgogICAgICAgICAgICAgaGF2ZURlcHRoU3RlbmNpbCA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtNDU0LDQzICs0NTQsNDMgQEAgR0MzRGVudW0gV2ViR0xGcmFtZWJ1
ZmZlcjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNvbikgY29uc3QKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmICh3aWR0aCAhPSBhdHRhY2htZW50LT5nZXRXaWR0aCgpIHx8
IGhlaWdodCAhPSBhdHRhY2htZW50LT5nZXRIZWlnaHQoKSkgewogICAgICAgICAgICAgICAgICpy
ZWFzb24gPSAiYXR0YWNobWVudHMgZG8gbm90IGhhdmUgdGhlIHNhbWUgZGltZW5zaW9ucyI7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgKytjb3VudDsKICAgICB9CiAgICAgaWYgKCFjb3VudCkgewogICAg
ICAgICAqcmVhc29uID0gIm5vIGF0dGFjaG1lbnRzIjsKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01J
U1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7CiAg
ICAgICAgICpyZWFzb24gPSAiZnJhbWVidWZmZXIgaGFzIGEgMCBkaW1lbnNpb24iOwotICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgfQogICAgIC8vIFdlYkdMIHNwZWNpZmljOiBubyBjb25m
bGljdGluZyBERVBUSC9TVEVOQ0lML0RFUFRIX1NURU5DSUwgYXR0YWNobWVudHMuCiAgICAgaWYg
KChoYXZlRGVwdGhTdGVuY2lsICYmIChoYXZlRGVwdGggfHwgaGF2ZVN0ZW5jaWwpKSB8fCAoaGF2
ZURlcHRoICYmIGhhdmVTdGVuY2lsKSkgewogICAgICAgICAqcmVhc29uID0gImNvbmZsaWN0aW5n
IERFUFRIL1NURU5DSUwvREVQVEhfU1RFTkNJTCBhdHRhY2htZW50cyI7Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgfQot
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKIH0KIAotYm9v
bCBXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2VzcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNk
LCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2VzcyhH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBjb25zdCBjaGFyKiogcmVhc29uKQog
ewotICAgIGlmIChjaGVja1N0YXR1cyhyZWFzb24pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkKKyAgICBpZiAoY2hlY2tTdGF0dXMocmVhc29uKSAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gaW5pdGlhbGl6ZUF0dGFjaG1lbnRzKGNvbnRleHQzZCwgcmVhc29uKTsKIH0K
IAogYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsQnVmZmVyKCkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsKKyAgICBSZWZQdHI8V2ViR0xBdHRh
Y2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9BVFRBQ0hNRU5UKTsKICAgICBpZiAoIWF0dGFjaG1lbnQpCi0gICAgICAgIGF0dGFjaG1l
bnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQpOworICAgICAgICBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTsKICAgICByZXR1cm4gYXR0YWNobWVudCAm
JiBhdHRhY2htZW50LT5pc1ZhbGlkKCk7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2Jq
ZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
IHsKICAgICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBtX2F0dGFjaG1lbnRzLnZhbHVlcygpKQog
ICAgICAgICBhdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRleHQzZCk7CkBAIC00OTgsNyArNDk4
LDcgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0QKICAgICBjb250ZXh0M2QtPmRlbGV0ZUZyYW1l
YnVmZmVyKG9iamVjdCk7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0
dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dDNEKiBnM2QsIGNvbnN0IGNoYXIqKiByZWFzb24pCiti
b29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogZzNkLCBjb25zdCBjaGFyKiogcmVhc29uKQogewogICAgIEFTU0VSVChvYmpl
Y3QoKSk7CiAgICAgR0MzRGJpdGZpZWxkIG1hc2sgPSAwOwpAQCAtNTA3LDIxICs1MDcsMjEgQEAg
Ym9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250
ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAgICAgICAgR0MzRGVudW0gYXR0YWNobWVudFR5cGUg
PSBlbnRyeS5rZXk7CiAgICAgICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQg
PSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFhdHRhY2htZW50LT5pc0luaXRpYWxp
emVkKCkpCi0gICAgICAgICAgIG1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0
c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUpOworICAgICAgICAgICAgbWFzayB8PSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRh
Y2htZW50VHlwZSk7CiAgICAgfQogICAgIGlmICghbWFzaykKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICAvLyBXZSBvbmx5IGNsZWFyIHVuLWluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMgd2hl
biB0aGV5IGFyZSByZWFkeSB0byBiZQogICAgIC8vIHJlYWQsIGkuZS4sIHdoZW4gdGhlIGZyYW1l
YnVmZmVyIGlzIGNvbXBsZXRlLgotICAgIGlmIChnM2QtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICBpZiAoZzNkLT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgICpyZWFzb24gPSAiZnJhbWVidWZmZXIgbm90
IGNvbXBsZXRlIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgaW5p
dENvbG9yID0gbWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAg
IGJvb2wgaW5pdERlcHRoID0gbWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJf
QklUOwotICAgIGJvb2wgaW5pdFN0ZW5jaWwgPSBtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQlVGRkVSX0JJVDsKKyAgICBib29sIGluaXRDb2xvciA9IG1hc2sgJiBHcmFwaGljc0Nv
bnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBib29sIGluaXREZXB0aCA9IG1hc2sgJiBH
cmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICBib29sIGluaXRTdGVuY2ls
ID0gbWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CiAKICAgICBH
QzNEZmxvYXQgY29sb3JDbGVhclZhbHVlW10gPSB7MCwgMCwgMCwgMH0sIGRlcHRoQ2xlYXJWYWx1
ZSA9IDA7CiAgICAgR0MzRGludCBzdGVuY2lsQ2xlYXJWYWx1ZSA9IDA7CkBAIC01MzAsMjcgKzUz
MCwyNyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhHcmFw
aGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgIEdDM0Rib29sZWFuIGlzU2Npc3Nv
ckVuYWJsZWQgPSAwOwogICAgIEdDM0Rib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IDA7CiAgICAg
aWYgKGluaXRDb2xvcikgewotICAgICAgICBnM2QtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQ0xFQVJfVkFMVUUsIGNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgICAgIGczZC0+Z2V0
Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsK
KyAgICAgICAgZzNkLT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0NMRUFSX1ZB
TFVFLCBjb2xvckNsZWFyVmFsdWUpOworICAgICAgICBnM2QtPmdldEJvb2xlYW52KEdyYXBoaWNz
Q29udGV4dEdMOjpDT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7CiAgICAgICAgIGczZC0+Y2xl
YXJDb2xvcigwLCAwLCAwLCAwKTsKICAgICAgICAgZzNkLT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgdHJ1ZSk7CiAgICAgfQogICAgIGlmIChpbml0RGVwdGgpIHsKLSAgICAgICAgZzNkLT5n
ZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFLCAmZGVwdGhDbGVh
clZhbHVlKTsKLSAgICAgICAgZzNkLT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgZzNkLT5nZXRGbG9hdHYoR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NMRUFSX1ZBTFVFLCAmZGVwdGhDbGVhclZhbHVlKTsKKyAgICAg
ICAgZzNkLT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfV1JJVEVNQVNLLCAm
ZGVwdGhNYXNrKTsKICAgICAgICAgZzNkLT5jbGVhckRlcHRoKDEuMGYpOwogICAgICAgICBnM2Qt
PmRlcHRoTWFzayh0cnVlKTsKICAgICB9CiAgICAgaWYgKGluaXRTdGVuY2lsKSB7Ci0gICAgICAg
IGczZC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUUs
ICZzdGVuY2lsQ2xlYXJWYWx1ZSk7Ci0gICAgICAgIGczZC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdDM0RpbnQqPigm
c3RlbmNpbE1hc2spKTsKKyAgICAgICAgZzNkLT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9DTEVBUl9WQUxVRSwgJnN0ZW5jaWxDbGVhclZhbHVlKTsKKyAgICAgICAgZzNk
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9XUklURU1BU0ssIHJlaW50
ZXJwcmV0X2Nhc3Q8R0MzRGludCo+KCZzdGVuY2lsTWFzaykpOwogICAgICAgICBnM2QtPmNsZWFy
U3RlbmNpbCgwKTsKICAgICAgICAgZzNkLT5zdGVuY2lsTWFzaygweGZmZmZmZmZmKTsKICAgICB9
Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IGczZC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOwotICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKLSAgICBpc0RpdGhlckVuYWJsZWQgPSBnM2QtPmlzRW5hYmxlZChHcmFwaGlj
c0NvbnRleHQzRDo6RElUSEVSKTsKLSAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkRJVEhFUik7CisgICAgaXNTY2lzc29yRW5hYmxlZCA9IGczZC0+aXNFbmFibGVkKEdyYXBoaWNz
Q29udGV4dEdMOjpTQ0lTU09SX1RFU1QpOworICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHRHTDo6U0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSBnM2QtPmlzRW5hYmxl
ZChHcmFwaGljc0NvbnRleHRHTDo6RElUSEVSKTsKKyAgICBnM2QtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0R0w6OkRJVEhFUik7CiAKICAgICBnM2QtPmNsZWFyKG1hc2spOwogCkBAIC01NjcsMTgg
KzU2NywxOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRhY2htZW50cyhH
cmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAgICAgICBnM2QtPnN0ZW5jaWxN
YXNrKHN0ZW5jaWxNYXNrKTsKICAgICB9CiAgICAgaWYgKGlzU2Npc3NvckVuYWJsZWQpCi0gICAg
ICAgIGczZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAg
ICBnM2QtPmVuYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUKTsKICAgICBlbHNl
Ci0gICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
KyAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpOwog
ICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCi0gICAgICAgIGczZC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpESVRIRVIpOworICAgICAgICBnM2QtPmVuYWJsZShHcmFwaGljc0NvbnRleHRHTDo6
RElUSEVSKTsKICAgICBlbHNlCi0gICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6RElUSEVSKTsKKyAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpESVRI
RVIpOwogCiAgICAgZm9yIChBdHRhY2htZW50TWFwOjppdGVyYXRvciBpdCA9IG1fYXR0YWNobWVu
dHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQoKTsgKytpdCkgewogICAgICAgICBH
QzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CiAgICAgICAgIGF1dG8gYXR0YWNobWVu
dCA9IGl0LT52YWx1ZTsKLSAgICAgICAgR0MzRGJpdGZpZWxkIGJpdHMgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CisgICAg
ICAgIEdDM0RiaXRmaWVsZCBiaXRzID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENsZWFy
Qml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUpOwogICAgICAgICBpZiAoYml0cyAm
IG1hc2spCiAgICAgICAgICAgICBhdHRhY2htZW50LT5zZXRJbml0aWFsaXplZCgpOwogICAgIH0K
QEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRyYXdCdWZmZXJzKGNv
bnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZnMpCiAgICAgbV9kcmF3QnVmZmVycyA9IGJ1ZnM7CiAg
ICAgbV9maWx0ZXJlZERyYXdCdWZmZXJzLnJlc2l6ZShtX2RyYXdCdWZmZXJzLnNpemUoKSk7CiAg
ICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2ZpbHRlcmVkRHJhd0J1ZmZlcnMpCi0gICAgICAgIGJ1
ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgICAgICBidWZmZXIgPSBHcmFwaGlj
c0NvbnRleHRHTDo6Tk9ORTsKICAgICBkcmF3QnVmZmVyc0lmTmVjZXNzYXJ5KHRydWUpOwogfQog
CkBAIC02MTEsMzMgKzYxMSwzMyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRyYXdCdWZmZXJz
SWZOZWNlc3NhcnkoYm9vbCBmb3JjZSkKICAgICBib29sIHJlc2V0ID0gZm9yY2U7CiAgICAgLy8g
VGhpcyBmaWx0ZXJpbmcgd29ya3MgYXJvdW5kIGdyYXBoaWNzIGRyaXZlciBidWdzIG9uIE1hYyBP
UyBYLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kcmF3QnVmZmVycy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAobV9kcmF3QnVmZmVyc1tpXSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORSAmJiBnZXRBdHRhY2htZW50KG1fZHJhd0J1ZmZlcnNbaV0pKSB7CisgICAgICAgIGlmICht
X2RyYXdCdWZmZXJzW2ldICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FICYmIGdldEF0dGFjaG1l
bnQobV9kcmF3QnVmZmVyc1tpXSkpIHsKICAgICAgICAgICAgIGlmIChtX2ZpbHRlcmVkRHJhd0J1
ZmZlcnNbaV0gIT0gbV9kcmF3QnVmZmVyc1tpXSkgewogICAgICAgICAgICAgICAgIG1fZmlsdGVy
ZWREcmF3QnVmZmVyc1tpXSA9IG1fZHJhd0J1ZmZlcnNbaV07CiAgICAgICAgICAgICAgICAgcmVz
ZXQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkg
ewotICAgICAgICAgICAgICAgIG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FOworICAgICAgICAgICAgaWYgKG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSAh
PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSkgeworICAgICAgICAgICAgICAgIG1fZmlsdGVyZWRE
cmF3QnVmZmVyc1tpXSA9IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOwogICAgICAgICAgICAgICAg
IHJlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBpZiAo
cmVzZXQpIHsKLSAgICAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRl
bnNpb25zKCkuZHJhd0J1ZmZlcnNFWFQoCisgICAgICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmRyYXdCdWZmZXJzRVhUKAogICAgICAgICAgICAgbV9m
aWx0ZXJlZERyYXdCdWZmZXJzLnNpemUoKSwgbV9maWx0ZXJlZERyYXdCdWZmZXJzLmRhdGEoKSk7
CiAgICAgfQogfQogCiBHQzNEZW51bSBXZWJHTEZyYW1lYnVmZmVyOjpnZXREcmF3QnVmZmVyKEdD
M0RlbnVtIGRyYXdCdWZmZXIpCiB7Ci0gICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihk
cmF3QnVmZmVyIC0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUKTsKKyAgICBpbnQgaW5k
ZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRyYXdCdWZmZXIgLSBFeHRlbnNpb25zR0w6OkRSQVdfQlVG
RkVSMF9FWFQpOwogICAgIEFTU0VSVChpbmRleCA+PSAwKTsKICAgICBpZiAoaW5kZXggPCBzdGF0
aWNfY2FzdDxpbnQ+KG1fZHJhd0J1ZmZlcnMuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIG1fZHJh
d0J1ZmZlcnNbaW5kZXhdOwotICAgIGlmIChkcmF3QnVmZmVyID09IEV4dGVuc2lvbnMzRDo6RFJB
V19CVUZGRVIwX0VYVCkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMDsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkU7CisgICAgaWYg
KGRyYXdCdWZmZXIgPT0gRXh0ZW5zaW9uc0dMOjpEUkFXX0JVRkZFUjBfRVhUKQorICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwOworICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCmluZGV4IGVlMGE5NDMxYjcwNzE2ZDliYzcwZmFkMGIx
OWIwYzVlMzhkMTY0YmEuLjhiNGI5NWFiYzk1MzFkYjc5ZTMyNWQzNWVjYjZkYzZlYzA3NWM4NmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKQEAg
LTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCA9IDA7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsaXplZCgpID0gMDsKLSAgICAgICAgdmly
dHVhbCB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0M0QqLCBHQzNEZW51bSBhdHRhY2htZW50
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHQzRCos
IEdDM0RlbnVtIGF0dGFjaG1lbnQpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIG9uRGV0YWNo
ZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBHQzNEZW51bSBhdHRhY2htZW50KSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IEdDM0RlbnVtIGF0dGFjaG1lbnQpID0gMDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2Vi
R0xBdHRhY2htZW50KCk7CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4g
ZmFsc2UgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBpbml0aWFs
aXplCiAgICAgLy8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQg
YW5kCiAgICAgLy8gbmVlZFRvSW5pdGlhbGl6ZUF0dGFjaG1lbnRzIGlzIHRydWUuCi0gICAgYm9v
bCBvbkFjY2VzcyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqKiByZWFzb24pOworICAg
IGJvb2wgb25BY2Nlc3MoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBjb25zdCBjaGFyKiogcmVh
c29uKTsKIAogICAgIC8vIFNvZnR3YXJlIHZlcnNpb24gb2YgZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKCksIGV4Y2VwdCB0aGF0IHdoZW4KICAgICAvLyBGUkFNRUJVRkZFUl9DT01QTEVURSBpcyBy
ZXR1cm5lZCwgaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yCkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBw
dWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0
M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdElt
cGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
IAogcHJpdmF0ZToKICAgICBXZWJHTEF0dGFjaG1lbnQqIGdldEF0dGFjaG1lbnQoR0MzRGVudW0p
IGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGZyYW1lYnVmZmVyIGlzIGluY29tcGxl
dGUuCi0gICAgYm9vbCBpbml0aWFsaXplQXR0YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqLCBj
b25zdCBjaGFyKiogcmVhc29uKTsKKyAgICBib29sIGluaXRpYWxpemVBdHRhY2htZW50cyhHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCosIGNvbnN0IGNoYXIqKiByZWFzb24pOwogCiAgICAgLy8gQ2hl
Y2sgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGN1cnJlbnRseSBib3VuZC4KICAgICBib29sIGlzQm91
bmQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcApp
bmRleCA0OGY5MzllMGRhOGY0ZTMyYzgyMmQyOTEyMTI0ZmZjYmU0ZTVhYTk5Li5hZjI4NDljZDg5
ODNhZGE3N2JiOWNkMzQ1YjIzOGRlYTE2MWI2YmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xPYmplY3QuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViR0xPYmplY3Q6
OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKICAgICBtX29iamVjdCA9IG9iamVj
dDsKIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M2QpCit2b2lkIFdlYkdMT2JqZWN0OjpkZWxldGVPYmplY3QoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCkKIHsKICAgICBtX2RlbGV0ZWQgPSB0cnVlOwogICAgIGlm
ICghbV9vYmplY3QpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgV2ViR0xPYmplY3Q6OmRlbGV0ZU9i
amVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQogCiAgICAgaWYgKCFtX2F0dGFjaG1l
bnRDb3VudCkgewogICAgICAgICBpZiAoIWNvbnRleHQzZCkKLSAgICAgICAgICAgIGNvbnRleHQz
ZCA9IGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICAgICAgY29udGV4dDNkID0gZ2V0
QUdyYXBoaWNzQ29udGV4dEdMKCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQzZCkKICAgICAgICAg
ICAgIGRlbGV0ZU9iamVjdEltcGwoY29udGV4dDNkLCBtX29iamVjdCk7CkBAIC02OSw3ICs2OSw3
IEBAIHZvaWQgV2ViR0xPYmplY3Q6OmRldGFjaCgpCiAgICAgbV9hdHRhY2htZW50Q291bnQgPSAw
OyAvLyBNYWtlIHN1cmUgT3BlbkdMIHJlc291cmNlIGlzIGRlbGV0ZWQuCiB9CiAKLXZvaWQgV2Vi
R0xPYmplY3Q6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKK3ZvaWQg
V2ViR0xPYmplY3Q6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQz
ZCkKIHsKICAgICBpZiAobV9hdHRhY2htZW50Q291bnQpCiAgICAgICAgIC0tbV9hdHRhY2htZW50
Q291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAppbmRleCAwZGE1
ZDcxOGQ2Y2I1YzI1YjQxZmEyNjQ0ODBlNGY4M2FkNDE3NjIzLi40OTI0ZmY4YTE4ZjVkMmNjMjEy
M2MwZTlhZjg0MThjM2RiYTIzOGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
T2JqZWN0LmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwogY2xh
c3MgV2ViR0xDb250ZXh0R3JvdXA7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwog
CkBAIC00NSwxMCArNDUsMTAgQEAgcHVibGljOgogICAgIC8vIGRlbGV0ZU9iamVjdCBtYXkgbm90
IGFsd2F5cyBkZWxldGUgdGhlIE9wZW5HTCByZXNvdXJjZS4gIEZvciBwcm9ncmFtcyBhbmQKICAg
ICAvLyBzaGFkZXJzLCBkZWxldGlvbiBpcyBkZWxheWVkIHVudGlsIHRoZXkgYXJlIG5vIGxvbmdl
ciBhdHRhY2hlZC4KICAgICAvLyBGSVhNRTogcmV2aXNpdCB0aGlzIHdoZW4gcmVzb3VyY2Ugc2hh
cmluZyBiZXR3ZWVuIGNvbnRleHRzIGFyZSBpbXBsZW1lbnRlZC4KLSAgICB2b2lkIGRlbGV0ZU9i
amVjdChHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZvaWQgZGVsZXRlT2JqZWN0KEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKik7CiAKICAgICB2b2lkIG9uQXR0YWNoZWQoKSB7ICsrbV9hdHRhY2ht
ZW50Q291bnQ7IH0KLSAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAg
ICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKIAogICAgIC8vIFRo
aXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCBzaWRlIGlzc3VlIGEgZGVsZXRlIGNhbGwg
YWxyZWFkeSwgbm90CiAgICAgLy8gd2hldGhlciB0aGUgT3BlbkdMIHJlc291cmNlIGlzIGRlbGV0
ZWQuCkBAIC02NSwxMyArNjUsMTMgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0T2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpOwogCiAgICAgLy8gZGVsZXRlT2JqZWN0SW1wbCBzaG91bGQgYmUgb25s
eSBjYWxsZWQgb25jZSB0byBkZWxldGUgdGhlIE9wZW5HTCByZXNvdXJjZS4KLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBo
YXNHcm91cE9yQ29udGV4dCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2go
KTsKIAotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQz
RCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnZXRB
R3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCA9IDA7CiAKIHByaXZhdGU6CiAgICAgUGxhdGZvcm0z
RE9iamVjdCBtX29iamVjdCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uY3BwCmluZGV4IGRlZWFjNzUwZjRmZGEyNDNlNmEzNzE2NmVmNDNhOTFhOWI0M2Zk
NTguLjNlZmVmZmJhMTAzYTdhOWZmMGUyMWEzZTE2ZjZhZGNjZDQ3NzM4ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcApAQCAtNzAsNyArNzAsNyBAQCBX
ZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgp
CiAgICAgICAgIGluc3RhbmNlcyhsb2NrKS5hZGQodGhpcywgJmN0eCk7CiAgICAgfQogCi0gICAg
c2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFtKCkpOworICAg
IHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0R0woKS0+Y3JlYXRlUHJvZ3JhbSgpKTsKIH0K
IAogV2ViR0xQcm9ncmFtOjp+V2ViR0xQcm9ncmFtKCkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBX
ZWJHTFByb2dyYW06OmNvbnRleHREZXN0cm95ZWQoKQogICAgIENvbnRleHREZXN0cnVjdGlvbk9i
c2VydmVyOjpjb250ZXh0RGVzdHJveWVkKCk7CiB9CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjpkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqKQordm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmopCiB7CiAgICAgY29u
dGV4dDNkLT5kZWxldGVQcm9ncmFtKG9iaik7CiAgICAgaWYgKG1fdmVydGV4U2hhZGVyKSB7CkBA
IC0xNTEsOSArMTUxLDkgQEAgdm9pZCBXZWJHTFByb2dyYW06OmluY3JlYXNlTGlua0NvdW50KCkK
IFdlYkdMU2hhZGVyKiBXZWJHTFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyKEdDM0RlbnVtIHR5
cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfU0hBREVS
OgogICAgICAgICByZXR1cm4gbV92ZXJ0ZXhTaGFkZXIuZ2V0KCk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXIuZ2V0KCk7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjUsMTIgKzE2NSwxMiBAQCBi
b29sIFdlYkdMUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiAgICAg
aWYgKCFzaGFkZXIgfHwgIXNoYWRlci0+b2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBzd2l0Y2ggKHNoYWRlci0+Z2V0VHlwZSgpKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhf
U0hBREVSOgogICAgICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIG1fdmVydGV4U2hhZGVyID0gc2hhZGVyOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSOgogICAgICAgICBpZiAobV9m
cmFnbWVudFNoYWRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV9mcmFn
bWVudFNoYWRlciA9IHNoYWRlcjsKQEAgLTE4NSwxMiArMTg1LDEyIEBAIGJvb2wgV2ViR0xQcm9n
cmFtOjpkZXRhY2hTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKICAgICBpZiAoIXNoYWRlciB8
fCAhc2hhZGVyLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHN3aXRjaCAo
c2hhZGVyLT5nZXRUeXBlKCkpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
U0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVI6CiAgICAg
ICAgIGlmIChtX3ZlcnRleFNoYWRlciAhPSBzaGFkZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIG1fdmVydGV4U2hhZGVyID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgaWYgKG1fZnJh
Z21lbnRTaGFkZXIgIT0gc2hhZGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBtX2ZyYWdtZW50U2hhZGVyID0gbnVsbHB0cjsKQEAgLTIwMCwxNSArMjAwLDE1IEBAIGJvb2wg
V2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKICAgICB9CiB9
CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkKQordm9pZCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0
cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QpCiB7CiAgICAg
bV9hY3RpdmVBdHRyaWJMb2NhdGlvbnMuY2xlYXIoKTsKIAogICAgIEdDM0RpbnQgbnVtQXR0cmli
cyA9IDA7Ci0gICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJpYnMpOworICAgIGNvbnRleHQzZC0+
Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVU
RVMsICZudW1BdHRyaWJzKTsKICAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5yZXNpemUoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihudW1BdHRyaWJzKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1BdHRyaWJzOyArK2kpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8g
aW5mbzsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OkFjdGl2ZUluZm8gaW5mbzsKICAgICAg
ICAgY29udGV4dDNkLT5nZXRBY3RpdmVBdHRyaWJJbXBsKG9iamVjdCgpLCBpLCBpbmZvKTsKICAg
ICAgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbaV0gPSBjb250ZXh0M2QtPmdldEF0dHJpYkxv
Y2F0aW9uKG9iamVjdCgpLCBpbmZvLm5hbWUpOwogICAgIH0KQEAgLTIyMiwxMSArMjIyLDExIEBA
IHZvaWQgV2ViR0xQcm9ncmFtOjpjYWNoZUluZm9JZk5lZWRlZCgpCiAgICAgaWYgKCFvYmplY3Qo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBn
ZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29u
dGV4dCA9IGdldEFHcmFwaGljc0NvbnRleHRHTCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAg
ICAgcmV0dXJuOwogICAgIEdDM0RpbnQgbGlua1N0YXR1cyA9IDA7Ci0gICAgY29udGV4dC0+Z2V0
UHJvZ3JhbWl2KG9iamVjdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMsICZsaW5r
U3RhdHVzKTsKKyAgICBjb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29u
dGV4dEdMOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOwogICAgIG1fbGlua1N0YXR1cyA9IGxp
bmtTdGF0dXM7CiAgICAgaWYgKG1fbGlua1N0YXR1cykKICAgICAgICAgY2FjaGVBY3RpdmVBdHRy
aWJMb2NhdGlvbnMoY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5oCmluZGV4IDNlMDgyZmMyZGRiYzExOWViMjM1ZGI2NWJlNTk1OTBjMzNhNDM1MDQuLjg5
YjQ2MGMwNjcwZjJlZWI1OGE0NDgzNDc1ZmJhMTA2OTQ1NjhjN2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCkBAIC03MywxMCArNzMsMTAgQEAgcHVibGljOgog
cHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7
CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKik7
CisgICAgdm9pZCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCopOwogICAgIHZvaWQgY2FjaGVJbmZvSWZOZWVkZWQoKTsKIAogICAgIFZlY3RvcjxHQzNE
aW50PiBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xRdWVyeS5jcHAKaW5kZXggOGNhNTI1MTE1NzM1MDE1NDVhYzU1ZjVlOTQxZWFhNWE4MDQz
YmVhZi4uY2I2NDQ1MjIyNzM0NjUwNTcyY2JiNTYwMzMzN2I5ZjJmNDVkOTY2YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5jcHAKQEAgLTQ2LDE0ICs0NiwxNCBAQCBX
ZWJHTFF1ZXJ5Ojp+V2ViR0xRdWVyeSgpCiBXZWJHTFF1ZXJ5OjpXZWJHTFF1ZXJ5KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKIHsK
LSAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVRdWVyeSBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgor
ICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVF1ZXJ5IGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuCiB9CiAKLXZvaWQgV2ViR0xRdWVyeTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xRdWVy
eTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQ
bGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dDNkKTsK
ICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogQ2FsbCBkZWxldGVRdWVy
eSBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGRlbGV0ZVF1ZXJ5
IGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUXVlcnkuaAppbmRleCBmZDY0NGQyNGMxMjgxYzljMTk4ZTJmNWFmOTE1MmVj
ODQ2MTViMzY1Li4wODdjMDQxMWY5NjM5YjMyMTJhODg1NjY1MmFiYTFhYjEyYzUxM2NhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFF1ZXJ5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5oCkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFdlYkdMUXVlcnkoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYpOwotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlT2JqZWN0
SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCmluZGV4IDY5OTZkOWIxZGE5MzBmM2EyYmFi
YTIzMGU0OTJjMGQ3ODRhN2NkMTkuLjA2ZWUwN2I1NzNmZjU3NmNmY2FjNDQ3MzhhM2Y2Y2M1YzI0
Mzg4NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
YnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5jcHAKQEAgLTQ2LDE3ICs0NiwxNyBAQCBXZWJHTFJlbmRlcmJ1ZmZlcjo6fldlYkdMUmVu
ZGVyYnVmZmVyKCkKIAogV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkK
LSAgICAsIG1faW50ZXJuYWxGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQorICAgICwg
bV9pbnRlcm5hbEZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQpCiAgICAgLCBtX2luaXRp
YWxpemVkKGZhbHNlKQogICAgICwgbV93aWR0aCgwKQogICAgICwgbV9oZWlnaHQoMCkKICAgICAs
IG1faXNWYWxpZCh0cnVlKQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQogewotICAg
IHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkp
OworICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0R0woKS0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9p
ZCBXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBjb250ZXh0
M2QtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKaW5kZXggMzdhOTM4ZTMzYTYyZDE0NzE1MWNk
YThiZDZjMzc0YzQ3MGYxZmUxMC4uYzI4MDI3ZTZmZTM3ODc2YzBjZjlkNDE3YmQ2NGMyZWRjYzk5
Mzk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJi
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZl
ci5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTFJlbmRl
cmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyYnVm
ZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggM2E1MGZm
YzBlMGU0ODczM2JmZDRiZTBmNGQyNjdmYWI4ZTZmYTlkOS4uMjg0M2Q0NjE2YWYxZTI1NDFiYjFl
ZjE3MzY3OTEzNDFmMjdmMzZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVk
ZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgogI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5oIgogI2luY2x1ZGUgIkVYVHNSR0IuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zM0Qu
aCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9F
bGVtZW50LmgiCkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdlYkdMUmVuZGVyaW5nQ29udGV4dCk7CiAKLXN0ZDo6dW5p
cXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogewogICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IHN0
ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7CiAKQEAgLTgxLDcgKzgxLDcgQEAgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGUoQ2FudmFzQmFzZSYKICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4
dCwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitzdGQ6OnVuaXF1ZV9w
dHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShD
YW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiBjb250ZXh0
LCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIHsKICAgICBhdXRvIHJl
bmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihu
ZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgV1RGTW92ZShjb250ZXh0KSwgYXR0cmli
dXRlcykpOwogCkBAIC05MCwxMiArOTAsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVy
aW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYKICAg
ICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KIAotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzLCBHcmFwaGljc0NvbnRleHQz
REF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKGNhbnZhcywg
YXR0cmlidXRlcykKIHsKIH0KIAotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29u
dGV4dCwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiBjYW52YXMsIFJl
ZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoY2Fu
dmFzLCBXVEZNb3ZlKGNvbnRleHQpLCBhdHRyaWJ1dGVzKQogewogICAgIGluaXRpYWxpemVWZXJ0
ZXhBcnJheU9iamVjdHMoKTsKQEAgLTI1MSw1OCArMjUxLDU4IEBAIFdlYkdMQW55IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAibm8gZnJhbWVidWZmZXIgYm91
bmQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZy
YW1lYnVmZmVyIGJvdW5kIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
ICAgICBhdXRvIG9iamVjdCA9IG1ha2VSZWZQdHIobV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0
dGFjaG1lbnRPYmplY3QoYXR0YWNobWVudCkpOwogICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKTsKICAg
ICAgICAgLy8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5WQUxJRF9FTlVNIGluIHRoaXMgY2Fz
ZSwgd2hpbGUgZGVza3RvcCBHTAogICAgICAgICAvLyBzcGVjaWZpZXMgSU5WQUxJRF9PUEVSQVRJ
T04uCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIAogICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CiAgICAgICAgIHN3aXRjaCAocG5h
bWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CiAgICAgICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihy
ZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSY+KCpvYmplY3QpKTsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJF
X0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewogICAgICAgICAgICAgR0MzRGludCB2YWx1
ZSA9IDA7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBm
b3IgdGV4dHVyZSBhdHRhY2htZW50Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVu
dCIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBBU1NFUlQob2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpKTsKICAgICAgICAgc3dp
dGNoIChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3Jh
cGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CiAgICAgICAgICAgICBy
ZXR1cm4gbWFrZVJlZlB0cihyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyJj4oKm9i
amVjdCkpOwotICAgICAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9DT0xPUl9FTkNPRElOR19FWFQ6IHsKKyAgICAgICAgY2FzZSBFeHRlbnNpb25zR0w6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CiAgICAgICAgICAgICBpZiAo
IW1fZXh0c1JHQikgewotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQi
KTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+IHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QuZ2V0KCkpOwogICAgICAgICAgICAgR0MzRGVudW0gcmVu
ZGVyQnVmZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAg
ICAgICAgICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0Jf
RVhUICYmIHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhU
KTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpT
UkdCOF9BTFBIQThfRVhUKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICAgICAg
QVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUICYmIHJl
bmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUKTsKKyAgICAg
ICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uc0dMOjpTUkdCOF9BTFBI
QThfRVhUKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRXh0
ZW5zaW9uc0dMOjpTUkdCX0VYVCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpOwogICAgICAgICB9CiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMCwyNCArMzEwLDI0IEBAIFdlYkdMQW55IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdlCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1l
YnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJn
ZXQiKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUikg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIHJldHVybiB0cnVlIHVuY29u
ZGl0aW9uYWxseSBmb3IgQ09MT1JfQVRUQUNITUVOVDAsCiAgICAgLy8gYnV0IGZhbHNlIGZvciBv
dGhlciBDT0xPUl9BVFRBQ0hNRU5UIHZhbHVlcyBpZiBtX3dlYmdsRHJhd0J1ZmZlcnMgaXMgZmFs
c2U/CiAgICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDA6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwotICAgICAgICAgICAgJiYg
YXR0YWNobWVudCA+PSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKLSAgICAg
ICAgICAgICYmIGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKKyAg
ICAgICAgICAgICYmIGF0dGFjaG1lbnQgPj0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFD
SE1FTlQwCisgICAgICAgICAgICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+
KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1heENvbG9yQXR0YWNo
bWVudHMoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBhdHRhY2htZW50Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtMzM2LDI1ICszMzYsMjUgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm4KIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgdGFy
Z2V0Iik7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVS
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFn
ZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFn
ZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVyYnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQp
KQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9B
TFBIQThfRVhUOgotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpT
UkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNSR0IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9y
YWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lM
X0lOREVYODoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQjhfQUxQSEE4X0VYVDoKKyAgICAg
ICAgaWYgKGludGVybmFsZm9ybWF0ID09IEV4dGVuc2lvbnNHTDo6U1JHQjhfQUxQSEE4X0VYVCAm
JiAhbV9leHRzUkdCKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGlu
dGVybmFsZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
bV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwpAQCAtMzYyLDE1ICszNjIsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRl
cm4KICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKHRydWUpOwogICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKICAgICAgICAgaWYgKGlz
RGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1
ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRh
cmdldCwgRXh0ZW5zaW9uc0dMOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQoKSk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVu
ZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZW5kZXJi
dWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CkBAIC0zODIsMTYgKzM4MiwxNiBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IG1vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKICAgICBz
d2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01J
UE1BUF9ISU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkdFTkVSQVRFX01JUE1BUF9I
SU5UOgogICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6RlJBR01FTlRfU0hB
REVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwogICAg
ICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQogICAgICAgICAgICAgaXNWYWxpZCA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhp
bnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsK
QEAgLTQwMSwxMyArNDAxLDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihH
QzNEYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFs
aWQgbWFzayIpOworICAgIGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVG
RkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1h
c2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAi
ZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MobV9jb250ZXh0LmdldCgpLCAmcmVhc29u
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJlYXNvbik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgImNsZWFyIiwgcmVhc29uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
IWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQpAQCAtNDIxLDI0MyArNDIxLDI0MyBAQCBXZWJHTEFu
eSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1RFWFRVUkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6QUNUSVZFX1RFWFRVUkU6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMSUFTRURfTElORV9XSURU
SF9SQU5HRToKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToK
ICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpBTFBIQV9CSVRTOgogICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2F0dHJpYnV0ZXMuYWxwaGEpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlf
QlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6QkxFTkQ6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpCTEVORF9DT0xPUjoKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNU
X0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0RTVF9BTFBIQToKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfUkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkJMRU5EX0RTVF9SR0I6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQ
SEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CiAg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkJMRU5EX0VRVUFUSU9OX1JHQjoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9T
UkNfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfU1JDX0FMUEhBOgog
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19SR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6QkxFTkRfU1JDX1JHQjoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTFVFX0JJVFM6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxVRV9CSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVB
Ul9WQUxVRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9DTEVBUl9WQUxVRToK
ICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5B
cnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFM6CiAgICAgICAgIHJldHVybiBVaW50MzJBcnJheTo6dHJ5Q3Jl
YXRlKG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHMuc2l6ZSgpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VMTF9GQUNFOgogICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q1VMTF9GQUNFX01PREU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VMTF9GQUNFX01P
REU6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkNVUlJFTlRfUFJPR1JBTToKICAgICAgICAgcmV0dXJuIG1fY3VycmVudFBy
b2dyYW07Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CSVRTOgogICAgICAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0ZXMuZGVwdGgpCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ0xFQVJfVkFMVUU6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9GVU5DOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1JBTkdFOgogICAgICAg
ICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX1RFU1Q6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6REVQVEhfV1JJVEVNQVNLOgogICAgICAgICByZXR1cm4gZ2V0Qm9v
bGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RElUSEVS
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRJVEhFUjoKICAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzoKICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIo
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElORzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgogICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfRkFD
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUk9OVF9GQUNFOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkdFTkVSQVRFX01JUE1BUF9ISU5UOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6R1JFRU5fQklUUzoKICAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TElORV9XSURUSDoKICAgICAgICAgcmV0dXJuIGdldEZsb2F0
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RF
WFRVUkVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ1VCRV9NQVBfVEVY
VFVSRV9TSVpFOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpNQVhfUkVOREVSQlVGRkVSX1NJWkU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9URVhUVVJFX1NJWkU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKICAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1B
WF9WRVJURVhfQVRUUklCUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9W
SUVXUE9SVF9ESU1TOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TlVNX1NIQURFUl9CSU5BUllfRk9S
TUFUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JN
QVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpQQUNLX0FMSUdOTUVOVDoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKICAgICAg
ICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlBPTFlHT05fT0ZGU0VUX0ZJTEw6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklU
UzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9VTklUUzoKICAg
ICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRURfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfQklU
UzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBtX3JlbmRlcmJ1
ZmZlckJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSRVI6CiAgICAgICAgIHJldHVybiAiV2ViS2l0
IFdlYkdMIl9zdHI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0JVRkZFUlM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0JVRkZFUlM6CiAgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FN
UExFX0NPVkVSQUdFX0lOVkVSVDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRV9WQUxV
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6CiAg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVT
OgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
Q0lTU09SX0JPWDoKICAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1Q6CiAgICAgICAgIHJldHVybiBnZXRCb29s
ZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5H
X0xBTkdVQUdFX1ZFUlNJT046Ci0gICAgICAgIHJldHVybiAiV2ViR0wgR0xTTCBFUyAxLjAgKCIg
KyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFH
RV9WRVJTSU9OKSArICIpIjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfRkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSEFESU5HX0xBTkdVQUdFX1ZF
UlNJT046CisgICAgICAgIHJldHVybiAiV2ViR0wgR0xTTCBFUyAxLjAgKCIgKyBtX2NvbnRleHQt
PmdldFN0cmluZyhHcmFwaGljc0NvbnRleHRHTDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OKSAr
ICIpIjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfUEFTU19ERVBUSF9GQUlMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
QkFDS19QQVNTX0RFUFRIX0ZBSUw6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BB
U1NfREVQVEhfUEFTUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tf
UEFTU19ERVBUSF9QQVNTOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19SRUY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1JFRjoKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9CQUNLX1ZBTFVFX01BU0s6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dS
SVRFTUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfV1JJVEVN
QVNLOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpTVEVOQ0lMX0JJVFM6CiAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U1RFTkNJTF9DTEVBUl9WQUxVRToKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfRkFJTDoKICAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0ZVTkM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9GVU5DOgogICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgogICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfUEFTU19ERVBUSF9QQVNTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNU
RU5DSUxfUEFTU19ERVBUSF9QQVNTOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUkVGOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfUkVGOgogICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9URVNUOgogICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNURU5DSUxfVkFMVUVfTUFTSzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRF
TUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1dSSVRFTUFTSzoKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVUJQSVhFTF9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNVQlBJWEVMX0JJVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0JJTkRJTkdfMkQ6CiAgICAgICAgIHJldHVy
biBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6CiAgICAg
ICAgIHJldHVybiBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3Vi
ZU1hcEJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5UOgogICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
UEFDS19GTElQX1lfV0VCR0w6CiAgICAgICAgIHJldHVybiBtX3VucGFja0ZsaXBZOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6
CiAgICAgICAgIHJldHVybiBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdM
OgogICAgICAgICByZXR1cm4gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VkVORE9SOgogICAgICAgICByZXR1cm4gIldlYktpdCJfc3RyOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlNJT046CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSU0lPTjoK
ICAgICAgICAgcmV0dXJuICJXZWJHTCAxLjAiX3N0cjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWSUVXUE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWSUVXUE9SVDoKICAg
ICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzCisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKICAg
ICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zR0w6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpV
Tk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKICAgICAgICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVy
SW5mbykgewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICByZXR1cm4gIkFw
cGxlIEdQVSJfc3RyOwogI2Vsc2UKLSAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQtPmdldFN0
cmluZyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVIpOworICAgICAgICAgICAgcmV0dXJuIG1f
Y29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJFUik7CiAjZW5kaWYK
ICAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdF
QkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBl
bmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGNhc2UgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgogICAgICAgICBpZiAobV93ZWJnbERl
YnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5n
KEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1IpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHRH
TDo6VkVORE9SKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBX
RUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpWRVJURVhfQVJSQVlfQklORElOR19PRVM6
IC8vIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlZFUlRF
WF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKICAgICAgICAg
aWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKICAgICAgICAgICAgIGlmIChtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8V2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUyY+KCptX2JvdW5kVmVydGV4QXJyYXlPYmplY3QpKTsKICAg
ICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVkIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qgbm90IGVuYWJsZWQi
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9U
RVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljCisgICAgY2FzZSBFeHRlbnNpb25zR0w6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VY
VDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCiAgICAgICAgIGlmIChtX2V4dFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uc0dMOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09U
Uk9QWV9FWFQpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRT
X0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpN
QVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJFR0lOCiAgICAg
ICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCiAgICAgICAgICAgICByZXR1cm4gZ2V0TWF4Q29s
b3JBdHRhY2htZW50cygpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0RS
QVdfQlVGRkVSU19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6Ok1BWF9EUkFXX0JVRkZFUlNf
RVhUOgogICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQogICAgICAgICAgICAgcmV0dXJu
IGdldE1heERyYXdCdWZmZXJzKCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFi
bGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGlm
IChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMz
RDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxH
QzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZl
cnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORTsKKyAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnNHTDo6RFJBV19CVUZGRVIw
X0VYVAorICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5z
aW9uc0dMOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAg
ICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKICAgICAgICAg
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKICAgICAgICAgICAgIGVs
c2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgogICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNr
RHJhd0J1ZmZlcjsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0TWF4RHJhd0J1ZmZlcnMoKQogICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fbWF4RHJhd0J1ZmZlcnMpCi0gICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1f
bWF4RHJhd0J1ZmZlcnMpOworICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lv
bnNHTDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKICAgICBpZiAo
IW1fbWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihF
eHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNo
bWVudHMpOworICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFY
X0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CiAgICAgLy8g
V0VCR0xfZHJhd19idWZmZXJzIHJlcXVpcmVzIE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA+PSBNQVhf
RFJBV19CVUZGRVJTLgogICAgIHJldHVybiBzdGQ6Om1pbihtX21heERyYXdCdWZmZXJzLCBtX21h
eENvbG9yQXR0YWNobWVudHMpOwogfQpAQCAtNjc5LDcgKzY3OSw3IEBAIEdDM0RpbnQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKICAgICBpZiAoIXN1cHBv
cnRzRHJhd0J1ZmZlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFtX21heENvbG9y
QXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNE
OjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9DT0xPUl9BVFRB
Q0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOwogICAgIHJldHVybiBtX21heENv
bG9yQXR0YWNobWVudHM7CiB9CiAgICAgCkBAIC03MDcsMjAgKzcwNywyMCBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVt
IHR5cGUsIHVuc2lnbgogICAgIGlmICghbWF4SW5kZXgpIHsKICAgICAgICAgLy8gQ29tcHV0ZSB0
aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUg
b2YgaW5kZXguCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEU6IHsKICAgICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0
YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKICAgICAgICAgICAg
IGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKICAgICAgICAg
ICAgICAgICBtYXhJbmRleCA9IG1heEluZGV4ID8gc3RkOjptYXgobWF4SW5kZXgudmFsdWUoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBbaV0pKSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwW2ld
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX1NIT1JUOiB7CiAgICAgICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2Yo
R0MzRHVzaG9ydCk7CiAgICAgICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKICAgICAgICAgICAgIGZvciAo
R0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKICAgICAgICAgICAgICAg
ICBtYXhJbmRleCA9IG1heEluZGV4ID8gc3RkOjptYXgobWF4SW5kZXgudmFsdWUoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHBbaV0pKSA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwW2ldKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0lOVDogeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9JTlQ6IHsKICAgICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNp
emVvZihHQzNEdWludCk7CkBAIC03NTEsMTkgKzc1MSwxOSBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVu
c2lnbgogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCiB7CiAgICAgc3dpdGNoICht
b2RlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlVOQ19TVUJUUkFDVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9F
WFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQ6Ci0gICAgICAgIGlmICgobW9kZSA9
PSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQp
ICYmICFtX2V4dEJsZW5kTWluTWF4KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1v
ZGUiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGVU5DX0FERDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGVU5DX1NVQlRSQUNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6TUlOX0VY
VDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6TUFYX0VYVDoKKyAgICAgICAgaWYgKChtb2RlID09
IEV4dGVuc2lvbnNHTDo6TUlOX0VYVCB8fCBtb2RlID09IEV4dGVuc2lvbnNHTDo6TUFYX0VYVCkg
JiYgIW1fZXh0QmxlbmRNaW5NYXgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9k
ZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIG1vZGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiB9CkBAIC03NzEsMTggKzc3MSwxOCBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKIHsKICAgICBzd2l0
Y2ggKGNhcCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9URVNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVT
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
VEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpESVRIRVI6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNT
T1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1RFU1Q6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
Y2FwYWJpbGl0eSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGNhcGFiaWxpdHkiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggYjIxNGQ0MzYxOGEzM2Y0YmE3
ZjQ4OWYwMmY3ZjY5YmI3NTEyMmU0ZS4uZThlMzY4ODgyOGI2ZjUwYmNkYmIwNTZkOTMwMGExNDMy
ZjgwMTg0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgKQEAgLTM1LDggKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5n
Q29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMp
OwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjcmVh
dGUoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgR3JhcGhpY3NDb250ZXh0
M0RBdHRyaWJ1dGVzKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5n
Q29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMp
OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjcmVh
dGUoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiwgR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzKTsKIAogICAgIGJvb2wgaXNXZWJHTDEoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB0cnVlOyB9CiAKQEAgLTU4LDggKzU4LDggQEAgcHVibGljOgogICAgIGJvb2wgdmFs
aWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKSBm
aW5hbDsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYs
IEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYsIEdyYXBoaWNzQ29udGV4dDNE
QXR0cmlidXRlcyk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dChDYW52
YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmLCBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCA3OWE1NWUyY2I3Nzc3NzA3YmZjMzg5YjFkODNjMzBiYWUyYmQ3MzFlLi4wYzJmYzg0
YmZjMDZiZGY0ZDhkYzM2Yzc1ZDliOTliNmRiZmQyM2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
NDAsNyArNDAsNyBAQAogI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgog
I2luY2x1ZGUgIkVYVHNSR0IuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCkBAIC0zOTMsMzcgKzM5MywzNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fcHJv
Z3JhbSB8fCBMSUtFTFkoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aXNXZWJHTFByb2dyYW1I
aWdobGlnaHRlZChtX2NvbnRleHQsICptX3Byb2dyYW0pKSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBpZiAoaGFzQnVmZmVyQmluZGluZyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQklORElORykpIHsKLSAgICAgICAgICAgIGlmICghaGFzQnVmZmVyQmluZGluZyhHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkcpKQorICAgICAgICBpZiAoaGFzQnVm
ZmVyQmluZGluZyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQklORElORykpIHsKKyAg
ICAgICAgICAgIGlmICghaGFzQnVmZmVyQmluZGluZyhHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
QlVGRkVSX0JJTkRJTkcpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlm
IChoYXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0FUVEFDSE1FTlQpKQorICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVy
QXR0YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVy
QXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UKSkKKyAgICAg
ICAgICAgIGlmIChoYXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0dGFjaG1lbnQoR3JhcGhpY3NDb250
ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogI2lm
IEVOQUJMRShXRUJHTDIpCi0gICAgICAgICAgICBpZiAoaGFzRnJhbWVidWZmZXJQYXJhbWV0ZXJB
dHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpKQor
ICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFyYW1ldGVyQXR0YWNobWVudChHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUiwgbV9zYXZlZEJsZW5kLmNvbG9yKTsKLSAgICAgICAg
c2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX1JHQiwgbV9z
YXZlZEJsZW5kLmVxdWF0aW9uUkdCKTsKLSAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX0FMUEhBLCBtX3NhdmVkQmxlbmQuZXF1YXRpb25BbHBo
YSk7Ci0gICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNf
UkdCLCBtX3NhdmVkQmxlbmQuc3JjUkdCKTsKLSAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQSwgbV9zYXZlZEJsZW5kLnNyY0FscGhhKTsKLSAg
ICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0IsIG1f
c2F2ZWRCbGVuZC5kc3RSR0IpOwotICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkRfRFNUX0FMUEhBLCBtX3NhdmVkQmxlbmQuZHN0QWxwaGEpOwotICAgICAgICBz
YXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQsIG1fc2F2ZWRCbGVuZC5lbmFi
bGVkKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0NP
TE9SLCBtX3NhdmVkQmxlbmQuY29sb3IpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGlj
c0NvbnRleHRHTDo6QkxFTkRfRVFVQVRJT05fUkdCLCBtX3NhdmVkQmxlbmQuZXF1YXRpb25SR0Ip
OworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRVFVQVRJ
T05fQUxQSEEsIG1fc2F2ZWRCbGVuZC5lcXVhdGlvbkFscGhhKTsKKyAgICAgICAgc2F2ZUJsZW5k
VmFsdWUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX1NSQ19SR0IsIG1fc2F2ZWRCbGVuZC5zcmNS
R0IpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfU1JD
X0FMUEhBLCBtX3NhdmVkQmxlbmQuc3JjQWxwaGEpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShH
cmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRFNUX1JHQiwgbV9zYXZlZEJsZW5kLmRzdFJHQik7Cisg
ICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9EU1RfQUxQSEEs
IG1fc2F2ZWRCbGVuZC5kc3RBbHBoYSk7CisgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNz
Q29udGV4dEdMOjpCTEVORCwgbV9zYXZlZEJsZW5kLmVuYWJsZWQpOwogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBHQzNEZmxvYXQgcmVkID0gMTExLjAgLyAyNTUuMDsKICAgICAgICAgc3RhdGljIGNv
bnN0IEdDM0RmbG9hdCBncmVlbiA9IDE2OC4wIC8gMjU1LjA7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBHQzNEZmxvYXQgYmx1ZSA9IDIyMC4wIC8gMjU1LjA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBH
QzNEZmxvYXQgYWxwaGEgPSAyLjAgLyAzLjA7CiAKLSAgICAgICAgbV9jb250ZXh0LmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQuZW5hYmxlKEdyYXBo
aWNzQ29udGV4dEdMOjpCTEVORCk7CiAgICAgICAgIG1fY29udGV4dC5ibGVuZENvbG9yKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgbV9jb250ZXh0LmJsZW5kRXF1YXRpb24oR3Jh
cGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREKTsKLSAgICAgICAgbV9jb250ZXh0LmJsZW5kRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0LmJsZW5kRXF1YXRpb24oR3JhcGhp
Y3NDb250ZXh0R0w6OkZVTkNfQUREKTsKKyAgICAgICAgbV9jb250ZXh0LmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHRHTDo6Q09OU1RBTlRfQ09MT1IsIEdyYXBoaWNzQ29udGV4dEdMOjpPTkVfTUlO
VVNfU1JDX0FMUEhBKTsKIAogICAgICAgICBtX2RpZEFwcGx5ID0gdHJ1ZTsKICAgICB9CkBAIC00
MzQsNyArNDM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAoIW1fc2F2ZWRCbGVuZC5lbmFibGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgICAgIG1fY29udGV4dC5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORCk7CiAKICAgICAgICAgY29uc3QgUmVmUHRyPEZsb2F0
MzJBcnJheT4mIGNvbG9yID0gbV9zYXZlZEJsZW5kLmNvbG9yOwogICAgICAgICBtX2NvbnRleHQu
YmxlbmRDb2xvcihjb2xvci0+aXRlbSgwKSwgY29sb3ItPml0ZW0oMSksIGNvbG9yLT5pdGVtKDIp
LCBjb2xvci0+aXRlbSgzKSk7CkBAIC00NTcsMTkgKzQ1NywxOSBAQCBwcml2YXRlOgogICAgIGJv
b2wgaGFzQnVmZmVyQmluZGluZyhHQzNEZW51bSBwbmFtZSkKICAgICB7CiAgICAgICAgIFdlYkdM
QW55IGJpbmRpbmcgPSBtX2NvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICAgICAgaWYg
KHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HKQorICAgICAg
ICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0JJTkRJTkcpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4+KGJpbmRpbmcpICYmIFdURjo6Z2V0PFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPj4o
YmluZGluZyk7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSX0JJTkRJTkcpCisgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6
UkVOREVSQlVGRkVSX0JJTkRJTkcpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+PihiaW5kaW5nKSAmJiBXVEY6OmdldDxS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+PihiaW5kaW5nKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAogICAgIGJvb2wgaGFzRnJhbWVidWZmZXJQYXJhbWV0ZXJBdHRhY2htZW50KEdD
M0RlbnVtIGF0dGFjaG1lbnQpCiAgICAgewotICAgICAgICBXZWJHTEFueSBhdHRhY2htZW50UGFy
YW1ldGVyID0gbV9jb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKTsKKyAgICAgICAgV2ViR0xBbnkg
YXR0YWNobWVudFBhcmFtZXRlciA9IG1fY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSk7CiAgICAg
ICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTx1bnNpZ25lZD4oYXR0YWNobWVudFBhcmFt
ZXRlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChXVEY6OmdldDx1
bnNpZ25lZD4oYXR0YWNobWVudFBhcmFtZXRlcikgIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpKQorICAgICAgICBpZiAoV1RGOjpnZXQ8dW5z
aWduZWQ+KGF0dGFjaG1lbnRQYXJhbWV0ZXIpICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFw
aGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDkwLDcgKzQ5MCw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2RpZEFwcGx5IHsgZmFsc2UgfTsKIH07CiAKLXN0YXRpYyBib29sIGlzSGln
aFBlcmZvcm1hbmNlQ29udGV4dChjb25zdCBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+JiBjb250
ZXh0KQorc3RhdGljIGJvb2wgaXNIaWdoUGVyZm9ybWFuY2VDb250ZXh0KGNvbnN0IFJlZlB0cjxH
cmFwaGljc0NvbnRleHRHTE9wZW5HTD4mIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQt
PnBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigpID09IFdlYkdMUG93ZXJQcmVmZXJlbmNl
OjpIaWdoUGVyZm9ybWFuY2U7CiB9CkBAIC01NDIsOSArNTQyLDkgQEAgc3RkOjp1bmlxdWVfcHRy
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNy
ZWF0ZShDYW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5mb3Jj
ZVdlYkdMVXNlc0xvd1Bvd2VyKCkpIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnBvd2Vy
UHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZv
cm1hbmNlKQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMucG93ZXJQcmVmZXJlbmNlID09IEdy
YXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UpCiAgICAgICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiT3ZlcnJpZGluZyBwb3dlclByZWZlcmVuY2UgZnJvbSBoaWdo
LXBlcmZvcm1hbmNlIHRvIGxvdy1wb3dlci4iKTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMucG93
ZXJQcmVmZXJlbmNlID0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6Okxvd1Bvd2Vy
OworICAgICAgICAgICAgYXR0cmlidXRlcy5wb3dlclByZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRl
eHRHTFBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
cGFnZSkKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKENhbgogICAgICAg
ICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKICAgICB9CiAKLSAgICBhdXRvIGNvbnRleHQgPSBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpOworICAgIGF1
dG8gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoYXR0cmlidXRlcywg
aG9zdFdpbmRvdyk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkgewogICAgICAgICBpZiAoY2FudmFzRWxlbWVudCkgewogICAgICAgICAgICAgY2Fu
dmFzRWxlbWVudC0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsCkBAIC02MjcsNyArNjI3LDcg
QEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShD
YW52YXNCYXNlJiBjYW52YXMsIFdlYkdMQ28KICAgICBtX2NoZWNrRm9yQ29udGV4dExvc3NIYW5k
bGluZ1RpbWVyLnN0YXJ0T25lU2hvdChjaGVja0NvbnRleHRMb3NzSGFuZGxpbmdEZWxheSk7CiB9
CiAKLVdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uo
Q2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgV2Vi
R0xDb250ZXh0QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFw
aGljc0NvbnRleHRHTE9wZW5HTD4mJiBjb250ZXh0LCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCiAgICAgOiBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQog
ICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCiAgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICp0aGlzLCAm
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQpAQCAt
NjQ3LDcgKzY0Nyw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhCiAgICAgCiAgICAgbV9jb250
ZXh0LT5hZGRDbGllbnQoKnRoaXMpOwogCi0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKyAg
ICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVklFV1BPUlRf
RElNUywgbV9tYXhWaWV3cG9ydERpbXMpOwogCiAgICAgc2V0dXBGbGFncygpOwogICAgIGluaXRp
YWxpemVOZXdDb250ZXh0KCk7CkBAIC03MjMsNyArNzIzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCiAgICAgbV91bnBhY2tBbGlnbm1l
bnQgPSA0OwogICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsKICAgICBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEgPSBmYWxzZTsKLSAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTDsKKyAgICBtX3VucGFja0NvbG9y
c3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0R0w6OkJST1dTRVJfREVGQVVMVF9XRUJH
TDsKICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBudWxscHRyOwogICAgIG1fY3VycmVudFByb2dy
YW0gPSBudWxscHRyOwogICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKQEAgLTc0
NywzMCArNzQ3LDMwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdGlhbGl6
ZU5ld0NvbnRleHQoKQogICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1hc2tbMV0gPSBtX2Nv
bG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKIAogICAgIEdDM0RpbnQgbnVtQ29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJm51bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFyKCk7CiAg
ICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwog
ICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHM7
ICsraSkKICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMuYWRkKGkpOwogCiAgICAg
R0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJz
KTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVS
VEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKICAgICBtX21heFZlcnRleEF0dHJpYnMg
PSBudW1WZXJ0ZXhBdHRyaWJzOwogICAgIAogICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJ
WkUsICZtX21heFRleHR1cmVTaXplKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSk7CiAgICAg
bV9tYXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4
VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOwogICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVT
aXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOworICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CiAgICAgbV9tYXhDdWJlTWFw
VGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVN
YXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOwogICAgIG1fbWF4UmVuZGVy
YnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKyAg
ICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfUkVOREVSQlVG
RkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOwogCiAgICAgLy8gVGhlc2UgdHdvIHZh
bHVlcyBmcm9tIEVYVF9kcmF3X2J1ZmZlcnMgYXJlIGxhemlseSBxdWVyaWVkLgogICAgIG1fbWF4
RHJhd0J1ZmZlcnMgPSAwOwogICAgIG1fbWF4Q29sb3JBdHRhY2htZW50cyA9IDA7CiAKLSAgICBt
X2JhY2tEcmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s7CisgICAgbV9iYWNrRHJh
d0J1ZmZlciA9IEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLOwogICAgIG1fZHJhd0J1ZmZlcnNXZWJH
TFJlcXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVk
ID0gZmFsc2U7CiAgICAgCkBAIC04NjcsNyArODY3LDcgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6fldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoKQogCiAgICAgaWYgKCFtX2lzUGVuZGlu
Z1BvbGljeVJlc29sdXRpb24pIHsKICAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygp
OwotICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dEdMKCk7CiAgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0
KCp0aGlzKTsKICAgICB9CiAKQEAgLTg4Myw3ICs4ODMsNyBAQCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgpCiAgICAgfQogfQogCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHRHTCgpCiB7
CiAgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKICAgICAgICAgcmV0dXJuOwpA
QCAtOTUzLDM3ICs5NTMsMzcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVh
cklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKICAgICAvLyBEZXRlcm1pbmUgaWYgaXQn
cyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRo
aXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5h
YmxlZDsKIAotICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKLSAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0R0w6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sg
JiBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCkpIHsKICAgICAgICAgbV9jb250
ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDogMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVhckNvbG9y
WzFdIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdID8g
bV9jbGVhckNvbG9yWzJdIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29s
b3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0gICAgZWxzZQorICAgIH0gZWxzZQog
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiAgICAgbV9jb250ZXh0
LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgR0MzRGJpdGZpZWxkIGNs
ZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOworICAgIEdDM0Ri
aXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVDsK
ICAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKSB7Ci0gICAgICAgIGlmICghY29tYmlu
ZWRDbGVhciB8fCAhbV9kZXB0aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0JVRkZFUl9CSVQpKQorICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1fZGVwdGhN
YXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklUKSkKICAg
ICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKLSAgICAgICAgY2xlYXJNYXNr
IHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOworICAgICAgICBjbGVhck1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0JVRkZFUl9CSVQ7CiAgICAgICAgIG1fY29u
dGV4dC0+ZGVwdGhNYXNrKHRydWUpOwogICAgIH0KICAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMt
PnN0ZW5jaWwpIHsKLSAgICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKKyAgICAgICAgaWYgKGNvbWJpbmVkQ2xl
YXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKICAg
ICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsICYgbV9zdGVu
Y2lsTWFzayk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVu
Y2lsKDApOwotICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QlVGRkVSX0JJVDsKLSAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVCwgMHhGRkZGRkZGRik7CisgICAgICAgIGNsZWFyTWFzayB8PSBH
cmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAgICBtX2NvbnRleHQt
PnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0R0w6OkZST05ULCAweEZGRkZGRkZG
KTsKICAgICB9CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIDApOwogICAgIG1fY29udGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsKIAogICAgIHJl
c3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0g
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAg
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CiAgICAgbV9s
YXllckNsZWFyZWQgPSB0cnVlOwogCiAgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7CkBAIC05OTMs
MTQgKzk5MywxNCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVTdGF0
ZUFmdGVyQ2xlYXIoKQogewogICAgIC8vIFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRl
eHQgc2V0LgogICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCk7CiAgICAgbV9jb250ZXh0
LT5jbGVhckNvbG9yKG1fY2xlYXJDb2xvclswXSwgbV9jbGVhckNvbG9yWzFdLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NsZWFyQ29sb3JbMl0sIG1fY2xlYXJDb2xvclszXSk7CiAgICAg
bV9jb250ZXh0LT5jb2xvck1hc2sobV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdLCBtX2NvbG9yTWFza1szXSk7CiAg
ICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKG1fY2xlYXJEZXB0aCk7CiAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwpOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIG1fc3RlbmNpbE1hc2spOworICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHRHTDo6RlJPTlQsIG1f
c3RlbmNpbE1hc2spOwogICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKG1fZGVwdGhNYXNrKTsKIH0K
IApAQCAtMTA3OCwxMiArMTA3OCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIG1fY29udGV4dC0+cmVzaGFwZSh3
aWR0aCwgaGVpZ2h0KTsKIAogICAgIGF1dG8mIHRleHR1cmVVbml0ID0gbV90ZXh0dXJlVW5pdHNb
bV9hY3RpdmVUZXh0dXJlVW5pdF07Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleHR1cmVVbml0LnRleHR1cmUy
REJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4dHVyZVVuaXQudGV4dHVyZTJEQmlu
ZGluZy5nZXQoKSkpOwogICAgIGlmICh0ZXh0dXJlVW5pdC50ZXh0dXJlMkRCaW5kaW5nICYmIHRl
eHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSh0ZXh0dXJl
RXh0ZW5zaW9uRmxhZ3MoKSkpCiAgICAgICAgIG1fdW5yZW5kZXJhYmxlVGV4dHVyZVVuaXRzLmFk
ZChtX2FjdGl2ZVRleHR1cmVVbml0KTsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVm
ZmVyQmluZGluZy5nZXQoKSkpOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJC
aW5kaW5nLmdldCgpKSk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBv
YmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKIH0KIAogaW50IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0CkBAIC0xMTExLDE5
ICsxMTExLDE5IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVy
SGVpZ2h0KCkgY29uc3QKIHVuc2lnbmVkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpemVJ
bkJ5dGVzKEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRF
OgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0JZVEU6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVieXRlKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9S
VDoKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVDoKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWludCk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6
CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGZsb2F0KTsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0xMTM0LDExICsxMTM0LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQogewogICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAodGV4dHVy
ZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCA+PSBtX3RleHR1cmVVbml0cy5zaXplKCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImFjdGl2ZVRleHR1cmUiLCAidGV4dHVyZSB1bml0IG91dCBvZiByYW5nZSIpOworICAg
IGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwID49IG1fdGV4dHVyZVVu
aXRzLnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQgb3V0IG9mIHJh
bmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9
IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7CisgICAgbV9hY3RpdmVUZXh0
dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTA7CiAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQogCkBAIC0xMTQ3LDcgKzExNDcsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKgogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBzaGFkZXIpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKCFwcm9ncmFtLT5hdHRhY2hTaGFkZXIoc2hhZGVyKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJh
dHRhY2hTaGFkZXIiLCAic2hhZGVyIGF0dGFjaG1lbnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgImF0dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFk
ZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRl
cihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKQEAgLTExNjMs
MTEgKzExNjMsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQXR0cmli
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWkKICAgICBpZiAoIXZhbGlkYXRl
U3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRBdHRyaWJMb2NhdGlv
biIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgInJl
c2VydmVkIHByZWZpeCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpbmRleCA+
PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJiaW5kQXR0cmliTG9jYXRpb24iLCAiaW5kZXgg
b3V0IG9mIHJhbmdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiBy
YW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+YmluZEF0dHJp
YkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwpAQCAtMTE4MCw3
ICsxMTgwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja09iamVjdFRv
QmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFcKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChvYmplY3QpIHsKICAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRl
eHRHcm91cCgpLCAqdGhpcykpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IG5v
dCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOwpAQCAtMTE5NiwxMiAr
MTE5NiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRCdWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQogICAgIGlmIChkZWxldGVkKQogICAg
ICAgICBidWZmZXIgPSBudWxscHRyOwogICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5nZXRUYXJn
ZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9IHRhcmdldCkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVm
ZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVS
QVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlw
bGUgdGFyZ2V0cyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKKyAgICBpZiAodGFyZ2V0ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIpCiAgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9
IGJ1ZmZlcjsKLSAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1F
TlRfQVJSQVlfQlVGRkVSKQorICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRH
TDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCiAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVj
dC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7CiAgICAgZWxzZSB7CiAgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwpAQCAtMTIwOSwyMiArMTIwOSwyMiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZl
ciogYnVmZmVyKQogICAgICAgICBpZiAoaXNXZWJHTDIoKSkgewogICAgICAgICAgICAgc3VjY2Vz
cyA9IHRydWU7CiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgICAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfUkVBRF9CVUZGRVI6CiAgICAgICAgICAgICAgICAgbV9i
b3VuZENvcHlSZWFkQnVmZmVyID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAg
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1dSSVRFX0JVRkZFUjoKICAgICAg
ICAgICAgICAgICBtX2JvdW5kQ29weVdyaXRlQnVmZmVyID0gYnVmZmVyOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfUEFD
S19CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9QQUNL
X0JVRkZFUjoKICAgICAgICAgICAgICAgICBtX2JvdW5kUGl4ZWxQYWNrQnVmZmVyID0gYnVmZmVy
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlBJWEVMX1VOUEFDS19CVUZGRVI6CiAgICAgICAgICAgICAgICAgbV9ib3VuZFBpeGVs
VW5wYWNrQnVmZmVyID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAg
ICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVI6CiAgICAgICAgICAgICAgICAgbV9ib3VuZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyID0gYnVm
ZmVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTklGT1JNX0JVRkZFUjoKICAgICAgICAgICAgICAgICBtX2JvdW5kVW5pZm9ybUJ1ZmZl
ciA9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6
CkBAIC0xMjM0LDcgKzEyMzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJp
bmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQogICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfRU5VTSwgImJpbmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNTQsMjMgKzEyNTQs
MjMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kRnJhbWVidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmUKIAogICAgIGJvb2wgaXNXZWJHTDJEcmF3RnJh
bWVidWZmZXJUYXJnZXQgPSBmYWxzZTsKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgIGlzV2ViR0wy
RHJhd0ZyYW1lYnVmZmVyVGFyZ2V0ID0gaXNXZWJHTDIoKSAmJiB0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRSQVdfRlJBTUVCVUZGRVI7CisgICAgaXNXZWJHTDJEcmF3RnJhbWVidWZmZXJU
YXJnZXQgPSBpc1dlYkdMMigpICYmIHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19G
UkFNRUJVRkZFUjsKICNlbmRpZgogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogCi0gICAgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIgfHwgaXNXZWJHTDJEcmF3
RnJhbWVidWZmZXJUYXJnZXQpIHsKKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiB8fCBpc1dlYkdMMkRyYXdGcmFtZWJ1ZmZlclRhcmdldCkgewogICAgICAg
ICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKICAgICAgICAgc3VjY2VzcyA9IHRydWU7
CiAgICAgfQogI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgaWYgKGlzV2ViR0wyKCkgJiYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSkgeworICAgIGlmIChpc1dlYkdMMigpICYmICh0
YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSIHx8IHRhcmdldCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUikpIHsKICAgICAgICAgbV9yZWFkRnJhbWVi
dWZmZXJCaW5kaW5nID0gYnVmZmVyOwogICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKIAogICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFs
aWQgdGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU0sICJiaW5kRnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTI4Nyw4ICsxMjg3LDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2Vi
R0xSZW5kZXJidWYKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChkZWxldGVkKQogICAgICAgICBy
ZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwor
ICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUikgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAi
YmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRlckJ1ZmZlcjsKQEAgLTEzMDUs
MTkgKzEzMDUsMTkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kVGV4dHVy
ZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHUKICAgICBpZiAoZGVsZXRlZCkK
ICAgICAgICAgdGV4dHVyZSA9IG51bGxwdHI7CiAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+
Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRh
cmdldHMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAiYmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2Vk
IHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEdD
M0RpbnQgbWF4TGV2ZWwgPSAwOwogICAgIGF1dG8mIHRleHR1cmVVbml0ID0gbV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF07Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCkgeworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfMkQpIHsKICAgICAgICAgdGV4dHVyZVVuaXQudGV4dHVyZTJEQmluZGluZyA9IHRl
eHR1cmU7CiAgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7CiAgICAgICAgIGlm
ICh0ZXh0dXJlICYmIHRleHR1cmUtPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSh0ZXh0dXJlRXh0ZW5z
aW9uRmxhZ3MoKSkpCiAgICAgICAgICAgICBtX3VucmVuZGVyYWJsZVRleHR1cmVVbml0cy5hZGQo
bV9hY3RpdmVUZXh0dXJlVW5pdCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdW5yZW5k
ZXJhYmxlVGV4dHVyZVVuaXRzLnJlbW92ZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKLSAgICB9IGVs
c2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgewor
ICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVf
TUFQKSB7CiAgICAgICAgIHRleHR1cmVVbml0LnRleHR1cmVDdWJlTWFwQmluZGluZyA9IHRleHR1
cmU7CiAgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwogICAgICAg
ICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUodGV4dHVyZUV4
dGVuc2lvbkZsYWdzKCkpKQpAQCAtMTMyNSw3ICsxMzI1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJlVW5p
dHMucmVtb3ZlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4
dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKQEAgLTEzODcsMTUgKzEzODcsMTUgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgbG9uZyBsb25nIHNpemUsIEdDM0QKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
OwogICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgInNpemUgPT0gMCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghYnVm
ZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTQxMiw3
ICsxNDEyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgT3B0aW9uYWw8QnVmZmVyRGF0YVMKICAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVm
ZmVyRGF0YSIsICJudWxsIGRhdGEiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm51bGwgZGF0YSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyID0g
dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2Up
OwpAQCAtMTQyMSw3ICsxNDIxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgT3B0aW9uYWw8QnVmZmVyRGF0YVMKIAogICAgIFdU
Rjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0
ZUJ1ZmZlckRhdGEoZGF0YS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJp
bnZhbGlkIGJ1ZmZlciIpOworICAgICAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVm
ZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTQzOCwxMSArMTQz
OCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LAogewogICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1
ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJn
ZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgUmVmUHRyPFdlYkdMQnVm
ZmVyPiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRh
IiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVm
ZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWRhdGEpCkBAIC0xNDUwLDcgKzE0
NTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LAogCiAgICAgV1RGOjp2aXNpdChbJl0oYXV0
byYgZGF0YSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShz
dGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLmdldCgpKSkgewotICAgICAgICAg
ICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAg
IHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTQ2NiwyNSArMTQ2NiwyNSBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxv
bmcgb2Zmc2V0LAogR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUikgeworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSKSB7CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAgICAgaWYgKGlzV2ViR0wxKCkgfHwg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVIpKSB7CisgICAgICAgIGlmIChp
c1dlYkdMMSgpIHx8ICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfRlJBTUVCVUZG
RVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSKSkgewog
I2VuZGlmCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsICJpbnZhbGlkIHRhcmdldCIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAg
ICAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIH0KICNlbmRp
ZgogICAgIH0KIAotICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVyQmluZGlu
ZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZy
YW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOwogCiAgICAgaWYgKCF0YXJn
ZXRGcmFtZWJ1ZmZlciB8fCAhdGFyZ2V0RnJhbWVidWZmZXItPm9iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOworICAgICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOwogICAgIGNvbnN0
IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKICAgICBHQzNEZW51bSBy
ZXN1bHQgPSB0YXJnZXRGcmFtZWJ1ZmZlci0+Y2hlY2tTdGF0dXMoJnJlYXNvbik7Ci0gICAgaWYg
KHJlc3VsdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAg
ICBpZiAocmVzdWx0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9DT01QTEVURSkg
ewogICAgICAgICBTdHJpbmcgc3RyID0gIldlYkdMOiBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzOiIg
KyBTdHJpbmcocmVhc29uKTsKICAgICAgICAgcHJpbnRUb0NvbnNvbGUoTWVzc2FnZUxldmVsOjpX
YXJuaW5nLCBzdHIpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTU0NSw3ICsxNTQ1LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21waWxlU2hhZGVyKFdlYkdMU2hh
ZGVyKiBzaGFkZXIpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFk
ZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOwogICAgIEdDM0RpbnQgdmFsdWU7Ci0gICAgbV9jb250
ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYob2Jq
ZWN0T3JaZXJvKHNoYWRlciksIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QSUxFX1NUQVRVUywgJnZh
bHVlKTsKICAgICBzaGFkZXItPnNldFZhbGlkKHZhbHVlKTsKIAogICAgIGF1dG8qIGNhbnZhcyA9
IGh0bWxDYW52YXMoKTsKQEAgLTE1NjYsMTEgKzE1NjYsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
b3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZh
bGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlk
IGludGVybmFsZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGJvcmRl
cikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNv
bXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3Nl
ZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1h
dCkpCkBAIC0xNTkyLDcgKzE1OTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKTsKKyAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpOwog
ICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOwogfQogCkBAIC0xNjAzLDcgKzE2MDMsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludAogICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1
YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCkBAIC0xNjE0LDI5ICsxNjE0LDI5
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChm
b3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0Y2ggdGV4dHVy
ZSBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRv
ZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0ZXguZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBncmFwaGlj
c0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEuYnl0ZUxlbmd0aCgpLCBk
YXRhLmJhc2VBZGRyZXNzKCkpOworICAgIGdyYXBoaWNzQ29udGV4dEdMKCktPmNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgZGF0YS5ieXRlTGVuZ3RoKCksIGRhdGEuYmFzZUFkZHJlc3MoKSk7CiAgICAg
dGV4LT5zZXRDb21wcmVzc2VkKCk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbEZv
cm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5D
SUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBP
TkVOVDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfSU5ERVg4OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBj
YW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjU2LDIzICsxNjU2LDIz
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsCiAgICAgICAgIHJldHVybjsKICAgICAvLyBCZWZv
cmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBvdmVyZmxvdyBoYXBw
ZW5zIGZpcnN0LgogICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQgKyBoZWln
aHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwg
bGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFM
VUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJyZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXgtPmdl
dEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgIGlmICghdmFsaWRhdGVTZXR0YWJs
ZVRleEludGVybmFsRm9ybWF0KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIGludGVybmFsRm9ybWF0KSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVy
Q29tYmluYXRpb25WYWxpZChpbnRlcm5hbEZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9y
Rm9ybWF0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlz
IGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJh
bWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNvbik7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0R0wo
KSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCBy
ZWFzb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNsZWFySWZDb21wb3NpdGVkKCk7
CkBAIC0xNjgyLDIxICsxNjgyLDIxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsCiAgICAgaWYg
KGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwg
Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBw
ZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CiAgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICAg
ICAgICAgR0MzRGVudW0gdHlwZTsKLSAgICAgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRDo6cG9z
c2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQodGV4LT5nZXRJbnRlcm5hbEZvcm1h
dCh0YXJnZXQsIGxldmVsKSwgZm9ybWF0LCB0eXBlKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvcHlUZXhTdWJJbWFn
ZTJEIiwgIlRleHR1cmUgaGFzIHVua25vd24gaW50ZXJuYWwgZm9ybWF0Iik7CisgICAgICAgIGlm
ICghR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVy
bmFsRm9ybWF0KHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCksIGZvcm1hdCwg
dHlwZSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU0sICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJUZXh0dXJlIGhhcyB1bmtub3du
IGludGVybmFsIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87CiAgICAgICAgIGlmICh3aWR0aCAm
JiBoZWlnaHQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNpemU7CiAgICAgICAgICAgICBHQzNE
ZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnNpemUsIG51bGxwdHIpOwot
ICAgICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewor
ICAgICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikgewog
ICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29weVRleFN1YkltYWdl
MkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+
KHNpemUpOwogICAgICAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3Vi
SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2Uy
RCIsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwpAQCAtMTc2MCw4
ICsxNzYwLDggQEAgUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAodHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIsICJpbnZhbGlkIHNoYWRlciB0
eXBlIik7CisgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVIg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJjcmVh
dGVTaGFkZXIiLCAiaW52YWxpZCBzaGFkZXIgdHlwZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKQEAgLTE3ODIsNyArMTc4Miw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCAqdGhpcykpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgImRlbGV0ZSIsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChvYmplY3QtPmlzRGVsZXRl
ZCgpKQpAQCAtMTc5MCw3ICsxNzkwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkZWxldGVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKICAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkKICAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNl
IHdlIHdhbnQKICAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgotICAg
ICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAg
b2JqZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTE4MTEsMTcgKzE4MTEsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikK
ICNpZiBFTkFCTEUoV0VCR0wyKQogICAgIGlmIChpc1dlYkdMMigpICYmIGZyYW1lYnVmZmVyID09
IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAgICBtX3JlYWRGcmFtZWJ1ZmZlckJp
bmRpbmcgPSBudWxscHRyOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSLCAwKTsK
ICAgICB9CiAjZW5kaWYKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRp
bmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwogI2lmIEVOQUJM
RShXRUJHTDIpCiAgICAgICAgIGlmIChpc1dlYkdMMigpKQotICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfRlJBTUVCVUZGRVIsIDAp
OworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
R0w6OkRSQVdfRlJBTUVCVUZGRVIsIDApOwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgMCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIDApOwogICAgIH0KIH0KIApAQCAtMTg5MSw3ICsxODkx
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXB0aFJhbmdlKEdDM0RmbG9h
dCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICh6TmVhciA+IHpGYXIpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVw
dGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+
IHpGYXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmRlcHRoUmFu
Z2Uoek5lYXIsIHpGYXIpOwpAQCAtMTkwMiwyMyArMTkwMiwyMyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdM
U2hhZGVyKgogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFwcm9n
cmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hTaGFkZXIiLCAic2hh
ZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hTaGFkZXIiLCAic2hhZGVyIG5vdCBh
dHRhY2hlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+ZGV0YWNo
U2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAg
IHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBzaGFkZXItPm9u
RGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0R0woKSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGlzYWJsZShHQzNEZW51bSBjYXApCiB7CiAgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJkaXNhYmxlIiwgY2FwKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCkgeworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVCkg
ewogICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7CiAgICAgICAgIGFwcGx5U3RlbmNp
bFRlc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoY2FwID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHRH
TDo6U0NJU1NPUl9URVNUKQogICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CiAgICAg
bV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiB9CkBAIC0xOTI4LDcgKzE5MjgsNyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWlu
dCBpbmRleCkKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE5NDIsNyArMTk0Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQogYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwoR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxldmVsLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpCiB7CiAgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdl
YkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
ZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBu
b3QgcG93ZXIgb2YgMiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xOTU5
LDcgKzE5NTksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxl
bWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbgogICAgIGlmIChvZmZzZXQgPCAw
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0lOVCkgewogICAgICAgICAvLyBGb3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBv
ZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgNCBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCiAgICAg
ICAgIGlmIChvZmZzZXQgJSA0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk3MCw3
ICsxOTcwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUVsZW1l
bnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW4KICAgICAgICAgR0MzRHNpemVpcHRy
IG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CiAgICAgICAgIGlmIChv
ZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUKSB7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9TSE9SVCkgewogICAgICAgICAvLyBGb3IgYW4gdW5zaWduZWQgc2hvcnQgYXJyYXksIG9mZnNl
dCBtdXN0IGJlIGRpdmlzaWJsZSBieSAyIGZvciBhbGlnbm1lbnQgcmVhc29ucy4KICAgICAgICAg
aWYgKG9mZnNldCAlIDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xOTgxLDcgKzE5
ODEsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFy
cmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbgogICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9
IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsKICAgICAgICAgaWYgKG9mZnNl
dCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkg
eworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RSkgewogICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpOwogICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDA5LDEzICsyMDA5LDEzIEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6
ZWkgY291bnQsIEdDM0RlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6CiAgICAgICAgIG1heEluZGV4ID0gZ2V0
TWF4SW5kZXg8R0MzRHVpbnQ+KGJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgogICAgICAgICBtYXhJbmRleCA9IGdl
dE1heEluZGV4PEdDM0R1c2hvcnQ+KGJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKICAgICAgICAgbWF4SW5kZXggPSBn
ZXRNYXhJbmRleDxHQzNEdWJ5dGU+KGJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTIwOTQsNyArMjA5NCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwK
ICAgICAgICAgICAgIGlmICh1c2luZ1NpbXVsYXRlZEFycmF5QnVmZmVyKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApOwogICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkICYmIHN0YXRl
LmlzQm91bmQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGlu
Zy0+Z2V0VGFyZ2V0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiB8fCBzdGF0
ZS5idWZmZXJCaW5kaW5nLT5nZXRUYXJnZXQoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVO
VF9BUlJBWV9CVUZGRVIpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5idWZmZXJCaW5k
aW5nLT5nZXRUYXJnZXQoKSA9PSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSIHx8IHN0
YXRlLmJ1ZmZlckJpbmRpbmctPmdldFRhcmdldCgpID09IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVN
RU5UX0FSUkFZX0JVRkZFUikKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIXN0YXRl
LmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0yMTA5LDExICsyMTA5LDExIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwKIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKCFvYmpl
Y3QgfHwgIW9iamVjdC0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVjdCBv
ciBvYmplY3QgZGVsZXRlZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9yIG9iamVj
dCBkZWxldGVkIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFvYmpl
Y3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCAqdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTI4LDcg
KzIxMjgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0Fy
cmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDMwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
Zmlyc3Qgb3IgY291bnQgPCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJmaXJzdCBvciBjb3VudCA8
IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMjEzOCw3ICsyMTM4LDcg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdBcnJheXMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMKICAgICB9CiAKICAgICBpZiAocHJpbWl0aXZlQ291
bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJwcmltY291bnQgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTIxNDYsMTcgKzIxNDYsMTcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMKICAgICBDaGVj
a2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3VtID0gQ2hlY2tlZDxHQzNEaW50
LCBSZWNvcmRPdmVyZmxvdz4oZmlyc3QpICsgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxv
dz4oY291bnQpOwogICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQ
cmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CiAgICAgaWYgKGNoZWNrZWRTdW0uaGFzT3Zl
cmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVDb3VudC5oYXNPdmVyZmxvd2VkKCkgfHwgIXZh
bGlkYXRlVmVydGV4QXR0cmlidXRlcyhjaGVja2VkU3VtLnVuc2FmZUdldCgpLCBjaGVja2VkUHJp
bWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1w
dCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghdmFsaWRhdGVTaW11bGF0ZWRWZXJ0ZXhBdHRyaWIw
KGNoZWNrZWRTdW0udW5zYWZlR2V0KCkgLSAxKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0
dGVtcHQgdG8gYWNjZXNzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgc2ltdWxhdGVkIHZlcnRl
eEF0dHJpYjAgYXJyYXkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2Vz
cyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNpbXVsYXRlZCB2ZXJ0ZXhBdHRyaWIwIGFycmF5
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBjb25zdCBjaGFyKiByZWFz
b24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0Qo
KSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7
CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0R0woKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTIxNzIsMjEgKzIxNzIsMjEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEcKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKICAgICAgICAgaWYgKG1fb2Vz
RWxlbWVudEluZGV4VWludCB8fCBpc1dlYkdMMigpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5
cGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBpZiAoY291bnQgPCAwIHx8IG9m
ZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImNvdW50IG9yIG9mZnNldCA8IDAiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImNvdW50IG9yIG9mZnNldCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAKQEAgLTIxOTYsMTggKzIxOTYsMTggQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEcKICAgICB9CiAgICAgCiAgICAgaWYgKHByaW1pdGl2ZUNvdW50IDwgMCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNv
dW50IDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGlmICgh
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQg
cmVuZGVyaW5nIHN0YXRlLgogICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50
LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgInJlcXVlc3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZ
X0JVRkZFUiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVlc3Qgb3V0IG9mIGJvdW5kcyBm
b3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIGlmICghY291bnQpCkBAIC0yMjE2LDI1ICsyMjE2LDI1IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHCiAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hl
Y2tlZENvdW50KGNvdW50KTsKICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOwogICAgIGlmIChjaGVja2VkQ291
bnQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVDb3VudC5oYXNPdmVyZmxvd2Vk
KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91
bmRzIGFycmF5cyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91
dCBvZiBib3VuZHMgYXJyYXlzIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
CiAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUodHlwZSwgbnVtRWxlbWVu
dHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmlt
aXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJy
YXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVHZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0Mz
RGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0
ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBh
cnJheXMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0
IG9mIGJvdW5kcyBhcnJheXMiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmICghdmFsaWRhdGVTaW11bGF0ZWRWZXJ0ZXhBdHRyaWIwKG51bUVs
ZW1lbnRzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dHNp
ZGUgdGhlIGJvdW5kcyBvZiB0aGUgc2ltdWxhdGVkIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXRzaWRlIHRoZSBib3VuZHMg
b2YgdGhlIHNpbXVsYXRlZCB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCiAgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVy
IGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICZyZWFzb24pKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNz
Q29udGV4dEdMKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCByZWFzb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMjI1Niw3
ICsyMjU2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdD
M0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXoKICAgICAgICAgYXV0byBzaW11bGF0
ZVZlcnRleEF0dHJpYjBTdGF0dXMgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3Vu
dCAtIDEpOwogICAgICAgICBpZiAoIXNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cykgewogICAg
ICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gc2ltdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZm
ZXIuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzIiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhB
dHRyaWIwIGFycmF5Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzIiwgInVuYWJsZSB0byBzaW11
bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmli
MFN0YXR1cy52YWx1ZSgpOwpAQCAtMjI4MiwxMSArMjI4MiwxMSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpegogc3RhdGljIEdDM0R1aW50IGdldFJlc3RhcnRJbmRleChHQzNEZW51bSB0eXBlKQog
ewogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0MzRHVieXRlPjo6bWF4KCk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPEdDM0R1c2hvcnQ+OjptYXgoKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgog
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHQzNEdWludD46Om1heCgpOwogICAg
IH0KIApAQCAtMjMxMiw3ICsyMzEyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzMKICAgICAg
ICAgYXV0byBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMgPSBzaW11bGF0ZVZlcnRleEF0dHJp
YjAobnVtRWxlbWVudHMpOwogICAgICAgICBpZiAoIXNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1
cykgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gc2ltdWxhdGUgdGhlIGF0dHJp
YnV0ZSBidWZmZXIuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3RWxlbWVudHMiLCAidW5hYmxlIHRvIHNpbXVs
YXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRyYXdFbGVtZW50cyIsICJ1
bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjBTdGF0dXMudmFsdWUoKTsKQEAgLTIzNDQsMTIgKzIzNDQsMTIgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGUoR0MzRGVudW0gY2FwKQogewogICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5h
YmxlIiwgY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlNURU5DSUxfVEVTVCkgewogICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKICAgICAg
ICAgYXBwbHlTdGVuY2lsVGVzdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkKKyAgICBpZiAoY2FwID09IEdy
YXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpCiAgICAgICAgIG1fc2Npc3NvckVuYWJsZWQg
PSB0cnVlOwogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7CiB9CkBAIC0yMzU5LDcgKzIzNTks
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4KQogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAi
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTIzODcsMzMgKzIzODcsMzMgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnUKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChyZW5kZXJidWZmZXJ0
YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICBpZiAocmVuZGVyYnVmZmVy
dGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwg
KnRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBv
ciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT5oYXNF
dmVyQmVlbkJvdW5kKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAiYnVm
ZmVyIGhhcyBuZXZlciBiZWVuIGJvdW5kIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIiwgImJ1ZmZlciBoYXMgbmV2ZXIgYmVlbiBib3VuZCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byB0YXJnZXRGcmFtZWJ1ZmZlciA9ICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVIpID8gbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nIDog
bV9mcmFtZWJ1ZmZlckJpbmRpbmc7CisgICAgYXV0byB0YXJnZXRGcmFtZWJ1ZmZlciA9ICh0YXJn
ZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIpID8gbV9yZWFkRnJhbWVi
dWZmZXJCaW5kaW5nIDogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CiAKICAgICAvLyBEb24ndCBhbGxv
dyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAogICAg
IC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhl
IGRlZmF1bHQKICAgICAvLyBGQk8uCiAgICAgaWYgKCF0YXJnZXRGcmFtZWJ1ZmZlciB8fCAhdGFy
Z2V0RnJhbWVidWZmZXItPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmplY3QgPSBvYmplY3RPclplcm8oYnVmZmVy
KTsKICNpZiAhVVNFKEFOR0xFKQotICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRB
Q0hNRU5ULCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7Ci0gICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9BVFRBQ0hNRU5ULCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7Cisg
ICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRU
QUNITUVOVCkgeworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKICAgICB9IGVsc2UKICNlbmRpZgogICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwpAQCAtMjQyNiwyOSArMjQyNiwy
OSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYQogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJU
ZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KGxldmVsICYmIGlzV2ViR0wxKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJsZXZl
bCBub3QgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlk
YXRlKGNvbnRleHRHcm91cCgpLCAqdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJl
MkQiLCAibm8gdGV4dHVyZSBvciB0ZXh0dXJlIG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZy
b20gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHRh
cmdldEZyYW1lYnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFN
RUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgOiBtX2ZyYW1lYnVmZmVyQmluZGlu
ZzsKKyAgICBhdXRvIHRhcmdldEZyYW1lYnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6UkVBRF9GUkFNRUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgOiBtX2Zy
YW1lYnVmZmVyQmluZGluZzsKIAogICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGZyYW1l
YnVmZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CiAgICAgLy8gaW1wbGVtZW50YXRpb25z
IHVzZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAogICAgIC8vIEZC
Ty4KICAgICBpZiAoIXRhcmdldEZyYW1lYnVmZmVyIHx8ICF0YXJnZXRGcmFtZWJ1ZmZlci0+b2Jq
ZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gZnJhbWVidWZmZXIg
Ym91bmQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gZnJhbWVidWZmZXIg
Ym91bmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmVPYmplY3QgPSBvYmplY3RPclplcm8odGV4dHVyZSk7CiAKICNpZiAhVVNFX0FOR0xFCi0g
ICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRU
QUNITUVOVCkgewotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVy
ZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgeworICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FU
VEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBtX2Nv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlNU
RU5DSUxfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CiAgICAg
fSBlbHNlCiAjZW5kaWYKICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwpAQCAt
MjQ3MiwxMiArMjQ3MiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdlbmVy
YXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0
ZU1pcG1hcCIsICJsZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6
ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9y
IG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBD
b21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2VkIGluIFdlYkdMIDI6CiAgICAgaWYg
KHRleC0+aXNDb21wcmVzc2VkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5n
IHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2VkIHRleHR1cmUiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVz
c2VkIHRleHR1cmUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRl
U2V0dGFibGVUZXhJbnRlcm5hbEZvcm1hdCgiZ2VuZXJhdGVNaXBtYXAiLCB0ZXgtPmdldEludGVy
bmFsRm9ybWF0KHRhcmdldCwgMCkpKQpAQCAtMjQ4NywxNSArMjQ4NywxNSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKICAg
ICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4
ZWQuCiAjaWYgT1MoREFSV0lOKQogICAgIGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxz
ZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVB
UkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0
YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpOworICAgIGlmICh0ZXgtPmdldE1pbkZpbHRl
cigpICE9IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1RfTUlQTUFQX0xJTkVB
Uik7CiAgICAgICAgIG5lZWRUb1Jlc2V0TWluRmlsdGVyID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ICAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiAjaWYgT1MoREFSV0lOKQog
ICAgIGlmIChuZWVkVG9SZXNldE1pbkZpbHRlcikKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4
LT5nZXRNaW5GaWx0ZXIoKSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJn
ZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01JTl9GSUxURVIsIHRleC0+Z2V0TWluRmls
dGVyKCkpOwogI2VuZGlmCiAgICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOwogfQpA
QCAtMjUwNCw3ICsyNTA0LDcgQEAgUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSoKIHsKICAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3Rp
dmVBdHRyaWIiLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8gaW5mbzsKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6QWN0
aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0yNTE3LDcgKzI1MTcsNyBAQCBSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbQogewogICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFj
dGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8gaW5mbzsKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6
QWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9i
amVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKQEAgLTI1MzUsOCArMjUzNSw4IEBAIE9w
dGlvbmFsPFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+Pj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0QXR0YWNoZWRTaGFkCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBjb25zdCBHQzNEZW51bSBzaGFkZXJUeXBlc1tdID0gewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURFUiwKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUgogICAgIH07CiAgICAgVmVjdG9y
PFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlck9iamVjdHM7CiAgICAgZm9yIChhdXRvIHNoYWRl
clR5cGUgOiBzaGFkZXJUeXBlcykgewpAQCAtMjU1OCw3ICsyNTU4LDcgQEAgR0MzRGludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIGNvbnMKICAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKICAgICAgICAgcmV0
dXJuIC0xOwogICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRy
aWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIH0KICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIG5hbWUpOwpAQCAtMjU3MCwzNCArMjU3MCwzNCBAQCBXZWJHTEFueSBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGJvb2wgdmFsaWQgPSBm
YWxzZTsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIg
fHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAg
ICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIgfHwgdGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICAgICAgdmFs
aWQgPSB0cnVlOwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgaWYgKGlzV2ViR0wyKCkpIHsKICAg
ICAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09QWV9SRUFEX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9X
UklURV9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tf
QlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVG
RkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUjoKICAgICAgICAgICAgIHZhbGlkID0gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGlmICghdmFsaWQpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1
ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVy
IiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAot
ICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUgJiYgcG5hbWUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9VU0FHRSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dEdMOjpC
VUZGRVJfVVNBR0UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIEdDM0RpbnQg
dmFsdWUgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKLSAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZF
Ul9TSVpFKQorICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6QlVGRkVSX1NJWkUp
CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHZhbHVlKTsKIH0KQEAgLTI2MDksNyArMjYwOSw3IEBAIE9wdGlvbmFsPFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldENvbnRleHRBdHRyaWJ1dGVz
CiAKICAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAi
ZmFsc2UiIGZvciBkZXB0aAogICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9mIHRoZSBw
cm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0QuCisg
ICAgLy8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiAKICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBt
X2NvbnRleHQtPmNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgaWYgKCFtX2F0dHJpYnV0ZXMuZGVw
dGgpCkBAIC0yNjIyLDcgKzI2MjIsNyBAQCBPcHRpb25hbDxXZWJHTENvbnRleHRBdHRyaWJ1dGVz
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRDb250ZXh0QXR0cmlidXRlcwogR0MzRGVu
dW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXJyb3IoKQogewogICAgIGlmIChtX2lz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1I7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKIH0KIApAQCAtMjYzMywxOCArMjYz
MywxOCBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFy
YW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRwogCiAgICAgR0MzRGludCB2YWx1ZSA9IDA7
CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFTEVU
RV9TVEFUVVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVMRVRFX1NUQVRVUzoKICAg
ICAgICAgcmV0dXJuIHByb2dyYW0tPmlzRGVsZXRlZCgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZBTElEQVRFX1NUQVRVUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWQUxJ
REFURV9TVEFUVVM6CiAgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxi
b29sPih2YWx1ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElOS19TVEFUVVM6CiAgICAgICAgIHJldHVybiBw
cm9ncmFtLT5nZXRMaW5rU3RhdHVzKCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVRU
QUNIRURfU0hBREVSUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBVFRBQ0hFRF9TSEFE
RVJTOgogICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUNUSVZFX1VOSUZPUk1TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElW
RV9BVFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9VTklGT1JN
UzoKICNpZiBVU0UoQU5HTEUpCiAgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CiAjZWxzZQpAQCAtMjY1Miw3ICsyNjUy
LDcgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFt
ZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEcKICNlbmRpZiAvLyBVU0UoQU5HTEUpCiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UHJvZ3JhbVBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
fQpAQCAtMjY2OCw0MiArMjY2OCw0MiBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQwogewogICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
ciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCisgICAgaWYgKG1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfU1RFTkNJTAogICAgICAgICAmJiAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5pc1Zh
bGlkKCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsKICAg
ICAgICAgaW50IHZhbHVlID0gMDsKICAgICAgICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9XSURUSDoKICAgICAgICAgICAgIHZhbHVl
ID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6CiAgICAg
ICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0FMUEhBX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJV
RkZFUl9SRURfU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVG
RkVSX0dSRUVOX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJV
RkZFUl9CTFVFX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJV
RkZFUl9BTFBIQV9TSVpFOgogICAgICAgICAgICAgdmFsdWUgPSAwOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9ERVBUSF9T
SVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfREVQVEhf
U0laRToKICAgICAgICAgICAgIHZhbHVlID0gMjQ7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToK
ICAgICAgICAgICAgIHZhbHVlID0gODsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgog
ICAgICAgICAgICAgcmV0dXJuIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC0yNzExLDIwICsyNzEx
LDIwIEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDCiAKICAgICBHQzNEaW50IHZhbHVlID0gMDsK
ICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSX1dJRFRIOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9I
RUlHSFQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpF
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfV0lEVEg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVO
REVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
QlVGRkVSX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZG
RVJfQUxQSEFfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJf
REVQVEhfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfU1RF
TkNJTF9TSVpFOgogICAgICAgICBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CiAgICAg
ICAgIHJldHVybiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCk7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CkBAIC0yNzM1
LDE2ICsyNzM1LDE2IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNo
YWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBHQzNECiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFTEVURV9TVEFUVVM6CiAgICAgICAgIHJldHVybiBzaGFkZXItPmlzRGVs
ZXRlZCgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBJTEVfU1RBVFVTOgogICAgICAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSEFE
RVJfVFlQRToKICAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hh
ZGVyKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odmFsdWUpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogfQpAQCAtMjc2
MSwyMyArMjc2MSwyMyBAQCBSZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclByZWNpc2lvbgogICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHN3aXRjaCAo
c2hhZGVyVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RlJBR01FTlRfU0hBREVSOgogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
RkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkhJR0hfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxPV19GTE9BVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNRURJVU1fRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6SElHSF9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfSU5U
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6SElHSF9JTlQ6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVN
LCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0yODA0LDIxICsyODA0LDIxIEBA
IFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFRleFBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuCiAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgR0Mz
RGZsb2F0IGZWYWx1ZSA9IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX1dSQVBfVDoKICAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhbHVlKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9Q
WV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCiAgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykg
ewogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1l
LCAmZlZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oZlZhbHVl
KTsKICAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0
VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIH0KQEAgLTI4MjgsNyArMjgyOCw3IEBAIFdlYkdM
QW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBjb25zdCBXZWJHCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24t
PnByb2dyYW0oKSAhPSBwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9y
bWxvY2F0aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVu
aWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFt
Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBHQzNEaW50IGxvY2F0aW9u
ID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOwpAQCAtMjgzNiw3OCArMjgzNiw3OCBAQCBX
ZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAgIEdDM0RlbnVtIGJhc2VUeXBlOwogICAgIHVuc2ln
bmVkIGxlbmd0aDsKICAgICBzd2l0Y2ggKHVuaWZvcm1Mb2NhdGlvbi0+dHlwZSgpKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6Qk9PTDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCT09MOgorICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpCT09MOwogICAgICAgICBsZW5ndGgg
PSAxOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZF
QzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Qk9PTF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dEdMOjpCT09MOwogICAgICAgICBsZW5ndGggPSAyOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Qk9PTF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpCT09MOwog
ICAgICAgICBsZW5ndGggPSAzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkJPT0w7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Qk9PTF9WRUM0OgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpCT09MOwogICAgICAgICBsZW5ndGggPSA0Owog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OklOVDsK
ICAgICAgICAgbGVuZ3RoID0gMTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SU5UX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTlRfVkVDMjoKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOwogICAgICAgICBsZW5ndGggPSAyOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMzoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdM
OjpJTlQ7CiAgICAgICAgIGxlbmd0aCA9IDM7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UX1ZFQzQ6CisgICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OklOVDsKICAgICAgICAgbGVuZ3RoID0g
NDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0g
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkZMT0FUOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4
dEdMOjpGTE9BVDsKICAgICAgICAgbGVuZ3RoID0gMTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRf
VkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAg
ICAgIGxlbmd0aCA9IDI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUX1ZFQzM6CisgICAgICAgIGJh
c2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAgICAgICBsZW5ndGggPSAzOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUM0Ogot
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVuZ3RoID0gNDsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKLSAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ7
CiAgICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUX01BVDM6CisgICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAgICAgICBsZW5ndGgg
PSA5OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9N
QVQ0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF9NQVQ0OgorICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVuZ3RoID0gMTY7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFUl8y
RDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVSX0NVQkU6CisgICAgICAgIGJh
c2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OklOVDsKICAgICAgICAgbGVuZ3RoID0gMTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMg
dHlwZQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5oYW5kbGVkIHR5cGUiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3Jt
IiwgInVuaGFuZGxlZCB0eXBlIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAg
ICBzd2l0Y2ggKGJhc2VUeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDogewogICAgICAgICBHQzNEZmxv
YXQgdmFsdWVbMTZdID0gezB9OwogICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0
ZWQpCiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5nZXRuVW5pZm9ybWZ2
RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9mKEdDM0RmbG9h
dCksIHZhbHVlKTsKQEAgLTI5MTcsNyArMjkxNyw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJH
CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVbMF07CiAgICAgICAgIHJldHVybiBGbG9hdDMyQXJy
YXk6OnRyeUNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKTsKICAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SU5UOiB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOiB7CiAgICAg
ICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CiAgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VY
VFN1cHBvcnRlZCkKICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLmdldG5V
bmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihH
QzNEaW50KSwgdmFsdWUpOwpAQCAtMjkyNyw3ICsyOTI3LDcgQEAgV2ViR0xBbnkgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0
IFdlYkcKICAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXTsKICAgICAgICAgcmV0dXJuIEludDMy
QXJyYXk6OnRyeUNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKTsKICAgICB9Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Qk9PTDogeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJPT0w6IHsK
ICAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKICAgICAgICAgaWYgKG1faXNSb2J1c3Ru
ZXNzRVhUU3VwcG9ydGVkKQogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCku
Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6
ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CkBAIC0yOTQ2LDcgKzI5NDYsNyBAQCBXZWJHTEFueSBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
Y29uc3QgV2ViRwogICAgIH0KIAogICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2Vu
dCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCi0gICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlm
b3JtIiwgInVua25vd24gZXJyb3IiKTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5rbm93biBlcnJvciIpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yOTYxLDcgKzI5NjEsNyBAQCBSZWZQdHI8V2Vi
R0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm1M
b2NhdGlvbihXZWJHTAogICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEdDM0RpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKQEAg
LTI5NzAsMTIgKzI5NzAsMTIgQEAgUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0wKIAogICAgIEdDM0Rp
bnQgYWN0aXZlVW5pZm9ybXMgPSAwOwogI2lmIFVTRShBTkdMRSkKLSAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFt
aXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZP
Uk1TLCAmYWN0aXZlVW5pZm9ybXMpOwogI2Vsc2UKLSAgICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0
SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisgICAgbV9jb250ZXh0LT5n
ZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFw
aGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOwogI2VuZGlm
CiAgICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyBpbmZvOworICAgICAgICBHcmFwaGlj
c0NvbnRleHRHTDo6QWN0aXZlSW5mbyBpbmZvOwogICAgICAgICBpZiAoIW1fY29udGV4dC0+Z2V0
QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGksIGluZm8pKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIC8vIFN0cmlwICJbMF0iIGZyb20gdGhlIG5hbWUg
aWYgaXQncyBhbiBhcnJheS4KQEAgLTI5OTgsMzYgKzI5OTgsMzYgQEAgV2ViR0xBbnkgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmEKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiBy
YW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdEJhc2U6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwogCi0gICAgaWYgKChpc1dlYkdM
MigpIHx8IG1fYW5nbGVJbnN0YW5jZWRBcnJheXMpICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEUpCisgICAgaWYgKChpc1dlYkdM
MigpIHx8IG1fYW5nbGVJbnN0YW5jZWRBcnJheXMpICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4
dEdMOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEUpCiAgICAgICAgIHJldHVybiBz
dGF0ZS5kaXZpc29yOwogCiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKICAg
ICAgICAgaWYgKCghaXNHTEVTMkNvbXBsaWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyKQogICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcK
ICAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3RhdGUuYnVmZmVyQmluZGluZzsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVE
OgogICAgICAgICByZXR1cm4gc3RhdGUuZW5hYmxlZDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgogICAgICAgICByZXR1cm4g
c3RhdGUubm9ybWFsaXplZDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRU
UklCX0FSUkFZX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX0FUVFJJ
Ql9BUlJBWV9TSVpFOgogICAgICAgICByZXR1cm4gc3RhdGUuc2l6ZTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKICAgICAgICAgcmV0dXJu
IHN0YXRlLm9yaWdpbmFsU3RyaWRlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhf
QVRUUklCX0FSUkFZX1RZUEU6CiAgICAgICAgIHJldHVybiBzdGF0ZS50eXBlOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpDVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CiAgICAgICAgIHJldHVybiBGbG9h
dDMyQXJyYXk6OnRyeUNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCk7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CkBAIC0zMTE0LDcgKzMxMTQsNyBAQCBH
QzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0VuYWJsZWQoR0MzRGVudW0g
Y2FwKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2Fw
YWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKQorICAgIGlmIChjYXAgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVCkKICAgICAgICAgcmV0dXJuIG1fc3RlbmNpbEVu
YWJsZWQ7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7CiB9CkBAIC0zMTg4
LDggKzMxODgsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmtQcm9ncmFt
V2l0aG91dEludmFsaWRhdGluZ0F0dHJpYkxvY2F0aW9ucyhXZQogICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJv
Z3JhbSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4g
dmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOwotICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gZnJhZ21lbnRTaGFk
ZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSKTsKKyAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IHZlcnRleFNoYWRlciA9IHByb2dy
YW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfU0hBREVSKTsK
KyAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IGZyYWdtZW50U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0
YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUik7CiAgICAgaWYg
KCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNWYWxpZCgpIHx8ICFmcmFnbWVudFNo
YWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSkgewogICAgICAgICBwcm9ncmFtLT5z
ZXRMaW5rU3RhdHVzKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzIxMiwzNSAr
MzIxMiwzNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBpeGVsU3RvcmVpKEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgogICAgICAgICBtX3VucGFja0ZsaXBZID0g
cGFyYW07CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CiAgICAgICAgIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSA9IHBhcmFtOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICBpZiAocGFy
YW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTCB8fCBwYXJhbSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAgICAgICBpZiAocGFyYW0gPT0g
R3JhcGhpY3NDb250ZXh0R0w6OkJST1dTRVJfREVGQVVMVF9XRUJHTCB8fCBwYXJhbSA9PSBHcmFw
aGljc0NvbnRleHRHTDo6Tk9ORSkKICAgICAgICAgICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZl
cnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQ
QUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBBQ0tfQUxJ
R05NRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQ6CiAg
ICAgICAgIGlmIChwYXJhbSA9PSAxIHx8IHBhcmFtID09IDIgfHwgcGFyYW0gPT0gNCB8fCBwYXJh
bSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlBB
Q0tfQUxJR05NRU5UKQorICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dEdM
OjpQQUNLX0FMSUdOTUVOVCkKICAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1lbnQgPSBwYXJh
bTsKLSAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQ6CisgICAgICAgICAgICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05N
RU5UOgogICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CiAgICAgICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1l
bnQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIGFsaWdu
bWVudCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VO
VU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiB9CkBAIC0zMjY1LDY2ICszMjY1LDY2IEBAIGVudW0gY2xhc3MgSW50ZXJu
YWxGb3JtYXRUaGVtZSB7CiBzdGF0aWMgSW50ZXJuYWxGb3JtYXRUaGVtZSBpbnRlcm5hbEZvcm1h
dFRoZW1lKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogewogICAgIHN3aXRjaCAoaW50ZXJuYWxG
b3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFO
Q0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHODoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNSR0I4X0FMUEhBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCX0FMUEhB
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBI
QToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ujg6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjg6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JH
QjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6CiAgICAg
ICAgIHJldHVybiBJbnRlcm5hbEZvcm1hdFRoZW1lOjpOb3JtYWxpemVkRml4ZWRQb2ludDsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I5X0U1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjVf
QTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCOV9FNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9B
MjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgogICAgICAgICByZXR1cm4gSW50ZXJuYWxG
b3JtYXRUaGVtZTo6UGFja2VkOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4X1NOT1JN
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOF9TTk9STToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4X1NOT1JNOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0I4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4X1NOT1JN
OgogICAgICAgICByZXR1cm4gSW50ZXJuYWxGb3JtYXRUaGVtZTo6U2lnbmVkTm9ybWFsaXplZEZp
eGVkUG9pbnQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJGOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkY6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyRjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
MzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQTMyRjoKICAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0VGhl
bWU6OkZsb2F0aW5nUG9pbnQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2SToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgogICAgICAgICByZXR1cm4gSW50ZXJuYWxG
b3JtYXRUaGVtZTo6U2lnbmVkSW50ZWdlcjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
OFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRzMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOFVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4VUk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
MzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0Iz
MlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQTE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTMyVUk6CiAgICAgICAgIHJldHVybiBJbnRlcm5hbEZvcm1hdFRoZW1lOjpVbnNpZ25lZEludGVn
ZXI7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEludGVybmFsRm9ybWF0VGhlbWU6Ok5v
bmU7CkBAIC0zMzM0LDE3ICszMzM0LDE3IEBAIHN0YXRpYyBJbnRlcm5hbEZvcm1hdFRoZW1lIGlu
dGVybmFsRm9ybWF0VGhlbWUoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiBzdGF0aWMgaW50IG51
bWJlck9mQ29tcG9uZW50c0ZvckZvcm1hdChHQzNEZW51bSBmb3JtYXQpCiB7CiAgICAgc3dpdGNo
IChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkVEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgogICAgICAg
ICByZXR1cm4gMTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVI6CiAgICAgICAgIHJl
dHVybiAyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CiAgICAgICAgIHJl
dHVybiAzOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSOgogICAgICAg
ICByZXR1cm4gNDsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKQEAgLTMzNTQsNjkg
KzMzNTQsNjkgQEAgc3RhdGljIGludCBudW1iZXJPZkNvbXBvbmVudHNGb3JGb3JtYXQoR0MzRGVu
dW0gZm9ybWF0KQogc3RhdGljIGludCBudW1iZXJPZkNvbXBvbmVudHNGb3JJbnRlcm5hbEZvcm1h
dChHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlIxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMyRjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9O
RU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
ODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOF9TTk9STToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVDMyRjoKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkY6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukcz
MlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMlVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgz
MkZfU1RFTkNJTDg6CiAgICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2
NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4X1NOT1JNOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjlfRTU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZGOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOEk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJVSToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6U1JHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UjExRl9HMTFGX0IxMEY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
OV9FNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjMySToKICAgICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNSR0I4X0FMUEhBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOF9T
Tk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEw
X0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkY6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IxMF9BMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkExNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0Jf
QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyVUk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgogICAgICAgICByZXR1cm4gNDsK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKQEAgLTM0MzQsNTIgKzM0MzQsNTIgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgKICAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IDA7
CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICAgICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgJnJlYXNvbikpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCByZWFzb24pOworICAgICAgICBpZiAo
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHRHTCgpLCAmcmVh
c29uKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJlYXNvbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IHJlYWRCdWZm
ZXIoKSBzaG91bGQgYWZmZWN0IHRoaXMKICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg7CisgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaW50
ZXJuYWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCODsKKyAgICAgICAgICAgIGludGVy
bmFsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg7CiAgICAgfQogCiAgICAgaWYgKCFp
bnRlcm5hbEZvcm1hdCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIk1pc3NpbmcgYXR0YWNobWVu
dCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIk1pc3NpbmcgYXR0YWNobWVudCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGlzV2ViR0wxKCkpIHsKICAgICAgICAgc3dpdGNo
IChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxz
IiwgImludmFsaWQgZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzVfNl81OgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF80XzRfNF80OgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRF
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6CiAgICAgICAgICAgICBp
ZiAoIW1fb2VzVGV4dHVyZUZsb2F0ICYmICFtX29lc1RleHR1cmVIYWxmRmxvYXQpIHsKLSAgICAg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVs
cyIsICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4
ZWxzIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCB0eXBl
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGZvcm1hdCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInJlYWRQaXhlbHMiLCAiZm9ybWF0IG5vdCBSR0JBIG9yIHR5cGUgbm90IFVOU0lH
TkVEX0JZVEV8RkxPQVQiKTsKKyAgICAgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQSB8fCAodHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAmJiB0
eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhl
bHMiLCAiZm9ybWF0IG5vdCBSR0JBIG9yIHR5cGUgbm90IFVOU0lHTkVEX0JZVEV8RkxPQVQiKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTM0ODcsNTMgKzM0ODcs
NTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgKICAgICBJbnRlcm5hbEZvcm1hdFRoZW1lIGlu
dGVybmFsRm9ybWF0VGhlbWUgPSBXZWJDb3JlOjppbnRlcm5hbEZvcm1hdFRoZW1lKGludGVybmFs
Rm9ybWF0KTsKICAgICBpbnQgaW50ZXJuYWxGb3JtYXRDb21wb25lbnRDb3VudCA9IG51bWJlck9m
Q29tcG9uZW50c0ZvckludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0KTsKICAgICBpZiAoaW50
ZXJuYWxGb3JtYXRUaGVtZSA9PSBJbnRlcm5hbEZvcm1hdFRoZW1lOjpOb25lIHx8ICFpbnRlcm5h
bEZvcm1hdENvbXBvbmVudENvdW50KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIkluY29ycmVjdCBpbnRl
cm5hbCBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiSW5jb3JyZWN0IGludGVybmFsIGZvcm1h
dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjZGVmaW5lIENIRUNLX0NPTVBPTkVOVF9D
T1VOVCBcCiAgICAgaWYgKG51bWJlck9mQ29tcG9uZW50c0ZvckZvcm1hdChmb3JtYXQpIDwgaW50
ZXJuYWxGb3JtYXRDb21wb25lbnRDb3VudCkgeyBcCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgIk5vdCBlbm91
Z2ggY29tcG9uZW50cyBpbiBmb3JtYXQiKTsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJOb3QgZW5vdWdo
IGNvbXBvbmVudHMgaW4gZm9ybWF0Iik7IFwKICAgICAgICAgcmV0dXJuOyBcCiAgICAgfQogCiAj
ZGVmaW5lIElOVEVSTkFMX0ZPUk1BVF9DSEVDSyh0eXBlTWFjcm8sIHBpeGVsVHlwZU1hY3JvKSBc
Ci0gICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OnR5cGVNYWNybyB8fCBwaXhlbHMu
Z2V0VHlwZSgpICE9IEpTQzo6cGl4ZWxUeXBlTWFjcm8pIHsgXAotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJ0
eXBlIGRvZXMgbm90IG1hdGNoIGludGVybmFsIGZvcm1hdCIpOyBcCisgICAgaWYgKHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnR5cGVNYWNybyB8fCBwaXhlbHMuZ2V0VHlwZSgpICE9
IEpTQzo6cGl4ZWxUeXBlTWFjcm8pIHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJ0eXBlIGRvZXMgbm90
IG1hdGNoIGludGVybmFsIGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVybjsgXAogICAgIH0gXAot
ICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCAmJiBmb3JtYXQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCICYm
IGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkgeyBcCi0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwg
IlVua25vd24gZm9ybWF0Iik7IFwKKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpSRUQgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRyAmJiBmb3JtYXQgIT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQiAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEp
IHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCAicmVhZFBpeGVscyIsICJVbmtub3duIGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVy
bjsgXAogICAgIH0gXAogICAgIENIRUNLX0NPTVBPTkVOVF9DT1VOVAogCiAjZGVmaW5lIElOVEVS
TkFMX0ZPUk1BVF9JTlRFR0VSX0NIRUNLKHR5cGVNYWNybywgcGl4ZWxUeXBlTWFjcm8pIFwKLSAg
ICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6dHlwZU1hY3JvIHx8IHBpeGVscy5nZXRU
eXBlKCkgIT0gSlNDOjpwaXhlbFR5cGVNYWNybykgeyBcCi0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgInR5cGUg
ZG9lcyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKKyAgICBpZiAodHlwZSAhPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZU1hY3JvIHx8IHBpeGVscy5nZXRUeXBlKCkgIT0gSlND
OjpwaXhlbFR5cGVNYWNybykgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgInR5cGUgZG9lcyBub3QgbWF0
Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKICAgICAgICAgcmV0dXJuOyBcCiAgICAgfSBcCi0gICAg
aWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVIgJiYgZm9ybWF0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCX0lOVEVHRVIgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lO
VEVHRVIpIHsgXAotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJVbmtub3duIGZvcm1hdCIpOyBcCisgICAgaWYg
KGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgJiYgZm9ybWF0ICE9IEdy
YXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCX0lOVEVHRVIgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVH
RVIpIHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJVbmtub3duIGZvcm1hdCIpOyBcCiAgICAgICAgIHJl
dHVybjsgXAogICAgIH0gXAogICAgIENIRUNLX0NPTVBPTkVOVF9DT1VOVAogCi0jZGVmaW5lIENB
U0VfUEFDS0VEX0lOVEVSTkFMX0ZPUk1BVF9DSEVDSyhpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3Jt
YXRNYWNybywgdHlwZTBNYWNybywgcGl4ZWxUeXBlME1hY3JvLCB0eXBlMU1hY3JvLCBwaXhlbFR5
cGUxTWFjcm8pIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OmludGVybmFsRm9ybWF0TWFjcm86IFwK
LSAgICBpZiAoISh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlME1hY3JvICYmIHBpeGVs
cy5nZXRUeXBlKCkgPT0gSlNDOjpwaXhlbFR5cGUwTWFjcm8pIFwKLSAgICAgICAgJiYgISh0eXBl
ID09IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlMU1hY3JvICYmIHBpeGVscy5nZXRUeXBlKCkgPT0g
SlNDOjpwaXhlbFR5cGUxTWFjcm8pKSB7IFwKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAidHlwZSBkb2VzIG5v
dCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAorI2RlZmluZSBDQVNFX1BBQ0tFRF9JTlRFUk5B
TF9GT1JNQVRfQ0hFQ0soaW50ZXJuYWxGb3JtYXRNYWNybywgZm9ybWF0TWFjcm8sIHR5cGUwTWFj
cm8sIHBpeGVsVHlwZTBNYWNybywgdHlwZTFNYWNybywgcGl4ZWxUeXBlMU1hY3JvKSBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnRlcm5hbEZvcm1hdE1hY3JvOiBcCisgICAgaWYgKCEo
dHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZTBNYWNybyAmJiBwaXhlbHMuZ2V0
VHlwZSgpID09IEpTQzo6cGl4ZWxUeXBlME1hY3JvKSBcCisgICAgICAgICYmICEodHlwZSA9PSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZTFNYWNybyAmJiBwaXhlbHMuZ2V0VHlwZSgpID09
IEpTQzo6cGl4ZWxUeXBlMU1hY3JvKSkgeyBcCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgInR5cGUgZG9lcyBu
b3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKICAgICAgICAgcmV0dXJuOyBcCiAgICAgfSBc
Ci0gICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6Zm9ybWF0TWFjcm8pIHsgXAot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAicmVhZFBpeGVscyIsICJJbnZhbGlkIGZvcm1hdCIpOyBcCisgICAgaWYgKGZvcm1hdCAhPSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9ybWF0TWFjcm8pIHsgXAorICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIs
ICJJbnZhbGlkIGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVybjsgXAogICAgIH0gXAogICAgIGJy
ZWFrOwogCiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdFRoZW1lKSB7CiAgICAgY2FzZSBJbnRl
cm5hbEZvcm1hdFRoZW1lOjpOb3JtYWxpemVkRml4ZWRQb2ludDoKLSAgICAgICAgaWYgKHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7CisgICAgICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dEdMOjpGTE9BVCkgewogICAgICAgICAgICAgSU5URVJOQUxfRk9STUFUX0NIRUNL
KEZMT0FULCBUeXBlRmxvYXQzMik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJTlRF
Uk5BTF9GT1JNQVRfQ0hFQ0soVU5TSUdORURfQllURSwgVHlwZVVpbnQ4KTsKQEAgLTM1NzUsMTIg
KzM1NzUsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgKICAgICB1bnNpZ25lZCBwYWRkaW5n
ID0gMDsKICAgICBpZiAoIW1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSB7CiAgICAgICAgIEdD
M0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJl
ZCwgJnBhZGRpbmcpOwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKSB7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJS
T1IpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBpeGVscyIs
ICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAocGl4ZWxzLmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVub3Vn
aCBmb3IgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZl
clZpZXcgbm90IGxhcmdlIGVub3VnaCBmb3IgZGltZW5zaW9ucyIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzY1MiwyMiArMzY1MiwyMiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwg
R0MzRGVudW0gZnVuYwogICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmNT
ZXBhcmF0ZSIsIGZ1bmMpKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChmYWNlKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RlJPTlRfQU5EX0JBQ0s6CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYg
PSByZWY7CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwogICAgICAgICBtX3N0
ZW5jaWxGdW5jTWFzayA9IG1hc2s7CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1h
c2s7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZST05UOgogICAgICAgICBtX3N0ZW5jaWxGdW5j
UmVmID0gcmVmOwogICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QkFDSzoKICAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7CiAg
ICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAi
c3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVm
LCBtYXNrKTsKQEAgLTM2ODcsMTggKzM2ODcsMTggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2sK
ICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAg
c3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JB
Q0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJPTlRfQU5EX0JBQ0s6CiAgICAgICAg
IG1fc3RlbmNpbE1hc2sgPSBtYXNrOwogICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZST05UOgogICAgICAgICBtX3N0ZW5jaWxNYXNrID0g
bWFzazsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLOgogICAgICAgICBtX3N0ZW5jaWxNYXNr
QmFjayA9IG1hc2s7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFz
a1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJp
bnZhbGlkIGZhY2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPnN0
ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CkBAIC0zNzQyLDMzICszNzQyLDMzIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlIGRv
bVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZSBkb21T
b3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKICAgICBWZWN0b3I8
dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1h
Z2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdl
LCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNp
b24gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpOwogICAgIGlmICghaW1hZ2VFeHRyYWN0b3Iu
ZXh0cmFjdFN1Y2NlZWRlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9W
QUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0
ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwogICAgIGNvbnN0
IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsK
IAogICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05v
dGhpbmcgJiYgIWZsaXBZKQorICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAmJiBhbHBo
YU9wID09IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcgJiYgIWZsaXBZKQog
ICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwogICAgIGVsc2UgewogICAgICAgICBpZiAo
IW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwg
dHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFjdG9yLmlt
YWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2Uy
RCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2Ug
ZXJyb3IiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlm
IChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7
CiAgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdl
LT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhKTsKICAgICBpZiAobV91bnBhY2tBbGln
bm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICBtX2Nv
bnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCBt
X3VucGFja0FsaWdubWVudCk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRp
b25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUg
c291cmNlVHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCkKQEAgLTM3ODIsNyArMzc4Miw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4
RnVuCiAKICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlKSB7CiAgICAgICAgIGlm
IChmdW5jdGlvblR5cGUgPT0gVGV4SW1hZ2UgJiYgdGV4dHVyZS0+aW1tdXRhYmxlKCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidGV4U3RvcmFnZSgpIGNhbGxlZCBvbiB0aGlzIHRleHR1
cmUgcHJldmlvdXNseSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0ZXhTdG9yYWdlKCkg
Y2FsbGVkIG9uIHRoaXMgdGV4dHVyZSBwcmV2aW91c2x5Iik7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF2YWxpZGF0ZU5QT1RUZXh0dXJlTGV2ZWwo
d2lkdGgsIGhlaWdodCwgbGV2ZWwsIGZ1bmN0aW9uTmFtZSkpCkBAIC0zODAwLDE1ICszODAwLDE1
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlm
IG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCiAgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAw
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRp
bWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJiYWQgZGltZW5zaW9ucyIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICh4b2Zmc2V0ICsg
d2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVp
Z2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIGlmICh0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQs
IGxldmVsKSAhPSBpbnRlcm5hbEZvcm1hdCB8fCAoaXNXZWJHTDEoKSAmJiB0ZXh0dXJlLT5nZXRU
eXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
InR5cGUgYW5kIGZvcm1hdCBkbyBub3QgbWF0Y2ggdGV4dHVyZSIpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTM4MzUsNDEgKzM4MzUs
NDEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUKICAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25t
ZW50ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAg
ICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdO
TUVOVCwgMSk7CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
R0w6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
ZGF0YSk7CiAgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBh
Y2tBbGlnbm1lbnQpOworICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4
dDNEOjpET01Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxw
aGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRJbXBsKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFw
aGljc0NvbnRleHRHTDo6RE9NU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhKQogewogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNl
LCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBo
aWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SW1hZ2VF
eHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9O
RSk7CiAgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0
ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGlt
YWdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9y
bWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOwor
ICAgIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5p
bWFnZUFscGhhT3AoKTsKICAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0
cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CiAgICAgCiAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9
IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUg
JiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
QTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZyAmJiAhZmxpcFkpCisgICAgaWYgKHR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTggJiYgZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3A6OkRvTm90aGluZyAmJiAhZmxpcFkpCiAgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFs
c2U7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGlt
YWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNl
RGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5p
bWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgp
LCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogCiAgICAgdGV4U3ViSW1hZ2UyREJhc2Uo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5o
ZWlnaHQoKSwgZm9ybWF0LCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRh
KCkgOiBpbWFnZVBpeGVsRGF0YSk7CiAKICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdu
bWVudCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBwaXhlbHMpCkBA
IC0zODgzLDcgKzM4ODMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogCiAgICAgR0MzRGVu
dW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxl
dmVsKTsKICAgICBpZiAoIWludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJp
bnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJp
bnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM5MDMsMTggKzM5MDMsMTggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICAg
ICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGNoYW5nZVVu
cGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogCiAgICAgdGV4
U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CiAKICAgICBpZiAoY2hh
bmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CisgICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElH
Tk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIE9wdGlvbmFsPFRleEltYWdlU291cmNlPiYmIHNvdXJjZSkKIHsK
ICAgICBpZiAoIXNvdXJjZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAic291cmNlIGlzIG51bGwi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgInNvdXJjZSBpcyBudWxsIik7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCkBAIC0zOTI4LDcgKzM5MjgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRAogCiAgICAgICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIGlmICghaW50ZXJuYWxGb3JtYXQp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxl
dmVsIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBv
ciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCkBAIC0zOTQx
LDcgKzM5NDEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogCiAgICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKSk7CiAgICAgICAgIGlmIChpbWFnZSkKLSAgICAgICAgICAgIHRleFN1YkltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Uu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAgICAgICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFks
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSwg
WyZdKGNvbnN0IFJlZlB0cjxJbWFnZURhdGE+JiBwaXhlbHMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+
IHsKICAgICAgICAgYXV0byB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3Vi
SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CkBAIC0zOTUwLDcgKzM5NTAsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRAogCiAgICAgICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIGlmICghaW50ZXJu
YWxGb3JtYXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFy
Z2V0IG9yIGxldmVsIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJl
IHRhcmdldCBvciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQog
CkBAIC0zOTYxLDIxICszOTYxLDIxIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAg
IGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwogICAgICAgICAvLyBUaGUgZGF0YSBmcm9tIElt
YWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4LgogICAgICAgICAvLyBObyBjb252ZXJz
aW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBV
U0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVp
cmVkLgotICAgICAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkg
JiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpCiAg
ICAgICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscy5nZXQoKSwgZm9y
bWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEp
KSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAg
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgICAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7CiAKICAgICAgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIGZvcm1h
dCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5k
YXRhKCkpOwogCiAgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdO
TUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0
b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1l
bnQpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSAsIFsmXShjb25zdCBSZWZQdHI8SFRN
TEltYWdlRWxlbWVudD4mIGltYWdlKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CkBAIC00MDAwLDE0
ICs0MDAwLDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAKICAgICAgICAgR0MzRGVudW0g
aW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KTsKICAgICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJE
IiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1h
Z2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgICAgICBy
ZXR1cm4geyB9OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbWFnZUZvclJlbmRlciB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxJ
bWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBpbWFnZUZvclJlbmRl
ci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhv
ZmZzZXQsIHlvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICB0ZXhT
dWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5
cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpJ
bWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJj
ZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVu
dD4mIGNhbnZhcykgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQpAQCAtNDAyNCw3ICs0MDI0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0QKIAogICAgICAgICBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICBpZiAoIWludGVybmFsRm9ybWF0
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBs
ZXZlbCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQg
b3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIApAQCAtNDAz
NSw3ICs0MDM1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKICAgICAgICAgaWYgKGltYWdl
RGF0YSkKICAgICAgICAgICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgZm9ybWF0LCB0eXBlLCBUZXhJbWFnZVNvdXJjZShpbWFnZURhdGEuZ2V0KCkpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3Bp
ZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpDYW52YXMsIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogI2lmIEVOQUJMRShWSURFTykKQEAgLTQwNTQsNyArNDA1NCw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNECiAKICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJl
LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgaWYgKCFpbnRlcm5h
bEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJn
ZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUg
dGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAK
QEAgLTQwNjQsNyArNDA2NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSk7CisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4
dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICNlbmRpZgpAQCAtNDA3NiwzNiAr
NDA3NiwzNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIHR5cGUsIE9wdGlvbmFsPEpTQzo6VHlwZWRBcnJheVR5cGU+IGFycmF5VHlw
ZSkKIHsKICNkZWZpbmUgVFlQRV9WQUxJREFUSU9OX0NBU0UoYXJyYXlUeXBlTWFjcm8pIGlmIChh
cnJheVR5cGUgJiYgYXJyYXlUeXBlLnZhbHVlKCkgIT0gSlNDOjphcnJheVR5cGVNYWNybykgeyBc
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgIiAjYXJyYXlU
eXBlTWFjcm8pOyBcCisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBu
b3QgIiAjYXJyYXlUeXBlTWFjcm8pOyBcCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKICAg
ICAgICAgfSBcCiAgICAgICAgIGJyZWFrOwogCiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFOgogICAgICAgICBUWVBFX1ZBTElEQVRJT05fQ0FTRShUeXBl
VWludDgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QllURToKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZUlu
dDgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9T
SE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JU
XzVfNV81XzE6CiAgICAgICAgIFRZUEVfVkFMSURBVElPTl9DQVNFKFR5cGVVaW50MTYpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNIT1JUOgogICAgICAgICBUWVBFX1ZBTElEQVRJT05fQ0FTRShUeXBlSW50MTYpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVDoKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZVVpbnQzMik7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OklOVDoKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZUludDMyKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKICAgICAgICAg
VFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZUZsb2F0MzIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKICAgICAgICAgVFlQRV9WQUxJ
REFUSU9OX0NBU0UoVHlwZVVpbnQxNik7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC00MTIwLDcgKzQxMjAsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QwogICAgIGlmICghcGl4ZWxzKSB7CiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxs
b3dlZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4
ZWxzIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtNDEzMywxMiArNDEzMywxMiBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQwogICAgIAogICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXNSZXF1aXJlZDsKICAgICBHQzNEZW51
bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBl
LCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwg
bnVsbHB0cik7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikg
eworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVy
ZSBkaW1lbnNpb25zIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHBp
eGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciBy
ZXF1ZXN0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7
CkBAIC00MTU4LDQyICs0MTU4LDQyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICAKICAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgPSBwb3coMi4wLCBtX21h
eFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfMkQ6CiAgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9y
TGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAg
IGlmIChmdW5jdGlvblR5cGUgIT0gVGV4U3ViSW1hZ2UgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAvLyBObyBuZWVkIHRvIGNo
ZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1hZ2Ugd2lkdGggPT0gaGVpZ2h0LgogICAgICAgICAv
LyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxsIGJlIGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zm
c2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgogICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJl
U2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91
dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFy
Z2V0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYgKGJvcmRl
cikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYm9yZGVyICE9IDAiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImJvcmRlciAhPSAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC00
MjAzLDI3ICs0MjAzLDI3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hCiBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVDoKICAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlICYmIGlzV2ViR0wxKCkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxl
ZCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFi
bGVkIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGxldmVsID4gMCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAg
Zm9yIGRlcHRoIGZvcm1hdHMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgbXVz
dCBiZSAwIGZvciBkZXB0aCBmb3JtYXRzIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhU
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6U1JHQl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhU
OgogICAgICAgICBpZiAoIW1fZXh0c1JHQikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAic1JHQiB0
ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgInNSR0Ig
dGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00MjMxLDQ5ICs0MjMxLDQ5IEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShj
b25zdCBjaGFyKiBmdW5jdGlvCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgaWYgKCFpc1dl
YkdMMSgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RzoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVI6Ci0gICAg
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUjoKLSAgICAgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAgICAgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJFRF9JTlRFR0VSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6
CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVI6CisgICAgICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgZm9ybWF0Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UKICNlbmRpZgogICAgICAgICB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81
XzVfMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RkxPQVQ6CiAgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQgJiYgaXNXZWJHTDEoKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SEFMRl9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FU
X09FUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOgogICAgICAgICBpZiAoIW1fb2VzVGV4
dHVyZUhhbGZGbG9hdCAmJiBpc1dlYkdMMSgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8y
NF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgogICAgICAg
ICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUgJiYgaXNXZWJHTDEoKSkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC00MjgxLDEyMyArNDI4MSwxMjMgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNo
YXIqIGZ1bmN0aW8KICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBpZiAoIWlzV2ViR0wxKCkp
IHsKICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QllURToKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNI
T1JUOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgotICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgot
ICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEwRl8xMUZf
MTFGX1JFVjoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VF81XzlfOV85X1JFVjoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkJZVEU6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoK
KyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKKyAgICAgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9S
RVY6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfNV85
XzlfOV9SRVY6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF8zMl9V
TlNJR05FRF9JTlRfMjRfOF9SRVY6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBl
Iik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZQogI2VuZGlmCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVy
ZSB0eXBlIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8v
IFZlcmlmeSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCBh
bmQgdHlwZSBpcyBzdXBwb3J0ZWQuCi0jZGVmaW5lIElOVEVSTkFMX0ZPUk1BVF9DQVNFKGludGVy
bmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3JvLCB0eXBlMCwgdHlwZTEsIHR5cGUyLCB0eXBlMywg
dHlwZTQpIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OmludGVybmFsRm9ybWF0TWFjcm86IFwKLSAg
ICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpmb3JtYXRNYWNybykgeyBcCi0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQgZm9yIGludGVybmFsZm9ybWF0Iik7IFwK
KyNkZWZpbmUgSU5URVJOQUxfRk9STUFUX0NBU0UoaW50ZXJuYWxGb3JtYXRNYWNybywgZm9ybWF0
TWFjcm8sIHR5cGUwLCB0eXBlMSwgdHlwZTIsIHR5cGUzLCB0eXBlNCkgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aW50ZXJuYWxGb3JtYXRNYWNybzogXAorICAgIGlmIChmb3JtYXQgIT0g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcm1hdE1hY3JvKSB7IFwKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGZvcm1hdCBmb3IgaW50ZXJuYWxmb3JtYXQiKTsgXAogICAgICAgICBy
ZXR1cm4gZmFsc2U7IFwKICAgICB9IFwKICAgICBpZiAodHlwZSAhPSB0eXBlMCAmJiB0eXBlICE9
IHR5cGUxICYmIHR5cGUgIT0gdHlwZTIgJiYgdHlwZSAhPSB0eXBlMyAmJiB0eXBlICE9IHR5cGU0
KSB7IFwKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRf
T0VTIHx8ICh0eXBlMCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAmJiB0eXBlMSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAmJiB0eXBlMiAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6SEFMRl9GTE9BVCAmJiB0eXBlMyAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9B
VCkpIHsgXAotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGludGVy
bmFsZm9ybWF0Iik7IFwKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhB
TEZfRkxPQVRfT0VTIHx8ICh0eXBlMCAhPSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAm
JiB0eXBlMSAhPSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAmJiB0eXBlMiAhPSBHcmFw
aGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAmJiB0eXBlMyAhPSBHcmFwaGljc0NvbnRleHRHTDo6
SEFMRl9GTE9BVCkpIHsgXAorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUg
Zm9yIGludGVybmFsZm9ybWF0Iik7IFwKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgXAogICAg
ICAgICB9IFwKICAgICB9IFwKICAgICBicmVhazsKICAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0
KSB7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCICAgICAgICAgICAgICAgLCBSR0IgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNSAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoUkdCQSAgICAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF80XzRfNF80LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNV81XzVfMSAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoTFVNSU5BTkNFX0FM
UEhBICAgLCBMVU1JTkFOQ0VfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoTFVNSU5BTkNFICAgICAgICAgLCBMVU1JTkFOQ0UgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoQUxQSEEgICAgICAgICAgICAgLCBBTFBIQSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjggICAgICAgICAgICAgICAg
LCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoUjhfU05PUk0gICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjE2
RiAgICAgICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjMyRiAgICAgICAgICAgICAgLCBSRUQg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUjhVSSAgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjhJICAgICAg
ICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjE2VUkgICAgICAgICAgICAgLCBSRURfSU5URUdF
UiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUjE2SSAgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjMyVUkgICAgICAgICAg
ICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUjMySSAgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
Ukc4ICAgICAgICAgICAgICAgLCBSRyAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkc4X1NOT1JNICAgICAgICAgLCBS
RyAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoUkcxNkYgICAgICAgICAgICAgLCBSRyAgICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkczMkYg
ICAgICAgICAgICAgLCBSRyAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkc4VUkgICAgICAgICAgICAgLCBSR19JTlRF
R0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoUkc4SSAgICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkcxNlVJICAgICAg
ICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VCAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkcxNkkgICAgICAgICAgICAgLCBSR19JTlRFR0VSICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUkczMlVJICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkczMkkgICAgICAgICAgICAg
LCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoUkdCOCAgICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoU1JH
QjggICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCNTY1ICAgICAgICAgICAgLCBSR0Ig
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNSAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUkdCOF9TTk9STSAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjExRl9HMTFG
X0IxMEYgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9J
TlRfMTBGXzExRl8xMUZfUkVWICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOV9FNSAgICAgICAgICAgLCBSR0IgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUkdCMTZGICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVCAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMzJGICAgICAgICAg
ICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOFVJICAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
UkdCOEkgICAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpC
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTZVSSAgICAgICAgICAgLCBS
R0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoUkdCMTZJICAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMzJV
SSAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMzJJICAgICAgICAgICAgLCBSR0JfSU5U
RUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoUkdCQTggICAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoU1JHQjhfQUxQSEE4
ICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQThfU05PUk0gICAgICAgLCBSR0JBICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUkdCNV9BMSAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzVfNV8xLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTQgICAgICAgICAgICAg
LCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80LCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoUkdCMTBfQTIgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdC
QTE2RiAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTMyRiAgICAgICAgICAgLCBSR0JB
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUkdCQThVSSAgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQThJICAg
ICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTBfQTJVSSAgICAgICAgLCBSR0JBX0lOVEVH
RVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUkdCQTE2VUkgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTE2SSAgICAgICAg
ICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTMySSAgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
UkdCQTMyVUkgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhfQ09NUE9ORU5UICAgLCBE
RVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoREVQVEhfQ09NUE9ORU5UMTYgLCBERVBUSF9DT01QT05FTlQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhf
Q09NUE9ORU5UMjQgLCBERVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhfQ09NUE9ORU5UMzJGLCBERVBUSF9D
T01QT05FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoREVQVEhfU1RFTkNJTCAgICAgLCBERVBUSF9TVEVOQ0lMICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEgyNF9TVEVO
Q0lMOCAgLCBERVBUSF9TVEVOQ0lMICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MjRfOCAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEgzMkZfU1RFTkNJTDggLCBERVBUSF9TVEVOQ0lM
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OlNSR0JfRVhUOgorICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQiAgICAgICAgICAgICAgICwg
UkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV82XzUgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpGTE9BVCAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHQkEgICAgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX1NIT1JUXzVfNV81XzEgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FULCBH
cmFwaGljc0NvbnRleHRHTDo6RkxPQVQpOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKExVTUlO
QU5DRV9BTFBIQSAgICwgTFVNSU5BTkNFX0FMUEhBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKExVTUlOQU5DRSAgICAgICAgICwgTFVNSU5B
TkNFICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKEFMUEhBICAgICAgICAgICAgICwgQUxQSEEgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4ICAgICAgICAg
ICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4X1NOT1JNICAgICAgICAgICwgUkVEICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFIxNkYgICAgICAgICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxP
QVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMkYgICAgICAgICAgICAg
ICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFI4VUkgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4
SSAgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllU
RSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIxNlVJICAgICAgICAgICAgICwgUkVE
X0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFIxNkkgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMlVJICAg
ICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
SU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMkkgICAgICAgICAgICAgICwgUkVEX0lOVEVH
RVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHOCAgICAgICAgICAgICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOF9TTk9STSAgICAg
ICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZGICAgICAgICAgICAgICwgUkcgICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHMzJGICAgICAgICAgICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOFVJICAgICAgICAgICAgICwg
UkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHOEkgICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZV
SSAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZJICAgICAgICAgICAgICwgUkdfSU5U
RUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHMzJVSSAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMzJJICAgICAg
ICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SU5UICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjggICAgICAgICAgICAgICwgUkdCICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFNSR0I4ICAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjU2NSAgICAgICAgICAg
ICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV82XzUgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhfU05PUk0gICAgICAgICwgUkdCICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIx
MUZfRzExRl9CMTBGICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9B
VCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjlfRTUgICAgICAgICAgICwgUkdC
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVW
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHQjE2RiAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjMyRiAg
ICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhVSSAgICAgICAgICAgICwgUkdCX0lOVEVH
RVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHQjhJICAgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2VUkgICAgICAg
ICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2SSAgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHQjMyVUkgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjMySSAgICAgICAgICAgICwg
UkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SU5UICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHQkE4ICAgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFNSR0I4
X0FMUEhBOCAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4X1NOT1JNICAgICAgICwgUkdCQSAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHQjVfQTEgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VF8yXzEwXzEwXzEwX1JFViAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE0ICAgICAg
ICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80
XzRfNCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjEwX0EyICAgICAgICAgICwgUkdCQSAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFJHQkExNkYgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxP
QVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEzMkYgICAgICAgICAg
ICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4VUkgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJH
QkE4SSAgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllU
RSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjEwX0EyVUkgICAgICAgICwgUkdC
QV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBf
UkVWICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHQkExNlVJICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkExNkkg
ICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEzMkkgICAgICAgICAgICwgUkdCQV9JTlRF
R0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHQkEzMlVJICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVO
VCAgICwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQg
ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVDE2ICwgREVQVEhfQ09NUE9ORU5U
LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KERFUFRIX0NPTVBPTkVOVDI0ICwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVDMyRiwg
REVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKERFUFRIX1NURU5DSUwgICAgICwgREVQVEhfU1RFTkNJTCAgLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRI
MjRfU1RFTkNJTDggICwgREVQVEhfU1RFTkNJTCAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfSU5UXzI0XzggICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIMzJGX1NURU5DSUw4ICwgREVQVEhf
U1RFTkNJTCAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0Xzhf
UkVWLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpTUkdCX0VYVDoKICAgICAgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbEZvcm1hdCkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgYW5kIGludGVybmFsZm9ybWF0IG11
c3QgbWF0Y2giKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0IGFuZCBpbnRlcm5h
bGZvcm1hdCBtdXN0IG1hdGNoIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVMgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9B
VCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGludGVybmFs
IGZvcm1hdCIpOworICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfQllURSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZf
NSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUyAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpI
QUxGX0ZMT0FUKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3Ig
aW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgor
ICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKICAgICAgICAgaWYgKGZvcm1h
dCAhPSBpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQg
YW5kIGludGVybmFsZm9ybWF0IG11c3QgbWF0Y2giKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBtdXN0IG1hdGNoIik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNF80XzRfNCAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF81XzVfNV8xICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICYmIHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkhBTEZfRkxPQVQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0eXBlIGZvciBpbnRlcm5hbCBmb3JtYXQiKTsKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNCAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJ
R05FRF9TSE9SVF81XzVfNV8xICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTICYmIHR5cGUgIT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBpbnRlcm5hbCBmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIlVua25vd24gaW50ZXJuYWwgZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiVW5rbm93biBpbnRlcm5hbCBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICN1bmRlZiBJTlRFUk5BTF9GT1JNQVRfQ0FTRQpAQCAtNDQyOCw3ICs0NDI4LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEcKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJz
KCJjb3B5VGV4SW1hZ2UyRCIsIENvcHlUZXhJbWFnZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxGb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRl
cnMoImNvcHlUZXhJbWFnZTJEIiwgQ29weVRleEltYWdlLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbEZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxp
ZGF0ZVNldHRhYmxlVGV4SW50ZXJuYWxGb3JtYXQoImNvcHlUZXhJbWFnZTJEIiwgaW50ZXJuYWxG
b3JtYXQpKQogICAgICAgICByZXR1cm47CkBAIC00NDM2LDE2ICs0NDM2LDE2IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHCiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
IWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxG
b3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5
VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
TiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkg
JiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
b3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4
SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dEdM
KCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgcmVh
c29uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwpA
QCAtNDQ1NCw3ICs0NDU0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEcKICAgICBHQzNEc2l6
ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwogICAgIGlmIChjbGlwMkQoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZm
ZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVk
SGVpZ2h0KSkgewogICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAg
ICAgICAgIGludGVybmFsRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
bV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQsIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7CiAgICAgICAgIGlm
IChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CiAgICAgICAgICAgICBt
X2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwg
Y2xpcHBlZFkgLSB5LAogICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBl
ZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKQEAgLTQ0NjMsMjEgKzQ0NjMsMjEgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEcKICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKIAog
ICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9m
IHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0JZVEUpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JHQkZvcm1hdChHQzNEZW51bSBpbnRlcm5h
bEZvcm1hdCkKIHsKLSAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQgotICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQQotICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
OAotICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg7
CisgICAgcmV0dXJuIGludGVybmFsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0IKKyAg
ICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEKKyAgICAg
ICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQjgKKyAgICAgICAg
fHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgT3B0aW9uYWw8VGV4SW1hZ2VTb3VyY2U+IHNvdXJj
ZSkKIHsKICAgICBpZiAoIXNvdXJjZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAic291cmNlIGlzIG51
bGwiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInNvdXJjZSBpcyBudWxsIik7CiAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCkBAIC00NDk2LDggKzQ0OTYsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludAogICAgICAgICAvLyBGSVhNRTogcmVzdHJpY3Rpb24gb2YgKFJHQiB8fCBSR0JBKS9VTlNJ
R05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hlbgogICAgICAgICAvLyBJbWFnZUJ1ZmZlcjo6
Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25h
bC4KICAgICAgICAgaWYgKHRleHR1cmUKLSAgICAgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCi0g
ICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7
CisgICAgICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgfHwgZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBKQorICAgICAgICAgICAgJiYgdHlwZSA9PSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0
dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxl
dmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQp
IHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdl
dCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CkBAIC00NTEwLDcgKzQ1MTAsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludAogICAgICAgICAvLyBOb3JtYWwgcHVyZSBTVyBwYXRoLgogICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RD
b3B5SW1hZ2VNb2RlKCkpOwogICAgICAgICBpZiAoaW1hZ2UpCi0gICAgICAgICAgICB0ZXhJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgICAgICB0ZXhJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSwgWyZd
KGNvbnN0IFJlZlB0cjxJbWFnZURhdGE+JiBwaXhlbHMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsK
ICAgICAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5j
KCJ0ZXhJbWFnZTJEIiwgVGV4SW1hZ2UsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9y
bWF0LCB0eXBlLCAwLCAwKSkKQEAgLTQ1MTksMTkgKzQ1MTksMTkgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQKICAgICAgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CiAgICAgICAgIC8v
IFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCiAgICAg
ICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBS
R0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBv
cGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKQorICAgICAgICBp
ZiAoIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfQllURSkKICAgICAgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEo
cGl4ZWxzLmdldCgpLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdl
IGRhdGEiKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICAgICAgbV9jb250ZXh0LT5w
aXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tf
QUxJR05NRU5ULCAxKTsKICAgICAgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRh
dGEoKSk7CiAgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4mIGltYWdlKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CiAgICAgICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCkBAIC00NTUyLDcgKzQ1NTIsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludAogICAgICAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZv
clJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCiAgICAgICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhKTsKKyAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8
SFRNTENhbnZhc0VsZW1lbnQ+JiBjYW52YXMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKICAgICAg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKQEAgLTQ1NzIsOCArNDU3Miw4IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBvZiAo
UkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCiAgICAgICAg
IC8vIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRpb25zIGFy
ZSBmdWxseSBmdW5jdGlvbmFsLgogICAgICAgICBpZiAodGV4dHVyZQotICAgICAgICAgICAgJiYg
KGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSkKLSAgICAgICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEpCisgICAgICAg
ICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSB7CiAgICAg
ICAgICAgICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1
cmVJbnRlcm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsK
ICAgICAgICAgICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsK
QEAgLTQ1ODgsNyArNDU4OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIGlm
IChpbWFnZURhdGEpCiAgICAgICAgICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIFRleEltYWdlU291cmNlKGltYWdlRGF0YS5nZXQoKSkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2Uo
KSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6Q2FudmFzLCBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICNp
ZiBFTkFCTEUoVklERU8pCkBAIC00NjA4LDkgKzQ2MDgsOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludAogICAgICAgICAvLyBGSVhNRTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUg
dGhhdCBmb3JtYXQgc2hvdWQgYmUgUkdCIG9yIFJHQkEsCiAgICAgICAgIC8vIHR5cGUgc2hvdWxk
IGJlIFVOU0lHTkVEX0JZVEUgYW5kIGxldmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlmdGVk
IGluIHRoZSBmdXR1cmUuCiAgICAgICAgIGF1dG8gdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgICAgICBpZiAoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUKLSAgICAgICAgICAgICYm
IChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpCi0gICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCisgICAgICAgIGlmIChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8y
RCA9PSB0YXJnZXQgJiYgdGV4dHVyZQorICAgICAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSkKKyAg
ICAgICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUKICAg
ICAgICAgICAgICYmICFsZXZlbCkgewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxG
b3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAg
ICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJl
LT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7CkBAIC00NjI1LDcgKzQ2MjUsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludAogICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFt
ZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsK
ICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHRl
eEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICNl
bmRpZgpAQCAtNDY0MCw3ICs0NjQwLDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBz
aXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9n
ZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwogICAgIGlmICghYnVmKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZ
LCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQg
b2YgbWVtb3J5Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtNDY1Nyw3
ICs0NjU3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRl
b0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWQKICAgICBJbnRTaXplIHNpemUodmlk
ZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCkpOwogICAgIEltYWdlQnVmZmVy
KiBidWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CiAgICAgaWYg
KCFidWYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9V
VF9PRl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJbWFn
ZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OwpAQCAtNDY3NiwyNSArNDY3NiwyNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQwogICAgIGlm
ICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfTUFHX0ZJTFRFUjoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1Q6Ci0gICAgICAgIGlmICgoaXNGbG9hdCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JF
RF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpCi0gICAgICAg
ICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYm
IHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfV1JBUF9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JB
UF9UOgorICAgICAgICBpZiAoKGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHRHTDo6TUlSUk9SRURf
UkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVQRUFUKQorICAgICAgICAg
ICAgfHwgKCFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9f
RURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok1JUlJPUkVEX1JFUEVBVCAmJiBw
YXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFUEVBVCkpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5J
U09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljCiAgICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInRleFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc0Zsb2F0KSB7CkBAIC00NzIyLDcgKzQ3
MjIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5p
Zm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVu
aWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00NzM1LDcgKzQ3MzUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3Ig
Y3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yZiIsICJsb2NhdGlvbiBub3QgZm9y
IGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NzQ4LDcg
KzQ3NDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
dW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
InVuaWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00NzYxLDcgKzQ3NjEsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRmIiwgImxvY2F0aW9uIG5vdCBm
b3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3Qg
Zm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00Nzc0
LDEyICs0Nzc0LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFp
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTFpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6
ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgaWYg
KChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVSXzJEIHx8IGxv
Y2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+
PSAoaW50KW1fdGV4dHVyZVVuaXRzLnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlk
IHRleHR1cmUgdW5pdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NzkyLDcgKzQ3
OTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaShjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5p
Zm9ybTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVu
aWZvcm0yaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC00ODA1LDcgKzQ4MDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3Ig
Y3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9y
IGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00ODE4LDcg
KzQ4MTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
dW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
InVuaWZvcm00aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00ODY1LDExICs0ODY1LDExIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sCiAgICAgYXV0byBkYXRhID0gdi5kYXRhKCk7CiAgICAgYXV0byBsZW5ndGggPSB2
Lmxlbmd0aCgpOwogCi0gICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUl9DVUJFKSB7CisgICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6U0FNUExFUl9DVUJFKSB7CiAgICAgICAgIGZvciAoYXV0byBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICBpZiAoZGF0YVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4
dHVyZVVuaXRzLnNpemUoKSkpIHsKICAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJl
IHVuaXQgc2l6ZT0lenUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1
cmVVbml0cy5zaXplKCksIGksIGRhdGFbaV0sIGxvY2F0aW9uLT50eXBlKCkpOwotICAgICAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidW5p
Zm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDkzMSwxMiArNDkzMSwxMiBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtKQogICAgIGlmIChkZWxldGVkKQogICAgICAgICBwcm9ncmFtID0gMDsKICAgICBpZiAocHJv
Z3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVzZVByb2dyYW0i
LCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidXNlUHJvZ3JhbSIsICJwcm9ncmFtIG5v
dCB2YWxpZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2N1cnJlbnRQcm9n
cmFtICE9IHByb2dyYW0pIHsKICAgICAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAg
ICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOwor
ICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHRH
TCgpKTsKICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CiAgICAgICAgIG1fY29u
dGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwogICAgICAgICBpZiAocHJv
Z3JhbSkKQEAgLTQ5OTYsNDQgKzQ5OTYsNDQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUKICAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkJZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
TE9BVDoKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50
ZXIiLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQg
dHlwZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpbmRleCA+PSBtX21heFZl
cnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBvZiBy
YW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJp
YlBvaW50ZXIiLCAiYmFkIHNpemUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
c3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwg
ImJhZCBzdHJpZGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBzdHJpZGUiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBv
aW50ZXIiLCAiYmFkIG9mZnNldCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIG9m
ZnNldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghbV9ib3VuZEFycmF5QnVm
ZmVyICYmIG9mZnNldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5k
IEFSUkFZX0JVRkZFUiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5k
IEFSUkFZX0JVRkZFUiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIERldGVybWlu
ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVu
IHRoZSBvZmZzZXQsIHNpemUsIHR5cGUgYW5kIHN0cmlkZQogICAgIGF1dG8gdHlwZVNpemUgPSBz
aXplSW5CeXRlcyh0eXBlKTsKICAgICBpZiAoIXR5cGVTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQ
b2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZh
bGlkIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoKHN0cmlkZSAlIHR5
cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlkZSBvciBvZmZzZXQgbm90IHZh
bGlkIGZvciB0eXBlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9y
IG9mZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOwpAQCAtNTA1NCw3
ICs1MDU0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpmb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxv
c3RDb250ZXh0TW9kZSBtb2RlKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBhbHJlYWR5IGxvc3QiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBhbHJlYWR5IGxvc3QiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtNTA4NiwxMSArNTA4NiwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0
QwogICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcu
IFNvLCBsb29wIGEgcmVhc29uYWJseQogICAgIC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBj
bGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpCisgICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250
ZXh0KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOwotICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3Nl
Q29udGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKKyAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAi
Y29udGV4dCBsb3N0IiwgZGlzcGxheSk7CiAKICAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlv
biB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCiAgICAgLy8gZGlz
cGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgpAQCAtNTEwNCwxMyAr
NTEwNCwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omxvc2VDb250ZXh0SW1w
bChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Qwogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpmb3JjZVJlc3RvcmVDb250ZXh0KCkKIHsKICAgICBpZiAoIWlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBs
b3N0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgewogICAg
ICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCi0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2Vk
Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5v
dCBhbGxvd2VkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUxNzcsNyArNTE3Nyw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RvcCgpCiB7CiAgICAgaWYgKCFp
c0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewogICAgICAg
ICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKLSAgICAgICAgZGVzdHJv
eUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRHTCgp
OwogICAgIH0KIH0KIApAQCAtNTIwNSw3ICs1MjA1LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQogCiBWZWN0b3I8
Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lKQogewotICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfV1JJVEVNQVNLKSB7CisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dEdMOjpD
T0xPUl9XUklURU1BU0spIHsKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9CkBAIC01MjUxLDEzICs1MjUxLDEzIEBAIFJlZlB0cjxGbG9hdDMyQXJy
YXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRl
cihHQzNECiAgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMSUFTRURf
UE9JTlRfU0laRV9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTElBU0VEX0xJ
TkVfV0lEVEhfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfUkFOR0U6
CiAgICAgICAgIGxlbmd0aCA9IDI7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EX0NPTE9SOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0NPTE9SOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0NMRUFSX1ZBTFVFOgogICAgICAgICBs
ZW5ndGggPSA0OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNTI3MiwxMSArNTI3
MiwxMSBAQCBSZWZQdHI8SW50MzJBcnJheT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bQogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYocG5hbWUsIHZhbHVlKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIHN3aXRjaCAo
cG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVklFV1BPUlRfRElNUzoKICAgICAgICAg
bGVuZ3RoID0gMjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9CT1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9CT1g6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VklFV1BPUlQ6CiAgICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CkBAIC01MzA2LDEwICs1MzA2LDEwIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtCiAgICAgICAgIHVzZXNBdExlYXN0T25lQmxhY2tUZXh0dXJlID0gdHJ1ZTsKIAogICAgICAg
ICBpZiAoYmFkVGV4dHVyZSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoYmFkVGV4dHVyZSArIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoYmFkVGV4dHVy
ZSArIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCk7CiAgICAgICAgICAgICByZXNldEFjdGl2
ZVVuaXQgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKHJlc2V0QWN0aXZlVW5pdCkgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGJhZFRleHR1cmUgKyBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOworICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJl
KGJhZFRleHR1cmUgKyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTApOwogICAgICAgICAgICAg
cmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPFdlYkdM
VGV4dHVyZT4gdGV4MkQ7CkBAIC01MzI1LDEyICs1MzI1LDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtCiAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gdGV4dHVyZVVuaXQudGV4dHVyZUN1YmVN
YXBCaW5kaW5nLmdldCgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChuZWVkc1RvVXNlQmxhY2sy
RFRleHR1cmUpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQs
IG9iamVjdE9yWmVybyh0ZXgyRC5nZXQoKSkpOwogICAgICAgICBpZiAobmVlZHNUb1VzZUJsYWNr
M0RUZXh0dXJlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3JaZXJvKHRleEN1YmVNYXAuZ2V0KCkp
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwLmdldCgpKSk7CiAgICAg
fQogICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCi0gICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4
dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0ICsgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsK
KyAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQgKyBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTApOwogCiAgICAgZm9yICh1bnNpZ25lZCByZW5kZXJh
YmxlIDogbm9Mb25nZXJVbnJlbmRlcmFibGUpCiAgICAgICAgIG1fdW5yZW5kZXJhYmxlVGV4dHVy
ZVVuaXRzLnJlbW92ZShyZW5kZXJhYmxlKTsKQEAgLTUzNDIsMzEgKzUzNDIsMzEgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEo
KQogewogICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9OwogICAgIG1f
YmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1cmUyRC0+b2Jq
ZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVj
dCgpKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJs
YWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhU
VVJFXzJELCAwKTsKICAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBjcmVhdGVUZXh0dXJlKCk7
Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwot
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ksIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7CisgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1
cmVDdWJlTWFwLT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwg
MCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgYmxhY2spOwor
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgMSwgMSwKKyAgICAgICAgMCwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRF
LCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV9DVUJFX01BUCwgMCk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChHQzNEZW51
bSB0ZXhJbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCiB7Ci0gICAg
YXV0byBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQodGV4
SW50ZXJuYWxGb3JtYXQpOwotICAgIGF1dG8gaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRD
aGFubmVsQml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICBhdXRvIG5lZWQgPSBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5h
bEZvcm1hdCk7CisgICAgYXV0byBoYXZlID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENo
YW5uZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOwogICAgIHJldHVybiAobmVlZCAm
IGhhdmUpID09IG5lZWQ7CiB9CiAKQEAgLTUzNzUsOCArNTM3NSw4IEBAIEdDM0RlbnVtIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpCiAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZl
ckZvcm1hdCgpOwogICAgIGlmIChtX2F0dHJpYnV0ZXMuYWxwaGEpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOworICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHRHTDo6UkdCOwogfQogCiBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKQEAgLTUzOTcsMzAgKzUzOTcsMzAgQEAgUmVm
UHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXh0
dXJlQmluZGluZyhjb25zdCBjaGEKIHsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJl
OwogICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEOgogICAgICAg
ICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJE
QmluZGluZzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgIGlmICghdXNlU2l4
RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUg
dGFyZ2V0Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICB0ZXh0dXJl
ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5k
aW5nOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVA6
CiAgICAgICAgIGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0YXJnZXQiKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CiAgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0
XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKQEAgLTU0MjgsNyArNTQyOCw3IEBAIFJlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhCiAgICAg
ICAgIG1fdW5yZW5kZXJhYmxlVGV4dHVyZVVuaXRzLmFkZChtX2FjdGl2ZVRleHR1cmVVbml0KTsK
IAogICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyB0ZXh0dXJlIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOwogICAgIHJldHVybiB0ZXh0dXJl
OwogfQogCkBAIC01NDM2LDcgKzU0MzYsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAogewog
ICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGggPSAyNTY7CiAgICAgaWYg
KHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibG9jYXRp
b24gbGVuZ3RoID4gMjU2Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CkBAIC01NDQ1LDcgKzU0NDUsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAog
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkKIHsKICAgICBpZiAoeCA8IDAgfHwg
eSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJzaXplIDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0
cnVlOwpAQCAtNTQ1NSw3ICs1NDU1LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFMKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAg
IGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgInN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90
IEFTQ0lJIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBA
IC01NDY1LDI0ICs1NDY1LDI0IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTCiBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQogewogICAgIGlmIChs
ZXZlbCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibGV2ZWwgPCAwIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgc3dp
dGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQ6CiAgICAgICAgIGlmIChsZXZl
bCA+PSBtX21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91
dCBvZiByYW5nZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgogICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVs
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC01NTExLDcgKzU1MTEsNyBAQCBz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJ5dGVzRm9yQVNUQyhHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVm
ZmVyVmlldyYgcGl4ZWxzKQogewogICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC01NTM1LDE2ICs1NTM1LDE2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3RpCiAgICAgICAg
IEJsb2NrUGFyYW1ldGVycyB7IDEyLCAxMCwga0FTVENCbG9ja1NpemUgfSwKICAgICAgICAgQmxv
Y2tQYXJhbWV0ZXJzIHsgMTIsIDEyLCBrQVNUQ0Jsb2NrU2l6ZSB9CiAgICAgfTsKLSAgICBjb25z
dCBHQzNEZW51bSBBU1RDRW51bVN0YXJ0UkdCQSA9IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX0FTVENfNHg0X0tIUjsKLSAgICBjb25zdCBHQzNEZW51bSBBU1RDRW51bVN0YXJ0U1JHQjgg
PSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjsKKyAg
ICBjb25zdCBHQzNEZW51bSBBU1RDRW51bVN0YXJ0UkdCQSA9IEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfNHg0X0tIUjsKKyAgICBjb25zdCBHQzNEZW51bSBBU1RDRW51bVN0YXJ0
U1JHQjggPSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tI
UjsKIAogICAgIGNvbnN0IGludCBrRUFDQW5kRVRDMkJsb2NrU2l6ZSA9IDQ7CiAKICAgICBzd2l0
Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCX0FNRDoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RVRDMV9SR0I4X09FUzogeworICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9BVENfUkdCX0FNRDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6RVRDMV9S
R0I4X09FUzogewogICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CiAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CiAgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQg
PSA0OwpAQCAtNTU1MywxMCArNTU1MywxMCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aQogICAg
ICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtC
bG9ja1NpemU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRDoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9B
TUQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gMTY7CiAg
ICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwpAQCAtNTU2Niw4ICs1NTY2LDgg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
dW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGkKICAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBu
dW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZS
VENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BW
UlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ180QlBQVjFfSU1HOgogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2Nr
U2l6ZSA9IDg7CiAgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OwpAQCAtNTU3
NSw4ICs1NTc1LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNv
bXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGkKICAgICAgICAgICAgIGJ5dGVz
UmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdo
dCwga0Jsb2NrSGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJC
UFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18y
QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18y
QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUFZSVENf
MkJQUFYxX0lNRzoKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUg
PSA4OwogICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gMTY7CkBAIC01NTg0LDc1
ICs1NTg0LDc1IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21w
cmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3RpCiAgICAgICAgICAgICBieXRlc1Jl
cXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQs
IGtCbG9ja0hlaWdodCkgKiAyICsgNykgLyBrQmxvY2tTaXplOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRf
S0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hS
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ181eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ182eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JH
QkFfQVNUQ182eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFf
QVNUQ184eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNU
Q184eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184
eDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1
X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9L
SFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hS
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI6
CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSOgog
ICAgICAgICBieXRlc1JlcXVpcmVkID0gY2FsY3VsYXRlQnl0ZXNGb3JBU1RDKHdpZHRoLCBoZWln
aHQsIEFTVENQYXJhbWV0ZXJzW2Zvcm1hdCAtIEFTVENFbnVtU3RhcnRSR0JBXSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzR4NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfNXg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ181eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUjoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tI
UjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18x
MHg4X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMHgxMF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfMTJ4MTBfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tI
UjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184
eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9B
U1RDXzh4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfMTB4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFI6CiAgICAg
ICAgIGJ5dGVzUmVxdWlyZWQgPSBjYWxjdWxhdGVCeXRlc0ZvckFTVEMod2lkdGgsIGhlaWdodCwg
QVNUQ1BhcmFtZXRlcnNbZm9ybWF0IC0gQVNUQ0VudW1TdGFydFNSR0I4XSk7CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1IxMV9FQUM6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1NSR0I4X0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOiB7CisgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkNPTVBSRVNTRURfUjExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9TSUdORURfUjExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0I4X0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfRVRD
MjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9B
TFBIQTFfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0VUQzI6IHsKICAgICAgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRCeXRlc1JlcXVpcmVkID0gKHdpZHRoICsga0VBQ0FuZEVUQzJCbG9j
a1NpemUgLSAxKSAvIGtFQUNBbmRFVEMyQmxvY2tTaXplOwogICAgICAgICBjaGVja2VkQnl0ZXNS
ZXF1aXJlZCAqPSAoaGVpZ2h0ICsga0VBQ0FuZEVUQzJCbG9ja1NpemUgLSAxKSAvIGtFQUNBbmRF
VEMyQmxvY2tTaXplOwogICAgICAgICBjaGVja2VkQnl0ZXNSZXF1aXJlZCAqPSA4OwogICAgICAg
ICBpZiAoY2hlY2tlZEJ5dGVzUmVxdWlyZWQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAidG9vIGxhcmdlIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJ0b28gbGFyZ2UgZGltZW5zaW9ucyIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBjaGVja2VkQnl0ZXNSZXF1aXJlZC51bnNh
ZmVHZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJ
R05FRF9SRzExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBOF9F
VEMyX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
RVRDMl9FQUM6IHsKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SRzExX0VBQzoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUM6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUM6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOiB7CiAgICAgICAg
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQnl0ZXNSZXF1aXJlZCA9
ICh3aWR0aCArIGtFQUNBbmRFVEMyQmxvY2tTaXplIC0gMSkgLyBrRUFDQW5kRVRDMkJsb2NrU2l6
ZTsKICAgICAgICAgY2hlY2tlZEJ5dGVzUmVxdWlyZWQgKj0gKGhlaWdodCArIGtFQUNBbmRFVEMy
QmxvY2tTaXplIC0gMSkgLyBrRUFDQW5kRVRDMkJsb2NrU2l6ZTsKICAgICAgICAgY2hlY2tlZEJ5
dGVzUmVxdWlyZWQgKj0gMTY7CiAgICAgICAgIGlmIChjaGVja2VkQnl0ZXNSZXF1aXJlZC5oYXNP
dmVyZmxvd2VkKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0b28gbGFyZ2UgZGltZW5zaW9u
cyIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRvbyBsYXJnZSBkaW1lbnNpb25zIik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9
IGNoZWNrZWRCeXRlc1JlcXVpcmVkLnVuc2FmZUdldCgpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIGlmIChwaXhlbHMuYnl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVxdWlyZWQpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGNvcnJlY3Qg
Zm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZl
clZpZXcgaXMgbm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtNTY2MiwxMCArNTY2MiwxMCBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1
bmN0aQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9FWFQ6IHsKICAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja1dpZHRo
ID0gNDsKICAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9IDQ7CiAgICAgICAg
IGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21heFRleHR1cmVTaXpl
IDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7CkBAIC01NjczLDYwICs1NjczLDYwIEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9u
cyhjb25zdCBjaGFyKiBmdW5jCiAgICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3
aWR0aCA9PSAxKSB8fCAobGV2ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tX
aWR0aCkgJiYgd2lkdGggPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CiAgICAgICAgIGJvb2wg
aGVpZ2h0VmFsaWQgPSAobGV2ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQg
PT0gMikgfHwgKCEoaGVpZ2h0ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJl
c3NlZERpbWVuc2lvbik7CiAgICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9y
IGxldmVsIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZh
bGlkIGZvciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6CiAgICAgICAgIC8vIEhlaWdodCBhbmQgd2lk
dGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KICAgICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEp
KSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9BU1RDXzh4OF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzEweDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ18xMHg2X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4OF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDEwX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X0FTVENfMTJ4MTBfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
QVNUQ18xMngxMl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfNHg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVf
S0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzEweDZfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzEweDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4
X0FMUEhBOF9BU1RDXzEweDEwX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpFVEMxX1JHQjhfT0VTOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1Ix
MV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkcxMV9FQUM6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzZ4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURf
UkdCQV9BU1RDXzZ4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdC
QV9BU1RDXzh4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9B
U1RDXzh4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RD
Xzh4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEw
eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2
X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9L
SFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tI
UjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hS
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFI6
CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0
X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q181eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzV4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfNng1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hS
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEw
eDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMngxMF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfMTJ4MTJfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpFVEMxX1JHQjhf
T0VTOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1IxMV9FQUM6CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkNPTVBSRVNTRURfUkcxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQjhfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9F
VEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0JBOF9FVEMyX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfRVRDMl9FQUM6CiAgICAgICAgIC8vIE5vIGhlaWdodCBhbmQgd2lkdGggcmVzdHJp
Y3Rpb25zIG9uIEFTVEMsIEVUQzEgb3IgRVRDMi4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ZGVmYXVsdDoKQEAgLTU3MzgsNTggKzU3MzgsNTggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGYK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBXZWJHTFRleHR1cmUqIHRleCkKIHsKICAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8
IDApIHsKLSAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAwIik7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAwIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGZvcm1hdCkgewot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gNDsKICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7
CiAgICAgICAgIGlmICgoeG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9j
a0hlaWdodCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0
IG5vdCBtdWx0aXBsZSBvZiA0Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQg
b3IgeW9mZnNldCBub3QgbXVsdGlwbGUgb2YgNCIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgICAgIGlmICh3aWR0aCAtIHhvZmZzZXQgPiB0ZXgtPmdldFdpZHRo
KHRhcmdldCwgbGV2ZWwpCiAgICAgICAgICAgICB8fCBoZWlnaHQgLSB5b2Zmc2V0ID4gdGV4LT5n
ZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGlt
ZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5z
aW9ucyBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlv
bk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CiAgICAgfQotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6
CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1H
OiB7CiAgICAgICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAieG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8iKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAieG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8iKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAod2lkdGggIT0gdGV4
LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQogICAgICAgICAgICAgfHwgaGVpZ2h0ICE9IHRleC0+
Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRp
bWVuc2lvbnMgbXVzdCBtYXRjaCBleGlzdGluZyBsZXZlbCIpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2ZWwiKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21w
cmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCk7CiAgICAgfQotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpFVEMxX1JHQjhf
T0VTOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpFVEMxX1JHQjhfT0VTOgogICAgICAgICAvLyBO
b3Qgc3VwcG9ydGVkIGZvciBFVEMxX1JHQjhfT0VTIHRleHR1cmVzLgogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUjExX0VBQzoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TSUdORURfUjExX0VBQzoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCOF9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4
X0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhf
UFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkE4X0VUQzJfRUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NS
R0I4X0FMUEhBOF9FVEMyX0VBQzogewotICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzNEKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vdCBzdXBw
b3J0ZWQgb24gVEVYVFVSRV8zRCB0ZXh0dXJlcyIpOworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lH
TkVEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkcxMV9FQUM6
CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6IHsKKyAgICAgICAg
aWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8zRCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJub3Qgc3VwcG9ydGVkIG9uIFRFWFRVUkVfM0QgdGV4dHVyZXMiKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDQ7CkBAIC01Nzk4LDcgKzU3OTgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hh
ciogZgogICAgICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tTaXplKSB8fCAoeW9mZnNldCAlIGtC
bG9ja1NpemUpCiAgICAgICAgICAgICB8fCAoKHdpZHRoICUga0Jsb2NrU2l6ZSkgJiYgeG9mZnNl
dCArIHdpZHRoICE9IHRleFdpZHRoKQogICAgICAgICAgICAgfHwgKChoZWlnaHQgJSBrQmxvY2tT
aXplKSAmJiB5b2Zmc2V0ICsgaGVpZ2h0ICE9IHRleEhlaWdodCkpIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIHRleHR1cmUgbGV2ZWwg
ZGltZW5zaW9ucyIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3Qg
bWF0Y2ggZXhpc3RpbmcgdGV4dHVyZSBsZXZlbCBkaW1lbnNpb25zIik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01ODExLDE2
ICs1ODExLDE2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21w
cmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmCiBib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1NUUklQ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdM
RV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU46Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlBPSU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FX1NUUklQOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVfTE9PUDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpMSU5FUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUklBTkdMRV9T
VFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUklBTkdMRV9GQU46CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VFJJQU5HTEVTOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogfQpAQCAtNTgyOCw3ICs1ODI4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGUKIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lKQogewogICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1fc3Rl
bmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sg
fHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1h
dGNoIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMgc2V0
dGluZ3MgZG8gbm90IG1hdGNoIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
cmV0dXJuIHRydWU7CkBAIC01ODM3LDE3ICs1ODM3LDE3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbEZ1bmMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmdW5jKQogewogICAgIHN3aXRjaCAo
ZnVuYykgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxFU1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVRVUFM
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUFURVI6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6R0VRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFMV0FZUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpORVZFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMRVNTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkxFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpHUkVBVEVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkdFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpOT1RFUVVBTDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpBTFdBWVM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZnVuY3Rpb24iKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
fQpAQCAtNTg3NywxMSArNTg3NywxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnByaW50VG9Db25zb2xlKE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJgogCiBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KQogewotICAg
IGlmICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgc3JjID09
IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0gICAgICAgICAm
JiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCi0gICAgICAgIHx8ICgo
ZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKLSAgICAgICAgICAgICYmIChz
cmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICBpZiAoKChzcmMgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHRH
TDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok9O
RV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCisgICAgICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok9ORV9N
SU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAgICAgICYmIChzcmMgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHRHTDo6T05FX01J
TlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGli
bGUgc3JjIGFuZCBkc3QiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTU5MTIsMTkgKzU5MTIsMTkgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmMK
ICAgICBpZiAoIWxvY2F0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gYXJyYXkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgaWYgKHRyYW5zcG9zZSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
dHJhbnNwb3NlIG5vdCBGQUxTRSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidHJhbnNwb3NlIG5vdCBG
QUxTRSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChzaXplIDwgcmVx
dWlyZWRNaW5TaXplIHx8IChzaXplICUgcmVxdWlyZWRNaW5TaXplKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCBzaXplIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU5MzQs
MzIgKzU5MzQsMzIgQEAgV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhcioKIHsKICAgICBPcHRpb25hbDxX
ZWJHTEJ1ZmZlcio+IGJ1ZmZlcjsKICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICBidWZmZXIgPSBtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSOgogICAgICAgICBidWZmZXIgPSBtX2JvdW5k
QXJyYXlCdWZmZXIuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAjaWYgRU5B
QkxFKFdFQkdMMikKICAgICAgICAgaWYgKGlzV2ViR0wyKCkpIHsKICAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0KSB7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JF
QURfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9SRUFE
X0JVRkZFUjoKICAgICAgICAgICAgICAgICBidWZmZXIgPSBtX2JvdW5kQ29weVJlYWRCdWZmZXIu
Z2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkNPUFlfV1JJVEVfQlVGRkVSOgogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1f
Ym91bmRDb3B5V3JpdGVCdWZmZXIuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1BBQ0tfQlVGRkVSOgogICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRQaXhlbFBhY2tCdWZmZXIuZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhF
TF9VTlBBQ0tfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElY
RUxfVU5QQUNLX0JVRkZFUjoKICAgICAgICAgICAgICAgICBidWZmZXIgPSBtX2JvdW5kUGl4ZWxV
bnBhY2tCdWZmZXIuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoK
ICAgICAgICAgICAgICAgICBidWZmZXIgPSBtX2JvdW5kVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIu
Z2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOSUZPUk1fQlVGRkVSOgogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRV
bmlmb3JtQnVmZmVyLmdldCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtNTk2NywzMiArNTk2NywzMiBAQCBXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmICghYnVmZmVyIHx8ICFidWZmZXIudmFs
dWUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9E
UkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTVFJFQU1fRFJBVzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEFUSUNfRFJB
VzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEWU5BTUlDX0RSQVc6CiAgICAgICAgIHJl
dHVybiBidWZmZXIudmFsdWUoKTsKICAgICB9Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1c2FnZSIp
OworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdXNhZ2UiKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAogRXhjZXB0aW9uT3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UpCiB7CiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBpbWFn
ZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGNvbnN0IFVSTCYgdXJsID0g
aW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7CiAgICAgaWYgKHVybC5pc051
bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4o
aW1hZ2UpKQpAQCAtNjAwMyw3ICs2MDAzLDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIKIEV4
Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzKQogewogICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh3b3VsZFRhaW50T3JpZ2lu
KGNhbnZhcykpCkBAIC02MDE2LDcgKzYwMTYsNyBAQCBFeGNlcHRpb25Pcjxib29sPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYQog
RXhjZXB0aW9uT3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1M
VmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCog
dmlkZW8pCiB7CiAgICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8fCAhdmlk
ZW8tPnZpZGVvSGVpZ2h0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHZpZGVvIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkKQEAgLTYwMzEsNyArNjAzMSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNECiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8g
SW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KQEAgLTYwNjUsMTcg
KzYwNjUsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJm
dkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMKICAgICAKICAgICBhdXRvIGRhdGEg
PSBsaXN0LmRhdGEoKTsKICAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFy
cmF5Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAogICAgIGludCBzaXplID0gbGlzdC5sZW5ndGgoKTsKICAgICBpZiAoc2l6ZSA8
IGV4cGVjdGVkU2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBzaXplIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5n
ZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRp
bmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCkBAIC02MTA2LDExICs2MTA2LDExIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdFZlcnRleEF0dHJpYjAoKQogICAgIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RCYXNlOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwogICAgIAogICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+YmluZEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXItPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7Ci0g
ICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgp
KTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JV
RkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRZTkFNSUNfRFJBVyk7CisgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgZmFs
c2UsIDAsIDApOwogICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIDApOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6
QVJSQVlfQlVGRkVSLCAwKTsKICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KDApOwogICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwogICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKQEAgLTYxNTcsNyArNjE1Nyw3IEBAIE9wdGlvbmFs
PGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpbXVsYXRlVmVydGV4QXR0cmliMChH
QzNEdWludCBudW1WZXJ0CiAgICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYgIW1fdmVydGV4
QXR0cmliMFVzZWRCZWZvcmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX3ZlcnRleEF0
dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3Qo
KSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9C
VUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkpOwogCiAgICAgLy8gV2Uga25v
dyBidWZmZXJTaXplIGFuZCBidWZmZXJEYXRhU2l6ZSB3b24ndCBvdmVyZmxvdyBvciBnbyBuZWdh
dGl2ZSwgdGhhbmtzIHRvIHZhbGlkYXRlU2ltdWxhdGVkVmVydGV4QXR0cmliMAogICAgIEdDM0R1
aW50IGJ1ZmZlclNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0OwpAQCAtNjE2NSw4ICs2MTY1LDgg
QEAgT3B0aW9uYWw8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKEdDM0R1aW50IG51bVZlcnQKIAogICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1f
dmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKICAgICAgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJy
b3IoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgbV9jb250ZXh0
LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFT
aXplLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+Z2V0RXJyb3IoKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKICAg
ICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGNyZWF0ZSBhIGJ1ZmZlci4KICAgICAgICAg
ICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxzZTsKICAgICAgICAgICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwpAQCAtNjE5OCw5ICs2MTk4LDkgQEAgT3B0aW9uYWw8
Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdD
M0R1aW50IG51bVZlcnQKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSBh
dHRyaWJWYWx1ZS52YWx1ZVsyXTsKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
M10gPSBhdHRyaWJWYWx1ZS52YWx1ZVszXTsKICAgICAgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJS
ZWZpbGwgPSBmYWxzZTsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIGJ1ZmZlckRhdGFTaXplLCBidWZmZXJEYXRhLmdl
dCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKEdyYXBoaWNzQ29udGV4dEdM
OjpBUlJBWV9CVUZGRVIsIDAsIGJ1ZmZlckRhdGFTaXplLCBidWZmZXJEYXRhLmdldCgpKTsKICAg
ICB9Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCwgMCwgMCwgMCk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgMCwgMCwgMCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTYyMDgsMTAgKzYyMDgsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCiB7
CiAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OlZlcnRleEF0dHJpYlN0YXRl
JiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUo
MCk7CiAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAg
ICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZF
Uiwgb2JqZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKICAgICAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0
YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwogICAg
IH0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOworICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBvYmplY3RP
clplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKQEAgLTYyNDcsMjEgKzYy
NDcsMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250
ZXh0KCkKICAgICBpbnQgY29udGV4dExvc3RSZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CiAKICAgICBzd2l0Y2ggKGNvbnRleHRM
b3N0UmVhc29uKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I6Ci0gICAg
ICAgIC8vIFRoZSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgZnVs
bHkKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjoKKyAgICAgICAgLy8gVGhl
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBmdWxseQog
ICAgICAgICAvLyBzdXBwb3J0IEdMX0FSQl9yb2J1c3RuZXNzIHNlbWFudGljcyB5ZXQuIEFsdGVy
bmF0aXZlbHksIHRoZQogICAgICAgICAvLyBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5zaW9uIG1p
Z2h0IGhhdmUgYmVlbiB1c2VkIHRvIGZvcmNlCiAgICAgICAgIC8vIGEgbG9zdCBjb250ZXh0Lgog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6R1VJTFRZX0NPTlRFWFRfUkVT
RVRfQVJCOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6
CiAgICAgICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhp
cyBjb250ZXh0IHdhcwogICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3Mg
cmVzZXQuCiAgICAgICAgIHByaW50VG9Db25zb2xlKE1lc3NhZ2VMZXZlbDo6V2FybmluZywgIldB
Uk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJk
IHRvIHJlc2V0OyBub3QgcmVzdG9yaW5nIHRoZSBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6SU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgogICAgICAgICAv
LyBBbHdheXMgYWxsb3cgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOgogICAgICAgICAv
LyBXYXJuLiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0aGVtIHRoYXQgV2ViR0wK
ICAgICAgICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3Jh
cGhpY3MgY2FyZCB0bwogICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRoZW0gd2hldGhlciB0aGV5
IHdhbnQgdG8gY29udGludWUgcnVubmluZwpAQCAtNjI5MiwxMyArNjI5MiwxMyBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9yZUNvbnRleHQoKQogICAgIGlmICgh
aG9zdFdpbmRvdykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0
V2luZG93KSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjb250ZXh0KEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7
CiAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBS
ZWFsTG9zdENvbnRleHQpCiAgICAgICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qo
c2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8g
cmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9y
aW5nIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MzY3LDE3ICs2MzY3LDE3IEBAIG5hbWVz
cGFjZSB7CiAgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVycm9yKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChlcnJvcikgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU06CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTToKICAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9FTlVNIl9zOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOgogICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX1ZB
TFVFIl9zOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT046CiAg
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIl9zOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpPVVRfT0ZfTUVNT1JZOgogICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZ
Il9zOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT046CiAgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OIl9zOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhU
X0xPU1RfV0VCR0w6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTlRFWFRfTE9T
VF9XRUJHTDoKICAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9MT1NUX1dFQkdMIl9zOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIldlYkdMIEVSUk9S
KCIsIGhleChlcnJvciwgNCwgTG93ZXJjYXNlKSwgJyknKTsKQEAgLTY0MDYsNyArNjQwNiw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXBwbHlTdGVuY2lsVGVzdCgpCiAgICAg
ICAgIEFTU0VSVChhdHRyaWJ1dGVzKTsKICAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBhdHRy
aWJ1dGVzLT5zdGVuY2lsOwogICAgIH0KLSAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfVEVTVCwgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1ZmZl
cik7CisgICAgZW5hYmxlT3JEaXNhYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1RFU1Qs
IG1fc3RlbmNpbEVuYWJsZWQgJiYgaGF2ZVN0ZW5jaWxCdWZmZXIpOwogfQogCiB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5
LCBib29sIGVuYWJsZSkKQEAgLTY0MjgsOSArNjQyOCw5IEBAIEdDM0RpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQogICAgIGlmICghc3VwcG9ydHNEcmF3
QnVmZmVycygpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fbWF4RHJhd0J1ZmZlcnMp
Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19C
VUZGRVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZlcnMpOworICAgICAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZm
ZXJzKTsKICAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZt
X21heENvbG9yQXR0YWNobWVudHMpOworICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4
dGVuc2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRhY2ht
ZW50cyk7CiAgICAgLy8gV0VCR0xfZHJhd19idWZmZXJzIHJlcXVpcmVzIE1BWF9DT0xPUl9BVFRB
Q0hNRU5UUyA+PSBNQVhfRFJBV19CVUZGRVJTLgogICAgIHJldHVybiBzdGQ6Om1pbihtX21heERy
YXdCdWZmZXJzLCBtX21heENvbG9yQXR0YWNobWVudHMpOwogfQpAQCAtNjQ0MCw3ICs2NDQwLDcg
QEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkKICAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zR0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMp
OwogICAgIHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7CiB9CiAKQEAgLTY0NTEsMTMgKzY0
NTEsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzZXRCYWNrRHJhd0J1ZmZl
cihHQzNEZW51bSBidWYpCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9y
ZUN1cnJlbnRGcmFtZWJ1ZmZlcigpCiB7Ci0gICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgIGJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpy
ZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCiB7CiAgICAgYXV0byB0ZXh0dXJlID0gbV90ZXh0dXJl
VW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKLSAgICBi
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAg
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIHRleHR1cmUpOwogICAg
IGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSh0ZXh0dXJlRXh0
ZW5zaW9uRmxhZ3MoKSkpCiAgICAgICAgIG1fdW5yZW5kZXJhYmxlVGV4dHVyZVVuaXRzLmFkZCht
X2FjdGl2ZVRleHR1cmVVbml0KTsKIH0KQEAgLTY0ODgsNyArNjQ4OCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEaW50IGZpcnN0CiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKICAgICAgICAgaWYgKCFz
aW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5h
YmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVyLgotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCAiZHJhd0FycmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUg
dmVydGV4QXR0cmliMCBhcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0
dXMudmFsdWUoKTsKQEAgLTY1MjUsNyArNjUyNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBj
CiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwU3RhdHVzID0gc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKICAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0dHJp
YjBTdGF0dXMpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIHNpbXVsYXRlIHRo
ZSBhdHRyaWJ1dGUgYnVmZmVyLgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5c0luc3RhbmNlZCIsICJ1
bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJh
d0FycmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJh
eSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMudmFsdWUoKTsKQEAgLTY1
NTMsNyArNjU1Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2CiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRy
aWJEaXZpc29yIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlz
b3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTY2MDcsNyArNjYwNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVjeWNs
ZUNvbnRleHQoKQogICAgIC8vIFVzaW5nIFN5bnRoZXRpY0xvc3RDb250ZXh0IG1lYW5zIHRoZSBk
ZXZlbG9wZXIgd29uJ3QgYmUgYWJsZSB0byBmb3JjZSB0aGUgcmVzdG9yYXRpb24KICAgICAvLyBv
ZiB0aGUgY29udGV4dCBieSBjYWxsaW5nIHByZXZlbnREZWZhdWx0KCkgaW4gYSAid2ViZ2xjb250
ZXh0bG9zdCIgZXZlbnQgaGFuZGxlci4KICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xv
c3RDb250ZXh0KTsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBkZXN0cm95
R3JhcGhpY3NDb250ZXh0R0woKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAppbmRleCBj
Yjg3MmUxZjA0ODRlNjBjZWM2MGIxODU4ZjI3MmFmOWFjMmUzMzNhLi4wYzQ0NTJiYjYwYzQyYjcw
ZDdkZTU3OTk5Njk0MTVhZjQyNzE0MzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uT3IuaCIKICNpbmNsdWRlICJHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJTdXNwZW5k
YWJsZVRpbWVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTEwMyw3ICsxMDMsNyBAQCB1c2lu
ZyBXZWJHTENhbnZhcyA9IFdURjo6VmFyaWFudDxSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBS
ZWZQdHI8T2Zmc2NyZWVuQ2FudgogdXNpbmcgV2ViR0xDYW52YXMgPSBXVEY6OlZhcmlhbnQ8UmVm
UHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAotY2xhc3MgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQzRDo6Q2xpZW50LCBwdWJsaWMgR1BV
QmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0LCBwcml2YXRlIEFjdGl2aXR5U3RhdGVDaGFuZ2VP
YnNlcnZlciB7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpDbGllbnQsIHB1YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQsIHByaXZhdGUgQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyIHsKICAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UpOwogcHVibGljOgog
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gY3Jl
YXRlKENhbnZhc0Jhc2UmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiwgY29uc3QgU3RyaW5nJik7
CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQgbG9zZUNvbnRleHRJbXBsKExv
c3RDb250ZXh0TW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzaW11bGF0ZUNvbnRleHRD
aGFuZ2VkKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogZ3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7
IH0KICAgICBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0R3JvdXAuZ2V0KCk7IH0KICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTM2Nyw3ICszNjcsNyBAQCBwdWJsaWM6CiAgICAgLy8g
VXNlZCBmb3IgdGVzdGluZyBvbmx5LCBmcm9tIEludGVybmFscy4KICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKTsKIAotICAgIC8vIEdyYXBoaWNzQ29u
dGV4dDNEOjpDbGllbnQKKyAgICAvLyBHcmFwaGljc0NvbnRleHRHTDo6Q2xpZW50CiAgICAgdm9p
ZCBkaWRDb21wb3NpdGUoKSBvdmVycmlkZTsKICAgICB2b2lkIGZvcmNlQ29udGV4dExvc3QoKSBv
dmVycmlkZTsKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCkgb3ZlcnJpZGU7CkBAIC0zNzgsNyAr
Mzc4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZShDYW52YXNCYXNlJiwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyk7Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dDNEPiYmLCBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKENh
bnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYsIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXMpOwogCiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7CiAgICAgZnJp
ZW5kIGNsYXNzIFdlYkdMRnJhbWVidWZmZXI7CkBAIC00MTAsNyArNDEwLDcgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QmKTsKICAgICB2
b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKIAotICAgIHZvaWQgZGVzdHJveUdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0R0woKTsKICAg
ICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2Vk
QW5kTm90aWZ5Q2FudmFzT2JzZXJ2ZXIoKTsKIApAQCAtNDU3LDcgKzQ1Nyw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIGJvb2wgZW5hYmxlU3VwcG9ydGVkRXh0ZW5zaW9uKEFTQ0lJTGl0ZXJhbCBleHRl
bnNpb25OYW1lTGl0ZXJhbCk7CiAKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29u
dGV4dDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fY29udGV4dDsKICAg
ICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3VwOwogCiAgICAgLy8gRGlz
cGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVybWluZWQgdGhhdCBv
bmUgaXMgbmVlZGVkLgpAQCAtNjQ0LDkgKzY0NCw5IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJl
c3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKIAogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQgdGV4SW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNz
Q29udGV4dDNEOjpET01Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEltYWdlKiwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhKTsKICAgICB2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLSAg
ICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29u
dGV4dEdMOjpET01Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CiAK
ICAgICBib29sIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CiAK
QEAgLTgyMyw3ICs4MjMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCB2YWxpZGF0ZVNpbXVsYXRl
ZFZlcnRleEF0dHJpYjAoR0MzRHVpbnQgbnVtVmVydGV4KTsKICAgICB2b2lkIHJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CiAKLSAgICAvLyBXcmFwcGVyIGZvciBH
cmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2Ug
dG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KKyAgICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UgdG8g
dGhlIEphdmFTY3JpcHQgY29uc29sZS4KICAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5j
ZSB7IERpc3BsYXlJbkNvbnNvbGUsIERvbnREaXNwbGF5SW5Db25zb2xlIH07CiAgICAgdm9pZCBz
eW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUlu
Q29uc29sZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuY3Bw
CmluZGV4IGI3ZTNmNmE5MzRhY2I4ZjUzYzRjNmVhMGRjYWEwODFhYzFjMTVmZWQuLmYyNGZjNGQ3
M2U2MmU3YjJkM2M0MzA0MDJkMTcxZGJmMmRkYWE4YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcApAQCAtNDYsMTQgKzQ2LDE0IEBAIFdlYkdMU2FtcGxl
cjo6fldlYkdMU2FtcGxlcigpCiBXZWJHTFNhbXBsZXI6OldlYkdMU2FtcGxlcihXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiB7Ci0g
ICAgLy8gRklYTUU6IENhbGwgY3JlYXRlU2FtcGxlciBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgor
ICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVNhbXBsZXIgZnJvbSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC4KIH0KIAotdm9pZCBXZWJHTFNhbXBsZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdM
U2FtcGxlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4
dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4
dDNkKTsKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogQ2FsbCBkZWxl
dGVTYW1wbGVyIGZyb20gR3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8gRklYTUU6IENhbGwgZGVs
ZXRlU2FtcGxlciBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNhbXBsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5oCmluZGV4IDk1NDg3M2NmNDNmNTRiY2My
NTgzM2UxYjliODEwYWI4ZGI2NDlkMzkuLjkxMmJiOGMwMjNiMWIwYmRlMjIxNmMzZWRmNTMyNDE4
NmZmYmIyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2Ft
cGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5oCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFdlYkdM
U2FtcGxlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7Ci0gICAgdm9pZCBkZWxldGVPYmpl
Y3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0z
RE9iamVjdCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKaW5kZXggN2ZhZWQyNDA4MDM0ZjhiZjgw
ZGM3ODFlMDJlNmU5ZTRjMTc0NmM5NC4uZjc5NTc3Y2YxY2RlMjI4YTgwNzQwMTM4NjE1ODJhZWNj
MmY1NjMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcApA
QCAtNDUsNyArNDUsNyBAQCBXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSYgY3R4LCBHQzNEZW51bSB0eXBlKQogICAgICwgbV9zb3VyY2UoZW1wdHlTdHJp
bmcoKSkKICAgICAsIG1faXNWYWxpZChmYWxzZSkKIHsKLSAgICBzZXRPYmplY3QoY3R4LmdyYXBo
aWNzQ29udGV4dDNEKCktPmNyZWF0ZVNoYWRlcih0eXBlKSk7CisgICAgc2V0T2JqZWN0KGN0eC5n
cmFwaGljc0NvbnRleHRHTCgpLT5jcmVhdGVTaGFkZXIodHlwZSkpOwogfQogCiBXZWJHTFNoYWRl
cjo6fldlYkdMU2hhZGVyKCkKQEAgLTUzLDcgKzUzLDcgQEAgV2ViR0xTaGFkZXI6On5XZWJHTFNo
YWRlcigpCiAgICAgZGVsZXRlT2JqZWN0KDApOwogfQogCi12b2lkIFdlYkdMU2hhZGVyOjpkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KQordm9pZCBXZWJHTFNoYWRlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAg
ICBjb250ZXh0M2QtPmRlbGV0ZVNoYWRlcihvYmplY3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMU2hhZGVyLmgKaW5kZXggOWY1NzFjOWMwZDVmZGQwYTBjNzU0YzJkMjJkMjAx
YWY5OGRiYjk2Mi4uOGVkZjBlMmNiYjE4NmMzZTI1MTVjNzRhZGM3NzA4NTI5MWZiZTk4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCkBAIC00OCw3ICs0OCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYsIEdDM0RlbnVtKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlT2JqZWN0
SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOwog
CiAgICAgR0MzRGVudW0gbV90eXBlOwogICAgIFN0cmluZyBtX3NvdXJjZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5o
CmluZGV4IDFmZTQ0Yjc5ZjI4ZjEyZjFmYTBmZDk2NmNiY2IxY2I3NDFiNDFjOGEuLjhjNGU2MjE3
ZTYwNWRlODAxMDU0YzZkMjJhNmQwNDAwMzFmNmNiZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaApAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAppbmRleCAxYjIyMzZmYmQ3
MTJhOGI3MWMwODIwZDFjMGFhNjIzYmMzMzgyMDA0Li5kMDJiZmE0ZTI4NmZiMWNiZGNkOTkzOGE0
YzI0NWJkMjcxYTk2YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFNoYXJlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTaGFyZWRPYmplY3QuY3BwCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgV2ViR0xTaGFyZWRPYmpl
Y3Q6OmRldGFjaENvbnRleHRHcm91cCgpCiAgICAgfQogfQogCi1HcmFwaGljc0NvbnRleHQzRCog
V2ViR0xTaGFyZWRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0CitHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogV2ViR0xTaGFyZWRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRleHRH
TCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dEdyb3VwID8gJm1fY29udGV4dEdyb3Vw
LT5nZXRBR3JhcGhpY3NDb250ZXh0M0QoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIG1fY29udGV4
dEdyb3VwID8gJm1fY29udGV4dEdyb3VwLT5nZXRBR3JhcGhpY3NDb250ZXh0R0woKSA6IG51bGxw
dHI7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhcmVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9i
amVjdC5oCmluZGV4IDJlYTQ4ZDA1Yzc5MjVhMGI3YzhmNjMxYTE5MWQzMDkzY2NmYjUzNmUuLjdm
MjM5ZDUxYzQzYzM5MjRmYjE3NTM4NWI0YjliZDk2OTdmZGJjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaApAQCAtMzEsNyArMzEsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBXZWJHTENvbnRleHRHcm91cDsKIGNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKQEAgLTYwLDcgKzYwLDcgQEAgcHJvdGVjdGVk
OgogICAgICAgICByZXR1cm4gbV9jb250ZXh0R3JvdXA7CiAgICAgfQogCi0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnZXRBR3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTENvbnRleHRHcm91cCogbV9jb250ZXh0R3JvdXA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFN5bmMuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5jLmNwcAppbmRleCA3ZDE4YTIyYjU0
YjVjMjg2ZTFiYzFjYzUzZDk0YjM4NjkxN2Y4NWJhLi5iNjVlMjhiZjViYTA2MzUxMGZmNmJhNzg3
YjJlZDA3MDU5MWEzMzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5j
cHAKQEAgLTQ2LDE0ICs0NiwxNCBAQCBXZWJHTFN5bmM6On5XZWJHTFN5bmMoKQogV2ViR0xTeW5j
OjpXZWJHTFN5bmMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgIDogV2ViR0xT
aGFyZWRPYmplY3QoY3R4KQogewotICAgIC8vIEZJWE1FOiBDYWxsIGZlbmNlU3luYyBmcm9tIEdy
YXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGZlbmNlU3luYyBmcm9tIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLgogfQogCi12b2lkIFdlYkdMU3luYzo6ZGVsZXRlT2JqZWN0SW1w
bChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
K3ZvaWQgV2ViR0xTeW5jOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShjb250ZXh0M2QpOwogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwotICAgIC8vIEZJWE1FOiBD
YWxsIGRlbGV0ZVN5bmMgZnJvbSBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAvLyBGSVhNRTogQ2Fs
bCBkZWxldGVTeW5jIGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU3luYy5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5jLmgKaW5kZXggYTQyMjJjMzk4MDViZWViMTc0OWJm
ZmNlZTJlNWE3OTUzZTkwNzVhOS4uMGQxMmE4MDBiODdmYWZlY2NmMTRjMjgzYjhjODcwZmQ0YmRh
ZTgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5jLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5jLmgKQEAgLTQwLDcgKzQw
LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMU3luYyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0
M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdElt
cGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFRleHR1cmUuY3BwCmluZGV4IDllYmE5NzJmNTQzODgyOTNlYzc0NzlkZWY3ZmIzNmNl
ODEwN2NlNjcuLjdlYTIxZDk5Yzc2NGEzY2Q0ZDBkMTc5MDg1ZGY0NzJhZDM5MGI3ZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcApAQCAtNDMsMTAgKzQz
LDEwIEBAIFJlZjxXZWJHTFRleHR1cmU+IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGN0eCkKIFdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAg
ICAsIG1fdGFyZ2V0KDApCi0gICAgLCBtX21pbkZpbHRlcihHcmFwaGljc0NvbnRleHQzRDo6TkVB
UkVTVF9NSVBNQVBfTElORUFSKQotICAgICwgbV9tYWdGaWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUikKLSAgICAsIG1fd3JhcFMoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKLSAgICAs
IG1fd3JhcFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKKyAgICAsIG1fbWluRmlsdGVyKEdy
YXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpCisgICAgLCBtX21hZ0ZpbHRl
cihHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKQorICAgICwgbV93cmFwUyhHcmFwaGljc0NvbnRl
eHRHTDo6UkVQRUFUKQorICAgICwgbV93cmFwVChHcmFwaGljc0NvbnRleHRHTDo6UkVQRUFUKQog
ICAgICwgbV9pc05QT1QoZmFsc2UpCiAgICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCiAgICAgLCBt
X25lZWRUb1VzZUJsYWNrVGV4dHVyZShmYWxzZSkKQEAgLTU1LDcgKzU1LDcgQEAgV2ViR0xUZXh0
dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4KQogICAgICwg
bV9pc0hhbGZGbG9hdFR5cGUoZmFsc2UpCiAgICAgLCBtX2lzRm9yV2ViR0wxKGN0eC5pc1dlYkdM
MSgpKQogewotICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlVGV4
dHVyZSgpKTsKKyAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dEdMKCktPmNyZWF0ZVRl
eHR1cmUoKSk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6fldlYkdMVGV4dHVyZSgpCkBAIC03MSwxMiAr
NzEsMTIgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnNldFRhcmdldChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbWF4TGV2ZWwpCiAgICAgaWYgKG1fdGFyZ2V0KQogICAgICAgICByZXR1cm47CiAgICAg
c3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQ6CiAgICAgICAgIG1fdGFy
Z2V0ID0gdGFyZ2V0OwogICAgICAgICBtX2luZm8ucmVzaXplKDEpOwogICAgICAgICBtX2luZm9b
MF0ucmVzaXplKG1heExldmVsKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFX0NVQkVfTUFQOgogICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKICAgICAgICAgbV9p
bmZvLnJlc2l6ZSg2KTsKICAgICAgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDY7ICsraWkpCkBA
IC05MCw0MCArOTAsNDAgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnNldFBhcmFtZXRlcmkoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCiAgICAgaWYgKCFvYmplY3QoKSB8fCAhbV90YXJnZXQp
CiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKICAgICAgICAgc3dpdGNoIChwYXJhbSkgewotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJF
U1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
Ul9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVT
VF9NSVBNQVBfTElORUFSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVJf
TUlQTUFQX0xJTkVBUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVDoK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpMSU5FQVJfTUlQTUFQX05FQVJFU1Q6CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6TElORUFSX01JUE1BUF9MSU5FQVI6CiAgICAgICAgICAgICBtX21pbkZp
bHRlciA9IHBhcmFtOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKICAgICAgICAgc3dp
dGNoIChwYXJhbSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOgot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVI6CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6Ok5FQVJFU1Q6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkxJTkVBUjoKICAgICAgICAgICAgIG1fbWFnRmlsdGVyID0gcGFyYW07CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X1dSQVBfUzoKICAgICAgICAgc3dpdGNoIChwYXJhbSkgewotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVB
VDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRToKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUlSUk9SRURfUkVQRUFUOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRVBFQVQ6CiAgICAgICAgICAgICBtX3dyYXBTID0gcGFyYW07
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFX1dSQVBfVDoKICAgICAgICAgc3dpdGNoIChwYXJhbSkgewotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFOgotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUEVBVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBf
VE9fRURHRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUlSUk9SRURfUkVQRUFU
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRVBFQVQ6CiAgICAgICAgICAgICBt
X3dyYXBUID0gcGFyYW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjUyLDcg
KzI1Miw3IEBAIGJvb2wgV2ViR0xUZXh0dXJlOjpuZWVkVG9Vc2VCbGFja1RleHR1cmUoVGV4dHVy
ZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucykgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKG1fbWFnRmlsdGVyID09IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUICYmIChtX21p
bkZpbHRlciA9PSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCB8fCBtX21pbkZpbHRlciA9PSBH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgaWYgKG1fbWFn
RmlsdGVyID09IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUICYmIChtX21pbkZpbHRlciA9PSBH
cmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVCB8fCBtX21pbkZpbHRlciA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAobV9pc0ZvcldlYkdMMSAmJiBtX2lzSGFsZkZsb2F0VHlwZSAmJiAhKGV4dGVuc2lvbnMg
JiBUZXh0dXJlRXh0ZW5zaW9uSGFsZkZsb2F0TGluZWFyRW5hYmxlZCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMjc0LDI5ICsyNzQsMjkgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnNldENvbXBy
ZXNzZWQoKQogICAgIG1faXNDb21wcmVzc2VkID0gdHJ1ZTsKIH0KIAotdm9pZCBXZWJHTFRleHR1
cmU6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZv
cm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMVGV4dHVyZTo6ZGVsZXRlT2JqZWN0SW1wbChH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVj
dCkKIHsKICAgICBjb250ZXh0M2QtPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKIH0KIAogaW50IFdl
YkdMVGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleChHQzNEZW51bSB0YXJnZXQpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7Ci0gICAg
ICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpCisgICAgaWYg
KG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKSB7CisgICAgICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9IGVsc2UgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQKSB7CisgICAgfSBlbHNlIGlmIChtX3RhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUCkgewogICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1g6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKICAgICAgICAgICAgIHJl
dHVybiAxOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAg
ICAgICAgIHJldHVybiAzOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgIHJldHVybiA0OwotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKICAgICAgICAgICAgIHJldHVybiA1OwogICAgICAgICB9CiAgICAgfQpAQCAtMzQxLDEyICsz
NDEsMTIgQEAgR0MzRGludCBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHN0YXRpYyBib29sIGludGVybmFsRm9ybWF0SXNG
bG9hdFR5cGUoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5h
bEZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkczMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
MzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkY6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIz
MkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkY6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4OgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTYsMTIgKzM1
NiwxMiBAQCBzdGF0aWMgYm9vbCBpbnRlcm5hbEZvcm1hdElzRmxvYXRUeXBlKEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0KQogc3RhdGljIGJvb2wgaW50ZXJuYWxGb3JtYXRJc0hhbGZGbG9hdFR5cGUo
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjExRl9HMTFGX0Ix
MEY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2
RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxMUZfRzExRl9C
MTBGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjlfRTU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMTZGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEx
NkY6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTQxMiwxMiArNDEyLDEyIEBAIHZvaWQgV2ViR0xUZXh0dXJlOjp1cGRhdGUoKQog
ICAgIGlmIChtX2lzRm9yV2ViR0wxKSB7CiAgICAgICAgIGlmIChtX2lzQ29tcGxldGUpIHsKICAg
ICAgICAgICAgIGlmIChtX2lzRm9yV2ViR0wxKQotICAgICAgICAgICAgICAgIG1faXNGbG9hdFR5
cGUgPSBtX2luZm9bMF1bMF0udHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAg
ICAgICAgICAgICAgbV9pc0Zsb2F0VHlwZSA9IG1faW5mb1swXVswXS50eXBlID09IEdyYXBoaWNz
Q29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBtX2lz
RmxvYXRUeXBlID0gaW50ZXJuYWxGb3JtYXRJc0Zsb2F0VHlwZShtX2luZm9bMF1bMF0uaW50ZXJu
YWxGb3JtYXQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaWkg
PSAwOyBpaSA8IG1faW5mby5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG1f
aXNGb3JXZWJHTDEgJiYgbV9pbmZvW2lpXVswXS50eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVCkKKyAgICAgICAgICAgICAgICBpZiAoKG1faXNGb3JXZWJHTDEgJiYgbV9pbmZvW2lpXVsw
XS50eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCkKICAgICAgICAgICAgICAgICAgICAg
fHwgKCFtX2lzRm9yV2ViR0wxICYmIGludGVybmFsRm9ybWF0SXNGbG9hdFR5cGUobV9pbmZvW2lp
XVswXS5pbnRlcm5hbEZvcm1hdCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faXNGbG9hdFR5
cGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQzMiwxMCArNDMyLDEw
IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjp1cGRhdGUoKQogICAgICAgICAgICAgaWYgKG1faXNGb3JX
ZWJHTDEpCiAgICAgICAgICAgICAgICAgbV9pc0hhbGZGbG9hdFR5cGUgPSBpbnRlcm5hbEZvcm1h
dElzSGFsZkZsb2F0VHlwZShtX2luZm9bMF1bMF0uaW50ZXJuYWxGb3JtYXQpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG1faXNIYWxmRmxvYXRUeXBlID0gbV9pbmZvWzBdWzBd
LnR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOworICAgICAgICAgICAg
ICAgIG1faXNIYWxmRmxvYXRUeXBlID0gbV9pbmZvWzBdWzBdLnR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9y
IChzaXplX3QgaWkgPSAwOyBpaSA8IG1faW5mby5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoKG1faXNGb3JXZWJHTDEgJiYgbV9pbmZvW2lpXVswXS50eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykKKyAgICAgICAgICAgICAgICBpZiAoKG1faXNGb3JX
ZWJHTDEgJiYgbV9pbmZvW2lpXVswXS50eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZM
T0FUX09FUykKICAgICAgICAgICAgICAgICAgICAgfHwgKCFtX2lzRm9yV2ViR0wxICYmIGludGVy
bmFsRm9ybWF0SXNIYWxmRmxvYXRUeXBlKG1faW5mb1tpaV1bMF0uaW50ZXJuYWxGb3JtYXQpKSkg
ewogICAgICAgICAgICAgICAgICAgICBtX2lzSGFsZkZsb2F0VHlwZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQ2LDExICs0NDYsMTEgQEAgdm9pZCBXZWJHTFRleHR1
cmU6OnVwZGF0ZSgpCiAKICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IGZhbHNlOwogICAg
IC8vIE5QT1QKLSAgICBpZiAobV9pc05QT1QgJiYgKChtX21pbkZpbHRlciAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6TkVBUkVTVCAmJiBtX21pbkZpbHRlciAhPSBHcmFwaGljc0NvbnRleHQzRDo6TElO
RUFSKQotICAgICAgICAgICAgICAgICAgICAgfHwgbV93cmFwUyAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSB8fCBtX3dyYXBUICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKSkKKyAgICBpZiAobV9pc05QT1QgJiYgKChtX21pbkZpbHRlciAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6TkVBUkVTVCAmJiBtX21pbkZpbHRlciAhPSBHcmFwaGljc0NvbnRleHRHTDo6TElO
RUFSKQorICAgICAgICB8fCBtX3dyYXBTICE9IEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19F
REdFIHx8IG1fd3JhcFQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UpKQogICAg
ICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IHRydWU7CiAgICAgLy8gQ29tcGxldGVuZXNz
Ci0gICAgaWYgKCFtX2lzQ29tcGxldGUgJiYgbV9taW5GaWx0ZXIgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FQVJFU1QgJiYgbV9taW5GaWx0ZXIgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikK
KyAgICBpZiAoIW1faXNDb21wbGV0ZSAmJiBtX21pbkZpbHRlciAhPSBHcmFwaGljc0NvbnRleHRH
TDo6TkVBUkVTVCAmJiBtX21pbkZpbHRlciAhPSBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKQog
ICAgICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKaW5kZXggMDk2M2JmODllZmFmMmJlNWMyZTg4
M2NlODkyM2M4OGQ3MzM4OGJlOC4uY2ZkODIzMzY1ZTQ1NTc3MmViMmNiZWQzMDQzMTFlYzdkNWU4
NjY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKQEAgLTg2
LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXZWJHTFRleHR1cmUoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNz
Q29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7CiAKICAgICBjbGFzcyBMZXZlbEluZm8gewogICAgIHB1YmxpYzoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKaW5k
ZXggZTUyNzZiOGUyMDk5NDI3ZTE2ZTZiNGIwYWYzODI4ZGRhMGE0OTkxMS4uMTc0NTk0NWI2OTY0
NmRmZWVhMTIxNzZkNDA1YmZmNTk2ZTBiNDRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAKQEAgLTQ2LDE0ICs0Niwx
NCBAQCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjp+V2ViR0xUcmFuc2Zvcm1GZWVkYmFjaygpCiBX
ZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKIHsKLSAg
ICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjayBmcm9tIEdyYXBoaWNzQ29u
dGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrIGZyb20g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKLXZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
azo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9y
bTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6ZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2Jq
ZWN0IG9iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dDNkKTsKICAgICBVTlVTRURf
UEFSQU0ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogQ2FsbCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGRlbGV0ZVRyYW5z
Zm9ybUZlZWRiYWNrIGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2su
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJhbnNmb3JtRmVlZGJhY2suaApp
bmRleCAxMTQ3YjVmNmFkZTYzNmNlMzFlNjc3Y2QxZGMyNjIxNjFlYTkwZTk5Li4xMTQzZGY0ZmM4
MGFjZjNhMzQxODFjN2M1YzYwMmEzZTVmZTMxM2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5oCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRl
T2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcAppbmRleCAxYjQ2
YjdiNGU4NmUxNmJiNmFmODAzYWRjNWEwMWQzNjVjODY5Zjk0Li41ZGJiMWEwNTUzYjZlY2QzZTRk
NzNlZTIzYzUyYmQ0NjczYTg1NThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcApAQCAtNTIsMTAgKzUyLDEwIEBAIFdl
YkdMVmVydGV4QXJyYXlPYmplY3Q6OldlYkdMVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYgY29udGV4CiAjZWxzZQogICAgIEFTU0VSVCh0eXBlICE9IFR5cGU6OkRl
ZmF1bHQgfHwgISh0aGlzLT5jb250ZXh0KCktPm1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0KSk7
CiAjZW5kaWYKLSAgICBzZXRPYmplY3QodGhpcy0+Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQz
RCgpLT5jcmVhdGVWZXJ0ZXhBcnJheSgpKTsKKyAgICBzZXRPYmplY3QodGhpcy0+Y29udGV4dCgp
LT5ncmFwaGljc0NvbnRleHRHTCgpLT5jcmVhdGVWZXJ0ZXhBcnJheSgpKTsKIH0KIAotdm9pZCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0OjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0OjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250
ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBUeXBlOjpEZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oCmluZGV4IDJmN2VkMzUwODE3MjNmMGFiYWYy
NTNiMmFiY2ZkMDEzOTcwMzY0MGIuLjdhMzBiNDkzODM2NDI5ZDMzODY2MGU2ZDEwNGNhZmMxZDg4
OTQ4ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldl
YkdMVmVydGV4QXJyYXlPYmplY3QoKTsKIHByaXZhdGU6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Ci0gICAgdm9pZCBkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgZmluYWw7Cisg
ICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZv
cm0zRE9iamVjdCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5jcHAKaW5kZXggMTI0NGM3N2I5OTIxNDIyZWFkYzQ0YmViZTA0Njc0N2QwNmJiODUzYy4u
MDdlMTg0NDVjNzhlZjdiYzljZGVmMTk1MGVmNTE4OTA2YWE5M2Y3MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
LmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjpz
ZXRFbGVtZW50QXJyYXlCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKICAgICBpZiAoYnVmZmVy
KQogICAgICAgICBidWZmZXItPm9uQXR0YWNoZWQoKTsKICAgICBpZiAobV9ib3VuZEVsZW1lbnRB
cnJheUJ1ZmZlcikKLSAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+b25EZXRhY2hl
ZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgICAgICBtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKSk7
CiAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKICAgICAKIH0KQEAgLTU4
LDcgKzU4LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZTo6c2V0VmVydGV4QXR0
cmliU3RhdGUoR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaQogICAgIGlmIChidWZmZXIpCiAgICAg
ICAgIGJ1ZmZlci0+b25BdHRhY2hlZCgpOwogICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nKQot
ICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKSk7CisgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmctPm9uRGV0YWNoZWQo
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgpKTsKICAgICAKICAgICBzdGF0ZS5idWZmZXJC
aW5kaW5nID0gYnVmZmVyOwogICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVzUGVyRWxl
bWVudDsKQEAgLTczLDIxICs3MywyMSBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNl
OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZShHQzNEdWludCBpbmRleCwgR0MzRHNpemVpCiB2b2lkIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjp1bmJpbmRCdWZmZXIoV2ViR0xCdWZmZXImIGJ1ZmZl
cikKIHsKICAgICBpZiAobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9PSAmYnVmZmVyKSB7Ci0g
ICAgICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPm9uRGV0YWNoZWQoY29udGV4dCgpLT5n
cmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+
b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdMKCkpOwogICAgICAgICBtX2Jv
dW5kRWxlbWVudEFycmF5QnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIGF1dG8mIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpXTsKICAgICAgICAgaWYgKHN0
YXRlLmJ1ZmZlckJpbmRpbmcgPT0gJmJ1ZmZlcikgewotICAgICAgICAgICAgYnVmZmVyLm9uRGV0
YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgICAgIGJ1ZmZl
ci5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmICghaSAmJiAhY29udGV4dCgpLT5pc0dMRVMyQ29tcGxpYW50KCkp
IHsKICAgICAgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gY29udGV4dCgpLT5tX3Zl
cnRleEF0dHJpYjBCdWZmZXI7CiAgICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZy0+
b25BdHRhY2hlZCgpOwogICAgICAgICAgICAgICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IDA7
CiAgICAgICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7Ci0gICAgICAgICAgICAgICAgc3RhdGUu
dHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgICAgICAgICBzdGF0ZS50
eXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAgICAgICAgICAgICAgIHN0YXRlLm5v
cm1hbGl6ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBzdGF0ZS5zdHJpZGUgPSAxNjsKICAg
ICAgICAgICAgICAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuaAppbmRl
eCAyMDcxZjM0NDhlMjA4MGNmM2ExNTE2Yzg2NmUwODk3YjBhY2U5NTc0Li5lN2FjNDgxZGU4YjBm
ZmEzYjY3NDc1ODYxNzYwYzQ5ZWVhZGZmODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmgKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJXZWJH
TEJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dE9iamVjdC5oIgogCkBAIC00Niw3ICs0
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXJCaW5kaW5n
OwogICAgICAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50IHsgMCB9OwogICAgICAgICBHQzNE
aW50IHNpemUgeyA0IH07Ci0gICAgICAgIEdDM0RlbnVtIHR5cGUgeyBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQgfTsKKyAgICAgICAgR0MzRGVudW0gdHlwZSB7IEdyYXBoaWNzQ29udGV4dEdMOjpG
TE9BVCB9OwogICAgICAgICBib29sIG5vcm1hbGl6ZWQgeyBmYWxzZSB9OwogICAgICAgICBHQzNE
c2l6ZWkgc3RyaWRlIHsgMTYgfTsKICAgICAgICAgR0MzRHNpemVpIG9yaWdpbmFsU3RyaWRlIHsg
MCB9OwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBXZWJHTFZl
cnRleEFycmF5T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlwZSk7Ci0g
ICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGUgPSAwOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKIAogICAgIFR5
cGUgbV90eXBlOwogICAgIGJvb2wgbV9oYXNFdmVyQmVlbkJvdW5kIHsgZmFsc2UgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5jcHAKaW5kZXggYWY1NTY1Y2Q5NDQ0MjRiNTNiODM1N2RiMmMwMTkwYmUxY2U1YjQ2OS4u
YTBjZTViODAwOGI2YjMwNTc2MjJhM2JlZjM1YmU5MTYxMDJmNjQyMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5j
cHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDYsNyArNDYsNyBAQCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmCiAgICAg
Y2FzZSBUeXBlOjpEZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICBjYXNlIFR5cGU6OlVzZXI6
Ci0gICAgICAgIHNldE9iamVjdCh0aGlzLT5jb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKTsKKyAgICAgICAgc2V0T2Jq
ZWN0KHRoaXMtPmNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygp
LmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC01
Niw3ICs1Niw3IEBAIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6On5XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTKCkKICAgICBkZWxldGVPYmplY3QobnVsbHB0cik7CiB9CiAKLXZvaWQgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29u
dGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgVHlwZTo6RGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAppbmRleCBkNTVkNjBiYjA5ZGZi
MjljZGNhYmFlZjdjNmUwYjBiNmQwZTgyNmRkLi4wODMzOTYyZDY2NWVmMTJmNGNjZGY1ZDhmMTJi
NWNhZjAwYWM2ZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCk7CiBwcml2YXRlOgogICAgIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFR5cGUp
OwotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3Jt
M0RPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clNoYWRlclByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNo
YWRlclByb2dyYW0uY3BwCmluZGV4IGU5NDIzOGJjZTIyOWFiYjE3MWY1M2FiYzgzMTczOGY4NWQz
MzM0NWQuLjI5MWJkMjRiMDZmMzdkM2I0NDhlN2I3ZWMzNzg2NDg0MTc5YWVlNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAK
QEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShXRUJHTCkKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2luY2x1ZGUgIldlYkdMU2hh
ZGVyLmgiCkBAIC0xMTAsMTAgKzExMCwxMCBAQCBzdGF0aWMgV2ViR0xTaGFkZXIqIHNoYWRlckZv
clR5cGUoV2ViR0xQcm9ncmFtJiBwcm9ncmFtLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYQogewog
ICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q2FudmFzOjpTaGFkZXJUeXBlOjpGcmFnbWVudDoKLSAgICAgICAgcmV0dXJuIHByb2dyYW0uZ2V0
QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAg
ICAgIHJldHVybiBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFHTUVOVF9TSEFERVIpOwogCiAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OlNoYWRlclR5cGU6OlZlcnRleDoKLSAgICAgICAgcmV0dXJuIHByb2dyYW0uZ2V0QXR0YWNoZWRT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOworICAgICAgICByZXR1cm4g
cHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURF
Uik7CiAKICAgICAvLyBDb21wdXRlIHNoYWRlcnMgYXJlIGEgV2ViR1BVIGNvbmNlcHQuCiAgICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGU6OkNvbXB1dGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDgzOGIxOGYzYThi
ZjM2NjU0OWViM2NmOTQ2M2MzMDFjNmE3MGRjZjUuLmQ0OWY0Mjg3Y2RkNWQ5YmU3MGIzZWEzZTI4
NTc0MjA5MTE3MzhhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCkBAIC0zMzgsNyArMzM4LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dXZWJHTChib29sIGVuYWJsZWRQZXJTZXR0aW5ncykgeyByZXR1cm4g
ZW5hYmxlZFBlclNldHRpbmdzOyB9CiAgICAgLy8gSW5mb3JtcyB0aGUgZW1iZWRkZXIgdGhhdCBh
IFdlYkdMIGNhbnZhcyBpbnNpZGUgdGhpcyBmcmFtZSByZWNlaXZlZCBhIGxvc3QgY29udGV4dAot
ICAgIC8vIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBHTF9BUkJfcm9idXN0bmVzcyBndWls
dC9pbm5vY2VuY2UgY29kZSAoc2VlIEV4dGVuc2lvbnMzRC5oKS4KKyAgICAvLyBub3RpZmljYXRp
b24gd2l0aCB0aGUgZ2l2ZW4gR0xfQVJCX3JvYnVzdG5lc3MgZ3VpbHQvaW5ub2NlbmNlIGNvZGUg
KHNlZSBFeHRlbnNpb25zR0wuaCkuCiAgICAgdmlydHVhbCB2b2lkIGRpZExvc2VXZWJHTENvbnRl
eHQoaW50KSB7IH0KICAgICB2aXJ0dWFsIFdlYkdMTG9hZFBvbGljeSB3ZWJHTFBvbGljeUZvclVS
TChjb25zdCBVUkwmKSBjb25zdCB7IHJldHVybiBXZWJHTEFsbG93Q3JlYXRpb247IH0KICAgICB2
aXJ0dWFsIFdlYkdMTG9hZFBvbGljeSByZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoY29uc3QgVVJM
JikgY29uc3QgeyByZXR1cm4gV2ViR0xBbGxvd0NyZWF0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKaW5kZXggOGJjMzVhNTdkNmJmZjY5MjI5NjcwMGYzNTNmOGM0NDMwNWViMTU5Ni4uZjU4NmNj
YjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cApAQCAtNjEsOCArNjEsOCBAQAogI2luY2x1ZGUgIkRhdGFMaXN0U3VnZ2VzdGlvblBpY2tlci5o
IgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShHUkFQSElDU19DT05URVhU
XzNEKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIgorI2lmIFBMQVRGT1JN
KE1BQykgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTE2LDggKzUxNiw4IEBAIHZvaWQgQ2hyb21lOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogI2VuZGlmCiAgICAgbV9wYWdlLnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkKLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1h
bmFnZXIoKS5zY3JlZW5EaWRDaGFuZ2UoZGlzcGxheUlELCB0aGlzKTsKKyNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorICAgIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnNjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQs
IHRoaXMpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8u
dHh0CmluZGV4IDE1OTY5ZjkzNWVkODIyNGRmZDMwNTIwZjliNjc5OTQ2ZDI1ODQyZjkuLjQyMWRm
YmQ5NTc1NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMjcsNyArMjcsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9h
dFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBw
ZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmlu
ZGV4IDM1M2MxNDFkZGE3OTQ5NjAxN2I2YWI0ZmZmOWU0M2Q0NDA3ZGJiNWIuLmZlMjY2OWM0MjM0
MzM5ZjFlNDA4MWJhOGUwMzMzZmNjOWE4NzQxODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtNyw3ICs3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0aW9u
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBw
ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJGUFNDb3VudGVyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuY3BwCmluZGV4
IDMzZjFkNThkOWEyZjcwNWJlNTFmNzIwMmZkMTdkM2JhMmY5MTc5MzMuLjZkNzQyNmQ4ZjFjMzcy
ZDZmMDE1ZDBkZTYzZDMyNmFkYTQ2YmNlNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1dlYkdMU3RhdGVUcmFja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9XZWJHTFN0YXRlVHJhY2tlci5jcHAKQEAgLTM2LDEwICszNiwxMCBAQCBXZWJHTFN0YXRlVHJh
Y2tlcjo6V2ViR0xTdGF0ZVRyYWNrZXIoU3RhdGVDaGFuZ2VIYW5kbGVyJiYgaGFuZGxlcikKIHsK
IH0KIAotYXV0byBXZWJHTFN0YXRlVHJhY2tlcjo6dG9rZW4oR3JhcGhpY3NDb250ZXh0M0RQb3dl
clByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlKSAtPiBUb2tlbgorYXV0byBXZWJHTFN0YXRlVHJh
Y2tlcjo6dG9rZW4oR3JhcGhpY3NDb250ZXh0R0xQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJl
bmNlKSAtPiBUb2tlbgogewogICAgIC8vIFdlIG9ubHkgdHJhY2sgaGlnaCBwZXJmb3JtYW5jZSBX
ZWJHTCBjb250ZXh0cyBhdCB0aGUgbW9tZW50LgotICAgIGlmIChwb3dlclByZWZlcmVuY2UgIT0g
R3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkhpZ2hQZXJmb3JtYW5jZSkKKyAgICBp
ZiAocG93ZXJQcmVmZXJlbmNlICE9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpI
aWdoUGVyZm9ybWFuY2UpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgcmV0dXJuIG1fd2ViR0xD
b250ZXh0Q291bnRlci5jb3VudCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dlYkdM
U3RhdGVUcmFja2VyLmgKaW5kZXggYjRjOGNjMmQ3YmU0ZThmYzI5YWEwYWIzZTM2NDliYjYzZTNj
ODRmMC4uODQ0NjgxZTY4ZTZhMDgyMDJkMjEzMWU2ZWEzMjJhMzVjM2Q2Mjc2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5oCkBAIC0yNyw3ICsyNyw3IEBA
CiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREF0dHJp
YnV0ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCIKICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlci5oPgogCkBAIC00
Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBXZWJHTENvbnRleHRDb3VudGVyID0gUmVm
Q291bnRlcjxXZWJHTENvbnRleHRDb3VudGVyVHlwZT47CiAgICAgdXNpbmcgVG9rZW4gPSBXZWJH
TENvbnRleHRDb3VudGVyOjpUb2tlbjsKIAotICAgIFRva2VuIHRva2VuKEdyYXBoaWNzQ29udGV4
dDNEUG93ZXJQcmVmZXJlbmNlKTsKKyAgICBUb2tlbiB0b2tlbihHcmFwaGljc0NvbnRleHRHTFBv
d2VyUHJlZmVyZW5jZSk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVXZWJHTFN0YXRlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktp
dEJyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktp
dEJyaWRnZS5jcHAKaW5kZXggYTEzZmQ2YjFiYmE0Nzc4MmJjZTkyNzE4NDQ4YmM5ZjEwMzY4N2Y1
YS4uODkyN2FhY2Y2Yzg2YjZiMjQwNDhiN2YyYTY2NzY3ZDhkYzUyYTIwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNw
cApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKIAog
I2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAt
MjMxLDQgKzIzMSw0IEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OmFuZ2xlQXZhaWxhYmxlKCkK
IAogfQogCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCisjZW5kaWYgLy8g
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
OGYyYTAzODYxOTk0MjI2YzkzNGNhNjUxYTBkYjFiOTBhZDMxMjc5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuc2lvbnMzRC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEV4dGVuc2lvbnMzRF9oCi0jZGVmaW5lIEV4dGVuc2lvbnMzRF9oCi0KLSNp
bmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGNv
bnRhaW5pbmcgb25seSBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zLgotLy8gSW1wbGVtZW50YXRpb25z
IG11c3QgcHJvdmlkZSBhIHN1YmNsYXNzLgotLy8KLS8vIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9u
cyBhcmUgZGVmaW5lZCBiZWxvdyBhbmQgaW4gc3ViY2xhc3NlcywKLS8vIHBvc3NpYmx5IHBsYXRm
b3JtLXNwZWNpZmljIG9uZXMuCi0vLwotLy8gQ2FsbGluZyBhbnkgZXh0ZW5zaW9uIGZ1bmN0aW9u
IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgY29udGV4dAotLy8gbXVzdCBiZSBhIG5vLW9w
OyBpbiBwYXJ0aWN1bGFyLCBpdCBtYXkgbm90IGhhdmUgc2lkZSBlZmZlY3RzLiBJbgotLy8gdGhp
cyBzaXR1YXRpb24sIGlmIHRoZSBmdW5jdGlvbiBoYXMgYSByZXR1cm4gdmFsdWUsIDAgaXMgcmV0
dXJuZWQuCi1jbGFzcyBFeHRlbnNpb25zM0QgewotcHVibGljOgotICAgIHZpcnR1YWwgfkV4dGVu
c2lvbnMzRCgpID0gZGVmYXVsdDsKLQotICAgIC8vIFN1cHBvcnRlZCBleHRlbnNpb25zOgotICAg
IC8vICAgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ci0gICAgLy8gICBHTF9FWFRfcmVh
ZF9mb3JtYXRfYmdyYQotICAgIC8vICAgR0xfQVJCX3JvYnVzdG5lc3MKLSAgICAvLyAgIEdMX0FS
Ql90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28gLyBHTF9PRVNfdGV4dHVyZV9ucG90Ci0gICAgLy8g
ICBHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwgLyBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwKLSAgICAvLyAgIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgLyBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZQotICAgIC8vICAgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9f
dGV4dHVyZQotICAgIC8vICAgR0xfT0VTX3RleHR1cmVfZmxvYXQKLSAgICAvLyAgIEdMX09FU190
ZXh0dXJlX2Zsb2F0X2xpbmVhcgotICAgIC8vICAgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdAot
ICAgIC8vICAgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIKLSAgICAvLyAgIEdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgIC8vICAgR0xfT0VTX3JnYjhfcmdiYTgKLSAgICAv
LyAgIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgLy8gICBHTF9PRVNfZWxlbWVudF9p
bmRleF91aW50Ci0gICAgLy8gICBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKLSAg
ICAvLyAgIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSAob25seSB0aGUgc3Vic2V0IHJlcXVpcmVk
IHRvCi0gICAgLy8gICAgIGltcGxlbWVudCBJT1N1cmZhY2UgYmluZGluZzsgaXQncyByZWNvbW1l
bmRlZCB0byBzdXBwb3J0Ci0gICAgLy8gICAgIHRoaXMgb25seSBvbiBNYWMgT1MgWCB0byBsaW1p
dCB0aGUgYW1vdW50IG9mIGNvZGUgZGVwZW5kZW50Ci0gICAgLy8gICAgIG9uIHRoaXMgZXh0ZW5z
aW9uKQotICAgIC8vICAgR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQotICAgIC8vICAg
R0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fczN0YwotICAgIC8vICAgR0xfT0VTX2NvbXByZXNz
ZWRfRVRDMV9SR0I4X3RleHR1cmUKLSAgICAvLyAgIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9u
X3B2cnRjCi0gICAgLy8gICBHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hkcgotICAg
IC8vICAgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKLSAgICAvLyAgIEVYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgIC8vICAgR0xfRVhUX2RlYnVnX21hcmtlcgot
ICAgIC8vICAgR0xfQVJCX2RyYXdfYnVmZmVycyAvIEdMX0VYVF9kcmF3X2J1ZmZlcnMKLSAgICAv
LyAgIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKLQotICAgIC8vIFRha2VzIGZ1bGwgbmFtZSBv
ZiBleHRlbnNpb247IGZvciBleGFtcGxlLAotICAgIC8vICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRf
QkdSQTg4ODgiLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKSA9IDA7
Ci0KLSAgICAvLyBDZXJ0YWluIE9wZW5HTCBhbmQgV2ViR0wgaW1wbGVtZW50YXRpb25zIG1heSBz
dXBwb3J0IGVuYWJsaW5nCi0gICAgLy8gZXh0ZW5zaW9ucyBsYXppbHkuIFRoaXMgbWV0aG9kIG1h
eSBvbmx5IGJlIGNhbGxlZCB3aXRoCi0gICAgLy8gZXh0ZW5zaW9uIG5hbWVzIGZvciB3aGljaCBz
dXBwb3J0cyByZXR1cm5zIHRydWUuCi0gICAgdmlydHVhbCB2b2lkIGVuc3VyZUVuYWJsZWQoY29u
c3QgU3RyaW5nJikgPSAwOwotCi0gICAgLy8gVGFrZXMgZnVsbCBuYW1lIG9mIGV4dGVuc2lvbjog
Zm9yIGV4YW1wbGUsICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiLgotICAgIC8vIENo
ZWNrcyB0byBzZWUgd2hldGhlciB0aGUgZ2l2ZW4gZXh0ZW5zaW9uIGlzIGFjdHVhbGx5IGVuYWJs
ZWQgKHNlZSBlbnN1cmVFbmFibGVkKS4KLSAgICAvLyBIYXMgbm8gb3RoZXIgc2lkZS1lZmZlY3Rz
LgotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJikgPSAwOwotCi0gICAg
ZW51bSBFeHRlbnNpb25zRW51bVR5cGUgewotICAgICAgICAvLyBFWFRfc1JHQiBmb3JtYXRzCi0g
ICAgICAgIFNSR0JfRVhUID0gMHg4QzQwLAotICAgICAgICBTUkdCX0FMUEhBX0VYVCA9IDB4OEM0
MiwKLSAgICAgICAgU1JHQjhfQUxQSEE4X0VYVCA9IDB4OEM0MywKLSAgICAgICAgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQgPSAweDgyMTAsCi0KLSAgICAgICAgLy8g
RVhUX2JsZW5kX21pbm1heCBlbnVtcwotICAgICAgICBNSU5fRVhUID0gMHg4MDA3LAotICAgICAg
ICBNQVhfRVhUID0gMHg4MDA4LAotCi0gICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9C
R1JBODg4OCBlbnVtcwotICAgICAgICBCR1JBX0VYVCA9IDB4ODBFMSwKLQotICAgICAgICAvLyBH
TF9BUkJfcm9idXN0bmVzcyBlbnVtcwotICAgICAgICBHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkIg
PSAweDgyNTMsCi0gICAgICAgIElOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCID0gMHg4MjU0LAot
ICAgICAgICBVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCID0gMHg4MjU1LAotICAgICAgICBDT05U
RVhUX1JPQlVTVF9BQ0NFU1MgPSAweDkwRjMsCi0KLSAgICAgICAgLy8gR0xfRVhUL09FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbCBlbnVtcwotICAgICAgICBERVBUSDI0X1NURU5DSUw4ID0gMHg4OEYw
LAotICAgICAgICAKLSAgICAgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBuYW1lcwot
ICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSID0gMHg4Q0E4LAotICAgICAgICBEUkFXX0ZSQU1FQlVG
RkVSID0gMHg4Q0E5LAotICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQTYs
IAotICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQUEsCi0gICAgICAgIAot
ICAgICAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBuYW1lcwotICAgICAg
ICBSRU5ERVJCVUZGRVJfU0FNUExFUyA9IDB4OENBQiwKLSAgICAgICAgRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NVUxUSVNBTVBMRSA9IDB4OEQ1NiwKLSAgICAgICAgTUFYX1NBTVBMRVMgPSAweDhE
NTcsCi0KLSAgICAgICAgLy8gR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQot
ICAgICAgICBSRU5ERVJCVUZGRVJfU0FNUExFU19JTUcgPSAweDkxMzMsCi0gICAgICAgIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfSU1HID0gMHg5MTM0LAotICAgICAgICBNQVhf
U0FNUExFU19JTUcgPSAweDkxMzUsCi0gICAgICAgIFRFWFRVUkVfU0FNUExFU19JTUcgPSAweDkx
MzYsCi0KLSAgICAgICAgLy8gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIG5hbWVzCi0gICAg
ICAgIEZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTID0gMHg4QjhCLAotCi0gICAg
ICAgIC8vIEdMX09FU19yZ2I4X3JnYmE4IG5hbWVzCi0gICAgICAgIFJHQjhfT0VTID0gMHg4MDUx
LAotICAgICAgICBSR0JBOF9PRVMgPSAweDgwNTgsCi0gICAgICAgIAotICAgICAgICAvLyBHTF9P
RVNfdmVydGV4X2FycmF5X29iamVjdCBuYW1lcwotICAgICAgICBWRVJURVhfQVJSQVlfQklORElO
R19PRVMgPSAweDg1QjUsCi0KLSAgICAgICAgLy8gR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJf
c291cmNlCi0gICAgICAgIFRSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgPSAw
eDkzQTAsCi0KLSAgICAgICAgLy8gR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlCi0gICAgICAgIFRF
WFRVUkVfUkVDVEFOR0xFX0FSQiA9ICAweDg0RjUsCi0gICAgICAgIFRFWFRVUkVfQklORElOR19S
RUNUQU5HTEVfQVJCID0gMHg4NEY2LAotCi0gICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDEKLSAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fczN0Ywot
ICAgICAgICBDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUID0gMHg4M0YwLAotICAgICAgICBD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMSwKLSAgICAgICAgQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjIsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfRVhUID0gMHg4M0YzLAotCi0gICAgICAgIC8vIEdMX09FU19jb21wcmVzc2VkX0VU
QzFfUkdCOF90ZXh0dXJlCi0gICAgICAgIEVUQzFfUkdCOF9PRVMgPSAweDhENjQsCi0KLSAgICAg
ICAgLy8gV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YwotICAgICAgICBDT01QUkVTU0VEX1Ix
MV9FQUMgPSAweDkyNzAsCi0gICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgPSAweDky
NzEsCi0gICAgICAgIENPTVBSRVNTRURfUkcxMV9FQUMgPSAweDkyNzIsCi0gICAgICAgIENPTVBS
RVNTRURfU0lHTkVEX1JHMTFfRUFDID0gMHg5MjczLAotICAgICAgICBDT01QUkVTU0VEX1JHQjhf
RVRDMiA9IDB4OTI3NCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9FVEMyID0gMHg5Mjc1LAot
ICAgICAgICBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc2
LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiA9IDB4
OTI3NywKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyA9IDB4OTI3OCwKLSAgICAg
ICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMgPSAweDkyNzksCi0KLSAgICAgICAg
Ly8gR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMKLSAgICAgICAgQ09NUFJFU1NFRF9S
R0JfUFZSVENfNEJQUFYxX0lNRyA9IDB4OEMwMCwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JfUFZS
VENfMkJQUFYxX0lNRyA9IDB4OEMwMSwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRC
UFBWMV9JTUcgPSAweDhDMDIsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFf
SU1HID0gMHg4QzAzLAotCi0gICAgICAgIC8vIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJl
Ci0gICAgICAgIENPTVBSRVNTRURfQVRDX1JHQl9BTUQgPSAweDhDOTIsCi0gICAgICAgIENPTVBS
RVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EID0gMHg4QzkzLAotICAgICAgICBDT01Q
UkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQgPSAweDg3RUUsCi0gICAgICAg
IAotICAgICAgICAvLyBHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hkcgotICAgICAg
ICBDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSID0gMHg5M0IwLAotICAgICAgICBDT01QUkVT
U0VEX1JHQkFfQVNUQ181eDRfS0hSID0gMHg5M0IxLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFf
QVNUQ181eDVfS0hSID0gMHg5M0IyLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ182eDVf
S0hSID0gMHg5M0IzLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSID0gMHg5
M0I0LAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSID0gMHg5M0I1LAotICAg
ICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSID0gMHg5M0I2LAotICAgICAgICBDT01Q
UkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSID0gMHg5M0I3LAotICAgICAgICBDT01QUkVTU0VEX1JH
QkFfQVNUQ18xMHg1X0tIUiA9IDB4OTNCOCwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENf
MTB4Nl9LSFIgPSAweDkzQjksCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hS
ID0gMHg5M0JBLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFIgPSAweDkz
QkIsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUiA9IDB4OTNCQywKLSAg
ICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSID0gMHg5M0JELAotICAgICAgICAK
LSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSID0gMHg5M0QwLAot
ICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFIgPSAweDkzRDEsCi0g
ICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiA9IDB4OTNEMiwKLSAg
ICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSID0gMHg5M0QzLAotICAg
ICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFIgPSAweDkzRDQsCi0gICAg
ICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUiA9IDB4OTNENSwKLSAgICAg
ICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSID0gMHg5M0Q2LAotICAgICAg
ICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFIgPSAweDkzRDcsCi0gICAgICAg
IENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFIgPSAweDkzRDgsCi0gICAgICAg
IENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFIgPSAweDkzRDksCi0gICAgICAg
IENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgPSAweDkzREEsCi0gICAgICAg
IENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSID0gMHg5M0RCLAotICAgICAg
ICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiA9IDB4OTNEQywKLSAgICAg
ICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIgPSAweDkzREQsCi0KLSAg
ICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIFRFWFRV
UkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZFLAotICAgICAgICBNQVhfVEVYVFVSRV9NQVhf
QU5JU09UUk9QWV9FWFQgPSAweDg0RkYsCi0KLSAgICAgICAgLy8gR0xfQVJCX2RyYXdfYnVmZmVy
cyAvIEdMX0VYVF9kcmF3X2J1ZmZlcnMKLSAgICAgICAgTUFYX0RSQVdfQlVGRkVSU19FWFQgPSAw
eDg4MjQsCi0gICAgICAgIERSQVdfQlVGRkVSMF9FWFQgPSAweDg4MjUsCi0gICAgICAgIERSQVdf
QlVGRkVSMV9FWFQgPSAweDg4MjYsCi0gICAgICAgIERSQVdfQlVGRkVSMl9FWFQgPSAweDg4Mjcs
Ci0gICAgICAgIERSQVdfQlVGRkVSM19FWFQgPSAweDg4MjgsCi0gICAgICAgIERSQVdfQlVGRkVS
NF9FWFQgPSAweDg4MjksCi0gICAgICAgIERSQVdfQlVGRkVSNV9FWFQgPSAweDg4MkEsCi0gICAg
ICAgIERSQVdfQlVGRkVSNl9FWFQgPSAweDg4MkIsCi0gICAgICAgIERSQVdfQlVGRkVSN19FWFQg
PSAweDg4MkMsCi0gICAgICAgIERSQVdfQlVGRkVSOF9FWFQgPSAweDg4MkQsCi0gICAgICAgIERS
QVdfQlVGRkVSOV9FWFQgPSAweDg4MkUsCi0gICAgICAgIERSQVdfQlVGRkVSMTBfRVhUID0gMHg4
ODJGLAotICAgICAgICBEUkFXX0JVRkZFUjExX0VYVCA9IDB4ODgzMCwKLSAgICAgICAgRFJBV19C
VUZGRVIxMl9FWFQgPSAweDg4MzEsCi0gICAgICAgIERSQVdfQlVGRkVSMTNfRVhUID0gMHg4ODMy
LAotICAgICAgICBEUkFXX0JVRkZFUjE0X0VYVCA9IDB4ODgzMywKLSAgICAgICAgRFJBV19CVUZG
RVIxNV9FWFQgPSAweDg4MzQsCi0gICAgICAgIE1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgPSAw
eDhDREYsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQwX0VYVCA9IDB4OENFMCwKLSAgICAgICAg
Q09MT1JfQVRUQUNITUVOVDFfRVhUID0gMHg4Q0UxLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5U
Ml9FWFQgPSAweDhDRTIsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQzX0VYVCA9IDB4OENFMywK
LSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDRfRVhUID0gMHg4Q0U0LAotICAgICAgICBDT0xPUl9B
VFRBQ0hNRU5UNV9FWFQgPSAweDhDRTUsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ2X0VYVCA9
IDB4OENFNiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDdfRVhUID0gMHg4Q0U3LAotICAgICAg
ICBDT0xPUl9BVFRBQ0hNRU5UOF9FWFQgPSAweDhDRTgsCi0gICAgICAgIENPTE9SX0FUVEFDSE1F
TlQ5X0VYVCA9IDB4OENFOSwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEwX0VYVCA9IDB4OENF
QSwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDExX0VYVCA9IDB4OENFQiwKLSAgICAgICAgQ09M
T1JfQVRUQUNITUVOVDEyX0VYVCA9IDB4OENFQywKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEz
X0VYVCA9IDB4OENFRCwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDE0X0VYVCA9IDB4OENFRSwK
LSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDE1X0VYVCA9IDB4OENFRgotICAgIH07Ci0KLSAgICAv
LyBHTF9BUkJfcm9idXN0bmVzcwotICAgIC8vIE5vdGU6IFRoaXMgbWV0aG9kJ3MgYmVoYXZpb3Ig
ZGlmZmVycyBmcm9tIHRoZSBHTF9BUkJfcm9idXN0bmVzcwotICAgIC8vIHNwZWNpZmljYXRpb24g
aW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0gICAgLy8gVGhlIGltcGxlbWVudGF0aW9uIG11c3Qgbm90
IHJlc2V0IHRoZSBlcnJvciBzdGF0ZSBkdXJpbmcgdGhpcyBjYWxsLgotICAgIC8vIElmIGdldEdy
YXBoaWNzUmVzZXRTdGF0dXNBUkIgcmV0dXJucyBhbiBlcnJvciwgaXQgc2hvdWxkIGNvbnRpbnVl
Ci0gICAgLy8gcmV0dXJuaW5nIHRoZSBzYW1lIGVycm9yLiBSZXN0b3JpbmcgdGhlIEdyYXBoaWNz
Q29udGV4dDNEIGlzIGhhbmRsZWQKLSAgICAvLyBleHRlcm5hbGx5LgotICAgIHZpcnR1YWwgaW50
IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9IDA7Ci0gICAgCi0gICAgLy8gR0xfQU5HTEVf
ZnJhbWVidWZmZXJfYmxpdAotICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBz
cmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9u
ZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNp
Z25lZCBsb25nIGZpbHRlcikgPSAwOwotICAgIAotICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25l
ZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCkgPSAwOwotICAgIAotICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0g
ICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9
IDA7Ci0gICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3Jt
M0RPYmplY3QpID0gMDsKLQotICAgIC8vIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJj
ZQotICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0
Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICAvLyBFWFQgUm9idXN0bmVzcyAtIHVzZXMgZ2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQgotICAgIHZpcnR1YWwgdm9pZCByZWFkblBpeGVsc0VYVChpbnQg
eCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBs
b2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgPSAwOwotCi0gICAgLy8gR0xfRVhUX2Rl
YnVnX21hcmtlcgotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpID0g
MDsKLQotICAgIC8vIEdMX0FSQl9kcmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZmZXJzCi0g
ICAgdmlydHVhbCB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51
bSogYnVmcykgPSAwOwotCi0gICAgLy8gR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cwotICAgIHZp
cnR1YWwgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNv
dW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5k
ZXgsIEdDM0R1aW50IGRpdmlzb3IpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc05WSURJQSgp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBTUQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlz
SW50ZWwoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzSW1hZ2luYXRpb24oKSA9IDA7Ci0gICAg
dmlydHVhbCBTdHJpbmcgdmVuZG9yKCkgPSAwOwotCi0gICAgLy8gU29tZSBjb25maWd1cmF0aW9u
cyBoYXZlIGJ1Z3MgcmVnYXJkaW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBpbiB0aGVpciBPcGVuR0wg
ZHJpdmVycwotICAgIC8vIHRoYXQgbXVzdCBiZSBhdm9pZGVkLiBQb3J0cyBzaG91bGQgaW1wbGVt
ZW50IHRoZXNlIGZsYWdzIG9uIHN1Y2ggY29uZmlndXJhdGlvbnMuCi0gICAgdmlydHVhbCBib29s
IHJlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCByZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSA9IDA7Ci0KLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEV4dGVuc2lvbnMzRF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zR0wuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnNHTC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdiNGZlZjI1MjJhYjRmZjU3ZjE3NjQwZGU4MTgzYTgwZmNkMGJlNjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zR0wuaApAQCAt
MCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlczNELmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBUaGlzIGlzIGEgYmFzZSBjbGFzcyBjb250YWluaW5nIG9ubHkgcHVy
ZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKy8vIEltcGxlbWVudGF0aW9ucyBtdXN0IHByb3ZpZGUgYSBz
dWJjbGFzcy4KKy8vCisvLyBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgYXJlIGRlZmluZWQgYmVs
b3cgYW5kIGluIHN1YmNsYXNzZXMsCisvLyBwb3NzaWJseSBwbGF0Zm9ybS1zcGVjaWZpYyBvbmVz
LgorLy8KKy8vIENhbGxpbmcgYW55IGV4dGVuc2lvbiBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkIGJ5
IHRoZSBjdXJyZW50IGNvbnRleHQKKy8vIG11c3QgYmUgYSBuby1vcDsgaW4gcGFydGljdWxhciwg
aXQgbWF5IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gSW4KKy8vIHRoaXMgc2l0dWF0aW9uLCBpZiB0
aGUgZnVuY3Rpb24gaGFzIGEgcmV0dXJuIHZhbHVlLCAwIGlzIHJldHVybmVkLgorY2xhc3MgRXh0
ZW5zaW9uc0dMIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0woKSA9IGRlZmF1
bHQ7CisKKyAgICAvLyBTdXBwb3J0ZWQgZXh0ZW5zaW9uczoKKyAgICAvLyAgIEdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIC8vICAgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEKKyAg
ICAvLyAgIEdMX0FSQl9yb2J1c3RuZXNzCisgICAgLy8gICBHTF9BUkJfdGV4dHVyZV9ub25fcG93
ZXJfb2ZfdHdvIC8gR0xfT0VTX3RleHR1cmVfbnBvdAorICAgIC8vICAgR0xfRVhUX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsIC8gR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsCisgICAgLy8gICBHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IC8gR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUK
KyAgICAvLyAgIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKKyAgICAvLyAg
IEdMX09FU190ZXh0dXJlX2Zsb2F0CisgICAgLy8gICBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5l
YXIKKyAgICAvLyAgIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICAvLyAgIEdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyCisgICAgLy8gICBHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMKKyAgICAvLyAgIEdMX09FU19yZ2I4X3JnYmE4CisgICAgLy8gICBHTF9PRVNfdmVydGV4
X2FycmF5X29iamVjdAorICAgIC8vICAgR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludAorICAgIC8v
ICAgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCisgICAgLy8gICBHTF9BUkJfdGV4
dHVyZV9yZWN0YW5nbGUgKG9ubHkgdGhlIHN1YnNldCByZXF1aXJlZCB0bworICAgIC8vICAgICBp
bXBsZW1lbnQgSU9TdXJmYWNlIGJpbmRpbmc7IGl0J3MgcmVjb21tZW5kZWQgdG8gc3VwcG9ydAor
ICAgIC8vICAgICB0aGlzIG9ubHkgb24gTWFjIE9TIFggdG8gbGltaXQgdGhlIGFtb3VudCBvZiBj
b2RlIGRlcGVuZGVudAorICAgIC8vICAgICBvbiB0aGlzIGV4dGVuc2lvbikKKyAgICAvLyAgIEdM
X0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAvLyAgIEdMX0VYVF90ZXh0dXJlX2Nv
bXByZXNzaW9uX3MzdGMKKyAgICAvLyAgIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0
dXJlCisgICAgLy8gICBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YworICAgIC8vICAg
R0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIKKyAgICAvLyAgIEdMX0tIUl90ZXh0
dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCisgICAgLy8gICBFWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMKKyAgICAvLyAgIEdMX0VYVF9kZWJ1Z19tYXJrZXIKKyAgICAvLyAgIEdMX0FSQl9k
cmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZmZXJzCisgICAgLy8gICBHTF9BTkdMRV9pbnN0
YW5jZWRfYXJyYXlzCisKKyAgICAvLyBUYWtlcyBmdWxsIG5hbWUgb2YgZXh0ZW5zaW9uOyBmb3Ig
ZXhhbXBsZSwKKyAgICAvLyAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ii4KKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJikgPSAwOworCisgICAgLy8gQ2VydGFp
biBPcGVuR0wgYW5kIFdlYkdMIGltcGxlbWVudGF0aW9ucyBtYXkgc3VwcG9ydCBlbmFibGluZwor
ICAgIC8vIGV4dGVuc2lvbnMgbGF6aWx5LiBUaGlzIG1ldGhvZCBtYXkgb25seSBiZSBjYWxsZWQg
d2l0aAorICAgIC8vIGV4dGVuc2lvbiBuYW1lcyBmb3Igd2hpY2ggc3VwcG9ydHMgcmV0dXJucyB0
cnVlLgorICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYpID0gMDsK
KworICAgIC8vIFRha2VzIGZ1bGwgbmFtZSBvZiBleHRlbnNpb246IGZvciBleGFtcGxlLCAiR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ii4KKyAgICAvLyBDaGVja3MgdG8gc2VlIHdoZXRo
ZXIgdGhlIGdpdmVuIGV4dGVuc2lvbiBpcyBhY3R1YWxseSBlbmFibGVkIChzZWUgZW5zdXJlRW5h
YmxlZCkuCisgICAgLy8gSGFzIG5vIG90aGVyIHNpZGUtZWZmZWN0cy4KKyAgICB2aXJ0dWFsIGJv
b2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpID0gMDsKKworICAgIGVudW0gRXh0ZW5zaW9uc0Vu
dW1UeXBlIHsKKyAgICAgICAgLy8gRVhUX3NSR0IgZm9ybWF0cworICAgICAgICBTUkdCX0VYVCA9
IDB4OEM0MCwKKyAgICAgICAgU1JHQl9BTFBIQV9FWFQgPSAweDhDNDIsCisgICAgICAgIFNSR0I4
X0FMUEhBOF9FWFQgPSAweDhDNDMsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09M
T1JfRU5DT0RJTkdfRVhUID0gMHg4MjEwLAorCisgICAgICAgIC8vIEVYVF9ibGVuZF9taW5tYXgg
ZW51bXMKKyAgICAgICAgTUlOX0VYVCA9IDB4ODAwNywKKyAgICAgICAgTUFYX0VYVCA9IDB4ODAw
OCwKKworICAgICAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggZW51bXMKKyAg
ICAgICAgQkdSQV9FWFQgPSAweDgwRTEsCisKKyAgICAgICAgLy8gR0xfQVJCX3JvYnVzdG5lc3Mg
ZW51bXMKKyAgICAgICAgR1VJTFRZX0NPTlRFWFRfUkVTRVRfQVJCID0gMHg4MjUzLAorICAgICAg
ICBJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1NCwKKyAgICAgICAgVU5LTk9XTl9D
T05URVhUX1JFU0VUX0FSQiA9IDB4ODI1NSwKKyAgICAgICAgQ09OVEVYVF9ST0JVU1RfQUNDRVNT
ID0gMHg5MEYzLAorCisgICAgICAgIC8vIEdMX0VYVC9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwg
ZW51bXMKKyAgICAgICAgREVQVEgyNF9TVEVOQ0lMOCA9IDB4ODhGMCwKKworICAgICAgICAvLyBH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IG5hbWVzCisgICAgICAgIFJFQURfRlJBTUVCVUZGRVIg
PSAweDhDQTgsCisgICAgICAgIERSQVdfRlJBTUVCVUZGRVIgPSAweDhDQTksCisgICAgICAgIERS
QVdfRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBNiwKKyAgICAgICAgUkVBRF9GUkFNRUJVRkZF
Ul9CSU5ESU5HID0gMHg4Q0FBLAorCisgICAgICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlIG5hbWVzCisgICAgICAgIFJFTkRFUkJVRkZFUl9TQU1QTEVTID0gMHg4Q0FCLAor
ICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFID0gMHg4RDU2LAorICAg
ICAgICBNQVhfU0FNUExFUyA9IDB4OEQ1NywKKworICAgICAgICAvLyBHTF9JTUdfbXVsdGlzYW1w
bGVkX3JlbmRlcl90b190ZXh0dXJlCisgICAgICAgIFJFTkRFUkJVRkZFUl9TQU1QTEVTX0lNRyA9
IDB4OTEzMywKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9JTUcg
PSAweDkxMzQsCisgICAgICAgIE1BWF9TQU1QTEVTX0lNRyA9IDB4OTEzNSwKKyAgICAgICAgVEVY
VFVSRV9TQU1QTEVTX0lNRyA9IDB4OTEzNiwKKworICAgICAgICAvLyBHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMgbmFtZXMKKyAgICAgICAgRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElO
VF9PRVMgPSAweDhCOEIsCisKKyAgICAgICAgLy8gR0xfT0VTX3JnYjhfcmdiYTggbmFtZXMKKyAg
ICAgICAgUkdCOF9PRVMgPSAweDgwNTEsCisgICAgICAgIFJHQkE4X09FUyA9IDB4ODA1OCwKKwor
ICAgICAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCBuYW1lcworICAgICAgICBWRVJU
RVhfQVJSQVlfQklORElOR19PRVMgPSAweDg1QjUsCisKKyAgICAgICAgLy8gR0xfQU5HTEVfdHJh
bnNsYXRlZF9zaGFkZXJfc291cmNlCisgICAgICAgIFRSQU5TTEFURURfU0hBREVSX1NPVVJDRV9M
RU5HVEhfQU5HTEUgPSAweDkzQTAsCisKKyAgICAgICAgLy8gR0xfQVJCX3RleHR1cmVfcmVjdGFu
Z2xlCisgICAgICAgIFRFWFRVUkVfUkVDVEFOR0xFX0FSQiA9ICAweDg0RjUsCisgICAgICAgIFRF
WFRVUkVfQklORElOR19SRUNUQU5HTEVfQVJCID0gMHg4NEY2LAorCisgICAgICAgIC8vIEdMX0VY
VF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfY29t
cHJlc3Npb25fczN0YworICAgICAgICBDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUID0gMHg4
M0YwLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMSwKKyAg
ICAgICAgQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjIsCisgICAgICAgIENP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzLAorCisgICAgICAgIC8vIEdMX09F
U19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCisgICAgICAgIEVUQzFfUkdCOF9PRVMgPSAw
eDhENjQsCisKKyAgICAgICAgLy8gV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YworICAgICAg
ICBDT01QUkVTU0VEX1IxMV9FQUMgPSAweDkyNzAsCisgICAgICAgIENPTVBSRVNTRURfU0lHTkVE
X1IxMV9FQUMgPSAweDkyNzEsCisgICAgICAgIENPTVBSRVNTRURfUkcxMV9FQUMgPSAweDkyNzIs
CisgICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDID0gMHg5MjczLAorICAgICAgICBD
T01QUkVTU0VEX1JHQjhfRVRDMiA9IDB4OTI3NCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9F
VEMyID0gMHg5Mjc1LAorICAgICAgICBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhB
MV9FVEMyID0gMHg5Mjc2LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9B
TFBIQTFfRVRDMiA9IDB4OTI3NywKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyA9
IDB4OTI3OCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMgPSAweDky
NzksCisKKyAgICAgICAgLy8gR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMKKyAgICAg
ICAgQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyA9IDB4OEMwMCwKKyAgICAgICAgQ09N
UFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyA9IDB4OEMwMSwKKyAgICAgICAgQ09NUFJFU1NF
RF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcgPSAweDhDMDIsCisgICAgICAgIENPTVBSRVNTRURfUkdC
QV9QVlJUQ18yQlBQVjFfSU1HID0gMHg4QzAzLAorCisgICAgICAgIC8vIEdMX0FNRF9jb21wcmVz
c2VkX0FUQ190ZXh0dXJlCisgICAgICAgIENPTVBSRVNTRURfQVRDX1JHQl9BTUQgPSAweDhDOTIs
CisgICAgICAgIENPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EID0gMHg4Qzkz
LAorICAgICAgICBDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQgPSAw
eDg3RUUsCisKKyAgICAgICAgLy8gR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIK
KyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiA9IDB4OTNCMCwKKyAgICAgICAg
Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUiA9IDB4OTNCMSwKKyAgICAgICAgQ09NUFJFU1NF
RF9SR0JBX0FTVENfNXg1X0tIUiA9IDB4OTNCMiwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FT
VENfNng1X0tIUiA9IDB4OTNCMywKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tI
UiA9IDB4OTNCNCwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUiA9IDB4OTNC
NSwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUiA9IDB4OTNCNiwKKyAgICAg
ICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiA9IDB4OTNCNywKKyAgICAgICAgQ09NUFJF
U1NFRF9SR0JBX0FTVENfMTB4NV9LSFIgPSAweDkzQjgsCisgICAgICAgIENPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDZfS0hSID0gMHg5M0I5LAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18x
MHg4X0tIUiA9IDB4OTNCQSwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hS
ID0gMHg5M0JCLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFIgPSAweDkz
QkMsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUiA9IDB4OTNCRCwKKwor
ICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFIgPSAweDkzRDAsCisg
ICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUiA9IDB4OTNEMSwKKyAg
ICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSID0gMHg5M0QyLAorICAg
ICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFIgPSAweDkzRDMsCisgICAg
ICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUiA9IDB4OTNENCwKKyAgICAg
ICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSID0gMHg5M0Q1LAorICAgICAg
ICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFIgPSAweDkzRDYsCisgICAgICAg
IENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUiA9IDB4OTNENywKKyAgICAgICAg
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiA9IDB4OTNEOCwKKyAgICAgICAg
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUiA9IDB4OTNEOSwKKyAgICAgICAg
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiA9IDB4OTNEQSwKKyAgICAgICAg
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgPSAweDkzREIsCisgICAgICAg
IENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSID0gMHg5M0RDLAorICAgICAg
ICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUiA9IDB4OTNERCwKKworICAg
ICAgICAvLyBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgVEVYVFVS
RV9NQVhfQU5JU09UUk9QWV9FWFQgPSAweDg0RkUsCisgICAgICAgIE1BWF9URVhUVVJFX01BWF9B
TklTT1RST1BZX0VYVCA9IDB4ODRGRiwKKworICAgICAgICAvLyBHTF9BUkJfZHJhd19idWZmZXJz
IC8gR0xfRVhUX2RyYXdfYnVmZmVycworICAgICAgICBNQVhfRFJBV19CVUZGRVJTX0VYVCA9IDB4
ODgyNCwKKyAgICAgICAgRFJBV19CVUZGRVIwX0VYVCA9IDB4ODgyNSwKKyAgICAgICAgRFJBV19C
VUZGRVIxX0VYVCA9IDB4ODgyNiwKKyAgICAgICAgRFJBV19CVUZGRVIyX0VYVCA9IDB4ODgyNywK
KyAgICAgICAgRFJBV19CVUZGRVIzX0VYVCA9IDB4ODgyOCwKKyAgICAgICAgRFJBV19CVUZGRVI0
X0VYVCA9IDB4ODgyOSwKKyAgICAgICAgRFJBV19CVUZGRVI1X0VYVCA9IDB4ODgyQSwKKyAgICAg
ICAgRFJBV19CVUZGRVI2X0VYVCA9IDB4ODgyQiwKKyAgICAgICAgRFJBV19CVUZGRVI3X0VYVCA9
IDB4ODgyQywKKyAgICAgICAgRFJBV19CVUZGRVI4X0VYVCA9IDB4ODgyRCwKKyAgICAgICAgRFJB
V19CVUZGRVI5X0VYVCA9IDB4ODgyRSwKKyAgICAgICAgRFJBV19CVUZGRVIxMF9FWFQgPSAweDg4
MkYsCisgICAgICAgIERSQVdfQlVGRkVSMTFfRVhUID0gMHg4ODMwLAorICAgICAgICBEUkFXX0JV
RkZFUjEyX0VYVCA9IDB4ODgzMSwKKyAgICAgICAgRFJBV19CVUZGRVIxM19FWFQgPSAweDg4MzIs
CisgICAgICAgIERSQVdfQlVGRkVSMTRfRVhUID0gMHg4ODMzLAorICAgICAgICBEUkFXX0JVRkZF
UjE1X0VYVCA9IDB4ODgzNCwKKyAgICAgICAgTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCA9IDB4
OENERiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDBfRVhUID0gMHg4Q0UwLAorICAgICAgICBD
T0xPUl9BVFRBQ0hNRU5UMV9FWFQgPSAweDhDRTEsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQy
X0VYVCA9IDB4OENFMiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDNfRVhUID0gMHg4Q0UzLAor
ICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNF9FWFQgPSAweDhDRTQsCisgICAgICAgIENPTE9SX0FU
VEFDSE1FTlQ1X0VYVCA9IDB4OENFNSwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDZfRVhUID0g
MHg4Q0U2LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UN19FWFQgPSAweDhDRTcsCisgICAgICAg
IENPTE9SX0FUVEFDSE1FTlQ4X0VYVCA9IDB4OENFOCwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVO
VDlfRVhUID0gMHg4Q0U5LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTBfRVhUID0gMHg4Q0VB
LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTFfRVhUID0gMHg4Q0VCLAorICAgICAgICBDT0xP
Ul9BVFRBQ0hNRU5UMTJfRVhUID0gMHg4Q0VDLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTNf
RVhUID0gMHg4Q0VELAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTRfRVhUID0gMHg4Q0VFLAor
ICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTVfRVhUID0gMHg4Q0VGCisgICAgfTsKKworICAgIC8v
IEdMX0FSQl9yb2J1c3RuZXNzCisgICAgLy8gTm90ZTogVGhpcyBtZXRob2QncyBiZWhhdmlvciBk
aWZmZXJzIGZyb20gdGhlIEdMX0FSQl9yb2J1c3RuZXNzCisgICAgLy8gc3BlY2lmaWNhdGlvbiBp
biB0aGUgZm9sbG93aW5nIHdheToKKyAgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBub3Qg
cmVzZXQgdGhlIGVycm9yIHN0YXRlIGR1cmluZyB0aGlzIGNhbGwuCisgICAgLy8gSWYgZ2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQiByZXR1cm5zIGFuIGVycm9yLCBpdCBzaG91bGQgY29udGludWUK
KyAgICAvLyByZXR1cm5pbmcgdGhlIHNhbWUgZXJyb3IuIFJlc3RvcmluZyB0aGUgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wgaXMgaGFuZGxlZAorICAgIC8vIGV4dGVybmFsbHkuCisgICAgdmlydHVh
bCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID0gMDsKKworICAgIC8vIEdMX0FOR0xF
X2ZyYW1lYnVmZmVyX2JsaXQKKyAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpID0gMDsKKworICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkgPSAwOworCisgICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICB2aXJ0
dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAg
ICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCkgPSAwOworCisgICAgLy8gR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKworICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gdXNlcyBnZXRHcmFwaGljc1Jl
c2V0U3RhdHVzQVJCCisgICAgdmlydHVhbCB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSA9IDA7CisKKyAgICAvLyBHTF9FWFRfZGVidWdfbWFy
a2VyCisgICAgdmlydHVhbCB2b2lkIGluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEdyb3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wR3JvdXBNYXJrZXJFWFQodm9pZCkgPSAwOworCisg
ICAgLy8gR0xfQVJCX2RyYXdfYnVmZmVycyAvIEdMX0VYVF9kcmF3X2J1ZmZlcnMKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpIG4sIGNvbnN0IEdDM0RlbnVtKiBidWZz
KSA9IDA7CisKKyAgICAvLyBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCisgICAgdmlydHVhbCB2
b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0Mz
RHVpbnQgZGl2aXNvcikgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzTlZJRElBKCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBpc0FNRCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlbCgp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnaW5hdGlvbigpID0gMDsKKyAgICB2aXJ0dWFs
IFN0cmluZyB2ZW5kb3IoKSA9IDA7CisKKyAgICAvLyBTb21lIGNvbmZpZ3VyYXRpb25zIGhhdmUg
YnVncyByZWdhcmRpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGluIHRoZWlyIE9wZW5HTCBkcml2ZXJz
CisgICAgLy8gdGhhdCBtdXN0IGJlIGF2b2lkZWQuIFBvcnRzIHNob3VsZCBpbXBsZW1lbnQgdGhl
c2UgZmxhZ3Mgb24gc3VjaCBjb25maWd1cmF0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWly
ZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24oKSA9IDA7CisgICAgdmlydHVhbCBib29sIHJlcXVp
cmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpID0gMDsKKworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9ybWF0Q29udmVydGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zvcm1hdENvbnZlcnRlci5jcHAKaW5kZXggMDllZWM3OGJhZGQwN2U4Nzk0MTc3NDA1MzBlYTVj
NTNhOWRkNjA2ZC4uYjZjNjE4ZTk2MThmZGRmMGQ4YzBhM2Y3ZjY5OTEzN2ZjNGFlOGU2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9ybWF0Q29udmVydGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0
ZXIuY3BwCkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYg
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpCiAKICNpbmNsdWRlICJGb3JtYXRDb252ZXJ0ZXIuaCIKIAogI2lmIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRE5FT04uaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE5FT04uaCIKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUp
CkBAIC0xNzMsMTMgKzE3MywxMyBAQCBpbmxpbmUgdW5zaWduZWQgc2hvcnQgY29udmVydEZsb2F0
VG9IYWxmRmxvYXQoZmxvYXQgZikKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQaXhlbCB1bnBhY2tp
bmcgcm91dGluZXMuCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBmb3Jt
YXQsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIERzdFR5cGU+Cit0ZW1wbGF0ZTxHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBmb3JtYXQsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5
cGVuYW1lIERzdFR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrKGNvbnN0IFNvdXJjZVR5
cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0I4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5h
dGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTE5MSw3ICsxOTEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgs
IHVpbnQ4XwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1I4LCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7
CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzJdOwpAQCAtMjAzLDcgKzIwMyw3IEBA
IHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6QkdSOCwgdWludDhfCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4LCB1
aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0I4LCB1aW50OF90LCB1
aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVsxXTsK
QEAgLTIxNSw3ICsyMTUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4LCB1aW50OAogICAgIH0KIH0KIAot
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpBQkdSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBQkdSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBzb3VyY2VbM107CkBAIC0yMjcsNyArMjI3LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBQkdSOCwg
dWludDgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICAgICBjb25zdCB1aW50MzJfdCogc291cmNlMzIgPSByZWludGVycHJldF9jYXN0X3B0cjxj
b25zdCB1aW50MzJfdCo+KHNvdXJjZSk7CiAgICAgdWludDMyX3QqIGRlc3RpbmF0aW9uMzIgPSBy
ZWludGVycHJldF9jYXN0X3B0cjx1aW50MzJfdCo+KGRlc3RpbmF0aW9uKTsKQEAgLTI0NSw3ICsy
NDUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4LCB1aW50OAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0JBNTU1MSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1
NTUxLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCog
ZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6dW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgoc291
cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTI2NCw3ICsyNjQsNyBAQCB0ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQkE1NTUxLCB1aQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgdWlu
dDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCB1aW50MTZf
dCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1Mp
CiAgICAgU0lNRDo6dW5wYWNrT25lUm93T2ZSR0JBNDQ0NFRvUkdCQTgoc291cmNlLCBkZXN0aW5h
dGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTI4NCw3ICsyODQsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0
NDQ0LCB1aQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUsIHVpbnQxNl90LCB1aW50OF90
Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjp1bnBh
Y2tPbmVSb3dPZlJHQjU2NVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93
KTsKQEAgLTMwMyw3ICszMDMsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgdWludAogICAgIH0KIH0K
IAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25b
MF0gPSBzb3VyY2VbMF07CkBAIC0zMTUsNyArMzE1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSOCwgdWludDhf
dCwKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJBOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAg
ICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC0zMjcsNyArMzI3LDcgQEAgdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSQTgsIHVpbnQ4X3QKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVI4LCB1aW50OF90LCB1
aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSOCwgdWludDhfdCwgdWludDhfdD4oY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMV07CkBAIC0zMzksNyAr
MzM5LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpBUjgsIHVpbnQ4X3QKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
QTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTgsIHVpbnQ4X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gMHgwOwpAQCAt
MzUxLDcgKzM1MSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgsIHVpbnQ4X3QsCiAgICAgfQogfQogCi10ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQkE4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTgs
IHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9y
ID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCwgdWlu
dDgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpCR1JBOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgY29u
c3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gMjU1LjBmOwogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKQEAgLTM3Nyw3ICszNzcsNyBAQCB0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkJHUkE4LCB1aW50OAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBQkdSOCwgdWlu
dDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4LCB1aW50OF90LCBmbG9hdD4o
Y29uc3QgdWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAyNTUuMGY7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC0z
OTAsNyArMzkwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBQkdSOCwgdWludDgKICAgICB9CiB9CiAKLXRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6QVJHQjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCOCwg
dWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3Ig
PSAxLjBmIC8gMjU1LjBmOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewpAQCAtNDAzLDcgKzQwMyw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjgsIHVpbnQ4CiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90
KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0I4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBjb25zdCBmbG9h
dCBzY2FsZUZhY3RvciA9IDEuMGYgLyAyNTUuMGY7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC00MTYsNyArNDE2LDcgQEAgdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0I4LCB1aW50OF8KICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSOCwgdWludDhfdCwgZmxvYXQ+
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90
KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKQEAgLTQyOSw3ICs0MjksNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4XwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYs
IGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgZmxvYXQsIGZsb2F0Pihj
b25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNDQxLDcgKzQ0
MSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGLCBmbG9hCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIz
MkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkYsIGZsb2F0LCBmbG9hdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTQ1Myw3ICs0
NTMsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIGZsb2F0LAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
QTMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEzMkYsIGZsb2F0LCBmbG9h
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTQ2NSw3
ICs0NjUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBmbG9hdAogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpBMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGLCBmbG9hdCwgZmxv
YXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAwOwpAQCAtNDgxLDEzICs0ODEs
MTMgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpBMzJGLCBmbG9hdCwKIC8vIFBpeGVsIHBhY2tpbmcgcm91dGluZXMu
CiAvLwogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBmb3JtYXQsIGlu
dCBhbHBoYU9wLCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEc3RUeXBlPgordGVtcGxh
dGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZm9ybWF0LCBpbnQgYWxwaGFPcCwgdHlw
ZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRHN0VHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrKGNvbnN0IFNvdXJjZVR5cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCiB7CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpB
OCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDhf
dD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxz
UGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbM107CkBAIC00
OTYsNyArNDk2LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgsIEdyYXBoaWNzQ28KICAgICB9CiB9CiAKLXRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlI4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1
aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhh
T3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVz
dGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC01MDUsNyArNTA1LDcgQEAgdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6Ujgs
IEdyYXBoaWNzQ28KICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4LCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UjgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50
OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNv
dXJjZVszXSAvIDI1NS4wZjsKQEAgLTUxNyw3ICs1MTcsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhp
Y3NDbwogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJl
bW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0
aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjgsIEdyYXBoaWNz
Q29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMjU1LjBmIC8g
c291cmNlWzNdIDogMS4wZjsKQEAgLTUyOCw3ICs1MjgsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhp
Y3NDbwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFP
cDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgs
IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNTM4
LDcgKzUzOCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDCiAgICAgfQogfQogCi10ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90
LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQ29udGV4dEdMOjpB
bHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAg
ICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTU1MSw3ICs1
NTEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQwogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0
aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0
aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBzb3VyY2VbM10gPyAyNTUuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtNTYzLDcg
KzU2Myw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50
OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFP
cDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0
aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTU3NCw3ICs1NzQsNyBAQCB0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4
LCBHcmFwaGljcwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCOCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQjgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1
aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTU5MCw3ICs1OTAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCBH
cmFwaGljcwogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJl
IHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9V
bm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4LCBH
cmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1
NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC02MDYsMTIgKzYwNiwxMiBAQCB0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0I4LCBHcmFwaGljcwogfQogCiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwg
dWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291cmNlLCBw
aXhlbHNQZXJSb3cgKiA0KTsKIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgsIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90
KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHks
IHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9y
ID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtNjI4LDcgKzYyOCw3IEBAIHRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4
LCBHcmFwaGljCiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3Qg
YmUgcmVtb3ZlZC4KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6
RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
OCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWlu
dDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10g
PyAyNTUuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtNjQ0LDcgKzY0NCw3IEBAIHRlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJHQkE4LCBHcmFwaGljCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90
aGluZywgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAjaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnBhY2tPbmVSb3dPZlJHQkE4VG9VbnNpZ25lZFNob3J0
NDQ0NChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAtNjU5LDcgKzY1OSw3
IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0
NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVp
bnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQsIEdyYXBoaWNzQ29udGV4dEdM
OjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7
CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtNjc2
LDcgKzY3Niw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwCiB9CiAKIC8vIEZJWE1FOiB0aGlz
IHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXRlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50
MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwaGljc0NvbnRleHRHTDo6
QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCog
c291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMjU1LjBmIC8gc291cmNlWzNd
IDogMS4wZjsKQEAgLTY5Miw3ICs2OTIsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcAogICAg
IH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpE
b05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1
NTEsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQx
Nl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBT
SU1EOjpwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTEoc291cmNlLCBkZXN0aW5h
dGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTcwNyw3ICs3MDcsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1
MSwgR3JhcAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXBoaWNzQ29udGV4dDNE
OjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
K3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0
aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTcyNCw3ICs3MjQsNyBAQCB0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBNTU1MSwgR3JhcAogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFu
ZCBtdXN0IGJlIHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBNTU1MSwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBs
eSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC03NDAsNyAr
NzQwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXAKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QjU2NSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWlu
dDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUsIEdyYXBoaWNzQ29udGV4dEdMOjpB
bHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lm
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1EOjpwYWNrT25lUm93T2ZSR0JBOFRv
VW5zaWduZWRTaG9ydDU2NShzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwpAQCAt
NzU0LDcgKzc1NCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgR3JhcGhpCiAgICAgfQogfQogCi10ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0I1NjUsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1
aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgR3JhcGhpY3ND
b250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7
CkBAIC03NzAsNyArNzcwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1LCBHcmFwaGkKIH0KIAogLy8gRklY
TUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCNTY1LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90
LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgR3JhcGhpY3NDb250ZXh0
R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJj
ZVszXSA6IDEuMGY7CkBAIC03ODUsNyArNzg1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1LCBHcmFwaGkK
ICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6
OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhp
Y3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9h
dCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpAQCAtNzk2LDcgKzc5Niw3IEBAIHRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQjMyRiwgR3JhcGhpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYsIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0
IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0
aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
c291cmNlWzNdOwpAQCAtODA4LDcgKzgwOCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhpCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpE
b1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkYsIEdyYXBo
aWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3Qg
ZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2Vb
M10gOiAxLjBmOwpAQCAtODIxLDEyICs4MjEsMTIgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGLCBHcmFwaGkK
IH0KIAogLy8gVXNlZCBvbmx5IGR1cmluZyBSR0JBOCBvciBCR1JBOCAtPiBmbG9hdGluZy1wb2lu
dCB1cGxvYWRzLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6
OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBo
aWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7
CiAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIHBpeGVsc1BlclJvdyAqIDQgKiBzaXpl
b2YoZmxvYXQpKTsKIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
MzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZs
b2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAt
ODM5LDcgKzgzOSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdyYXBoCiAgICAgfQogfQogCi10ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0JBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBm
bG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwgR3JhcGhpY3NDb250ZXh0R0w6
OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBA
IC04NTIsNyArODUyLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwgR3JhcGgKICAgICB9CiB9CiAKLXRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0
LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFP
cDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25b
MF0gPSBzb3VyY2VbM107CkBAIC04NjEsNyArODYxLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTMyRiwgR3JhcGhp
Y3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9w
OjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0
KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAg
ICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC04NzAsNyArODcwLDcgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UjMyRiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZs
b2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UjMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHks
IGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJj
ZVszXTsKQEAgLTg4MCw3ICs4ODAsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMzJGLCBHcmFwaGljcwogICAgIH0K
IH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UjMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0
aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNv
dXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBm
OwpAQCAtODkwLDcgKzg5MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBoaWNzCiAgICAgfQogfQog
Ci10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywg
ZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6
QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZs
b2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGlu
YXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC05MDAsNyArOTAwLDcgQEAgdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkEzMkYs
IEdyYXBoaWMKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJB
MzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZs
b2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAt
OTExLDcgKzkxMSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFwaGljCiAgICAgfQogfQogCi10ZW1w
bGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxv
YXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxw
aGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZs
b2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTky
Miw3ICs5MjIsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpYwogICAgIH0KIH0KIAotdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQs
IHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBoaWNzQ29udGV4dEdM
OjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJj
ZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gY29udmVydEZsb2F0VG9IYWxmRmxvYXQoc291cmNlWzBdKTsKQEAgLTkz
NCw3ICs5MzQsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaAogICAgIH0KIH0KIAotdGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZs
b2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaGljc0NvbnRl
eHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9h
dCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAg
ICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107CkBAIC05NDcsNyArOTQ3LDcgQEAg
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6
RG9Vbm11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtOTYwLDcg
Kzk2MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBoCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
R0IxNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50
MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBo
YU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWlu
dDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0
aW9uWzBdID0gY29udmVydEZsb2F0VG9IYWxmRmxvYXQoc291cmNlWzBdKTsKQEAgLTk3MSw3ICs5
NzEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
MTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIHVp
bnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJj
ZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZs
b2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtOTgzLDcgKzk4Myw3IEBAIHRlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJHQjE2RiwgR3JhcGhpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
Cit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlw
bHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
c291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC05OTUsNyArOTk1LDcgQEAg
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGkKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGLCBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0
IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkExNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhp
bmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29u
dmVydEZsb2F0VG9IYWxmRmxvYXQoc291cmNlWzBdKTsKQEAgLTEwMDUsNyArMTAwNSw3IEBAIHRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJBMTZGLCBHcmFwaGljCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29u
c3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJl
bXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gc291cmNlWzNdOwpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkYsIEdy
YXBoaWMKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2Us
IHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkExNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1
aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8g
MS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC0xMDI3LDcgKzEwMjcsNyBAQCB0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
QTE2RiwgR3JhcGhpYwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2RiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291
cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlIxNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1
aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydEZsb2F0VG9I
YWxmRmxvYXQoc291cmNlWzBdKTsKQEAgLTEwMzYsNyArMTAzNiw3IEBAIHRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkYs
IEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291
cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlIxNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBmbG9h
dCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVsz
XTsKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkYsIEdyYXBoaWNzCiAgICAgfQog
fQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRp
cGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RiwgR3JhcGhpY3ND
b250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBm
bG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291cmNlWzNd
IDogMS4wZjsKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkYsIEdyYXBoaWNzCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9O
b3RoaW5nLCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RiwgR3JhcGhp
Y3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBm
bG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0RmxvYXRUb0hhbGZGbG9hdChzb3VyY2Vb
M10pOwpAQCAtMTA2NSwxMTkgKzEwNjUsMTE5IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkYsIEdyYXBoaWNzCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBGb3JtYXQ+
Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBGb3JtYXQ+CiBzdHJ1Y3Qg
SXNGbG9hdEZvcm1hdCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgVmFsdWUgPQotICAgICAgICBG
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYKLSAgICAgICAg
fHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYKLSAgICAg
ICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRgotICAg
ICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYKLSAg
ICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMzJGOwor
ICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkYK
KyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0Iz
MkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
QTMyRgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlIzMkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpBMzJGOwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRm9y
bWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0Pgogc3Ry
dWN0IElzSGFsZkZsb2F0Rm9ybWF0IHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBWYWx1ZSA9Ci0g
ICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2Rgot
ICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2
RgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJB
MTZGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjE2RgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OkExNkY7CisgICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQTE2RgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjE2RgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJBMTZGCisgICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UjE2RgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkExNkY7CiB9OwogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdCBGb3JtYXQ+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBGb3Jt
YXQ+CiBzdHJ1Y3QgSXMxNmJwcEZvcm1hdCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgVmFsdWUg
PQotICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1
NTUxCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCQTQ0NDQKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0I1NjU7CisgICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCQTU1NTEKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBNDQ0NAorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NTsKIH07CiAKLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IEZvcm1hdCwgYm9vbCBJc0Zsb2F0ID0gSXNGbG9hdEZvcm1hdDxGb3JtYXQ+
OjpWYWx1ZSwgYm9vbCBJc0hhbGZGbG9hdCA9IElzSGFsZkZsb2F0Rm9ybWF0PEZvcm1hdD46OlZh
bHVlLCBib29sIElzMTZicHAgPSBJczE2YnBwRm9ybWF0PEZvcm1hdD46OlZhbHVlPgordGVtcGxh
dGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0LCBib29sIElzRmxvYXQgPSBJ
c0Zsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlLCBib29sIElzSGFsZkZsb2F0ID0gSXNIYWxmRmxv
YXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUsIGJvb2wgSXMxNmJwcCA9IElzMTZicHBGb3JtYXQ8Rm9y
bWF0Pjo6VmFsdWU+CiBzdHJ1Y3QgRGF0YVR5cGVGb3JGb3JtYXQgewogICAgIHR5cGVkZWYgdWlu
dDhfdCBUeXBlOwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQg
Rm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0Pgog
c3RydWN0IERhdGFUeXBlRm9yRm9ybWF0PEZvcm1hdCwgdHJ1ZSwgZmFsc2UsIGZhbHNlPiB7CiAg
ICAgdHlwZWRlZiBmbG9hdCBUeXBlOwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQgRm9ybWF0Pgogc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0PEZvcm1hdCwgZmFsc2UsIHRydWUs
IGZhbHNlPiB7CiAgICAgdHlwZWRlZiB1aW50MTZfdCBUeXBlOwogfTsKIAotdGVtcGxhdGU8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0Pgogc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0PEZvcm1h
dCwgZmFsc2UsIGZhbHNlLCB0cnVlPiB7CiAgICAgdHlwZWRlZiB1aW50MTZfdCBUeXBlOwogfTsK
IAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRm9ybWF0PgordGVtcGxh
dGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0Pgogc3RydWN0IEludGVybWVk
aWF0ZUZvcm1hdCB7Ci0gICAgc3RhdGljIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0IFZhbHVlID0gKElzRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUgfHwgSXNIYWxmRmxvYXRG
b3JtYXQ8Rm9ybWF0Pjo6VmFsdWUpID8gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QkEzMkYgOiBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTg7CisgICAgc3RhdGlj
IGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IFZhbHVlID0gKElzRmxvYXRGb3Jt
YXQ8Rm9ybWF0Pjo6VmFsdWUgfHwgSXNIYWxmRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUpID8g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkYgOiBHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTg7CiB9OwogCiAKIC8qIEVORCBDT0RFIFNIQVJFRCBXSVRIIE1P
WklMTEEgRklSRUZPWCAqLwogCi12b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCkKK3Zv
aWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IHNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFw
aGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wKQogewogI2RlZmluZSBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQoU3JjRm9ybWF0KSBcCiAgICAgY2FzZSBTcmNGb3JtYXQ6IFwKICAg
ICAgICAgcmV0dXJuIGNvbnZlcnQ8U3JjRm9ybWF0Pihkc3RGb3JtYXQsIGFscGhhT3ApOwogCiAg
ICAgICAgIHN3aXRjaCAoc3JjRm9ybWF0KSB7Ci0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4KQotICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpBOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1B
VChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRikKLSAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
QTMyRikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRikKLSAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkdCOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NS
Q0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSOCkKLSAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCNTY1KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYpCi0gICAgICAgICAgICBGT1JN
QVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJHQkE4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZF
UlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QUJHUjgp
Ci0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgpCi0gICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQkE1NTUxKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JD
Rk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCkKLSAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZP
Uk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjgpCisgICAgICAgICAgICBGT1JN
QVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGKQorICAg
ICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSQTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGKQorICAgICAgICAgICAg
Rk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4KQorICAgICAgICAgICAgRk9STUFUQ09O
VkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1
NjUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTgpCisg
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OkFSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0Vf
U1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBQkdSOCkKKyAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QVI4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JBOCkKKyAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQTU1NTEpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0KQorICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0JBMzJGKQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIH0KICN1bmRlZiBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQKIH0K
IAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0PgotQUxX
QVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhh
T3ApCit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQ+CitB
TFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxw
aGFPcCkKIHsKICNkZWZpbmUgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKERzdEZvcm1h
dCkgXAogICAgIGNhc2UgRHN0Rm9ybWF0OiBcCiAgICAgICAgIHJldHVybiBjb252ZXJ0PFNyY0Zv
cm1hdCwgRHN0Rm9ybWF0PihhbHBoYU9wKTsKIAogICAgICAgICBzd2l0Y2ggKGRzdEZvcm1hdCkg
ewotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNF
X0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2RikKLSAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UjMyRikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1B
VChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgpCi0gICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEx
NkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEzMkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCkKLSAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkExNkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RG
T1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGKQotICAgICAgICAgICAg
Rk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0I4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUpCi0gICAgICAgICAgICBGT1JNQVRD
T05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QjE2RikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCkK
LSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJf
Q0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0KQot
ICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NB
U0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGKQorICAg
ICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZP
Uk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RikKKyAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UjMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkYpCisg
ICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OkEzMkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9E
U1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBOCkKKyAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkExNkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQo
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGKQorICAgICAgICAgICAgRk9STUFU
Q09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RikK
KyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NB
U0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCkKKyAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTU1NTEpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9E
U1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0KQorICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBMTZGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNU
Rk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGKQogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KQEAg
LTExODUsMTcgKzExODUsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6
Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBkc3RGb3IKICN1bmRlZiBGT1JN
QVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQKIH0KIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBE
c3RGb3JtYXQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3ApCit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IERzdEZvcm1hdD4KK0FMV0FZU19JTkxJTkUgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQo
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxwaGFPcCkKIHsKICNkZWZpbmUgRk9STUFUQ09O
VkVSVEVSX0NBU0VfQUxQSEFPUChhbHBoYU9wKSBcCiAgICAgY2FzZSBhbHBoYU9wOiBcCiAgICAg
ICAgIHJldHVybiBjb252ZXJ0PFNyY0Zvcm1hdCwgRHN0Rm9ybWF0LCBhbHBoYU9wPigpOwogCiAg
ICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgewotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NB
U0VfQUxQSEFPUChHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nKQotICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFPUChHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9QcmVtdWx0aXBseSkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FM
UEhBT1AoR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSkKKyAgICAgICAg
ICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhpY3NDb250ZXh0R0w6OkFscGhh
T3A6OkRvTm90aGluZykKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1Ao
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHkpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpE
b1VubXVsdGlwbHkpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgfQpAQCAtMTIwMywxMiArMTIwMywxMiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9w
IGFscGhhT3ApCiB9CiAKIC8vIFZpc3VhbCBTdHVkaW8gY3Jhc2hlcyB3aXRoIGEgQzEwNjMgRmF0
YWwgRXJyb3IgaWYgZXZlcnl0aGluZyBpcyBpbmxpbmVkLgotdGVtcGxhdGU8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dCBEc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3A+Cit0ZW1wbGF0
ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0IERzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxw
aGFPcD4KIEFMV0FZU19JTkxJTkVfRVhDRVBUX01TVkMgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNv
bnZlcnQoKQogewogICAgIC8vIE1hbnkgaW5zdGFudGlhdGlvbnMgb2YgdGhpcyB0ZW1wbGF0ZSBm
dW5jdGlvbiB3aWxsIG5ldmVyIGJlIGVudGVyZWQsIHNvIHdlIHRyeQogICAgIC8vIHRvIHJldHVy
biBpbW1lZGlhdGVseSBpbiB0aGVzZSBjYXNlcyB0byBhdm9pZCB0aGUgY29tcGlsZXIgdG8gZ2Vu
ZXJhdGUgdXNlbGVzcyBjb2RlLgotICAgIGlmIChTcmNGb3JtYXQgPT0gRHN0Rm9ybWF0ICYmIGFs
cGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZykgeworICAgIGlm
IChTcmNGb3JtYXQgPT0gRHN0Rm9ybWF0ICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OkFscGhhT3A6OkRvTm90aGluZykgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyMTgsMjkgKzEyMTgsMjkgQEAgQUxXQVlTX0lOTElO
RV9FWENFUFRfTVNWQyB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydCgpCiAgICAgfQogCiAg
ICAgLy8gT25seSB0ZXh0dXJlcyB1cGxvYWRlZCBmcm9tIERPTSBlbGVtZW50cyBvciBJbWFnZURh
dGEgY2FuIGFsbG93IERzdEZvcm1hdCAhPSBTcmNGb3JtYXQuCi0gICAgY29uc3QgYm9vbCBzcmNG
b3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEgPSBHcmFwaGljc0NvbnRleHQzRDo6
c3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhKFNyY0Zvcm1hdCk7CisgICAg
Y29uc3QgYm9vbCBzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEgPSBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VE
YXRhKFNyY0Zvcm1hdCk7CiAgICAgaWYgKCFzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJ
bWFnZURhdGEgJiYgU3JjRm9ybWF0ICE9IERzdEZvcm1hdCkgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBMaWtld2lzZSwgb25s
eSB0ZXh0dXJlcyB1cGxvYWRlZCBmcm9tIERPTSBlbGVtZW50cyBvciBJbWFnZURhdGEgY2FuIHBv
c3NpYmx5IGhhdmUgdG8gYmUgdW5wcmVtdWx0aXBsaWVkLgotICAgIGlmICghc3JjRm9ybWF0Q29t
ZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSkgeworICAgIGlmICghc3JjRm9ybWF0Q29tZXNGcm9t
RE9NRWxlbWVudE9ySW1hZ2VEYXRhICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3A6OkRvVW5tdWx0aXBseSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoKCFHcmFwaGljc0NvbnRleHQzRDo6aGFzQWxw
aGEoU3JjRm9ybWF0KSB8fCAhR3JhcGhpY3NDb250ZXh0M0Q6Omhhc0NvbG9yKFNyY0Zvcm1hdCkg
fHwgIUdyYXBoaWNzQ29udGV4dDNEOjpoYXNDb2xvcihEc3RGb3JtYXQpKSAmJiBhbHBoYU9wICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcpIHsKKyAgICBpZiAoKCFHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aGFzQWxwaGEoU3JjRm9ybWF0KSB8fCAhR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Omhhc0NvbG9yKFNyY0Zvcm1hdCkgfHwgIUdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpoYXNDb2xvcihEc3RGb3JtYXQpKSAmJiBhbHBoYU9wICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpBbHBoYU9wOjpEb05vdGhpbmcpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB0eXBlZGVmIHR5cGVuYW1lIERhdGFUeXBlRm9y
Rm9ybWF0PFNyY0Zvcm1hdD46OlR5cGUgU3JjVHlwZTsKICAgICB0eXBlZGVmIHR5cGVuYW1lIERh
dGFUeXBlRm9yRm9ybWF0PERzdEZvcm1hdD46OlR5cGUgRHN0VHlwZTsKLSAgICBjb25zdCBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBJbnRlcm1lZGlhdGVTcmNGb3JtYXQgPSBJbnRlcm1l
ZGlhdGVGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWU7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQgSW50ZXJtZWRpYXRlU3JjRm9ybWF0ID0gSW50ZXJtZWRpYXRlRm9ybWF0
PERzdEZvcm1hdD46OlZhbHVlOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgRGF0YVR5cGVGb3JGb3Jt
YXQ8SW50ZXJtZWRpYXRlU3JjRm9ybWF0Pjo6VHlwZSBJbnRlcm1lZGlhdGVTcmNUeXBlOwogICAg
IGNvbnN0IHB0cmRpZmZfdCBzcmNTdHJpZGVJbkVsZW1lbnRzID0gbV9zcmNTdHJpZGUgLyBzaXpl
b2YoU3JjVHlwZSk7CiAgICAgY29uc3QgcHRyZGlmZl90IGRzdFN0cmlkZUluRWxlbWVudHMgPSBt
X2RzdFN0cmlkZSAvIHNpemVvZihEc3RUeXBlKTsKLSAgICBjb25zdCBib29sIHRyaXZpYWxVbnBh
Y2sgPSAoU3JjRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCAm
JiAhSXNGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZSAmJiAhSXNIYWxmRmxvYXRGb3JtYXQ8
RHN0Rm9ybWF0Pjo6VmFsdWUpIHx8IFNyY0Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTMyRjsKLSAgICBjb25zdCBib29sIHRyaXZpYWxQYWNrID0gKERzdEZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTggfHwgRHN0Rm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGKSAmJiBhbHBoYU9wID09IEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcgJiYgbV9kc3RTdHJpZGUgPiAwOwor
ICAgIGNvbnN0IGJvb2wgdHJpdmlhbFVucGFjayA9IChTcmNGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4ICYmICFJc0Zsb2F0Rm9ybWF0PERzdEZvcm1hdD46OlZh
bHVlICYmICFJc0hhbGZGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZSkgfHwgU3JjRm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOworICAgIGNvbnN0IGJv
b2wgdHJpdmlhbFBhY2sgPSAoRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBOCB8fCBEc3RGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQkEzMkYpICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90
aGluZyAmJiBtX2RzdFN0cmlkZSA+IDA7CiAgICAgQVNTRVJUKCF0cml2aWFsVW5wYWNrIHx8ICF0
cml2aWFsUGFjayk7CiAKICAgICBjb25zdCBTcmNUeXBlICpzcmNSb3dTdGFydCA9IHN0YXRpY19j
YXN0PGNvbnN0IFNyY1R5cGUqPihtX3NyY1N0YXJ0KTsKQEAgLTEyNjMsOSArMTI2Myw5IEBAIEFM
V0FZU19JTkxJTkVfRVhDRVBUX01TVkMgdm9pZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQoKQog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYg
KFNyY0Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgKLSAgICAg
ICAgICAgICYmIERzdEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
QTgKLSAgICAgICAgICAgICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6
OkRvVW5tdWx0aXBseSkgeworICAgICAgICBpZiAoU3JjRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBOAorICAgICAgICAgICAgJiYgRHN0Rm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOAorICAgICAgICAgICAgJiYgYWxwaGFPcCA9
PSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5KSB7CiAgICAgICAgICAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKICAgICAgICAgICAgIHNyYy53aWR0aCA9IG1fd2lkdGg7CiAg
ICAgICAgICAgICBzcmMuaGVpZ2h0ID0gbV9oZWlnaHQ7CkBAIC0xMjkzLDQgKzEyOTMsNCBAQCBB
TFdBWVNfSU5MSU5FX0VYQ0VQVF9NU1ZDIHZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KCkK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NP
TlRFWFRfM0QpCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5oCmluZGV4
IDU4ZmNlMGY1NGUzMWEyMTBlNmUyYTQ4MDFlMmU1ZjhiOWMwMjE3MTEuLjMwNDIxNWJhYmQyNGYy
OGEyNjRlYWI5NjQ1ZTBlZjRjOTY5MTNjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5oCkBAIC0yNSw5ICsyNSw5IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCisjaWYg
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgogCkBAIC01MSwx
NyArNTEsMTcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV91bnBhY2tlZEludGVybWVkaWF0
ZVNyY0RhdGEuZ2V0KCkpOwogICAgIH0KIAotICAgIHZvaWQgY29udmVydChHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3ApOworICAgIHZvaWQgY29udmVy
dChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3ApOwog
ICAgIGJvb2wgc3VjY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2VzczsgfQogCiBwcml2YXRl
OgotICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFNyY0Zvcm1hdD4K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wKTsKKyAgICB0ZW1wbGF0
ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQ+CisgICAgQUxXQVlTX0lO
TElORSB2b2lkIGNvbnZlcnQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZHN0Rm9ybWF0
LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCk7CiAKLSAgICB0ZW1wbGF0ZTxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0IERzdEZvcm1hdD4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydChHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFPcCk7CisgICAgdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQ+
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQoR3JhcGhpY3NDb250ZXh0R0w6OkFscGhh
T3ApOwogCi0gICAgdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYU9wIGFscGhhT3A+CisgICAgdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBEc3RG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wIGFscGhhT3A+CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGNvbnZlcnQoKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIG1fd2lkdGgsIG1faGVp
Z2h0OwpAQCAtNzQsNCArNzQsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HTENvbnRleHQuY3BwCmluZGV4IDI3ZmIyMDYyNzNjYTA1OGQxZjkzMTNlNzE2YmU3NGI4
YjhiMTk5MTEuLmIyMTc5ODhiOTkwZTFhMDZhM2MxZjdkNzIxY2E2NTkxNTU2ODA5ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcApAQCAtMTgs
NyArMTgsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKICNpbmNsdWRlICJH
TENvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuaAppbmRleCA5YTQ0ZWZjYTExMjA0
NzMwNDc3OWRkN2JhOGM1YjcwOWI4NjdlOGFkLi44OTBmYzI5NGJjNDdkZDEyNWM4YmU3YWQ5ZDAx
NTdkZjc4ZjgwMGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HTENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENv
bnRleHQuaApAQCAtNDYsNyArNDYsNyBAQCB0eXBlZGVmIHVpbnQ2NF90IEdMTmF0aXZlV2luZG93
VHlwZTsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19kZXZpY2UgY2Fpcm9fZGV2aWNlX3Q7CiAjZW5k
aWYKIAotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwordHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTc4LDggKzc4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgY2Fpcm9fZGV2aWNlX3QqIGNh
aXJvRGV2aWNlKCkgPSAwOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8z
RCkKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0
KCkgPSAwOworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorICAgIHZpcnR1YWwgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSA9IDA7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggYWYxZGIxZTRjMDhkNDEyZTM1ZDhhZjJmNGY3OTJh
NDIzMDEwMmRkNi4uZjU4NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgUm91bmRlZFJlY3Q7
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OwogY2xhc3MgUGF0aDsKIGNsYXNzIFRleHRSdW47CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYxYzU3MWU5YzM0
Mjk5NjkyM2FhYWFkNTJiOWE1NjYzZmZiYjM2NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMCBNb3ppbGxhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgi
Ci0jaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSA8
d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsK
LQotR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZ2V0RGF0YUZvcm1hdChHQzNEZW51bSBk
ZXN0aW5hdGlvbkZvcm1hdCwgR0MzRGVudW0gZGVzdGluYXRpb25UeXBlKQotewotICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0JBODsKLSAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uVHlwZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZGVz
dGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgot
ICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
Qjg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0JBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6Ujg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBODsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOgotICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjg7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQl9BTFBI
QToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAg
ZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81
XzVfNV8xOgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTU1NTE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAot
ICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgICAgICAgICAgZHN0Rm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkY7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgICAg
ICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkY7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5B
TkNFX0FMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJBMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNSR0I6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0JfQUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25G
b3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgot
ICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6QTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkEzMkY7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjoKLSAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkY7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQl9B
TFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGRzdEZvcm1hdDsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdubWVudCkKLXsKLSAgICBBU1NFUlQodW5wYWNr
QWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09IDIgfHwgdW5wYWNrQWxpZ25tZW50
ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOwotICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVk
IGNoYXI+IHplcm87Ci0gICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBzaXplOwotICAgICAgICBHQzNEZW51bSBlcnJvciA9IGNvbXB1dGVJbWFn
ZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgdW5wYWNrQWxpZ25tZW50
LCAmc2l6ZSwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB6ZXJvID0gbWFrZVVu
aXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHNpemUpOwotICAgICAgICBpZiAoIXplcm8pIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtZW1z
ZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgfQotICAgIHJldHVybiB0ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgemVyby5nZXQoKSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1
dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IHVuc2lnbmVkIGludCogY29tcG9uZW50c1BlclBpeGVsLCB1bnNpZ25lZCBpbnQqIGJ5dGVzUGVy
Q29tcG9uZW50KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01Q
T05FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICAg
ICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVH
RVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAg
ICAqY29tcG9uZW50c1BlclBpeGVsID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRF
R0VSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKLSAgICAgICAgKmNvbXBvbmVu
dHNQZXJQaXhlbCA9IDM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpCR1JBX0VYVDogLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JH
UkE4ODg4Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAgICAq
Y29tcG9uZW50c1BlclBpeGVsID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgICpieXRlc1BlckNv
bXBvbmVudCA9IHNpemVvZihHQzNEdWJ5dGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXpl
b2YoR0MzRGJ5dGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdD
M0R1c2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
SE9SVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RzaG9ydCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToK
LSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAgICAgICpieXRlc1BlckNvbXBv
bmVudCA9IHNpemVvZihHQzNEdXNob3J0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgotICAgICAgICAqY29tcG9uZW50c1Bl
clBpeGVsID0gMTsKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1aW50
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVpbnQpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Ci0gICAgICAgICpi
eXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEaW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAg
ICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEZmxvYXQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEaGFsZmZsb2F0KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfMzJfVU5TSUdO
RURfSU5UXzI0XzhfUkVWOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0Mz
RGZsb2F0KSArIHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9y
bWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSYgZm9ybWF0LCBHQzNEZW51bSYg
dHlwZSkKLXsKLSNkZWZpbmUgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShpbnRlcm5hbEZvcm1h
dE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZU1hY3JvKSBjYXNlIGludGVybmFsRm9ybWF0TWFjcm86
IFwKLSAgICAgICAgZm9ybWF0ID0gZm9ybWF0TWFjcm87IFwKLSAgICAgICAgdHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjp0eXBlTWFjcm87IFwKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBzd2l0Y2gg
KGludGVybmFsRm9ybWF0KSB7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHQzRDo6UkdCICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCICAg
ICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0VfQUxQSEEgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQ
SEEsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OkFM
UEhBICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBICAgICAgICAgICwgVU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSOCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRUQgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjhfU05PUk0g
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkVEICAgICAgICAgICAgLCBCWVRFICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlIxNkYgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
RCAgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSMzJGICAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHQzRDo6UjhVSSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVH
RVIgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlI4SSAgICAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSICAgICwgQllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNE
OjpSMTZVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUiAgICAs
IFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjE2SSAgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkVEX0lOVEVHRVIgICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJ
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdO
RURfSU5UICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRURfSU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6Ukc4ICAgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkcgICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHOF9TTk9STSAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHICAg
ICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2RiAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSRyAgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHQzRDo6UkczMkYgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkcgICAgICAgICAg
ICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpS
RzhJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICAgICAsIEJZ
VEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJICAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVIgICAgICwgU0hPUlQgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dDNEOjpSRzMyVUkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R19JTlRFR0VSICAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkczMkkgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUiAgICAgLCBJTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjggICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAgICAg
ICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOCAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQz
RDo6UkdCNTY1ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCICAgICAgICAgICAg
LCBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhfU05PUk0gICAgICAgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQiAgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSMTFG
X0cxMUZfQjEwRiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIFVOU0lH
TkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2RiAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAgICAgICAgICAgICwgSEFMRl9GTE9BVCAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IzMkYgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ig
ICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCOFVJICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjhJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VS
ICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNlVJICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6
UkdCMTZJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgICAgLCBT
SE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyVUkgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQl9JTlRFR0VSICAgICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkkg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUiAgICAsIElOVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTggICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBOCAg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOF9TTk9STSAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICAg
ICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMSAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzVfNV8x
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE0ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAg
ICwgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMiAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTE2RiAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAgICAgICAgLCBIQUxG
X0ZMT0FUICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgICAgICAgICAgICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHQzRDo6UkdCQThJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QV9JTlRFR0VSICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUkgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUiAgICwgVU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBMTZVSSAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVH
RVIgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SSAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEzMkkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUiAgICwg
SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSSAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5UMTYgLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05F
RF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVCAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVCwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05F
TlQyNCAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX0lOVCAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5ULCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwgICwgVU5TSUdORURfSU5UXzI0XzggICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSDI0X1NURU5DSUw4ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
ICAsIFVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZfU1RFTkNJTDggLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCAgLCBGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9S
RVYpOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoRXh0ZW5zaW9uczNEOjpTUkdCX0VY
VCAgICAgICAgICAgICAgICwgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCAgICAgICAgICAgICwgVU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQgICAgICAgICAsIEV4dGVuc2lvbnMzRDo6
U1JHQl9BTFBIQV9FWFQgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSN1bmRlZiBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGVudW0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGFsaWdubWVudCwgdW5zaWduZWQgaW50KiBpbWFnZVNpemVJbkJ5dGVzLCB1bnNpZ25lZCBpbnQq
IHBhZGRpbmdJbkJ5dGVzKQotewotICAgIEFTU0VSVChpbWFnZVNpemVJbkJ5dGVzKTsKLSAgICBB
U1NFUlQoYWxpZ25tZW50ID09IDEgfHwgYWxpZ25tZW50ID09IDIgfHwgYWxpZ25tZW50ID09IDQg
fHwgYWxpZ25tZW50ID09IDgpOwotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOwotICAgIHVuc2ln
bmVkIGludCBieXRlc1BlckNvbXBvbmVudCwgY29tcG9uZW50c1BlclBpeGVsOwotICAgIGlmICgh
Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwgJmNvbXBvbmVudHNQ
ZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU07Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7Ci0gICAg
ICAgICppbWFnZVNpemVJbkJ5dGVzID0gMDsKLSAgICAgICAgaWYgKHBhZGRpbmdJbkJ5dGVzKQot
ICAgICAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gMDsKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpOT19FUlJPUjsKLSAgICB9Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRWYWx1ZSA9IGJ5dGVzUGVyQ29tcG9uZW50ICogY29tcG9uZW50c1Bl
clBpeGVsOwotICAgIGNoZWNrZWRWYWx1ZSAqPSAgd2lkdGg7Ci0gICAgaWYgKGNoZWNrZWRWYWx1
ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRTsKLSAgICB1bnNpZ25lZCBpbnQgdmFsaWRSb3dTaXplID0gY2hlY2tlZFZhbHVl
LnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gMDsKLSAgICB1bnNpZ25l
ZCBpbnQgcmVzaWR1YWwgPSB2YWxpZFJvd1NpemUgJSBhbGlnbm1lbnQ7Ci0gICAgaWYgKHJlc2lk
dWFsKSB7Ci0gICAgICAgIHBhZGRpbmcgPSBhbGlnbm1lbnQgLSByZXNpZHVhbDsKLSAgICAgICAg
Y2hlY2tlZFZhbHVlICs9IHBhZGRpbmc7Ci0gICAgfQotICAgIC8vIExhc3Qgcm93IG5lZWRzIG5v
IHBhZGRpbmcuCi0gICAgY2hlY2tlZFZhbHVlICo9IChoZWlnaHQgLSAxKTsKLSAgICBjaGVja2Vk
VmFsdWUgKz0gdmFsaWRSb3dTaXplOwotICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU7Ci0g
ICAgKmltYWdlU2l6ZUluQnl0ZXMgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7Ci0gICAgaWYg
KHBhZGRpbmdJbkJ5dGVzKQotICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSBwYWRkaW5nOwotICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBET01Tb3Vy
Y2UgaW1hZ2VIdG1sRG9tU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUpCi17Ci0gICAgbV9pbWFnZSA9IGltYWdlOwotICAgIG1faW1h
Z2VIdG1sRG9tU291cmNlID0gaW1hZ2VIdG1sRG9tU291cmNlOwotICAgIG1fZXh0cmFjdFN1Y2Nl
ZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVtdWx0aXBseUFscGhhLCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhY2tJbWFnZURhdGEoSW1h
Z2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1h
dCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNr
QWxpZ25tZW50LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAh
cGl4ZWxzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBwYWNrZWRTaXpl
OwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSku
Ci0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhl
aWdodCwgMSwgJnBhY2tlZFNpemUsIG51bGxwdHIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUp
OwotCi0gICAgaWYgKCFwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHBpeGVscyksIHNvdXJjZUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25t
ZW50LCBmb3JtYXQsIHR5cGUsIGFscGhhT3AsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZS0+
aW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdygqaW1hZ2UpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VE
YXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KQotewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50
IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBpbWFnZURhdGEt
PmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgaW50IHBhY2tlZFNpemU7Ci0gICAgLy8gT3V0cHV0
IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KLSAgICBpZiAoY29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmcGFja2Vk
U2l6ZSwgbnVsbHB0cikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICBpZiAoIXBh
Y2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHByZW11bHRp
cGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nLCBk
YXRhLmRhdGEoKSwgZmxpcFkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdFRleHR1cmVEYXRhKHVu
c2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50LCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGNvbnN0IHZvaWQqIHBpeGVscywgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQotewotICAgIC8vIEFzc3VtZXMgZm9ybWF0LCB0eXBlLCBldGMuIGhhdmUgYWxyZWFk
eSBiZWVuIHZhbGlkYXRlZC4KLSAgICBEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBnZXRE
YXRhRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0KLSAgICAvLyBSZXNpemUgdGhlIG91dHB1dCBidWZm
ZXIuCi0gICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25l
bnQ7Ci0gICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBl
LCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyUGl4ZWwgPSBjb21wb25lbnRzUGVy
UGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKLSAgICBkYXRhLnJlc2l6ZSh3aWR0aCAqIGhlaWdo
dCAqIGJ5dGVzUGVyUGl4ZWwpOwotCi0gICAgaWYgKCFwYWNrUGl4ZWxzKHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB1
bnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9w
OjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5kYXRhKCksIGZsaXBZ
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgVGV4ZWxCeXRlc0ZvckZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpBODoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OkFSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBNTU1MToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JB
NDQ0NDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2RjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZGOgotICAgICAgICByZXR1cm4gMjsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUjg6Ci0gICAgICAgIHJldHVybiAzOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFCR1I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkJHUkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTMyRjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2RjoKLSAgICAgICAgcmV0
dXJuIDQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGOgot
ICAgICAgICByZXR1cm4gNjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSQTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZG
OgotICAgICAgICByZXR1cm4gODsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpSR0IzMkY6Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGOgotICAgICAgICByZXR1cm4gMTY7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsIERhdGFGb3JtYXQgc291cmNl
RGF0YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291
cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5zaWduZWQg
ZGVzdGluYXRpb25UeXBlLCBBbHBoYU9wIGFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwg
Ym9vbCBmbGlwWSkKLXsKLSAgICBpbnQgdmFsaWRTcmMgPSB3aWR0aCAqIFRleGVsQnl0ZXNGb3JG
b3JtYXQoc291cmNlRGF0YUZvcm1hdCk7Ci0gICAgaW50IHJlbWFpbmRlciA9IHNvdXJjZVVucGFj
a0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFja0FsaWdubWVudCkgOiAwOwotICAg
IGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VVbnBhY2tBbGln
bm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHBhY2tpbmcgcGl4ZWxzIHRvIFdlYkdMIDIgZm9ybWF0cwotICAgIHN3aXRjaCAoZGVzdGluYXRp
b25Gb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Ukc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBEYXRhRm9ybWF0IGRzdERhdGFGb3JtYXQgPSBnZXREYXRhRm9y
bWF0KGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5cGUpOwotICAgIGludCBkc3RTdHJp
ZGUgPSB3aWR0aCAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoZHN0RGF0YUZvcm1hdCk7Ci0gICAgaWYg
KGZsaXBZKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihkZXN0aW5hdGlvbkRhdGEpICsgZHN0U3RyaWRlKihoZWlnaHQgLSAxKTsKLSAgICAgICAgZHN0
U3RyaWRlID0gLWRzdFN0cmlkZTsKLSAgICB9Ci0gICAgaWYgKCFoYXNBbHBoYShzb3VyY2VEYXRh
Rm9ybWF0KSB8fCAhaGFzQ29sb3Ioc291cmNlRGF0YUZvcm1hdCkgfHwgIWhhc0NvbG9yKGRzdERh
dGFGb3JtYXQpKQotICAgICAgICBhbHBoYU9wID0gQWxwaGFPcDo6RG9Ob3RoaW5nOwotCi0gICAg
aWYgKHNvdXJjZURhdGFGb3JtYXQgPT0gZHN0RGF0YUZvcm1hdCAmJiBhbHBoYU9wID09IEFscGhh
T3A6OkRvTm90aGluZykgewotICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBzb3VyY2VEYXRh
OwotICAgICAgICBjb25zdCB1aW50OF90KiBwdHJFbmQgPSBzb3VyY2VEYXRhICsgc3JjU3RyaWRl
ICogaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCByb3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8g
ZHN0U3RyaWRlOiAtZHN0U3RyaWRlOwotICAgICAgICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVu
ZCkgewotICAgICAgICAgICAgbWVtY3B5KGRzdCwgcHRyLCByb3dTaXplKTsKLSAgICAgICAgICAg
IHB0ciArPSBzcmNTdHJpZGU7Ci0gICAgICAgICAgICBkc3QgKz0gZHN0U3RyaWRlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEZvcm1hdENvbnZlcnRlciBj
b252ZXJ0ZXIod2lkdGgsIGhlaWdodCwgc291cmNlRGF0YSwgZGVzdGluYXRpb25EYXRhLCBzcmNT
dHJpZGUsIGRzdFN0cmlkZSk7Ci0gICAgY29udmVydGVyLmNvbnZlcnQoc291cmNlRGF0YUZvcm1h
dCwgZHN0RGF0YUZvcm1hdCwgYWxwaGFPcCk7Ci0gICAgaWYgKCFjb252ZXJ0ZXIuc3VjY2Vzcygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiAhKFBM
QVRGT1JNKENPQ09BKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkpCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQotewotfQotI2VuZGlmCi0K
LSNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaW11bGF0ZUNv
bnRleHRDaGFuZ2VkKCkKLXsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMTZmNGY2ODkyZTRhNzQwNDM2Zjc4NDMwZmNkMTNjYWVjZTg0
M2MzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3NDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCR0wp
Ci0KLSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNEQmFzZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50
ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVl
QXJyYXkuaD4KLQotI2lmIFVTRShDQSkKLSNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKLSNl
bmRpZgotCi0vLyBGSVhNRTogRmluZCBhIGJldHRlciB3YXkgdG8gYXZvaWQgdGhlIG5hbWUgY29u
ZmxpY3Rpb24gZm9yIE5PX0VSUk9SLgotI2lmIFBMQVRGT1JNKFdJTikKLSN1bmRlZiBOT19FUlJP
UgotI2VsaWYgUExBVEZPUk0oR1RLKQotLy8gVGhpcyBkZWZpbmUgaXMgZnJvbSB0aGUgWDExIGhl
YWRlcnMsIGJ1dCBpdCdzIHVzZWQgYmVsb3csIHNvIHdlIG11c3QgdW5kZWZpbmUgaXQuCi0jdW5k
ZWYgVkVSU0lPTgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpZiBVU0UoT1BFTkdM
X0VTKQotI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbC5oPgotI2lmZGVmIF9fT0JKQ19fCi0jaW1w
b3J0IDxPcGVuR0xFUy9FQUdMLmg+Ci0jZW5kaWYgLy8gX19PQkpDX18KLSNlbmRpZiAvLyBVU0Uo
T1BFTkdMX0VTKQotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19DTEFTUyBXZWJHTExheWVyOwot
dHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UqIElPU3VyZmFjZVJlZjsKLSNlbmRpZiAvLyBQTEFU
Rk9STShDT0NPQSkKLQotI2lmIFVTRShOSUNPU0lBKQotbmFtZXNwYWNlIE5pY29zaWEgewotY2xh
c3MgR0MzRExheWVyOwotfQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEV4
dGVuc2lvbnMzRDsKLSNpZiBVU0UoQU5HTEUpCi1jbGFzcyBFeHRlbnNpb25zM0RBTkdMRTsKLSNl
bGlmICFQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLWNsYXNzIEV4dGVuc2lvbnMz
RE9wZW5HTEVTOwotI2VsaWYgVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0Uo
T1BFTkdMX0VTKSkKLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKLSNlbmRpZgotY2xhc3MgSG9z
dFdpbmRvdzsKLWNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwotI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKLWNsYXNzIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjsKLSNl
bmRpZgotCi10eXBlZGVmIFdURjo6SGFzaE1hcDxDU3RyaW5nLCB1aW50NjRfdD4gU2hhZGVyTmFt
ZUhhc2g7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTsKLQotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0QgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0RCYXNlIHsKLXB1YmxpYzoKLSAg
ICBjbGFzcyBDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkg
eyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wb3NpdGUoKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVjeWNsZUNvbnRleHQoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaENvbnRl
eHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLCBI
b3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKTsKLSAgICB2
aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRCgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
c3RhdGljIFJlZjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlU2hhcmVkKEdyYXBoaWNzQ29udGV4
dDNEJiBzaGFyZWRDb250ZXh0KTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9Ci0gICAgUGxhdGZvcm0zRE9iamVj
dCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3RleHR1cmU7IH0K
LSAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQotI2lmIFVTRShB
TkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNERGlzcGxheSBwbGF0Zm9ybURpc3Bs
YXkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlPYmo7IH0KLSAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWdP
Ymo7IH0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0jZWxzZQotICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwotI2VuZGlmCi0K
LSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgdm9pZCBhZGRDbGllbnQoQ2xp
ZW50JiBjbGllbnQpIHsgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsgfQotICAgIHZvaWQgcmVtb3Zl
Q2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7IH0KLQot
ICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRv
IHJlZ3VsYXIgRkJPLgotICAgIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKLQotICAgIC8vIEVxdWl2
YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9j
YXRpb24uCi0gICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLQotICAgIC8vIEdldCBhbiBhdHRyaWJ1dGUgbG9jYXRp
b24gd2l0aG91dCBjaGVja2luZyB0aGUgbmFtZSAtPiBtYW5nbGVkbmFtZSBtYXBwaW5nLgotICAg
IGludCBnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICAvLyBDb21waWxlIGEgc2hhZGVyIHdpdGhvdXQgZ29p
bmcgdGhyb3VnaCBBTkdMRS4KLSAgICB2b2lkIGNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm0z
RE9iamVjdCk7Ci0KLSAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNh
c2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBu
byBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KLSAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQg
aXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCi0gICAgYm9vbCB0ZXhJbWFnZTJEUmVz
b3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBhbGlnbm1lbnQgPSA0
KTsKLQotICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwotCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgLy8gSGVscGVycyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJl
YWRiYWNrLgotICAgIC8vCi0KLSAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50cyBwZXIgcGl4
ZWwgYW5kIGJ5dGVzIHBlciBjb21wb25lbnQKLSAgICAvLyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBh
bmQgdHlwZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBpZgotICAgIC8vIGVpdGhlciB3YXMg
YW4gaW52YWxpZCBlbnVtLgotICAgIHN0YXRpYyBib29sIGNvbXB1dGVGb3JtYXRBbmRUeXBlUGFy
YW1ldGVycyhHQzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogY29tcG9uZW50c1BlclBpeGVsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQqIGJ5dGVzUGVyQ29tcG9uZW50KTsKLQotICAgIC8vIENvbXB1dGVzIHRoZSBpbWFnZSBzaXpl
IGluIGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRlcyBpcyBub3QgbnVsbCwgcGFkZGluZwotICAgIC8v
IGlzIGFsc28gY2FsY3VsYXRlZCBpbiByZXR1cm4uIFJldHVybnMgTk9fRVJST1IgaWYgc3VjY2Vl
ZCwgb3RoZXJ3aXNlCi0gICAgLy8gcmV0dXJuIHRoZSBzdWdnZXN0ZWQgR0wgZXJyb3IgaW5kaWNh
dGluZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmU6Ci0gICAgLy8gICBJTlZBTElEX1ZBTFVFIGlm
IHdpZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBvciBvdmVyZmxvdyBoYXBwZW5zLgotICAgIC8vICAg
SU5WQUxJRF9FTlVNIGlmIGZvcm1hdC90eXBlIGlzIGlsbGVnYWwuCi0gICAgc3RhdGljIEdDM0Rl
bnVtIGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RpbnQgYWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogaW1hZ2VTaXplSW5CeXRlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIHBhZGRpbmdJbkJ5
dGVzKTsKLQotICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9ybWF0QW5kVHlwZUZvckludGVybmFs
Rm9ybWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSYgZm9ybWF0LCBHQzNEZW51
bSYgdHlwZSk7Ci0KLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIElt
YWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAotICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVs
IGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCi0gICAgLy8gYW5k
IG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLiBSZXR1cm5zIHRy
dWUKLSAgICAvLyB1cG9uIHN1Y2Nlc3MuCi0gICAgc3RhdGljIGJvb2wgZXh0cmFjdEltYWdlRGF0
YShJbWFnZURhdGEqLAotICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBleHRyYWN0cyB0aGUg
dXNlci1zdXBwbGllZCB0ZXh0dXJlCi0gICAgLy8gZGF0YSwgYXBwbHlpbmcgdGhlIGZsaXBZIGFu
ZCBwcmVtdWx0aXBseUFscGhhIHBhcmFtZXRlcnMuCi0gICAgLy8gSWYgdGhlIGRhdGEgaXMgbm90
IHRpZ2h0bHkgcGFja2VkIGFjY29yZGluZyB0byB0aGUgcGFzc2VkCi0gICAgLy8gdW5wYWNrQWxp
Z25tZW50LCB0aGUgb3V0cHV0IGRhdGEgd2lsbCBiZSB0aWdodGx5IHBhY2tlZC4KLSAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgYW55IGVycm9yIG9jY3VycmVkLgot
ICAgIHN0YXRpYyBib29sIGV4dHJhY3RUZXh0dXJlRGF0YSh1bnNpZ25lZCBpbnQgd2lkdGgsIHVu
c2lnbmVkIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCB1bnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHZvaWQqIHBpeGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4mIGRhdGEpOwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gRW50cnkg
cG9pbnRzIGZvciBXZWJHTC4KLSAgICAvLwotCi0gICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0Rl
bnVtIHRleHR1cmUpIG92ZXJyaWRlOwotICAgIHZvaWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpIG92ZXJyaWRlOwotICAgIHZv
aWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50IGluZGV4LCBj
b25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwg
R0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0g
bW9kZUFscGhhKSBvdmVycmlkZTsKLSAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9y
LCBHQzNEZW51bSBkZmFjdG9yKSBvdmVycmlkZTsKLSAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0Mz
RGVudW0gZHN0QWxwaGEpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpIG92ZXJyaWRlOwotICAgIHZvaWQgYnVmZmVy
U3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIg
c2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkKiBtYXBCdWZmZXJS
YW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVu
Z3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiB1bm1h
cEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgY29weUJ1ZmZlclN1
YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpdGVUYXJnZXQsIEdDM0RpbnRw
dHIgcmVhZE9mZnNldCwgR0MzRGludHB0ciB3cml0ZU9mZnNldCwgR0MzRHNpemVpcHRyKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgZ2V0SW50ZXJuYWxmb3JtYXRpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSwgR0MzRHNpemVpIGJ1ZlNpemUs
IEdDM0RpbnQqIHBhcmFtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBs
ZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBW
ZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0MzRGVudW0gcG5hbWUsIFZlY3RvcjxH
QzNEaW50PiYgcGFyYW1zKSBvdmVycmlkZTsKLQotICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyKEdDM0Ri
aXRmaWVsZCBtYXNrKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGNsYW1wZiBy
ZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
b2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4g
Ymx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpIG92ZXJyaWRlOwotICAgIHZvaWQgY29tcGlsZVNoYWRl
cihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgY29tcHJlc3NlZFRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVwdGhNYXNr
KEdDM0Rib29sZWFuIGZsYWcpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVwdGhSYW5nZShHQzNEY2xh
bXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0YWNoU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlzYWJsZShHQzNEZW51bSBjYXApIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdBcnJh
eXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSBvdmVycmlkZTsKLQotICAgIHZvaWQg
ZW5hYmxlKEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaW5pc2goKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCBsZXZlbCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpIG92ZXJyaWRlOwotCi0gICAg
Ym9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgQWN0aXZlSW5mbyYpIG92ZXJyaWRlOwotICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliSW1w
bChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7
Ci0gICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBvdmVycmlkZTsKLSAgICBib29sIGdldEFjdGl2ZVVu
aWZvcm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mKTsKLSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9i
amVjdCogc2hhZGVycykgb3ZlcnJpZGU7Ci0gICAgR0MzRGludCBnZXRBdHRyaWJMb2NhdGlvbihQ
bGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwotICAgIHZvaWQg
Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgR0MzRGVudW0gZ2V0RXJyb3Io
KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEZsb2F0dihHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRJbnRlZ2VydihHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0SW50ZWdl
cjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotI2lmICFVU0UoQU5HTEUpCi0gICAgdm9pZCBnZXRO
b25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCi0gICAg
U3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAg
IFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3RbMl0sIEdDM0RzaXpl
aSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFBs
YXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQq
IHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pIG92ZXJyaWRlOwotICAgIFN0cmluZyBnZXRTaGFk
ZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGdldFN0cmlu
ZyhHQzNEZW51bSBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgR0Mz
RGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBn
ZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKSBvdmVycmlkZTsKLSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGhp
bnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSBvdmVycmlkZTsKLSAgICBHQzNEYm9v
bGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVh
biBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc0Zy
YW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIEdDM0Rib29sZWFuIGlz
UHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc1Jl
bmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBp
c1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc1Rl
eHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsaW5lV2lkdGgoR0Mz
RGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwotICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
cGFyYW0pIG92ZXJyaWRlOwotICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9y
LCBHQzNEZmxvYXQgdW5pdHMpIG92ZXJyaWRlOwotCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwotCi0gICAgdm9pZCByZW5kZXJidWZmZXJTdG9y
YWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzYW1wbGVDb3ZlcmFn
ZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIHN0cmluZykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGVuY2lsRnVu
YyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMs
IEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0ZW5jaWxN
YXNrKEdDM0R1aW50IG1hc2spIG92ZXJyaWRlOwotICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0ZW5j
aWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKSBvdmVycmlkZTsKLQotICAgIGJv
b2wgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0ZXhQYXJh
bWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pIG92
ZXJyaWRlOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogcGl4ZWxzKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdW5pZm9ybTFmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB4KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAg
IHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0Mz
RGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtMmYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0yZnYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRl
OwotICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0zZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KSBv
dmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
LCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTNpKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHopIG92ZXJyaWRlOwot
ICAgIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdD
M0RpbnQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBj
b25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwg
Y29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
QzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdD
M0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0Mz
RGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7Ci0jaWYgIVVTRShBTkdMRSkKLSAgICBib29sIGNoZWNrVmFyeWluZ3NQ
YWNraW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0IGZy
YWdtZW50U2hhZGVyKSBjb25zdDsKLSAgICBib29sIHByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybTNE
T2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29u
c3Q7Ci0jZW5kaWYKLQotICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB4KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4
QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0Rm
bG9hdCogdmFsdWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KSBvdmVycmlkZTsK
LSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0
KiB2YWx1ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KSBv
dmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29uc3Qg
R0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRl
cihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVh
biBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCByZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJp
bWNvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYkRp
dmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpIG92ZXJyaWRlOwotCi0gICAg
Ly8gVmVydGV4QXJyYXlPamVjdCBjYWxscwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVy
dGV4QXJyYXkoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOwotICAgIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXkoUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgdW5zaWdu
ZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50
U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7Ci0KLSAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOwotICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwotICAgIGJvb2wg
bGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCk7Ci0g
ICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOwotCi0gICAgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFu
Z2VkTm90aWZpY2F0aW9uKCk7Ci0gICAgdm9pZCBzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCk7Ci0K
LSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7Ci0g
ICAgUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsK
LSAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwot
Ci0jaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKLSAgICB2b2lkIHByaW1pdGl2ZVJl
c3RhcnRJbmRleChHQzNEdWludCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIGJvb2wgdGV4SW1hZ2VJT1N1cmZhY2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSU9TdXJmYWNlUmVmLCBHQzNEdWludCBwbGFu
ZSk7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIHZvaWQgcHJlc2VudFJlbmRlcmJ1ZmZlcigp
OwotI2VuZGlmCi0KLSNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCi0gICAgdm9pZCBhbGxv
Y2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKTsKLSAgICB2b2lkIHVwZGF0ZUZyYW1l
YnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOwotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgdm9pZCB1cGRhdGVDR0xDb250ZXh0KCk7Ci0j
ZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCi0gICAgdm9pZCBzZXRD
b250ZXh0VmlzaWJpbGl0eShib29sKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVm
ZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
cG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uOyB9Ci0KLSAgICAvLyBTdXBwb3J0IGZvciBi
dWZmZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVC
dWZmZXIoKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZUZyYW1lYnVmZmVy
KCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVQcm9ncmFtKCkgb3ZlcnJp
ZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVSZW5kZXJidWZmZXIoKSBvdmVycmlkZTsK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVNoYWRlcihHQzNEZW51bSkgb3ZlcnJpZGU7Ci0g
ICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVUZXh0dXJlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0
ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRl
UHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRl
cmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRl
cihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBTeW50aGVzaXplcyBhbiBPcGVuR0wg
ZXJyb3Igd2hpY2ggd2lsbCBiZSByZXR1cm5lZCBmcm9tIGEKLSAgICAvLyBsYXRlciBjYWxsIHRv
IGdldEVycm9yLiBUaGlzIGlzIHVzZWQgdG8gZW11bGF0ZSBPcGVuR0wgRVMKLSAgICAvLyAyLjAg
YmVoYXZpb3Igb24gdGhlIGRlc2t0b3AgYW5kIHRvIGVuZm9yY2UgYWRkaXRpb25hbCBlcnJvcgot
ICAgIC8vIGNoZWNraW5nIG1hbmRhdGVkIGJ5IFdlYkdMLgotICAgIC8vCi0gICAgLy8gUGVyIHRo
ZSBiZWhhdmlvciBvZiBnbEdldEVycm9yLCB0aGlzIHN0b3JlcyBhdCBtb3N0IG9uZQotICAgIC8v
IGluc3RhbmNlIG9mIGFueSBnaXZlbiBlcnJvciwgYW5kIHJldHVybnMgdGhlbSBmcm9tIGNhbGxz
IHRvCi0gICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZC4KLSAgICB2
b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKTsKLQotICAgIC8vIFJlYWQgcmVh
bCBPcGVuR0wgZXJyb3JzLCBhbmQgbW92ZSB0aGVtIHRvIHRoZSBzeW50aGV0aWMKLSAgICAvLyBl
cnJvciBsaXN0LiBSZXR1cm4gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZXJyb3IgaXMgbW92ZWQuCi0g
ICAgYm9vbCBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLQotICAgIC8vIFN1cHBv
cnQgZm9yIGV4dGVuc2lvbnMuIFJldHVybnMgYSBub24tbnVsbCBvYmplY3QsIHRob3VnaCBub3QK
LSAgICAvLyBhbGwgbWV0aG9kcyBpdCBjb250YWlucyBtYXkgbmVjZXNzYXJpbHkgYmUgc3VwcG9y
dGVkIG9uIHRoZQotICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUuIE11c3QgY2FsbCBFeHRlbnNpb25z
M0Q6OnN1cHBvcnRzKCkgdG8KLSAgICAvLyBkZXRlcm1pbmUgdGhpcy4KLSAgICBFeHRlbnNpb25z
M0QmIGdldEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKLQotICAgIEludFNpemUgZ2V0SW50ZXJuYWxG
cmFtZWJ1ZmZlclNpemUoKSBjb25zdDsKLQotICAgIC8vIFBhY2tzIHRoZSBjb250ZW50cyBvZiB0
aGUgZ2l2ZW4gSW1hZ2Ugd2hpY2ggaXMgcGFzc2VkIGluIHxwaXhlbHN8IGludG8gdGhlIHBhc3Nl
ZCBWZWN0b3IKLSAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwg
YW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBBbHBoYU9wIGZsYWdzLgotICAgIC8vIFJldHVybnMg
dHJ1ZSB1cG9uIHN1Y2Nlc3MuCi0gICAgc3RhdGljIGJvb2wgcGFja0ltYWdlRGF0YShJbWFnZSos
IGNvbnN0IHZvaWQqIHBpeGVscywgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29s
IGZsaXBZLCBBbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8
dWludDhfdD4mIGRhdGEpOwotCi0gICAgY2xhc3MgSW1hZ2VFeHRyYWN0b3IgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgSW1hZ2VFeHRyYWN0b3IoSW1hZ2UqLCBET01Tb3VyY2UsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7Ci0KLSAgICAgICAg
Ly8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBt
ZXRob2QgdG8gZGVhbGxvY2F0ZSBvciByZWxlYXNlIHJlc291cmNlcwotICAgICAgICAvLyBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGltYWdlIGlmIG5lZWRlZC4KLSAgICAgICAgfkltYWdlRXh0cmFjdG9y
KCk7Ci0KLSAgICAgICAgYm9vbCBleHRyYWN0U3VjY2VlZGVkKCkgeyByZXR1cm4gbV9leHRyYWN0
U3VjY2VlZGVkOyB9Ci0gICAgICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhKCkgeyByZXR1
cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQotICAgICAgICB1bnNpZ25lZCBpbWFnZVdpZHRoKCkgeyBy
ZXR1cm4gbV9pbWFnZVdpZHRoOyB9Ci0gICAgICAgIHVuc2lnbmVkIGltYWdlSGVpZ2h0KCkgeyBy
ZXR1cm4gbV9pbWFnZUhlaWdodDsgfQotICAgICAgICBEYXRhRm9ybWF0IGltYWdlU291cmNlRm9y
bWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsgfQotICAgICAgICBBbHBoYU9wIGlt
YWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxwaGFPcDsgfQotICAgICAgICB1bnNpZ25lZCBpbWFn
ZVNvdXJjZVVucGFja0FsaWdubWVudCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGln
bm1lbnQ7IH0KLSAgICAgICAgRE9NU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgpIHsgcmV0dXJu
IG1faW1hZ2VIdG1sRG9tU291cmNlOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gRWFjaCBw
bGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCi0g
ICAgICAgIC8vIEV4dHJhY3RzIHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sgb2YgaXRzIHN0YXR1
cywgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBmb3JtYXQgYW5kIEFs
cGhhT3AgZXRjLAotICAgICAgICAvLyBuZWVkcyB0byBsb2NrIHRoZSByZXNvdXJjZXMgb3IgcmVs
ZXZhbnQgZGF0YSBpZiBuZWVkZWQgYW5kIHJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MKLSAgICAg
ICAgYm9vbCBleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdh
bW1hQW5kQ29sb3JQcm9maWxlKTsKLQotI2lmIFVTRShDQUlSTykKLSAgICAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gbV9pbWFnZVN1cmZhY2U7Ci0jZWxpZiBVU0UoQ0cpCi0gICAgICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7Ci0gICAgICAgIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBtX2RlY29kZWRJbWFnZTsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gbV9waXhl
bERhdGE7Ci0gICAgICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+IG1fZm9ybWFsaXplZFJHQkE4RGF0
YTsKLSNlbmRpZgotICAgICAgICBJbWFnZSogbV9pbWFnZTsKLSAgICAgICAgRE9NU291cmNlIG1f
aW1hZ2VIdG1sRG9tU291cmNlOwotICAgICAgICBib29sIG1fZXh0cmFjdFN1Y2NlZWRlZDsKLSAg
ICAgICAgY29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKLSAgICAgICAgdW5zaWduZWQgbV9p
bWFnZVdpZHRoOwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdlSGVpZ2h0OwotICAgICAgICBEYXRh
Rm9ybWF0IG1faW1hZ2VTb3VyY2VGb3JtYXQ7Ci0gICAgICAgIEFscGhhT3AgbV9hbHBoYU9wOwot
ICAgICAgICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OwotICAgIH07Ci0K
LSAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKSB7IG1fZmFpbE5leHRTdGF0dXND
aGVjayA9IHRydWU7IH0KLQotICAgIEdDM0RlbnVtIGFjdGl2ZVRleHR1cmVVbml0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdDsgfQotICAgIEdDM0RlbnVtIGN1cnJl
bnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1
cmUoKTsgfQotICAgIEdDM0RlbnVtIGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuY3VycmVudEJvdW5kVGFyZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCB0ZXh0dXJlU2Vl
ZChHQzNEdWludCB0ZXh0dXJlKSB7IHJldHVybiBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuY291
bnQodGV4dHVyZSk7IH0KLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB1c2luZyBQbGF0Zm9ybURp
c3BsYXlJRCA9IHVpbnQzMl90OwotICAgIHZvaWQgc2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlz
cGxheUlEKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dDNEKEdyYXBo
aWNzQ29udGV4dDNEQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIERlc3RpbmF0aW9uID0gRGVzdGlu
YXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0M0QqIHNoYXJlZENvbnRleHQgPSBudWxs
cHRyKTsKLQotICAgIC8vIEhlbHBlciBmb3IgcGFja0ltYWdlRGF0YS9leHRyYWN0SW1hZ2VEYXRh
L2V4dHJhY3RUZXh0dXJlRGF0YSB3aGljaCBpbXBsZW1lbnQgcGFja2luZyBvZiBwaXhlbAotICAg
IC8vIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIE9wZW5HTCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5k
IHR5cGUuCi0gICAgLy8gQSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMg
dGhhdCB0aGUgc291cmNlCi0gICAgLy8gZGF0YSBpcyB0aWdodGx5IHBhY2tlZC4gTm9uLXplcm8g
dmFsdWVzIG1heSB0YWtlIGEgc2xvdyBwYXRoLgotICAgIC8vIERlc3RpbmF0aW9uIGRhdGEgd2ls
bCBoYXZlIG5vIGdhcHMgYmV0d2VlbiByb3dzLgotICAgIHN0YXRpYyBib29sIHBhY2tQaXhlbHMo
Y29uc3QgdWludDhfdCogc291cmNlRGF0YSwgRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGln
bm1lbnQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1bnNpZ25lZCBkZXN0aW5hdGlvblR5
cGUsIEFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBmbGlwWSk7Ci0KLSAgICAv
LyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9u
IGF0dHJpYnV0ZXMsCi0gICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMs
IGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKLSAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3Jl
ZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKLSAgICAvLyBpbXBsZW1l
bnRhdGlvbi4KLSAgICB2b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tl
ZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7Ci0gICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsK
LSAgICAKLSAgICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50IGRyYXdpbmcgb3BlcmF0aW9uIGxlYXZl
IHRoZSBHUFUgaW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8KLSAgICB2b2lkIGNoZWNrR1BVU3RhdHVz
KCk7Ci0KLSAgICAvLyBSZWFkIHJlbmRlcmluZyByZXN1bHRzIGludG8gYSBwaXhlbCBhcnJheSB3
aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKLSAgICAvLyBiYWNrYnVmZmVyLgotICAgIHZvaWQg
cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciogcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6
ZSk7Ci0gICAgdm9pZCByZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4
LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpOwot
Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2VGcm9t
RHJhd2FibGUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSNlbmRpZgotCi0g
ICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCByZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmID0gSW50UmVjdCgpKTsKLSAgICB2
b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdMdWludCBpbnRlcm5hbERl
cHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIGJvb2wgYWxsb3dPZmZsaW5lUmVuZGVyZXJzKCkgY29uc3Q7Ci0jZW5kaWYK
LQotICAgIGludCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKLSAgICBpbnQgbV9jdXJyZW50SGVpZ2h0
IHsgMCB9OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+
IG1fd2ViR0xMYXllcjsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIG1fY29udGV4dE9i
aiB7IG51bGxwdHIgfTsKLSNpZiBVU0UoQU5HTEUpCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0ciB9OwotICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0RDb25maWcgbV9jb25maWdPYmogeyBudWxscHRyIH07Ci0jZW5kaWYgLy8gVVNF
KEFOR0xFKQotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQotCi0jaWYgUExBVEZPUk0oV0lOKSAm
JiBVU0UoQ0EpCi0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV93ZWJHTExheWVyOwotI2Vu
ZGlmCi0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+IFNo
YWRlclN5bWJvbE1hcDsKLQotICAgIHN0cnVjdCBTaGFkZXJTb3VyY2VFbnRyeSB7Ci0gICAgICAg
IEdDM0RlbnVtIHR5cGU7Ci0gICAgICAgIFN0cmluZyBzb3VyY2U7Ci0gICAgICAgIFN0cmluZyB0
cmFuc2xhdGVkU291cmNlOwotICAgICAgICBTdHJpbmcgbG9nOwotICAgICAgICBib29sIGlzVmFs
aWQ7Ci0gICAgICAgIFNoYWRlclN5bWJvbE1hcCBhdHRyaWJ1dGVNYXA7Ci0gICAgICAgIFNoYWRl
clN5bWJvbE1hcCB1bmlmb3JtTWFwOwotICAgICAgICBTaGFkZXJTeW1ib2xNYXAgdmFyeWluZ01h
cDsKLSAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQotICAgICAgICAgICAgOiB0eXBlKFZFUlRF
WF9TSEFERVIpCi0gICAgICAgICAgICAsIGlzVmFsaWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAoZW51bSBB
TkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSB8fCBzeW1i
b2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNIHx8IHN5bWJvbFR5cGUgPT0gU0hB
REVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOwotICAgICAgICAgICAgaWYgKHN5bWJvbFR5cGUgPT0g
U0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYXR0
cmlidXRlTWFwOwotICAgICAgICAgICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9U
WVBFX1ZBUllJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcnlpbmdNYXA7Ci0gICAgICAg
ICAgICByZXR1cm4gdW5pZm9ybU1hcDsKLSAgICAgICAgfQotICAgIH07Ci0KLSNpZiAhVVNFKEFO
R0xFKQotICAgIC8vIEZJWE1FOiBTaGFkZXJzIGFyZSBuZXZlciByZW1vdmVkIGZyb20gdGhpcyBt
YXAsIGV2ZW4gaWYgdGhleSBhbmQgdGhlaXIgcHJvZ3JhbSBhcmUgZGVsZXRlZC4KLSAgICAvLyBU
aGlzIGlzIGJhZCwgYW5kIGl0IGFsc28gcmVsaWVzIG9uIHRoZSBmYWN0IHdlIG5ldmVyIHJldXNl
IFBsYXRmb3JtM0RPYmplY3QgbnVtYmVycy4KLSAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0z
RE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsKLSAgICBTaGFkZXJT
b3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgc3RkOjpwYWlyPFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3Q+
PiBMaW5rZWRTaGFkZXJNYXA7Ci0gICAgTGlua2VkU2hhZGVyTWFwIG1fbGlua2VkU2hhZGVyTWFw
OwotCi0gICAgc3RydWN0IEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyB7Ci0gICAgICAgIFZlY3Rv
cjxHQzNEaW50PiBmaWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXA7Ci0gICAgICAgIFZl
Y3RvcjxHQzNEaW50PiBmaWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwOwotCi0gICAgICAg
IEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cygpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIEdDM0RpbnQgY291bnRGb3JUeXBlKEdDM0RlbnVtIGFjdGl2ZVR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChhY3RpdmVUeXBlID09IEFDVElWRV9BVFRSSUJVVEVTIHx8IGFj
dGl2ZVR5cGUgPT0gQUNUSVZFX1VOSUZPUk1TKTsKLSAgICAgICAgICAgIGlmIChhY3RpdmVUeXBl
ID09IEFDVElWRV9BVFRSSUJVVEVTKQotICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFRv
QWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpOwotCi0gICAgICAgICAgICByZXR1cm4gZmls
dGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCk7Ci0gICAgICAgIH0KLSAgICB9Owot
ICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBBY3RpdmVTaGFkZXJTeW1ib2xD
b3VudHM+IFNoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcDsKLSAgICBTaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXA7Ci0KLSAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IEhhc2hlZFN5bWJvbE1hcDsKLSAgICBIYXNoZWRTeW1i
b2xNYXAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcDsKLQotICAgIFN0cmluZyBtYXBwZWRT
eW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFN0cmluZyBtYXBwZWRTeW1ib2xOYW1lKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcmIG5hbWUp
OwotICAgIFN0cmluZyBvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgT3B0aW9u
YWw8U3RyaW5nPiBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAg
IE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5h
bWUpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRlck5hbWVIYXNoPiBuYW1lSGFzaE1hcEZv
clNoYWRlcnM7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKLQotI2lmIFVTRShBTkdMRSkKLSAgICBm
cmllbmQgY2xhc3MgRXh0ZW5zaW9uczNEQU5HTEU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVu
c2lvbnMzREFOR0xFPiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiAhUExBVEZPUk0oQ09DT0EpICYmIFVT
RShPUEVOR0xfRVMpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTOwotICAg
IGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb247Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiBVU0UoT1BFTkdM
KSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQotICAgIGZyaWVuZCBjbGFz
cyBFeHRlbnNpb25zM0RPcGVuR0w7Ci0gICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVu
c2lvbnM7Ci0jZW5kaWYKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlIG1f
cG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uIHsgR3JhcGhpY3NDb250ZXh0M0RQb3dlclBy
ZWZlcmVuY2U6OkRlZmF1bHQgfTsKLSAgICBWZWN0b3I8VmVjdG9yPGZsb2F0Pj4gbV92ZXJ0ZXhB
cnJheTsKLQotI2lmICFVU0UoQU5HTEUpCi0gICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxl
cjsKLSNlbmRpZgotCi0gICAgR0MzRHVpbnQgbV90ZXh0dXJlIHsgMCB9OwotICAgIEdDM0R1aW50
IG1fZmJvIHsgMCB9OwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBHQzNEdWlu
dCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OwotICAgIEdDM0R1aW50IG1faW50ZXJtZWRpYXRl
VGV4dHVyZSB7IDAgfTsKLSNlbmRpZgotCi0gICAgR0MzRHVpbnQgbV9kZXB0aEJ1ZmZlciB7IDAg
fTsKLSAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXIgeyAwIH07Ci0gICAgR0MzRHVpbnQgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07Ci0KLSAgICBib29sIG1fbGF5ZXJDb21wb3NpdGVkIHsg
ZmFsc2UgfTsKLSAgICBHQzNEdWludCBtX2ludGVybmFsQ29sb3JGb3JtYXQgeyAwIH07Ci0KLSNp
ZiBVU0UoQU5HTEUpICYmIFBMQVRGT1JNKENPQ09BKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0RTdXJmYWNlIG1fcGJ1ZmZlcjsKLSNlbmRpZgotCi0gICAgc3RydWN0IEdyYXBoaWNzQ29u
dGV4dDNEU3RhdGUgewotICAgICAgICBHQzNEdWludCBib3VuZEZCTyB7IDAgfTsKLSAgICAgICAg
R0MzRGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAg
fTsKLQotICAgICAgICB1c2luZyBCb3VuZFRleHR1cmVNYXAgPSBIYXNoTWFwPEdDM0RlbnVtLAot
ICAgICAgICAgICAgc3RkOjpwYWlyPEdDM0R1aW50LCBHQzNEZW51bT4sCi0gICAgICAgICAgICBX
VEY6OkludEhhc2g8R0MzRGVudW0+LCAKLSAgICAgICAgICAgIFdURjo6VW5zaWduZWRXaXRoWmVy
b0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+LAotICAgICAgICAgICAgV1RGOjpQYWlySGFzaFRyYWl0
czxXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50PiwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWludD4+Ci0gICAgICAgID47Ci0gICAgICAg
IEJvdW5kVGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7Ci0gICAgICAgIEdDM0R1aW50IGN1cnJl
bnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBib3VuZFRleHR1cmUoYWN0aXZlVGV4dHVy
ZVVuaXQpOyB9Ci0gICAgICAgIEdDM0R1aW50IGJvdW5kVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJl
VW5pdCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5k
VGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvciAh
PSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZS5maXJzdDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAg
ICAgR0MzRHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gYm91bmRUYXJn
ZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdDM0RlbnVtIGJvdW5kVGFyZ2V0KEdD
M0RlbnVtIHRleHR1cmVVbml0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGl0
ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVyZVVuaXQpOwotICAgICAgICAgICAg
aWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlLnNlY29uZDsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCb3VuZFRleHR1cmUoR0MzRGVudW0gdGV4dHVyZVVu
aXQsIEdDM0R1aW50IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCkKLSAgICAgICAgewotICAgICAg
ICAgICAgYm91bmRUZXh0dXJlTWFwLnNldCh0ZXh0dXJlVW5pdCwgc3RkOjptYWtlX3BhaXIodGV4
dHVyZSwgdGFyZ2V0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICB1c2luZyBUZXh0dXJlU2VlZENv
dW50ID0gSGFzaENvdW50ZWRTZXQ8R0MzRHVpbnQsIFdURjo6SW50SGFzaDxHQzNEdWludD4sIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+PjsKLSAgICAgICAgVGV4
dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OwotICAgIH07Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHQzRFN0YXRlIG1fc3RhdGU7Ci0KLSAgICAvLyBGb3IgbXVsdGlzYW1wbGluZwotICAgIEdD
M0R1aW50IG1fbXVsdGlzYW1wbGVGQk8geyAwIH07Ci0gICAgR0MzRHVpbnQgbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKLSAgICBHQzNEdWludCBtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIgeyAwIH07Ci0KLSAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVy
cm9yKCkuCi0gICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwotCi0j
aWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBmcmllbmQgY2xhc3Mg
Tmljb3NpYTo6R0MzRExheWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxOaWNvc2lhOjpHQzNETGF5
ZXI+IG1fbmljb3NpYUxheWVyOwotI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGZyaWVu
ZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKLSNlbHNl
Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBtX3ByaXZhdGU7Ci0jZW5kaWYKLQot
ICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOwotCi0gICAgYm9vbCBtX2lzRm9yV2ViR0wy
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fdXNpbmdDb3JlUHJvZmlsZSB7IGZhbHNlIH07Ci0KLSAg
ICB1bnNpZ25lZCBtX3N0YXR1c0NoZWNrQ291bnQgeyAwIH07Ci0gICAgYm9vbCBtX2ZhaWxOZXh0
U3RhdHVzQ2hlY2sgeyBmYWxzZSB9OwotCi0jaWYgVVNFKENBSVJPKQotICAgIFBsYXRmb3JtM0RP
YmplY3QgbV92YW8geyAwIH07Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAoVVNF
KE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKLSAgICBib29sIG1faGFzU3dpdGNoZWRUb0hpZ2hQZXJm
b3JtYW5jZUdQVSB7IGZhbHNlIH07Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5N2ZmMTdjMWZlMjkyMWEyMjkxM2YyZmJiNjQyMDIwYTg4MWZlM2NlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQb3dlclBy
ZWZlcmVuY2UgewotICAgIERlZmF1bHQsCi0gICAgTG93UG93ZXIsCi0gICAgSGlnaFBlcmZvcm1h
bmNlCi19OwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIHsKLSAgICAvLyBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzCi0gICAgYm9vbCBhbHBoYSB7IHRydWUgfTsKLSAgICBib29s
IGRlcHRoIHsgdHJ1ZSB9OwotICAgIGJvb2wgc3RlbmNpbCB7IGZhbHNlIH07Ci0gICAgYm9vbCBh
bnRpYWxpYXMgeyB0cnVlIH07Ci0gICAgYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEgeyB0cnVlIH07
Ci0gICAgYm9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgZmFp
bElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCB7IGZhbHNlIH07Ci0gICAgdXNpbmcgUG93ZXJQcmVm
ZXJlbmNlID0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U7Ci0gICAgUG93ZXJQcmVm
ZXJlbmNlIHBvd2VyUHJlZmVyZW5jZSB7IFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdCB9OwotCi0g
ICAgLy8gQWRkaXRpb25hbCBhdHRyaWJ1dGVzLgotICAgIGJvb2wgc2hhcmVSZXNvdXJjZXMgeyB0
cnVlIH07Ci0gICAgYm9vbCBpc1dlYkdMMiB7IGZhbHNlIH07Ci0gICAgYm9vbCBub0V4dGVuc2lv
bnMgeyBmYWxzZSB9OwotICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW8geyAxIH07Ci0gICAgUG93
ZXJQcmVmZXJlbmNlIGluaXRpYWxQb3dlclByZWZlcmVuY2UgeyBQb3dlclByZWZlcmVuY2U6OkRl
ZmF1bHQgfTsKLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Y2VhYTYxNWFmY2Q4YWQ0MDMzMjk2ZDlhNTY0NTAzNjdmOTY2ZTdkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBNb3ppbGxh
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNEQmFzZS5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uczNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpHcmFwaGljc0NvbnRleHQzREJhc2UoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVz
IGF0dHJzLCBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0M0RCYXNlKikK
LSAgICA6IG1fYXR0cnMoYXR0cnMpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQot
ewotfQotCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzREJhc2U6OmdldENsZWFyQml0c0J5QXR0
YWNobWVudFR5cGUoR0MzRGVudW0gYXR0YWNobWVudCkKLXsKLSAgICBzd2l0Y2ggKGF0dGFjaG1l
bnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Q09MT1JfQVRUQUNITUVOVDA6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDJfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT0xPUl9BVFRBQ0hNRU5UM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9S
X0FUVEFDSE1FTlQ0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVO
VDVfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UNl9FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ3X0VYVDoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDhfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT0xPUl9BVFRBQ0hNRU5UOV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FU
VEFDSE1FTlQxMF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQx
MV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxMl9FWFQ6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxM19FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxNF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTE9SX0FUVEFDSE1FTlQxNV9FWFQ6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzREJhc2U6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzREJh
c2U6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNU
RU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6
U1RFTkNJTF9CVUZGRVJfQklUOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBU
SF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzREJh
c2U6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNURU5DSUxfQlVG
RkVSX0JJVDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVu
c2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Z2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0MzRGVu
dW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSODoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UjhfU05PUk06Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlIxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6
OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlI4VUk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzREJhc2U6OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlIxNkk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzg6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJH
MzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzhVSToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6UkcxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzE2SToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkczMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0RCYXNlOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCODoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6U1JHQjg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzREJhc2U6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6
UkdCOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UjExRl9HMTFGX0Ix
MEY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjlfRTU6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
QmFzZTo6UkdCMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0I4VUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjhJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0RCYXNlOjpSR0IxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpS
R0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjMyVUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNSR0I4X0FM
UEhBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQThfU05PUk06Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0Ix
MF9BMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTE2RjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6UkdCQThVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQThJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0IxMF9BMlVJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTMy
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTMyVUk6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OlNSR0JfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhB
X0VYVDoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Q09MT1JfQlVGRkVS
X0JJVDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQ09NUE9ORU5UMTY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9DT01QT05FTlQzMkY6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQlVGRkVSX0JJVDsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEQmFzZTo6U1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzREJhc2U6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEQmFzZTo6REVQVEhfU1RFTkNJTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6REVQVEgyNF9TVEVOQ0lMODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQ
VEgzMkZfU1RFTkNJTDg6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRF
UFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNURU5DSUxfQlVGRkVSX0JJ
VDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVpbnQ4X3Qg
R3JhcGhpY3NDb250ZXh0M0RCYXNlOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KEdDM0RlbnVtIGZv
cm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpBTFBIQToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5u
ZWxCaXRzOjpBbHBoYSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkxVTUlOQU5D
RToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpSR0Ip
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdCQSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6UkdCNTY1OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpSR0IpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCNV9BMToK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdCQSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzREJhc2U6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0RCYXNlOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50OF90PihDaGFubmVsQml0czo6RGVwdGgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RC
YXNlOjpTVEVOQ0lMX0lOREVYODoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KENoYW5uZWxCaXRzOjpTdGVuY2lsKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6
REVQVEhfU1RFTkNJTDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5u
ZWxCaXRzOjpEZXB0aFN0ZW5jaWwpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0RCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzREJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUwMzgw
NWMyMThjNzk4NzA0OWNkZDgwYTZmMDcwY2NhMTgxMzk3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzREJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RB
dHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCi0jaW5jbHVkZSAiSW1h
Z2UuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgT1MoV0lORE9XUykKLS8vIERlZmluZWQg
aW4gd2luZXJyb3IuaAotI2lmZGVmIE5PX0VSUk9SCi0jdW5kZWYgTk9fRVJST1IKLSNlbmRpZgot
I2VuZGlmCi0KLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsKLXR5cGVk
ZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRERpc3BsYXk7Ci10eXBlZGVmIHZvaWQq
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RTdXJmYWNlOwotdHlwZWRlZiB2b2lkKiBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEQ29uZmlnOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBF
eHRlbnNpb25zM0Q7Ci1jbGFzcyBIb3N0V2luZG93OwotY2xhc3MgSW1hZ2VCdWZmZXI7Ci1jbGFz
cyBJbWFnZURhdGE7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEQmFzZSA6IHB1YmxpYyBSZWZD
b3VudGVkPEdyYXBoaWNzQ29udGV4dDNEQmFzZT4gewotcHVibGljOgotICAgIGVudW0gewotICAg
ICAgICAvLyBXZWJHTCAxIGNvbnN0YW50cy4KLSAgICAgICAgREVQVEhfQlVGRkVSX0JJVCA9IDB4
MDAwMDAxMDAsCi0gICAgICAgIFNURU5DSUxfQlVGRkVSX0JJVCA9IDB4MDAwMDA0MDAsCi0gICAg
ICAgIENPTE9SX0JVRkZFUl9CSVQgPSAweDAwMDA0MDAwLAotICAgICAgICBQT0lOVFMgPSAweDAw
MDAsCi0gICAgICAgIExJTkVTID0gMHgwMDAxLAotICAgICAgICBMSU5FX0xPT1AgPSAweDAwMDIs
Ci0gICAgICAgIExJTkVfU1RSSVAgPSAweDAwMDMsCi0gICAgICAgIFRSSUFOR0xFUyA9IDB4MDAw
NCwKLSAgICAgICAgVFJJQU5HTEVfU1RSSVAgPSAweDAwMDUsCi0gICAgICAgIFRSSUFOR0xFX0ZB
TiA9IDB4MDAwNiwKLSAgICAgICAgWkVSTyA9IDAsCi0gICAgICAgIE9ORSA9IDEsCi0gICAgICAg
IFNSQ19DT0xPUiA9IDB4MDMwMCwKLSAgICAgICAgT05FX01JTlVTX1NSQ19DT0xPUiA9IDB4MDMw
MSwKLSAgICAgICAgU1JDX0FMUEhBID0gMHgwMzAyLAotICAgICAgICBPTkVfTUlOVVNfU1JDX0FM
UEhBID0gMHgwMzAzLAotICAgICAgICBEU1RfQUxQSEEgPSAweDAzMDQsCi0gICAgICAgIE9ORV9N
SU5VU19EU1RfQUxQSEEgPSAweDAzMDUsCi0gICAgICAgIERTVF9DT0xPUiA9IDB4MDMwNiwKLSAg
ICAgICAgT05FX01JTlVTX0RTVF9DT0xPUiA9IDB4MDMwNywKLSAgICAgICAgU1JDX0FMUEhBX1NB
VFVSQVRFID0gMHgwMzA4LAotICAgICAgICBGVU5DX0FERCA9IDB4ODAwNiwKLSAgICAgICAgQkxF
TkRfRVFVQVRJT04gPSAweDgwMDksCi0gICAgICAgIEJMRU5EX0VRVUFUSU9OX1JHQiA9IDB4ODAw
OSwKLSAgICAgICAgQkxFTkRfRVFVQVRJT05fQUxQSEEgPSAweDg4M0QsCi0gICAgICAgIEZVTkNf
U1VCVFJBQ1QgPSAweDgwMEEsCi0gICAgICAgIEZVTkNfUkVWRVJTRV9TVUJUUkFDVCA9IDB4ODAw
QiwKLSAgICAgICAgQkxFTkRfRFNUX1JHQiA9IDB4ODBDOCwKLSAgICAgICAgQkxFTkRfU1JDX1JH
QiA9IDB4ODBDOSwKLSAgICAgICAgQkxFTkRfRFNUX0FMUEhBID0gMHg4MENBLAotICAgICAgICBC
TEVORF9TUkNfQUxQSEEgPSAweDgwQ0IsCi0gICAgICAgIENPTlNUQU5UX0NPTE9SID0gMHg4MDAx
LAotICAgICAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgPSAweDgwMDIsCi0gICAgICAgIENP
TlNUQU5UX0FMUEhBID0gMHg4MDAzLAotICAgICAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEg
PSAweDgwMDQsCi0gICAgICAgIEJMRU5EX0NPTE9SID0gMHg4MDA1LAotICAgICAgICBBUlJBWV9C
VUZGRVIgPSAweDg4OTIsCi0gICAgICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSID0gMHg4ODkzLAot
ICAgICAgICBBUlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5NCwKLSAgICAgICAgRUxFTUVOVF9B
UlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5NSwKLSAgICAgICAgU1RSRUFNX0RSQVcgPSAweDg4
RTAsCi0gICAgICAgIFNUQVRJQ19EUkFXID0gMHg4OEU0LAotICAgICAgICBEWU5BTUlDX0RSQVcg
PSAweDg4RTgsCi0gICAgICAgIEJVRkZFUl9TSVpFID0gMHg4NzY0LAotICAgICAgICBCVUZGRVJf
VVNBR0UgPSAweDg3NjUsCi0gICAgICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiA9IDB4ODYyNiwK
LSAgICAgICAgRlJPTlQgPSAweDA0MDQsCi0gICAgICAgIEJBQ0sgPSAweDA0MDUsCi0gICAgICAg
IEZST05UX0FORF9CQUNLID0gMHgwNDA4LAotICAgICAgICBURVhUVVJFXzJEID0gMHgwREUxLAot
ICAgICAgICBDVUxMX0ZBQ0UgPSAweDBCNDQsCi0gICAgICAgIEJMRU5EID0gMHgwQkUyLAotICAg
ICAgICBESVRIRVIgPSAweDBCRDAsCi0gICAgICAgIFNURU5DSUxfVEVTVCA9IDB4MEI5MCwKLSAg
ICAgICAgREVQVEhfVEVTVCA9IDB4MEI3MSwKLSAgICAgICAgU0NJU1NPUl9URVNUID0gMHgwQzEx
LAotICAgICAgICBQT0xZR09OX09GRlNFVF9GSUxMID0gMHg4MDM3LAotICAgICAgICBTQU1QTEVf
QUxQSEFfVE9fQ09WRVJBR0UgPSAweDgwOUUsCi0gICAgICAgIFNBTVBMRV9DT1ZFUkFHRSA9IDB4
ODBBMCwKLSAgICAgICAgTk9fRVJST1IgPSAwLAotICAgICAgICBJTlZBTElEX0VOVU0gPSAweDA1
MDAsCi0gICAgICAgIElOVkFMSURfVkFMVUUgPSAweDA1MDEsCi0gICAgICAgIElOVkFMSURfT1BF
UkFUSU9OID0gMHgwNTAyLAotICAgICAgICBPVVRfT0ZfTUVNT1JZID0gMHgwNTA1LAotICAgICAg
ICBDVyA9IDB4MDkwMCwKLSAgICAgICAgQ0NXID0gMHgwOTAxLAotICAgICAgICBMSU5FX1dJRFRI
ID0gMHgwQjIxLAotICAgICAgICBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgPSAweDg0NkQsCi0g
ICAgICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSA9IDB4ODQ2RSwKLSAgICAgICAgQ1VMTF9G
QUNFX01PREUgPSAweDBCNDUsCi0gICAgICAgIEZST05UX0ZBQ0UgPSAweDBCNDYsCi0gICAgICAg
IERFUFRIX1JBTkdFID0gMHgwQjcwLAotICAgICAgICBERVBUSF9XUklURU1BU0sgPSAweDBCNzIs
Ci0gICAgICAgIERFUFRIX0NMRUFSX1ZBTFVFID0gMHgwQjczLAotICAgICAgICBERVBUSF9GVU5D
ID0gMHgwQjc0LAotICAgICAgICBTVEVOQ0lMX0NMRUFSX1ZBTFVFID0gMHgwQjkxLAotICAgICAg
ICBTVEVOQ0lMX0ZVTkMgPSAweDBCOTIsCi0gICAgICAgIFNURU5DSUxfRkFJTCA9IDB4MEI5NCwK
LSAgICAgICAgU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgPSAweDBCOTUsCi0gICAgICAgIFNURU5D
SUxfUEFTU19ERVBUSF9QQVNTID0gMHgwQjk2LAotICAgICAgICBTVEVOQ0lMX1JFRiA9IDB4MEI5
NywKLSAgICAgICAgU1RFTkNJTF9WQUxVRV9NQVNLID0gMHgwQjkzLAotICAgICAgICBTVEVOQ0lM
X1dSSVRFTUFTSyA9IDB4MEI5OCwKLSAgICAgICAgU1RFTkNJTF9CQUNLX0ZVTkMgPSAweDg4MDAs
Ci0gICAgICAgIFNURU5DSUxfQkFDS19GQUlMID0gMHg4ODAxLAotICAgICAgICBTVEVOQ0lMX0JB
Q0tfUEFTU19ERVBUSF9GQUlMID0gMHg4ODAyLAotICAgICAgICBTVEVOQ0lMX0JBQ0tfUEFTU19E
RVBUSF9QQVNTID0gMHg4ODAzLAotICAgICAgICBTVEVOQ0lMX0JBQ0tfUkVGID0gMHg4Q0EzLAot
ICAgICAgICBTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyA9IDB4OENBNCwKLSAgICAgICAgU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSyA9IDB4OENBNSwKLSAgICAgICAgVklFV1BPUlQgPSAweDBCQTIsCi0g
ICAgICAgIFNDSVNTT1JfQk9YID0gMHgwQzEwLAotICAgICAgICBDT0xPUl9DTEVBUl9WQUxVRSA9
IDB4MEMyMiwKLSAgICAgICAgQ09MT1JfV1JJVEVNQVNLID0gMHgwQzIzLAotICAgICAgICBVTlBB
Q0tfQUxJR05NRU5UID0gMHgwQ0Y1LAotICAgICAgICBQQUNLX0FMSUdOTUVOVCA9IDB4MEQwNSwK
LSAgICAgICAgTUFYX1RFWFRVUkVfU0laRSA9IDB4MEQzMywKLSAgICAgICAgTUFYX1ZJRVdQT1JU
X0RJTVMgPSAweDBEM0EsCi0gICAgICAgIFNVQlBJWEVMX0JJVFMgPSAweDBENTAsCi0gICAgICAg
IFJFRF9CSVRTID0gMHgwRDUyLAotICAgICAgICBHUkVFTl9CSVRTID0gMHgwRDUzLAotICAgICAg
ICBCTFVFX0JJVFMgPSAweDBENTQsCi0gICAgICAgIEFMUEhBX0JJVFMgPSAweDBENTUsCi0gICAg
ICAgIERFUFRIX0JJVFMgPSAweDBENTYsCi0gICAgICAgIFNURU5DSUxfQklUUyA9IDB4MEQ1NywK
LSAgICAgICAgUE9MWUdPTl9PRkZTRVRfVU5JVFMgPSAweDJBMDAsCi0gICAgICAgIFBPTFlHT05f
T0ZGU0VUX0ZBQ1RPUiA9IDB4ODAzOCwKLSAgICAgICAgVEVYVFVSRV9CSU5ESU5HXzJEID0gMHg4
MDY5LAotICAgICAgICBTQU1QTEVfQlVGRkVSUyA9IDB4ODBBOCwKLSAgICAgICAgU0FNUExFUyA9
IDB4ODBBOSwKLSAgICAgICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFID0gMHg4MEFBLAotICAgICAg
ICBTQU1QTEVfQ09WRVJBR0VfSU5WRVJUID0gMHg4MEFCLAotICAgICAgICBOVU1fQ09NUFJFU1NF
RF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTIsCi0gICAgICAgIENPTVBSRVNTRURfVEVYVFVSRV9G
T1JNQVRTID0gMHg4NkEzLAotICAgICAgICBET05UX0NBUkUgPSAweDExMDAsCi0gICAgICAgIEZB
U1RFU1QgPSAweDExMDEsCi0gICAgICAgIE5JQ0VTVCA9IDB4MTEwMiwKLSAgICAgICAgR0VORVJB
VEVfTUlQTUFQX0hJTlQgPSAweDgxOTIsCi0gICAgICAgIEJZVEUgPSAweDE0MDAsCi0gICAgICAg
IFVOU0lHTkVEX0JZVEUgPSAweDE0MDEsCi0gICAgICAgIFNIT1JUID0gMHgxNDAyLAotICAgICAg
ICBVTlNJR05FRF9TSE9SVCA9IDB4MTQwMywKLSAgICAgICAgSU5UID0gMHgxNDA0LAotICAgICAg
ICBVTlNJR05FRF9JTlQgPSAweDE0MDUsCi0gICAgICAgIEZMT0FUID0gMHgxNDA2LAotICAgICAg
ICBIQUxGX0ZMT0FUX09FUyA9IDB4OEQ2MSwKLSAgICAgICAgRklYRUQgPSAweDE0MEMsCi0gICAg
ICAgIERFUFRIX0NPTVBPTkVOVCA9IDB4MTkwMiwKLSAgICAgICAgQUxQSEEgPSAweDE5MDYsCi0g
ICAgICAgIFJHQiA9IDB4MTkwNywKLSAgICAgICAgUkdCQSA9IDB4MTkwOCwKLSAgICAgICAgQkdS
QSA9IDB4ODBFMSwKLSAgICAgICAgTFVNSU5BTkNFID0gMHgxOTA5LAotICAgICAgICBMVU1JTkFO
Q0VfQUxQSEEgPSAweDE5MEEsCi0gICAgICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgPSAweDgw
MzMsCi0gICAgICAgIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEgPSAweDgwMzQsCi0gICAgICAgIFVO
U0lHTkVEX1NIT1JUXzVfNl81ID0gMHg4MzYzLAotICAgICAgICBGUkFHTUVOVF9TSEFERVIgPSAw
eDhCMzAsCi0gICAgICAgIFZFUlRFWF9TSEFERVIgPSAweDhCMzEsCi0gICAgICAgIE1BWF9WRVJU
RVhfQVRUUklCUyA9IDB4ODg2OSwKLSAgICAgICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMg
PSAweDhERkIsCi0gICAgICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAweDhERkMsCi0gICAgICAg
IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4QjRELAotICAgICAgICBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNEMsCi0gICAgICAgIE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTID0gMHg4ODcyLAotICAgICAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTID0gMHg4REZELAotICAgICAgICBTSEFERVJfVFlQRSA9IDB4OEI0RiwKLSAgICAgICAgREVM
RVRFX1NUQVRVUyA9IDB4OEI4MCwKLSAgICAgICAgTElOS19TVEFUVVMgPSAweDhCODIsCi0gICAg
ICAgIFZBTElEQVRFX1NUQVRVUyA9IDB4OEI4MywKLSAgICAgICAgQVRUQUNIRURfU0hBREVSUyA9
IDB4OEI4NSwKLSAgICAgICAgQUNUSVZFX1VOSUZPUk1TID0gMHg4Qjg2LAotICAgICAgICBBQ1RJ
VkVfVU5JRk9STV9NQVhfTEVOR1RIID0gMHg4Qjg3LAotICAgICAgICBBQ1RJVkVfQVRUUklCVVRF
UyA9IDB4OEI4OSwKLSAgICAgICAgQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIID0gMHg4QjhB
LAotICAgICAgICBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gPSAweDhCOEMsCi0gICAgICAgIENV
UlJFTlRfUFJPR1JBTSA9IDB4OEI4RCwKLSAgICAgICAgTkVWRVIgPSAweDAyMDAsCi0gICAgICAg
IExFU1MgPSAweDAyMDEsCi0gICAgICAgIEVRVUFMID0gMHgwMjAyLAotICAgICAgICBMRVFVQUwg
PSAweDAyMDMsCi0gICAgICAgIEdSRUFURVIgPSAweDAyMDQsCi0gICAgICAgIE5PVEVRVUFMID0g
MHgwMjA1LAotICAgICAgICBHRVFVQUwgPSAweDAyMDYsCi0gICAgICAgIEFMV0FZUyA9IDB4MDIw
NywKLSAgICAgICAgS0VFUCA9IDB4MUUwMCwKLSAgICAgICAgUkVQTEFDRSA9IDB4MUUwMSwKLSAg
ICAgICAgSU5DUiA9IDB4MUUwMiwKLSAgICAgICAgREVDUiA9IDB4MUUwMywKLSAgICAgICAgSU5W
RVJUID0gMHgxNTBBLAotICAgICAgICBJTkNSX1dSQVAgPSAweDg1MDcsCi0gICAgICAgIERFQ1Jf
V1JBUCA9IDB4ODUwOCwKLSAgICAgICAgVkVORE9SID0gMHgxRjAwLAotICAgICAgICBSRU5ERVJF
UiA9IDB4MUYwMSwKLSAgICAgICAgVkVSU0lPTiA9IDB4MUYwMiwKLSAgICAgICAgRVhURU5TSU9O
UyA9IDB4MUYwMywKLSAgICAgICAgTkVBUkVTVCA9IDB4MjYwMCwKLSAgICAgICAgTElORUFSID0g
MHgyNjAxLAotICAgICAgICBORUFSRVNUX01JUE1BUF9ORUFSRVNUID0gMHgyNzAwLAotICAgICAg
ICBMSU5FQVJfTUlQTUFQX05FQVJFU1QgPSAweDI3MDEsCi0gICAgICAgIE5FQVJFU1RfTUlQTUFQ
X0xJTkVBUiA9IDB4MjcwMiwKLSAgICAgICAgTElORUFSX01JUE1BUF9MSU5FQVIgPSAweDI3MDMs
Ci0gICAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiA9IDB4MjgwMCwKLSAgICAgICAgVEVYVFVSRV9N
SU5fRklMVEVSID0gMHgyODAxLAotICAgICAgICBURVhUVVJFX1dSQVBfUyA9IDB4MjgwMiwKLSAg
ICAgICAgVEVYVFVSRV9XUkFQX1QgPSAweDI4MDMsCi0gICAgICAgIFRFWFRVUkUgPSAweDE3MDIs
Ci0gICAgICAgIFRFWFRVUkVfQ1VCRV9NQVAgPSAweDg1MTMsCi0gICAgICAgIFRFWFRVUkVfQklO
RElOR19DVUJFX01BUCA9IDB4ODUxNCwKLSAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YID0gMHg4NTE1LAotICAgICAgICBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggPSAweDg1
MTYsCi0gICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSA9IDB4ODUxNywKLSAgICAg
ICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZID0gMHg4NTE4LAotICAgICAgICBURVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1ogPSAweDg1MTksCi0gICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWiA9IDB4ODUxQSwKLSAgICAgICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA9
IDB4ODUxQywKLSAgICAgICAgVEVYVFVSRTAgPSAweDg0QzAsCi0gICAgICAgIFRFWFRVUkUxID0g
MHg4NEMxLAotICAgICAgICBURVhUVVJFMiA9IDB4ODRDMiwKLSAgICAgICAgVEVYVFVSRTMgPSAw
eDg0QzMsCi0gICAgICAgIFRFWFRVUkU0ID0gMHg4NEM0LAotICAgICAgICBURVhUVVJFNSA9IDB4
ODRDNSwKLSAgICAgICAgVEVYVFVSRTYgPSAweDg0QzYsCi0gICAgICAgIFRFWFRVUkU3ID0gMHg4
NEM3LAotICAgICAgICBURVhUVVJFOCA9IDB4ODRDOCwKLSAgICAgICAgVEVYVFVSRTkgPSAweDg0
QzksCi0gICAgICAgIFRFWFRVUkUxMCA9IDB4ODRDQSwKLSAgICAgICAgVEVYVFVSRTExID0gMHg4
NENCLAotICAgICAgICBURVhUVVJFMTIgPSAweDg0Q0MsCi0gICAgICAgIFRFWFRVUkUxMyA9IDB4
ODRDRCwKLSAgICAgICAgVEVYVFVSRTE0ID0gMHg4NENFLAotICAgICAgICBURVhUVVJFMTUgPSAw
eDg0Q0YsCi0gICAgICAgIFRFWFRVUkUxNiA9IDB4ODREMCwKLSAgICAgICAgVEVYVFVSRTE3ID0g
MHg4NEQxLAotICAgICAgICBURVhUVVJFMTggPSAweDg0RDIsCi0gICAgICAgIFRFWFRVUkUxOSA9
IDB4ODREMywKLSAgICAgICAgVEVYVFVSRTIwID0gMHg4NEQ0LAotICAgICAgICBURVhUVVJFMjEg
PSAweDg0RDUsCi0gICAgICAgIFRFWFRVUkUyMiA9IDB4ODRENiwKLSAgICAgICAgVEVYVFVSRTIz
ID0gMHg4NEQ3LAotICAgICAgICBURVhUVVJFMjQgPSAweDg0RDgsCi0gICAgICAgIFRFWFRVUkUy
NSA9IDB4ODREOSwKLSAgICAgICAgVEVYVFVSRTI2ID0gMHg4NERBLAotICAgICAgICBURVhUVVJF
MjcgPSAweDg0REIsCi0gICAgICAgIFRFWFRVUkUyOCA9IDB4ODREQywKLSAgICAgICAgVEVYVFVS
RTI5ID0gMHg4NERELAotICAgICAgICBURVhUVVJFMzAgPSAweDg0REUsCi0gICAgICAgIFRFWFRV
UkUzMSA9IDB4ODRERiwKLSAgICAgICAgQUNUSVZFX1RFWFRVUkUgPSAweDg0RTAsCi0gICAgICAg
IFJFUEVBVCA9IDB4MjkwMSwKLSAgICAgICAgQ0xBTVBfVE9fRURHRSA9IDB4ODEyRiwKLSAgICAg
ICAgTUlSUk9SRURfUkVQRUFUID0gMHg4MzcwLAotICAgICAgICBGTE9BVF9WRUMyID0gMHg4QjUw
LAotICAgICAgICBGTE9BVF9WRUMzID0gMHg4QjUxLAotICAgICAgICBGTE9BVF9WRUM0ID0gMHg4
QjUyLAotICAgICAgICBJTlRfVkVDMiA9IDB4OEI1MywKLSAgICAgICAgSU5UX1ZFQzMgPSAweDhC
NTQsCi0gICAgICAgIElOVF9WRUM0ID0gMHg4QjU1LAotICAgICAgICBCT09MID0gMHg4QjU2LAot
ICAgICAgICBCT09MX1ZFQzIgPSAweDhCNTcsCi0gICAgICAgIEJPT0xfVkVDMyA9IDB4OEI1OCwK
LSAgICAgICAgQk9PTF9WRUM0ID0gMHg4QjU5LAotICAgICAgICBGTE9BVF9NQVQyID0gMHg4QjVB
LAotICAgICAgICBGTE9BVF9NQVQzID0gMHg4QjVCLAotICAgICAgICBGTE9BVF9NQVQ0ID0gMHg4
QjVDLAotICAgICAgICBTQU1QTEVSXzJEID0gMHg4QjVFLAotICAgICAgICBTQU1QTEVSX0NVQkUg
PSAweDhCNjAsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCA9IDB4ODYyMiwK
LSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFID0gMHg4NjIzLAotICAgICAgICBWRVJU
RVhfQVRUUklCX0FSUkFZX1NUUklERSA9IDB4ODYyNCwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9B
UlJBWV9UWVBFID0gMHg4NjI1LAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTEla
RUQgPSAweDg4NkEsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiA9IDB4ODY0
NSwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5RiwK
LSAgICAgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFID0gMHg4QjlBLAotICAgICAg
ICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCA9IDB4OEI5QiwKLSAgICAgICAgQ09N
UElMRV9TVEFUVVMgPSAweDhCODEsCi0gICAgICAgIElORk9fTE9HX0xFTkdUSCA9IDB4OEI4NCwK
LSAgICAgICAgU0hBREVSX1NPVVJDRV9MRU5HVEggPSAweDhCODgsCi0gICAgICAgIFNIQURFUl9D
T01QSUxFUiA9IDB4OERGQSwKLSAgICAgICAgU0hBREVSX0JJTkFSWV9GT1JNQVRTID0gMHg4REY4
LAotICAgICAgICBOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTID0gMHg4REY5LAotICAgICAgICBM
T1dfRkxPQVQgPSAweDhERjAsCi0gICAgICAgIE1FRElVTV9GTE9BVCA9IDB4OERGMSwKLSAgICAg
ICAgSElHSF9GTE9BVCA9IDB4OERGMiwKLSAgICAgICAgTE9XX0lOVCA9IDB4OERGMywKLSAgICAg
ICAgTUVESVVNX0lOVCA9IDB4OERGNCwKLSAgICAgICAgSElHSF9JTlQgPSAweDhERjUsCi0gICAg
ICAgIEZSQU1FQlVGRkVSID0gMHg4RDQwLAotICAgICAgICBSRU5ERVJCVUZGRVIgPSAweDhENDEs
Ci0gICAgICAgIFJHQkE0ID0gMHg4MDU2LAotICAgICAgICBSR0I1X0ExID0gMHg4MDU3LAotICAg
ICAgICBSR0I1NjUgPSAweDhENjIsCi0gICAgICAgIERFUFRIX0NPTVBPTkVOVDE2ID0gMHg4MUE1
LAotICAgICAgICBTVEVOQ0lMX0lOREVYID0gMHgxOTAxLAotICAgICAgICBTVEVOQ0lMX0lOREVY
OCA9IDB4OEQ0OCwKLSAgICAgICAgUkVOREVSQlVGRkVSX1dJRFRIID0gMHg4RDQyLAotICAgICAg
ICBSRU5ERVJCVUZGRVJfSEVJR0hUID0gMHg4RDQzLAotICAgICAgICBSRU5ERVJCVUZGRVJfSU5U
RVJOQUxfRk9STUFUID0gMHg4RDQ0LAotICAgICAgICBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgPSAw
eDhENTAsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFID0gMHg4RDUxLAotICAgICAg
ICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFID0gMHg4RDUyLAotICAgICAgICBSRU5ERVJCVUZGRVJf
QUxQSEFfU0laRSA9IDB4OEQ1MywKLSAgICAgICAgUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgPSAw
eDhENTQsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgPSAweDhENTUsCi0gICAg
ICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgPSAweDhDRDAsCi0gICAgICAg
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgPSAweDhDRDEsCi0gICAgICAgIEZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCA9IDB4OENEMiwKLSAgICAgICAgRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhDRDMsCi0gICAg
ICAgIENPTE9SX0FUVEFDSE1FTlQwID0gMHg4Q0UwLAotICAgICAgICBERVBUSF9BVFRBQ0hNRU5U
ID0gMHg4RDAwLAotICAgICAgICBTVEVOQ0lMX0FUVEFDSE1FTlQgPSAweDhEMjAsCi0gICAgICAg
IE5PTkUgPSAwLAotICAgICAgICBGUkFNRUJVRkZFUl9DT01QTEVURSA9IDB4OENENSwKLSAgICAg
ICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UID0gMHg4Q0Q2LAotICAgICAgICBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA9IDB4OENENywKLSAgICAg
ICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TID0gMHg4Q0Q5LAotICAgICAgICBG
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRCA9IDB4OENERCwKLSAgICAgICAgRlJBTUVCVUZGRVJfQklO
RElORyA9IDB4OENBNiwKLSAgICAgICAgUkVOREVSQlVGRkVSX0JJTkRJTkcgPSAweDhDQTcsCi0g
ICAgICAgIE1BWF9SRU5ERVJCVUZGRVJfU0laRSA9IDB4ODRFOCwKLSAgICAgICAgSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gPSAweDA1MDYsCi0KLSAgICAgICAgLy8gV2ViR0wtc3BlY2lm
aWMgZW51bXMKLSAgICAgICAgVU5QQUNLX0ZMSVBfWV9XRUJHTCA9IDB4OTI0MCwKLSAgICAgICAg
VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMID0gMHg5MjQxLAotICAgICAgICBDT05URVhU
X0xPU1RfV0VCR0wgPSAweDkyNDIsCi0gICAgICAgIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJ
T05fV0VCR0wgPSAweDkyNDMsCi0gICAgICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCA9IDB4OTI0
NCwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFID0gMHg4OEZFLAot
ICAgICAgICAKLSAgICAgICAgLy8gV2ViR0wyIGNvbnN0YW50cwotICAgICAgICBSRUFEX0JVRkZF
UiA9IDB4MEMwMiwKLSAgICAgICAgVU5QQUNLX1JPV19MRU5HVEggPSAweDBDRjIsCi0gICAgICAg
IFVOUEFDS19TS0lQX1JPV1MgPSAweDBDRjMsCi0gICAgICAgIFVOUEFDS19TS0lQX1BJWEVMUyA9
IDB4MENGNCwKLSAgICAgICAgUEFDS19ST1dfTEVOR1RIID0gMHgwRDAyLAotICAgICAgICBQQUNL
X1NLSVBfUk9XUyA9IDB4MEQwMywKLSAgICAgICAgUEFDS19TS0lQX1BJWEVMUyA9IDB4MEQwNCwK
LSAgICAgICAgQ09MT1IgPSAweDE4MDAsCi0gICAgICAgIERFUFRIID0gMHgxODAxLAotICAgICAg
ICBTVEVOQ0lMID0gMHgxODAyLAotICAgICAgICBSRUQgPSAweDE5MDMsCi0gICAgICAgIFJHQjgg
PSAweDgwNTEsCi0gICAgICAgIFJHQkE4ID0gMHg4MDU4LAotICAgICAgICBSR0IxMF9BMiA9IDB4
ODA1OSwKLSAgICAgICAgVEVYVFVSRV9CSU5ESU5HXzNEID0gMHg4MDZBLAotICAgICAgICBVTlBB
Q0tfU0tJUF9JTUFHRVMgPSAweDgwNkQsCi0gICAgICAgIFVOUEFDS19JTUFHRV9IRUlHSFQgPSAw
eDgwNkUsCi0gICAgICAgIFRFWFRVUkVfM0QgPSAweDgwNkYsCi0gICAgICAgIFRFWFRVUkVfV1JB
UF9SID0gMHg4MDcyLAotICAgICAgICBNQVhfM0RfVEVYVFVSRV9TSVpFID0gMHg4MDczLAotICAg
ICAgICBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgPSAweDgzNjgsCi0gICAgICAgIE1BWF9F
TEVNRU5UU19WRVJUSUNFUyA9IDB4ODBFOCwKLSAgICAgICAgTUFYX0VMRU1FTlRTX0lORElDRVMg
PSAweDgwRTksCi0gICAgICAgIFRFWFRVUkVfTUlOX0xPRCA9IDB4ODEzQSwKLSAgICAgICAgVEVY
VFVSRV9NQVhfTE9EID0gMHg4MTNCLAotICAgICAgICBURVhUVVJFX0JBU0VfTEVWRUwgPSAweDgx
M0MsCi0gICAgICAgIFRFWFRVUkVfTUFYX0xFVkVMID0gMHg4MTNELAotICAgICAgICBNSU4gPSAw
eDgwMDcsCi0gICAgICAgIE1BWCA9IDB4ODAwOCwKLSAgICAgICAgREVQVEhfQ09NUE9ORU5UMjQg
PSAweDgxQTYsCi0gICAgICAgIE1BWF9URVhUVVJFX0xPRF9CSUFTID0gMHg4NEZELAotICAgICAg
ICBURVhUVVJFX0NPTVBBUkVfTU9ERSA9IDB4ODg0QywKLSAgICAgICAgVEVYVFVSRV9DT01QQVJF
X0ZVTkMgPSAweDg4NEQsCi0gICAgICAgIENVUlJFTlRfUVVFUlkgPSAweDg4NjUsCi0gICAgICAg
IFFVRVJZX1JFU1VMVCA9IDB4ODg2NiwKLSAgICAgICAgUVVFUllfUkVTVUxUX0FWQUlMQUJMRSA9
IDB4ODg2NywKLSAgICAgICAgU1RSRUFNX1JFQUQgPSAweDg4RTEsCi0gICAgICAgIFNUUkVBTV9D
T1BZID0gMHg4OEUyLAotICAgICAgICBTVEFUSUNfUkVBRCA9IDB4ODhFNSwKLSAgICAgICAgU1RB
VElDX0NPUFkgPSAweDg4RTYsCi0gICAgICAgIERZTkFNSUNfUkVBRCA9IDB4ODhFOSwKLSAgICAg
ICAgRFlOQU1JQ19DT1BZID0gMHg4OEVBLAotICAgICAgICBNQVhfRFJBV19CVUZGRVJTID0gMHg4
ODI0LAotICAgICAgICBEUkFXX0JVRkZFUjAgPSAweDg4MjUsCi0gICAgICAgIERSQVdfQlVGRkVS
MSA9IDB4ODgyNiwKLSAgICAgICAgRFJBV19CVUZGRVIyID0gMHg4ODI3LAotICAgICAgICBEUkFX
X0JVRkZFUjMgPSAweDg4MjgsCi0gICAgICAgIERSQVdfQlVGRkVSNCA9IDB4ODgyOSwKLSAgICAg
ICAgRFJBV19CVUZGRVI1ID0gMHg4ODJBLAotICAgICAgICBEUkFXX0JVRkZFUjYgPSAweDg4MkIs
Ci0gICAgICAgIERSQVdfQlVGRkVSNyA9IDB4ODgyQywKLSAgICAgICAgRFJBV19CVUZGRVI4ID0g
MHg4ODJELAotICAgICAgICBEUkFXX0JVRkZFUjkgPSAweDg4MkUsCi0gICAgICAgIERSQVdfQlVG
RkVSMTAgPSAweDg4MkYsCi0gICAgICAgIERSQVdfQlVGRkVSMTEgPSAweDg4MzAsCi0gICAgICAg
IERSQVdfQlVGRkVSMTIgPSAweDg4MzEsCi0gICAgICAgIERSQVdfQlVGRkVSMTMgPSAweDg4MzIs
Ci0gICAgICAgIERSQVdfQlVGRkVSMTQgPSAweDg4MzMsCi0gICAgICAgIERSQVdfQlVGRkVSMTUg
PSAweDg4MzQsCi0gICAgICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFMgPSAweDhC
NDksCi0gICAgICAgIE1BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTID0gMHg4QjRBLAotICAg
ICAgICBTQU1QTEVSXzNEID0gMHg4QjVGLAotICAgICAgICBTQU1QTEVSXzJEX1NIQURPVyA9IDB4
OEI2MiwKLSAgICAgICAgRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVCA9IDB4OEI4QiwK
LSAgICAgICAgUElYRUxfUEFDS19CVUZGRVIgPSAweDg4RUIsCi0gICAgICAgIFBJWEVMX1VOUEFD
S19CVUZGRVIgPSAweDg4RUMsCi0gICAgICAgIFBJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkcgPSAw
eDg4RUQsCi0gICAgICAgIFBJWEVMX1VOUEFDS19CVUZGRVJfQklORElORyA9IDB4ODhFRiwKLSAg
ICAgICAgRkxPQVRfTUFUMngzID0gMHg4QjY1LAotICAgICAgICBGTE9BVF9NQVQyeDQgPSAweDhC
NjYsCi0gICAgICAgIEZMT0FUX01BVDN4MiA9IDB4OEI2NywKLSAgICAgICAgRkxPQVRfTUFUM3g0
ID0gMHg4QjY4LAotICAgICAgICBGTE9BVF9NQVQ0eDIgPSAweDhCNjksCi0gICAgICAgIEZMT0FU
X01BVDR4MyA9IDB4OEI2QSwKLSAgICAgICAgU1JHQiA9IDB4OEM0MCwKLSAgICAgICAgU1JHQjgg
PSAweDhDNDEsCi0gICAgICAgIFNSR0JfQUxQSEEgPSAweDhDNDIsCi0gICAgICAgIFNSR0I4X0FM
UEhBOCA9IDB4OEM0MywKLSAgICAgICAgQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSA9IDB4ODg0RSwK
LSAgICAgICAgUkdCQTMyRiA9IDB4ODgxNCwKLSAgICAgICAgUkdCMzJGID0gMHg4ODE1LAotICAg
ICAgICBSR0JBMTZGID0gMHg4ODFBLAotICAgICAgICBSR0IxNkYgPSAweDg4MUIsCi0gICAgICAg
IFZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUiA9IDB4ODhGRCwKLSAgICAgICAgTUFYX0FSUkFZ
X1RFWFRVUkVfTEFZRVJTID0gMHg4OEZGLAotICAgICAgICBNSU5fUFJPR1JBTV9URVhFTF9PRkZT
RVQgPSAweDg5MDQsCi0gICAgICAgIE1BWF9QUk9HUkFNX1RFWEVMX09GRlNFVCA9IDB4ODkwNSwK
LSAgICAgICAgTUFYX1ZBUllJTkdfQ09NUE9ORU5UUyA9IDB4OEI0QiwKLSAgICAgICAgVEVYVFVS
RV8yRF9BUlJBWSA9IDB4OEMxQSwKLSAgICAgICAgVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZID0g
MHg4QzFELAotICAgICAgICBSMTFGX0cxMUZfQjEwRiA9IDB4OEMzQSwKLSAgICAgICAgVU5TSUdO
RURfSU5UXzEwRl8xMUZfMTFGX1JFViA9IDB4OEMzQiwKLSAgICAgICAgUkdCOV9FNSA9IDB4OEMz
RCwKLSAgICAgICAgVU5TSUdORURfSU5UXzVfOV85XzlfUkVWID0gMHg4QzNFLAotICAgICAgICBU
UkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREUgPSAweDhDN0YsCi0gICAgICAgIE1BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUyA9IDB4OEM4MCwKLSAgICAgICAgVFJB
TlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTID0gMHg4QzgzLAotICAgICAgICBUUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSX1NUQVJUID0gMHg4Qzg0LAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX1NJWkUgPSAweDhDODUsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJ
VkVTX1dSSVRURU4gPSAweDhDODgsCi0gICAgICAgIFJBU1RFUklaRVJfRElTQ0FSRCA9IDB4OEM4
OSwKLSAgICAgICAgTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRT
ID0gMHg4QzhBLAotICAgICAgICBNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJ
QlMgPSAweDhDOEIsCi0gICAgICAgIElOVEVSTEVBVkVEX0FUVFJJQlMgPSAweDhDOEMsCi0gICAg
ICAgIFNFUEFSQVRFX0FUVFJJQlMgPSAweDhDOEQsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVIgPSAweDhDOEUsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklO
RElORyA9IDB4OEM4RiwKLSAgICAgICAgUkdCQTMyVUkgPSAweDhENzAsCi0gICAgICAgIFJHQjMy
VUkgPSAweDhENzEsCi0gICAgICAgIFJHQkExNlVJID0gMHg4RDc2LAotICAgICAgICBSR0IxNlVJ
ID0gMHg4RDc3LAotICAgICAgICBSR0JBOFVJID0gMHg4RDdDLAotICAgICAgICBSR0I4VUkgPSAw
eDhEN0QsCi0gICAgICAgIFJHQkEzMkkgPSAweDhEODIsCi0gICAgICAgIFJHQjMySSA9IDB4OEQ4
MywKLSAgICAgICAgUkdCQTE2SSA9IDB4OEQ4OCwKLSAgICAgICAgUkdCMTZJID0gMHg4RDg5LAot
ICAgICAgICBSR0JBOEkgPSAweDhEOEUsCi0gICAgICAgIFJHQjhJID0gMHg4RDhGLAotICAgICAg
ICBSRURfSU5URUdFUiA9IDB4OEQ5NCwKLSAgICAgICAgUkdCX0lOVEVHRVIgPSAweDhEOTgsCi0g
ICAgICAgIFJHQkFfSU5URUdFUiA9IDB4OEQ5OSwKLSAgICAgICAgU0FNUExFUl8yRF9BUlJBWSA9
IDB4OERDMSwKLSAgICAgICAgU0FNUExFUl8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQsCi0gICAg
ICAgIFNBTVBMRVJfQ1VCRV9TSEFET1cgPSAweDhEQzUsCi0gICAgICAgIFVOU0lHTkVEX0lOVF9W
RUMyID0gMHg4REM2LAotICAgICAgICBVTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKLSAgICAg
ICAgVU5TSUdORURfSU5UX1ZFQzQgPSAweDhEQzgsCi0gICAgICAgIElOVF9TQU1QTEVSXzJEID0g
MHg4RENBLAotICAgICAgICBJTlRfU0FNUExFUl8zRCA9IDB4OERDQiwKLSAgICAgICAgSU5UX1NB
TVBMRVJfQ1VCRSA9IDB4OERDQywKLSAgICAgICAgSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhE
Q0YsCi0gICAgICAgIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEID0gMHg4REQyLAotICAgICAgICBV
TlNJR05FRF9JTlRfU0FNUExFUl8zRCA9IDB4OEREMywKLSAgICAgICAgVU5TSUdORURfSU5UX1NB
TVBMRVJfQ1VCRSA9IDB4OERENCwKLSAgICAgICAgVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJS
QVkgPSAweDhERDcsCi0gICAgICAgIERFUFRIX0NPTVBPTkVOVDMyRiA9IDB4OENBQywKLSAgICAg
ICAgREVQVEgzMkZfU1RFTkNJTDggPSAweDhDQUQsCi0gICAgICAgIEZMT0FUXzMyX1VOU0lHTkVE
X0lOVF8yNF84X1JFViA9IDB4OERBRCwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9D
T0xPUl9FTkNPRElORyA9IDB4ODIxMCwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9D
T01QT05FTlRfVFlQRSA9IDB4ODIxMSwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9S
RURfU0laRSA9IDB4ODIxMiwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9T
SVpFID0gMHg4MjEzLAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRSA9
IDB4ODIxNCwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFID0gMHg4
MjE1LAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkUgPSAweDgyMTYs
Ci0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFID0gMHg4MjE3LAot
ICAgICAgICBGUkFNRUJVRkZFUl9ERUZBVUxUID0gMHg4MjE4LAotICAgICAgICBERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQgPSAweDgyMUEsCi0gICAgICAgIERFUFRIX1NURU5DSUwgPSAweDg0Rjks
Ci0gICAgICAgIFVOU0lHTkVEX0lOVF8yNF84ID0gMHg4NEZBLAotICAgICAgICBERVBUSDI0X1NU
RU5DSUw4ID0gMHg4OEYwLAotICAgICAgICBVTlNJR05FRF9OT1JNQUxJWkVEID0gMHg4QzE3LAot
ICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQTYsIC8qIFNhbWUgYXMgRlJB
TUVCVUZGRVJfQklORElORyAqLwotICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSID0gMHg4Q0E4LAot
ICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAotICAgICAgICBSRUFEX0ZSQU1FQlVG
RkVSX0JJTkRJTkcgPSAweDhDQUEsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9TQU1QTEVTID0gMHg4
Q0FCLAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVIgPSAweDhD
RDQsCi0gICAgICAgIE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA9IDB4OENERiwKLSAgICAgICAgQ09M
T1JfQVRUQUNITUVOVDEgPSAweDhDRTEsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQyID0gMHg4
Q0UyLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMyA9IDB4OENFMywKLSAgICAgICAgQ09MT1Jf
QVRUQUNITUVOVDQgPSAweDhDRTQsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ1ID0gMHg4Q0U1
LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNiA9IDB4OENFNiwKLSAgICAgICAgQ09MT1JfQVRU
QUNITUVOVDcgPSAweDhDRTcsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQ4ID0gMHg4Q0U4LAot
ICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UOSA9IDB4OENFOSwKLSAgICAgICAgQ09MT1JfQVRUQUNI
TUVOVDEwID0gMHg4Q0VBLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTEgPSAweDhDRUIsCi0g
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMiA9IDB4OENFQywKLSAgICAgICAgQ09MT1JfQVRUQUNI
TUVOVDEzID0gMHg4Q0VELAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTQgPSAweDhDRUUsCi0g
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQxNSA9IDB4OENFRiwKLSAgICAgICAgRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9NVUxUSVNBTVBMRSA9IDB4OEQ1NiwKLSAgICAgICAgTUFYX1NBTVBMRVMgPSAw
eDhENTcsCi0gICAgICAgIEhBTEZfRkxPQVQgPSAweDE0MEIsCi0gICAgICAgIFJHID0gMHg4MjI3
LAotICAgICAgICBSR19JTlRFR0VSID0gMHg4MjI4LAotICAgICAgICBSOCA9IDB4ODIyOSwKLSAg
ICAgICAgUkc4ID0gMHg4MjJCLAotICAgICAgICBSMTZGID0gMHg4MjJELAotICAgICAgICBSMzJG
ID0gMHg4MjJFLAotICAgICAgICBSRzE2RiA9IDB4ODIyRiwKLSAgICAgICAgUkczMkYgPSAweDgy
MzAsCi0gICAgICAgIFI4SSA9IDB4ODIzMSwKLSAgICAgICAgUjhVSSA9IDB4ODIzMiwKLSAgICAg
ICAgUjE2SSA9IDB4ODIzMywKLSAgICAgICAgUjE2VUkgPSAweDgyMzQsCi0gICAgICAgIFIzMkkg
PSAweDgyMzUsCi0gICAgICAgIFIzMlVJID0gMHg4MjM2LAotICAgICAgICBSRzhJID0gMHg4MjM3
LAotICAgICAgICBSRzhVSSA9IDB4ODIzOCwKLSAgICAgICAgUkcxNkkgPSAweDgyMzksCi0gICAg
ICAgIFJHMTZVSSA9IDB4ODIzQSwKLSAgICAgICAgUkczMkkgPSAweDgyM0IsCi0gICAgICAgIFJH
MzJVSSA9IDB4ODIzQywKLSAgICAgICAgVkVSVEVYX0FSUkFZX0JJTkRJTkcgPSAweDg1QjUsCi0g
ICAgICAgIFI4X1NOT1JNID0gMHg4Rjk0LAotICAgICAgICBSRzhfU05PUk0gPSAweDhGOTUsCi0g
ICAgICAgIFJHQjhfU05PUk0gPSAweDhGOTYsCi0gICAgICAgIFJHQkE4X1NOT1JNID0gMHg4Rjk3
LAotICAgICAgICBTSUdORURfTk9STUFMSVpFRCA9IDB4OEY5QywKLSAgICAgICAgQ09QWV9SRUFE
X0JVRkZFUiA9IDB4OEYzNiwKLSAgICAgICAgQ09QWV9XUklURV9CVUZGRVIgPSAweDhGMzcsCi0g
ICAgICAgIENPUFlfUkVBRF9CVUZGRVJfQklORElORyA9IDB4OEYzNiwgLyogU2FtZSBhcyBDT1BZ
X1JFQURfQlVGRkVSICovCi0gICAgICAgIENPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkcgPSAweDhG
MzcsIC8qIFNhbWUgYXMgQ09QWV9XUklURV9CVUZGRVIgKi8KLSAgICAgICAgVU5JRk9STV9CVUZG
RVIgPSAweDhBMTEsCi0gICAgICAgIFVOSUZPUk1fQlVGRkVSX0JJTkRJTkcgPSAweDhBMjgsCi0g
ICAgICAgIFVOSUZPUk1fQlVGRkVSX1NUQVJUID0gMHg4QTI5LAotICAgICAgICBVTklGT1JNX0JV
RkZFUl9TSVpFID0gMHg4QTJBLAotICAgICAgICBNQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTID0g
MHg4QTJCLAotICAgICAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1MgPSAweDhBMkQsCi0g
ICAgICAgIE1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUyA9IDB4OEEyRSwKLSAgICAgICAgTUFY
X1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTID0gMHg4QTJGLAotICAgICAgICBNQVhfVU5JRk9STV9C
TE9DS19TSVpFID0gMHg4QTMwLAotICAgICAgICBNQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1f
Q09NUE9ORU5UUyA9IDB4OEEzMSwKLSAgICAgICAgTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZP
Uk1fQ09NUE9ORU5UUyA9IDB4OEEzMywKLSAgICAgICAgVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FM
SUdOTUVOVCA9IDB4OEEzNCwKLSAgICAgICAgQUNUSVZFX1VOSUZPUk1fQkxPQ0tTID0gMHg4QTM2
LAotICAgICAgICBVTklGT1JNX1RZUEUgPSAweDhBMzcsCi0gICAgICAgIFVOSUZPUk1fU0laRSA9
IDB4OEEzOCwKLSAgICAgICAgVU5JRk9STV9CTE9DS19JTkRFWCA9IDB4OEEzQSwKLSAgICAgICAg
VU5JRk9STV9PRkZTRVQgPSAweDhBM0IsCi0gICAgICAgIFVOSUZPUk1fQVJSQVlfU1RSSURFID0g
MHg4QTNDLAotICAgICAgICBVTklGT1JNX01BVFJJWF9TVFJJREUgPSAweDhBM0QsCi0gICAgICAg
IFVOSUZPUk1fSVNfUk9XX01BSk9SID0gMHg4QTNFLAotICAgICAgICBVTklGT1JNX0JMT0NLX0JJ
TkRJTkcgPSAweDhBM0YsCi0gICAgICAgIFVOSUZPUk1fQkxPQ0tfREFUQV9TSVpFID0gMHg4QTQw
LAotICAgICAgICBVTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUyA9IDB4OEE0MiwKLSAgICAg
ICAgVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTID0gMHg4QTQzLAotICAgICAg
ICBVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUiA9IDB4OEE0NCwKLSAg
ICAgICAgVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUiA9IDB4OEE0
NiwKLSAgICAgICAgSU5WQUxJRF9JTkRFWCA9IDB4RkZGRkZGRkYsCi0gICAgICAgIE1BWF9WRVJU
RVhfT1VUUFVUX0NPTVBPTkVOVFMgPSAweDkxMjIsCi0gICAgICAgIE1BWF9GUkFHTUVOVF9JTlBV
VF9DT01QT05FTlRTID0gMHg5MTI1LAotICAgICAgICBNQVhfU0VSVkVSX1dBSVRfVElNRU9VVCA9
IDB4OTExMSwKLSAgICAgICAgT0JKRUNUX1RZUEUgPSAweDkxMTIsCi0gICAgICAgIFNZTkNfQ09O
RElUSU9OID0gMHg5MTEzLAotICAgICAgICBTWU5DX1NUQVRVUyA9IDB4OTExNCwKLSAgICAgICAg
U1lOQ19GTEFHUyA9IDB4OTExNSwKLSAgICAgICAgU1lOQ19GRU5DRSA9IDB4OTExNiwKLSAgICAg
ICAgU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUgPSAweDkxMTcsCi0gICAgICAgIFVOU0lHTkFM
RUQgPSAweDkxMTgsCi0gICAgICAgIFNJR05BTEVEID0gMHg5MTE5LAotICAgICAgICBBTFJFQURZ
X1NJR05BTEVEID0gMHg5MTFBLAotICAgICAgICBUSU1FT1VUX0VYUElSRUQgPSAweDkxMUIsCi0g
ICAgICAgIENPTkRJVElPTl9TQVRJU0ZJRUQgPSAweDkxMUMsCi0jaWYgUExBVEZPUk0oV0lOKQot
ICAgICAgICBXQUlUX0ZBSUxFRF9XSU4gPSAweDkxMUQsCi0jZWxzZQotICAgICAgICBXQUlUX0ZB
SUxFRCA9IDB4OTExRCwKLSNlbmRpZgotICAgICAgICBTWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCA9
IDB4MDAwMDAwMDEsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUiA9IDB4ODhG
RSwKLSAgICAgICAgQU5ZX1NBTVBMRVNfUEFTU0VEID0gMHg4QzJGLAotICAgICAgICBBTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFID0gMHg4RDZBLAotICAgICAgICBTQU1QTEVSX0JJTkRJ
TkcgPSAweDg5MTksCi0gICAgICAgIFJHQjEwX0EyVUkgPSAweDkwNkYsCi0gICAgICAgIFRFWFRV
UkVfU1dJWlpMRV9SID0gMHg4RTQyLAotICAgICAgICBURVhUVVJFX1NXSVpaTEVfRyA9IDB4OEU0
MywKLSAgICAgICAgVEVYVFVSRV9TV0laWkxFX0IgPSAweDhFNDQsCi0gICAgICAgIFRFWFRVUkVf
U1dJWlpMRV9BID0gMHg4RTQ1LAotICAgICAgICBHUkVFTiA9IDB4MTkwNCwKLSAgICAgICAgQkxV
RSA9IDB4MTkwNSwKLSAgICAgICAgSU5UXzJfMTBfMTBfMTBfUkVWID0gMHg4RDlGLAotICAgICAg
ICBUUkFOU0ZPUk1fRkVFREJBQ0sgPSAweDhFMjIsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFD
S19QQVVTRUQgPSAweDhFMjMsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkUgPSAw
eDhFMjQsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HID0gMHg4RTI1LAotICAg
ICAgICBDT01QUkVTU0VEX1IxMV9FQUMgPSAweDkyNzAsCi0gICAgICAgIENPTVBSRVNTRURfU0lH
TkVEX1IxMV9FQUMgPSAweDkyNzEsCi0gICAgICAgIENPTVBSRVNTRURfUkcxMV9FQUMgPSAweDky
NzIsCi0gICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDID0gMHg5MjczLAotICAgICAg
ICBDT01QUkVTU0VEX1JHQjhfRVRDMiA9IDB4OTI3NCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdC
OF9FVEMyID0gMHg5Mjc1LAotICAgICAgICBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FM
UEhBMV9FVEMyID0gMHg5Mjc2LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VH
SF9BTFBIQTFfRVRDMiA9IDB4OTI3NywKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VB
QyA9IDB4OTI3OCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMgPSAw
eDkyNzksCi0gICAgICAgIFRFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVCA9IDB4OTEyRiwKLSAgICAg
ICAgTUFYX0VMRU1FTlRfSU5ERVggPSAweDhENkIsCi0gICAgICAgIE5VTV9TQU1QTEVfQ09VTlRT
ID0gMHg5MzgwLAotICAgICAgICBURVhUVVJFX0lNTVVUQUJMRV9MRVZFTFMgPSAweDgyREYsCi0g
ICAgICAgIFBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYID0gMHg4RDY5LAotICAgICAgICBQ
UklNSVRJVkVfUkVTVEFSVCA9IDB4OEY5RCwKLQotICAgICAgICAvLyBPcGVuR0wgRVMgMyBjb25z
dGFudHMuCi0gICAgICAgIE1BUF9SRUFEX0JJVCA9IDB4MDAwMSwKLQotICAgICAgICAvLyBOZWNl
c3NhcnkgZGVza3RvcCBPcGVuR0wgY29uc3RhbnRzLgotICAgICAgICBURVhUVVJFX1JFQ1RBTkdM
RV9BUkIgPSAweDg0RjUKLSAgICB9OwotCi0gICAgZW51bSBjbGFzcyBEYXRhRm9ybWF0IDogdWlu
dDhfdCB7Ci0gICAgICAgIFJHQkE4ID0gMCwKLSAgICAgICAgUkdCQTE2TGl0dGxlLAotICAgICAg
ICBSR0JBMTZCaWcsCi0gICAgICAgIFJHQkExNkYsCi0gICAgICAgIFJHQkEzMkYsCi0gICAgICAg
IFJHQjgsCi0gICAgICAgIFJHQjE2TGl0dGxlLAotICAgICAgICBSR0IxNkJpZywKLSAgICAgICAg
UkdCMTZGLAotICAgICAgICBSR0IzMkYsCi0gICAgICAgIEJHUjgsCi0gICAgICAgIEJHUkE4LAot
ICAgICAgICBCR1JBMTZMaXR0bGUsCi0gICAgICAgIEJHUkExNkJpZywKLSAgICAgICAgQVJHQjgs
Ci0gICAgICAgIEFSR0IxNkxpdHRsZSwKLSAgICAgICAgQVJHQjE2QmlnLAotICAgICAgICBBQkdS
OCwKLSAgICAgICAgUkdCQTU1NTEsCi0gICAgICAgIFJHQkE0NDQ0LAotICAgICAgICBSR0I1NjUs
Ci0gICAgICAgIFI4LAotICAgICAgICBSMTZMaXR0bGUsCi0gICAgICAgIFIxNkJpZywKLSAgICAg
ICAgUjE2RiwKLSAgICAgICAgUjMyRiwKLSAgICAgICAgUkE4LAotICAgICAgICBSQTE2TGl0dGxl
LAotICAgICAgICBSQTE2QmlnLAotICAgICAgICBSQTE2RiwKLSAgICAgICAgUkEzMkYsCi0gICAg
ICAgIEFSOCwKLSAgICAgICAgQVIxNkxpdHRsZSwKLSAgICAgICAgQVIxNkJpZywKLSAgICAgICAg
QTgsCi0gICAgICAgIEExNkxpdHRsZSwKLSAgICAgICAgQTE2QmlnLAotICAgICAgICBBMTZGLAot
ICAgICAgICBBMzJGLAotICAgICAgICBOdW1Gb3JtYXRzCi0gICAgfTsKLQotICAgIGVudW0gY2xh
c3MgRGVzdGluYXRpb24gOiB1aW50OF90IHsKLSAgICAgICAgT2Zmc2NyZWVuLAotICAgICAgICBE
aXJlY3RseVRvSG9zdFdpbmRvdywKLSAgICB9OwotCi0gICAgZW51bSBjbGFzcyBDaGFubmVsQml0
cyA6IHVpbnQ4X3QgewotICAgICAgICBSZWQgPSAxLAotICAgICAgICBHcmVlbiA9IDIsCi0gICAg
ICAgIEJsdWUgPSA0LAotICAgICAgICBBbHBoYSA9IDgsCi0gICAgICAgIERlcHRoID0gMTYsCi0g
ICAgICAgIFN0ZW5jaWwgPSAzMiwKLSAgICAgICAgUkdCID0gUmVkIHwgR3JlZW4gfCBCbHVlLAot
ICAgICAgICBSR0JBID0gUkdCIHwgQWxwaGEsCi0gICAgICAgIERlcHRoU3RlbmNpbCA9IERlcHRo
IHwgU3RlbmNpbCwKLSAgICB9OwotCi0gICAgLy8gUG9zc2libGUgYWxwaGEgb3BlcmF0aW9ucyB0
aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZwotICAgIC8vIHBpeGVsIHBhY2tpbmcuIEZJWE1F
OiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11c3QKLSAgICAvLyBiZSByZW1vdmVk
LgotICAgIGVudW0gQWxwaGFPcCA6IHVpbnQ4X3QgewotICAgICAgICBEb05vdGhpbmcsCi0gICAg
ICAgIERvUHJlbXVsdGlwbHksCi0gICAgICAgIERvVW5tdWx0aXBseSwKLSAgICB9OwotCi0gICAg
ZW51bSBjbGFzcyBET01Tb3VyY2UgOiB1aW50OF90IHsKLSAgICAgICAgSW1hZ2UsCi0gICAgICAg
IENhbnZhcywKLSAgICAgICAgVmlkZW8sCi0gICAgICAgIE5vbmUsCi0gICAgfTsKLQotI2lmIFVT
RShBTkdMRSkKLSAgICBlbnVtIHsKLSAgICAgICAgLy8gVGhlc2UgY29uc3RhbnRzIGFyZSByZWRl
ZmluZWQgaGVyZSBmcm9tIEFOR0xFJ3MgT3BlbkdMIEVTIGhlYWRlcnMgdG8KLSAgICAgICAgLy8g
cHJvdmlkZSBhIHNpbmdsZSBwbGFjZSB3aGVyZSBtdWx0aXBsZSBwb3J0aW9ucyBvZiBwbGF0Zm9y
bSBjb2RlIGNhbgotICAgICAgICAvLyByZWZlcmVuY2UgdGhlbS4KLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgICAgIElPU3VyZmFjZVRleHR1cmVUYXJnZXQgPSBURVhUVVJFX1JFQ1RBTkdMRV9BUkIs
IC8vIGFsc28gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUKLSAgICAgICAgRUdMSU9TdXJmYWNl
VGV4dHVyZVRhcmdldCA9IDB4MzQ1QiwgLy8gRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFCi0j
ZWxzZQotICAgICAgICBJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0ID0gVEVYVFVSRV8yRCwKLSAgICAg
ICAgRUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9IDB4MzA1RiwgLy8gRUdMX1RFWFRVUkVfMkQK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0gICAgfTsKLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0K
LSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZv
cm1UZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0ID0gMDsKLQotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFz
QWxwaGEoRGF0YUZvcm1hdCBmb3JtYXQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkg
ewotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkE4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6
OkExNkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QTMyRjoKLSAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0OjpSQTg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QVI4OgotICAgICAgICBjYXNl
IERhdGFGb3JtYXQ6OlJBMTZGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMzJGOgotICAg
ICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkJH
UkE4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSR0I4OgotICAgICAgICBjYXNlIERhdGFG
b3JtYXQ6OkFCR1I4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkExNkY6Ci0gICAgICAg
IGNhc2UgRGF0YUZvcm1hdDo6UkdCQTMyRjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JB
NDQ0NDoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBNTU1MToKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBoYXNDb2xv
cihEYXRhRm9ybWF0IGZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0g
ICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6
UkdCQTE2RjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBMzJGOgotICAgICAgICBjYXNl
IERhdGFGb3JtYXQ6OlJHQjg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCMTZGOgotICAg
ICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjMyRjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpC
R1I4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkJHUkE4OgotICAgICAgICBjYXNlIERhdGFG
b3JtYXQ6OkFSR0I4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFCR1I4OgotICAgICAgICBj
YXNlIERhdGFGb3JtYXQ6OlJHQkE1NTUxOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE0
NDQ0OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjU2NToKLSAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0OjpSODoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSMTZGOgotICAgICAgICBjYXNl
IERhdGFGb3JtYXQ6OlIzMkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkE4OgotICAgICAg
ICBjYXNlIERhdGFGb3JtYXQ6OlJBMTZGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMzJG
OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSODoKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBvbmUgb2YgdGhlIGZvcm1h
dHMgZnJvbSB0aGUgSW1hZ2VEYXRhIG9yIERPTSBlbGVtZW50cy4KLSAgICAvLyBUaGUgZm9ybWF0
cyBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgUkdCQTguCi0gICAgLy8gVGhlIGZvcm1hdHMgZnJv
bSBET00gZWxlbWVudHMgdmFyeSB3aXRoIEdyYXBoaWNzIHBvcnRzLiBJdCBjYW4gb25seSBiZSBS
R0JBOCBvciBCR1JBOCBmb3Igbm9uLUNHIHBvcnQgd2hpbGUgYSBsaXR0bGUgbW9yZSBmb3IgQ0cg
cG9ydC4KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNyY0Zvcm1hdENvbWVzRnJvbURP
TUVsZW1lbnRPckltYWdlRGF0YShEYXRhRm9ybWF0IFNyY0Zvcm1hdCkKLSAgICB7Ci0jaWYgVVNF
KENHKQotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdDo6UkdCQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFSR0I4IHx8IFNyY0Zvcm1h
dCA9PSBEYXRhRm9ybWF0OjpSR0I4Ci0gICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0
OjpSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFSOCB8fCBTcmNGb3JtYXQgPT0gRGF0
YUZvcm1hdDo6UjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkE4OwotI2Vsc2UKLSAgICAv
LyBUaGF0IExJVFRMRV9FTkRJQU4gY2FzZSBoYXMgbW9yZSBwb3NzaWJsZSBmb3JtYXRzIHRoYW4g
QklHX0VORElBTiBjYXNlIGlzIGJlY2F1c2Ugc29tZSBkZWNvZGVkIGltYWdlIGRhdGEgaXMgYWN0
dWFsbHkgYmlnIGVuZGlhbgotICAgIC8vIGV2ZW4gb24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1
cmVzLgotICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QkdSQTggfHwgU3JjRm9y
bWF0ID09IERhdGFGb3JtYXQ6OkFCR1I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpCR1I4
Ci0gICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0JBOCB8fCBTcmNGb3JtYXQg
PT0gRGF0YUZvcm1hdDo6QVJHQjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJHQjgKLSAg
ICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlI4IHx8IFNyY0Zvcm1hdCA9PSBEYXRh
Rm9ybWF0OjpBOAotICAgICAgICB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkE4IHx8IFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBUjg7Ci0jZW5kaWYKLSNlbHNlCi0gICAgcmV0dXJuIFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpCR1JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6
UkdCQTg7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgQWN0aXZlSW5mbyB7Ci0gICAgICAg
IFN0cmluZyBuYW1lOwotICAgICAgICBHQzNEZW51bSB0eXBlOwotICAgICAgICBHQzNEaW50IHNp
emU7Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEQmFzZShHcmFwaGljc0NvbnRleHQz
REF0dHJpYnV0ZXMsIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlKiBzaGFyZWRDb250ZXh0ID0gbnVsbHB0cik7Ci0gICAgdmlydHVhbCB+
R3JhcGhpY3NDb250ZXh0M0RCYXNlKCkgPSBkZWZhdWx0OwotCi0gICAgLy8gPT09PT09PT09PSBX
ZWJHTCAxIGVudHJ5IHBvaW50cy4KLQotICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKEdD
M0RlbnVtIHRleHR1cmUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZEJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmxl
bmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVl
LCBHQzNEY2xhbXBmIGFscGhhKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRpb24o
R0MzRGVudW0gbW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0Mz
RGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpID0gMDsK
LQotICAgIHZpcnR1YWwgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0
YXJnZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCBzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbG9y
TWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVl
LCBHQzNEYm9vbGVhbiBhbHBoYSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxlU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlQnVm
ZmVyKCkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVGcmFtZWJ1ZmZl
cigpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUHJvZ3JhbSgpID0g
MDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCkgPSAw
OwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVudW0pID0g
MDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVGV4dHVyZSgpID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVw
dGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhSYW5n
ZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZsdXNo
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCBsZXZlbCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkgPSAwOwotCi0gICAgdmlydHVhbCBib29s
IGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBBY3RpdmVJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9i
amVjdCogc2hhZGVycykgPSAwOwotCi0gICAgdmlydHVhbCBHQzNEaW50IGdldEF0dHJpYkxvY2F0
aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7Ci0KLSAgICAvLyBnZXRQYXJhbWV0ZXIKLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQ2NCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVh
biogdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgR0MzRGVudW0gZ2V0RXJyb3IoKSA9IDA7Ci0K
LSAgICAvLyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsK
LQotICAgIC8vIGdldFByb2dyYW1QYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9n
cmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICAvLyBnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKLQot
ICAgIC8vIGdldFNoYWRlclBhcmFtZXRlcgotICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJpdihQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKLQot
ICAgIHZpcnR1YWwgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hh
ZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0MzRGludCogcmFuZ2UsIEdDM0RpbnQq
IHByZWNpc2lvbikgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBs
YXRmb3JtM0RPYmplY3QpID0gMDsKLQotICAgIC8vIGdldFRleFBhcmFtZXRlcgotICAgIHZpcnR1
YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRl
cml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7
Ci0KLSAgICAvLyBnZXRVbmlmb3JtCi0gICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpID0gMDsKLQotICAgIHZpcnR1
YWwgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lKSA9IDA7Ci0KLSAgICAvLyBnZXRWZXJ0ZXhBdHRyaWIKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYml2KEdD
M0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKLQotICAg
IHZpcnR1YWwgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBoaW50KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gbW9kZSkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNC
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNF
bmFibGVkKEdDM0RlbnVtIGNhcCkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCBHQzNEYm9vbGVhbiBp
c1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4g
aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJv
b2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJv
b2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bGluZVdpZHRoKEdDM0RmbG9hdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBpeGVsU3RvcmVpKEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvbHlnb25P
ZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xl
YW4gaW52ZXJ0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwotCi0gICAgdmly
dHVhbCB2b2lkIHNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIHN0
cmluZykgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMs
IEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYs
IEdDM0R1aW50IG1hc2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVp
bnQgbWFzaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0R1aW50IG1hc2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9w
KEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBm
YWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCBwYXJhbSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNv
bnN0IEdDM0RmbG9hdCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWkoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGludCB4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IGNvbnN0IEdDM0RpbnQqIHYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmKEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2koR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29u
c3QgR0MzRGludCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0
IHcpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlm
b3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aXYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgdW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0Mz
RGZsb2F0KiB2YWx1ZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFs
dWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2
YWx1ZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29u
c3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRy
aWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdD
M0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCogZGF0YSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCB2b2lkKiBkYXRhKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3Vu
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0g
bW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJE
aXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSA9IDA7Ci0KLSAgICBHcmFw
aGljc0NvbnRleHQzREF0dHJpYnV0ZXMgY29udGV4dEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJzOyB9Ci0gICAgdm9pZCBzZXRDb250ZXh0QXR0cmlidXRlcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQzREF0dHJpYnV0ZXMmIGF0dHJzKSB7IG1fYXR0cnMgPSBhdHRyczsgfQotCi0gICAg
Ly8gVmVydGV4QXJyYXlPamVjdCBjYWxscwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBj
cmVhdGVWZXJ0ZXhBcnJheSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJy
YXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0
ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0
ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSNpZiBVU0UoT1BFTkdMKSAmJiBFTkFC
TEUoV0VCR0wyKQotICAgIHZpcnR1YWwgdm9pZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVp
bnQpID0gMDsKLSNlbmRpZgotCi0gICAgLy8gU3VwcG9ydCBmb3IgZXh0ZW5zaW9ucy4gUmV0dXJu
cyBhIG5vbi1udWxsIG9iamVjdCwgdGhvdWdoIG5vdAotICAgIC8vIGFsbCBtZXRob2RzIGl0IGNv
bnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCi0gICAgLy8gY3VycmVu
dCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnMzRDo6c3VwcG9ydHMoKSB0bwotICAgIC8v
IGRldGVybWluZSB0aGlzLgotICAgIHZpcnR1YWwgRXh0ZW5zaW9uczNEJiBnZXRFeHRlbnNpb25z
KCkgPSAwOwotCi0gICAgLy8gPT09PT09PT09PSBXZWJHTCAyIGVudHJ5IHBvaW50cy4KLQotICAg
IHZpcnR1YWwgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRy
IG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2VzcykgPSAwOwot
ICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gdW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQs
IEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIg
d3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0cikgPSAwOwotCi0gICAgLy8gZ2V0SW50ZXJuYWxGb3Jt
YXRQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZXJuYWxmb3JtYXRpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSwgR0MzRHNp
emVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBz
YW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4U3RvcmFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0ZXhT
dG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkg
ZGVwdGgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRpY2Vz
LCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+JiBwYXJhbXMpID0gMDsKLQotICAgIC8v
ID09PT09PT09PT0gTm9uLVdlYkdMIGJhc2VkIGVudHJ5IHBvaW50cy4KLQotICAgIHN0YXRpYyB1
bnNpZ25lZCBnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDM0RlbnVtKTsKLSAgICBzdGF0
aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwotCi0gICAgc3RhdGlj
IHVpbnQ4X3QgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQzNEZW51bSk7Ci0KLSAgICBEZXN0aW5h
dGlvbiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KLQotcHJp
dmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgbV9hdHRyczsKLSAgICBEZXN0
aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNETWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2MTg2MWRmYmVjMTI5ZjI5NDgwYWI4Nzk3OGIxOGFiMTU0ODYyMzljLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
TWFuYWdlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0KLSNpZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCi0jaW5jbHVkZSA8
c3lzL3N5c2N0bC5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdM
KSB8fCBVU0UoQU5HTEUpKQotI2luY2x1ZGUgIlN3aXRjaGluZ0dQVUNsaWVudC5oIgotI2luY2x1
ZGUgPE9wZW5HTC9PcGVuR0wuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNp
ZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCi0KLWVudW0gewotICAgIGtBR0NPcGVuLAot
ICAgIGtBR0NDbG9zZQotfTsKLQotc3RhdGljIGlvX2Nvbm5lY3RfdCBhdHRhY2hUb0FwcGxlR3Jh
cGhpY3NDb250cm9sKCkKLXsKLSAgICBtYWNoX3BvcnRfdCBtYXN0ZXJQb3J0ID0gTUFDSF9QT1JU
X05VTEw7Ci0gICAgCi0gICAgaWYgKElPTWFzdGVyUG9ydChNQUNIX1BPUlRfTlVMTCwgJm1hc3Rl
clBvcnQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwot
ICAgIAotICAgIENGRGljdGlvbmFyeVJlZiBjbGFzc1RvTWF0Y2ggPSBJT1NlcnZpY2VNYXRjaGlu
ZygiQXBwbGVHcmFwaGljc0NvbnRyb2wiKTsKLSAgICBpZiAoIWNsYXNzVG9NYXRjaCkKLSAgICAg
ICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotICAgIAotICAgIGtlcm5fcmV0dXJuX3Qga2VyblJl
c3VsdDsKLSAgICBpb19pdGVyYXRvcl90IGl0ZXJhdG9yOwotICAgIGlmICgoa2VyblJlc3VsdCA9
IElPU2VydmljZUdldE1hdGNoaW5nU2VydmljZXMobWFzdGVyUG9ydCwgY2xhc3NUb01hdGNoLCAm
aXRlcmF0b3IpKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiBNQUNIX1BPUlRfTlVM
TDsKLSAgICAKLSAgICBpb19zZXJ2aWNlX3Qgc2VydmljZU9iamVjdCA9IElPSXRlcmF0b3JOZXh0
KGl0ZXJhdG9yKTsKLSAgICBJT09iamVjdFJlbGVhc2UoaXRlcmF0b3IpOwotICAgIGlmICghc2Vy
dmljZU9iamVjdCkKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotICAgIAotICAgIGlv
X2Nvbm5lY3RfdCBkYXRhUG9ydDsKLSAgICBJT09iamVjdFJldGFpbihzZXJ2aWNlT2JqZWN0KTsK
LSAgICBrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlT3BlbihzZXJ2aWNlT2JqZWN0LCBtYWNoX3Rhc2tf
c2VsZigpLCAwLCAmZGF0YVBvcnQpOwotICAgIElPT2JqZWN0UmVsZWFzZShzZXJ2aWNlT2JqZWN0
KTsKLSAgICAKLSAgICByZXR1cm4gKGtlcm5SZXN1bHQgPT0gS0VSTl9TVUNDRVNTKSA/IGRhdGFQ
b3J0IDogTUFDSF9QT1JUX05VTEw7Ci19Ci0KLXN0YXRpYyBib29sIGhhc011eENhcGFiaWxpdHko
KQotewotICAgIGlvX2Nvbm5lY3RfdCBkYXRhUG9ydCA9IGF0dGFjaFRvQXBwbGVHcmFwaGljc0Nv
bnRyb2woKTsKLSAgICAKLSAgICBpZiAoZGF0YVBvcnQgPT0gTUFDSF9QT1JUX05VTEwpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoSU9Db25u
ZWN0Q2FsbFNjYWxhck1ldGhvZChkYXRhUG9ydCwga0FHQ09wZW4sIG51bGxwdHIsIDAsIG51bGxw
dHIsIG51bGxwdHIpID09IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBJT0Nvbm5lY3RDYWxsU2Nh
bGFyTWV0aG9kKGRhdGFQb3J0LCBrQUdDQ2xvc2UsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxw
dHIpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgIH0gZWxzZQotICAgICAgICByZXN1bHQg
PSBmYWxzZTsKLSAgICAKLSAgICBJT1NlcnZpY2VDbG9zZShkYXRhUG9ydCk7Ci0gICAgCi0gICAg
aWYgKHJlc3VsdCkgewotICAgICAgICAvLyBUaGlzIGlzIGRldGVjdGluZyBNYWMgaGFyZHdhcmUg
d2l0aCBhbiBJbnRlbCBnNTc1IEdQVSwgd2hpY2gKLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0
byBtYWtlIGF2YWlsYWJsZSB0byBtdXhpbmcuCi0gICAgICAgIC8vIEJhc2VkIG9uIGluZm9ybWF0
aW9uIGZyb20gQXBwbGUncyBPcGVuR0wgdGVhbSwgc3VjaCBkZXZpY2VzCi0gICAgICAgIC8vIGhh
dmUgZm91ciBvciBmZXdlciBwcm9jZXNzb3JzLgotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
MzAwNjAzNzg+Ci0gICAgICAgIGludCBuYW1lc1syXSA9IHsgQ1RMX0hXLCBIV19OQ1BVIH07Ci0g
ICAgICAgIGludCBjcHVDb3VudDsKLSAgICAgICAgc2l6ZV90IGNwdUNvdW50TGVuZ3RoID0gc2l6
ZW9mKGNwdUNvdW50KTsKLSAgICAgICAgc3lzY3RsKG5hbWVzLCAyLCAmY3B1Q291bnQsICZjcHVD
b3VudExlbmd0aCwgbnVsbHB0ciwgMCk7Ci0gICAgICAgIHJlc3VsdCA9IGNwdUNvdW50ID4gNDsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBoYXNMb3dBbmRIaWdo
UG93ZXJHUFVzKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBjYW5NdXggPSBoYXNNdXhDYXBhYmlsaXR5
KCk7Ci0gICAgcmV0dXJuIGNhbk11eDsKLX0KLSNlbmRpZiAvLyBIQVZFKEFQUExFX0dSQVBISUNT
X0NPTlRST0wpCi0KLUdyYXBoaWNzQ29udGV4dDNETWFuYWdlciYgR3JhcGhpY3NDb250ZXh0M0RN
YW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R3Jh
cGhpY3NDb250ZXh0M0RNYW5hZ2VyPiBzX21hbmFnZXI7Ci0gICAgcmV0dXJuIHNfbWFuYWdlcjsK
LX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpk
aXNwbGF5V2FzUmVjb25maWd1cmVkKENHRGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFuZ2VT
dW1tYXJ5RmxhZ3MgZmxhZ3MsIHZvaWQqKQotewotICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29u
dGV4dDNETWFuYWdlcjo6ZGlzcGxheVdhc1JlY29uZmlndXJlZCIpOwotICAgIGlmIChmbGFncyAm
IGtDR0Rpc3BsYXlTZXRNb2RlRmxhZykKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkudXBkYXRlQWxsQ29udGV4dHMoKTsKLX0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6dXBkYXRlQWxsQ29udGV4dHMoKQotewotI2lmIFBM
QVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCi0gICAgZm9yIChjb25z
dCBhdXRvJiBjb250ZXh0IDogbV9jb250ZXh0cykgewotICAgICAgICBjb250ZXh0LT51cGRhdGVD
R0xDb250ZXh0KCk7Ci0gICAgICAgIGNvbnRleHQtPmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3Rp
ZmljYXRpb24oKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5
SUQgZGlzcGxheUlELCBjb25zdCBIb3N0V2luZG93KiB3aW5kb3cpCi17Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBjb250ZXh0QW5kV2luZG93IDogbV9jb250ZXh0V2luZG93TWFwKSB7Ci0gICAgICAg
IGlmIChjb250ZXh0QW5kV2luZG93LnZhbHVlID09IHdpbmRvdykgewotICAgICAgICAgICAgY29u
dGV4dEFuZFdpbmRvdy5rZXktPnNjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOwotICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiQ2hhbmdpbmcgY29udGV4dCAoJXApIHRvIGRpc3BsYXkgKCVkKS4iLCBj
b250ZXh0QW5kV2luZG93LmtleSwgZGlzcGxheUlEKTsKLSAgICAgICAgfQotICAgIH0KLX0KLSNl
bmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6YWRkQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogd2luZG93KQotewotICAgIEFTU0VSVChj
b250ZXh0KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIUVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lORykKLSAg
ICBpZiAoIW1fY29udGV4dHMuc2l6ZSgpKQotICAgICAgICBDR0Rpc3BsYXlSZWdpc3RlclJlY29u
ZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQsIG51bGxwdHIpOwotI2Vu
ZGlmCi0KLSAgICBBU1NFUlQoIW1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkpOwotICAgIG1f
Y29udGV4dHMuYXBwZW5kKGNvbnRleHQpOwotICAgIG1fY29udGV4dFdpbmRvd01hcC5zZXQoY29u
dGV4dCwgd2luZG93KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnJlbW92
ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKCFtX2NvbnRl
eHRzLmNvbnRhaW5zKGNvbnRleHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0cy5y
ZW1vdmVGaXJzdChjb250ZXh0KTsKLSAgICBtX2NvbnRleHRXaW5kb3dNYXAucmVtb3ZlKGNvbnRl
eHQpOwotICAgIHJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoY29udGV4dCk7
Ci0gICAgCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhRU5BQkxFKFdFQlBST0NFU1NfV0lORE9XU0VS
VkVSX0JMT0NLSU5HKQotICAgIGlmICghbV9jb250ZXh0cy5zaXplKCkpCi0gICAgICAgIENHRGlz
cGxheVJlbW92ZVJlY29uZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQs
IG51bGxwdHIpOwotI2VuZGlmCi19Ci0KLUhvc3RXaW5kb3cqIEdyYXBoaWNzQ29udGV4dDNETWFu
YWdlcjo6aG9zdFdpbmRvd0ZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKG1fY29udGV4dFdpbmRvd01hcC5jb250YWlucyhjb250ZXh0KSk7
Ci0gICAgcmV0dXJuIG1fY29udGV4dFdpbmRvd01hcC5nZXQoY29udGV4dCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjphZGRDb250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1h
bmNlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAgIEFTU0VSVChjb250ZXh0KTsK
LSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQobV9j
b250ZXh0cy5jb250YWlucyhjb250ZXh0KSk7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRzUmVxdWly
aW5nSGlnaFBlcmZvcm1hbmNlLmNvbnRhaW5zKGNvbnRleHQpKTsKLSAgICAKLSAgICBMT0coV2Vi
R0wsICJUaGlzIGNvbnRleHQgKCVwKSByZXF1aXJlcyB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUu
IiwgY29udGV4dCk7Ci0gICAgbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5hZGQo
Y29udGV4dCk7Ci0gICAgCi0gICAgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdo
UGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fY29udGV4dHNSZXF1aXJpbmdIaWdo
UGVyZm9ybWFuY2UuY29udGFpbnMoY29udGV4dCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBMT0coV2ViR0wsICJUaGlzIGNvbnRleHQgKCVwKSBubyBsb25nZXIgcmVxdWlyZXMgdGhlIGhp
Z2gtcGVyZm9ybWFuY2UgR1BVLiIsIGNvbnRleHQpOwotICAgIG1fY29udGV4dHNSZXF1aXJpbmdI
aWdoUGVyZm9ybWFuY2UucmVtb3ZlKGNvbnRleHQpOwotICAgIAotICAgIHVwZGF0ZUhpZ2hQZXJm
b3JtYW5jZVN0YXRlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjp1cGRh
dGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAoVVNFKE9Q
RU5HTCkgfHwgVVNFKEFOR0xFKSkKLSAgICBpZiAoIWhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBl
cmZvcm1hbmNlLnNpemUoKSkgewotICAgICAgICAKLSAgICAgICAgaWYgKG1fZGlzYWJsZUhpZ2hQ
ZXJmb3JtYW5jZUdQVVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwg
IkNhbmNlbCBwZW5kaW5nIHRpbWVyIGZvciB0dXJuaW5nIG9mZiBoaWdoLXBlcmZvcm1hbmNlIEdQ
VS4iKTsKLSAgICAgICAgICAgIG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyLnN0b3Ao
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNl
KSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJSZXF1ZXN0IHRoZSBoaWdoLXBlcmZvcm1hbmNl
IEdQVS4iKTsKLSAgICAgICAgICAgIG1fcmVxdWVzdGluZ0hpZ2hQZXJmb3JtYW5jZSA9IHRydWU7
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgU3dpdGNoaW5nR1BVQ2xpZW50OjpzaW5n
bGV0b24oKS5yZXF1ZXN0SGlnaFBlcmZvcm1hbmNlR1BVKCk7Ci0jZW5kaWYKLSAgICAgICAgfQot
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3QgaW1tZWRpYXRlbHkgdHVybiBvZmYgdGhl
IGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiBUaGUgdXNlciBtaWdodCBiZQotICAgICAgICAvLyBzd2Fw
cGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRhYnMgb3Igd2luZG93cywgYW5kIHdlIGRvbid0
IHdhbnQgdG8gY2F1c2UKLSAgICAgICAgLy8gY2h1cm4gaWYgd2UgY2FuIGF2b2lkIGl0LgotICAg
ICAgICBpZiAoIW1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyLmlzQWN0aXZlKCkpIHsK
LSAgICAgICAgICAgIExPRyhXZWJHTCwgIlNldCBhIHRpbWVyIHRvIHJlbGVhc2UgdGhlIGhpZ2gt
cGVyZm9ybWFuY2UgR1BVLiIpOwotICAgICAgICAgICAgLy8gRklYTUU6IEV4cG9zZSB0aGlzIHZh
bHVlIGFzIGEgU2V0dGluZywgd2hpY2ggd291bGQgcmVxdWlyZSB0aGlzIGNsYXNzCi0gICAgICAg
ICAgICAvLyB0byByZWZlcmVuY2UgYSBmcmFtZSwgcGFnZSBvciBkb2N1bWVudC4KLSAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHRpbWVUb0tlZXBIaWdoUGVyZm9ybWFuY2VHUFVBbGl2
ZSB7IDEwX3MgfTsKLSAgICAgICAgICAgIG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVy
LnN0YXJ0T25lU2hvdCh0aW1lVG9LZWVwSGlnaFBlcmZvcm1hbmNlR1BVQWxpdmUpOwotICAgICAg
ICB9Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpk
aXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1fY29udGV4
dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3JlcXVlc3RpbmdIaWdoUGVyZm9ybWFuY2UgPSBmYWxzZTsKLSNpZiBQTEFURk9STShNQUMp
ICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQotICAgIFN3aXRjaGluZ0dQVUNsaWVudDo6
c2luZ2xldG9uKCkucmVsZWFzZUhpZ2hQZXJmb3JtYW5jZUdQVSgpOwotI2VuZGlmCi19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpyZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCkK
LXsKLSAgICBpZiAoaGFzVG9vTWFueUNvbnRleHRzKCkpIHsKLSAgICAgICAgTE9HKFdlYkdMLCAi
R3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyIHJlY3ljbGVkIGNvbnRleHQgKCVwKS4iLCBtX2NvbnRl
eHRzWzBdKTsKLSAgICAgICAgbV9jb250ZXh0c1swXS0+cmVjeWNsZUNvbnRleHQoKTsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmU2ZmE4MjUzZmNmM2MzN2QzYWUxM2VhNzViZDU1NzQ0ZTgxZjNlMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUg
IlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3Bs
YXlDb25maWd1cmF0aW9uLmg+Ci0jaW5jbHVkZSA8T3BlbkdML0NHTFR5cGVzLmg+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCB1bnNpZ25lZCBNYXhDb250ZXh0cyA9IDE2
OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0KLXVzaW5n
IFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7Ci0KLSNpZiBIQVZFKEFQUExFX0dSQVBISUNT
X0NPTlRST0wpCi1XRUJDT1JFX0VYUE9SVCBib29sIGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKTsK
LSNlbmRpZgotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIgewotICAgIGZyaWVuZCBO
ZXZlckRlc3Ryb3llZDxHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI+OwotcHVibGljOgotICAgIHN0
YXRpYyBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXImIHNoYXJlZE1hbmFnZXIoKTsKLSAgICAKLSAg
ICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqLCBIb3N0V2luZG93Kik7Ci0gICAg
dm9pZCByZW1vdmVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7Ci0KLSAgICBIb3N0V2luZG93
KiBob3N0V2luZG93Rm9yQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCopIGNvbnN0OwotICAgIAot
ICAgIHZvaWQgYWRkQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRl
eHQzRCopOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShH
cmFwaGljc0NvbnRleHQzRCopOwotICAgIAotICAgIHZvaWQgcmVjeWNsZUNvbnRleHRJZk5lY2Vz
c2FyeSgpOwotICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRzKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KLSAgICAKLSAgICB2b2lkIHVwZGF0ZUFs
bENvbnRleHRzKCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBzY3JlZW5EaWRDaGFu
Z2UoUGxhdGZvcm1EaXNwbGF5SUQsIGNvbnN0IEhvc3RXaW5kb3cqKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1cmVkKENHRGlyZWN0RGlzcGxheUlE
LCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MsIHZvaWQqKTsKLSNlbmRpZgotICAgIAotcHJp
dmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIoKQotICAgICAgICA6IG1fZGlzYWJs
ZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyKCp0aGlzLCAmR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2Vy
OjpkaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXJGaXJlZCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCB1cGRhdGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgpOwotICAgIHZvaWQgZGlzYWJsZUhp
Z2hQZXJmb3JtYW5jZUdQVVRpbWVyRmlyZWQoKTsKLQotICAgIFZlY3RvcjxHcmFwaGljc0NvbnRl
eHQzRCo+IG1fY29udGV4dHM7Ci0gICAgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQzRCosIEhvc3RX
aW5kb3cqPiBtX2NvbnRleHRXaW5kb3dNYXA7Ci0gICAgSGFzaFNldDxHcmFwaGljc0NvbnRleHQz
RCo+IG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2U7Ci0gICAgCi0gICAgVGltZXIg
bV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXI7Ci0gICAgYm9vbCBtX3JlcXVlc3RpbmdI
aWdoUGVyZm9ybWFuY2UgeyBmYWxzZSB9OwotfTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZTZkMjU4MjE0NWRlOGMxNjA5MGJk
MGVjOGMwZmUzNDBmNDJlZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
IFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgotCi0jaW5j
bHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotCi0j
aWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdM
X0VTKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgot
I2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBk
ZXN0aW5hdGlvbikKLXsKLSAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246Ok9mZnNjcmVlbjoKLSAgICAgICAgbV9nbENvbnRl
eHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3c6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSgpID0g
ZGVmYXVsdDsKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250ZXh0Q3Vy
cmVudCgpCi17Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8gbV9nbENvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpIDogZmFsc2U7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUNvbnRleHQoKQotewotICAgIHJldHVybiBt
X2dsQ29udGV4dCA/IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IEdMQ29udGV4dDo6
Y3VycmVudCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzI1NGE4MDU5YjU2MmExNTZh
N2M1NmI2YTE4Njg3Y2UzNDdlNzJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlCi0gKiAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB
Ci0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAotI2RlZmluZSBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGVfaAotCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBC
aXRtYXBUZXh0dXJlR0w7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9u
KTsKLSAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7Ci0gICAgYm9vbCBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4
dCgpOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IG1fZ2xDb250
ZXh0OwotfTsKLQotfQotCi0jZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MmNiZWQwNjgxNjFjZDFmYWE1MjMwMWIyYWFhZjM0ZmJhOTBm
MGRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIE1vemlsbGEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKKworI2lmIEVOQUJMRShXRUJH
TCkKKworI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0dyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRHTChHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMgYXR0cnMsIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uLCBHcmFwaGljc0NvbnRleHRH
TCopCisgICAgOiBtX2F0dHJzKGF0dHJzKQorICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKK3sKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0R0w6OmdldENsZWFyQml0c0J5QXR0
YWNobWVudFR5cGUoR0MzRGVudW0gYXR0YWNobWVudCkKK3sKKyAgICBzd2l0Y2ggKGF0dGFjaG1l
bnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDFfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UMl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTE9SX0FUVEFDSE1FTlQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRU
QUNITUVOVDRfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UNV9F
WFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQ2X0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDdfRVhUOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UOF9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TE9SX0FUVEFDSE1FTlQ5X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNI
TUVOVDEwX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDExX0VY
VDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDEyX0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDEzX0VYVDoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDE0X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
Q09MT1JfQVRUQUNITUVOVDE1X0VYVDoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdM
OjpDT0xPUl9CVUZGRVJfQklUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FU
VEFDSE1FTlQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVS
X0JJVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Cisg
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNzQ29udGV4dEdMOjpnZXRDbGVhckJp
dHNCeUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlIxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMy
RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
MTFGX0cxMUZfQjEwRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I5X0U1OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOFVJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1X0ExOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBMzJVSToKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5U
MzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CVUZGRVJfQklUOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfSU5ERVg4OgorICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMjRf
U1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RFTkNJTDg6
CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVCB8IEdy
YXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1aW50OF90IEdyYXBoaWNzQ29udGV4dEdMOjpnZXRD
aGFubmVsQml0c0J5Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1h
dCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OkFscGhhKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90PihDaGFubmVsQml0czo6UkdCKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1J
TkFOQ0VfQUxQSEE6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVs
Qml0czo6UkdCQSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9F
WFQ6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdC
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjVfQTE6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OlJHQkEpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENo
YW5uZWxCaXRzOjpEZXB0aCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9J
TkRFWDg6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6
U3RlbmNpbCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpEZXB0aFN0ZW5j
aWwpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDM5MzQ4NTQ2OTkzMTkzN2VlZTI0YWRmOGQ3MTg4MGFjMTFiNzY5ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmgKQEAgLTAsMCArMSwxMDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5
cGVzM0QuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBP
UyhXSU5ET1dTKQorLy8gRGVmaW5lZCBpbiB3aW5lcnJvci5oCisjaWZkZWYgTk9fRVJST1IKKyN1
bmRlZiBOT19FUlJPUgorI2VuZGlmCisjZW5kaWYKKwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdM
RGlzcGxheTsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTFN1cmZhY2U7
Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xDb25maWc7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEV4dGVuc2lvbnNHTDsKK2NsYXNzIEhvc3RXaW5kb3c7Citj
bGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKKworY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0wgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFwaGljc0NvbnRleHRHTD4geworcHVibGljOgor
ICAgIGVudW0geworICAgICAgICAvLyBXZWJHTCAxIGNvbnN0YW50cy4KKyAgICAgICAgREVQVEhf
QlVGRkVSX0JJVCA9IDB4MDAwMDAxMDAsCisgICAgICAgIFNURU5DSUxfQlVGRkVSX0JJVCA9IDB4
MDAwMDA0MDAsCisgICAgICAgIENPTE9SX0JVRkZFUl9CSVQgPSAweDAwMDA0MDAwLAorICAgICAg
ICBQT0lOVFMgPSAweDAwMDAsCisgICAgICAgIExJTkVTID0gMHgwMDAxLAorICAgICAgICBMSU5F
X0xPT1AgPSAweDAwMDIsCisgICAgICAgIExJTkVfU1RSSVAgPSAweDAwMDMsCisgICAgICAgIFRS
SUFOR0xFUyA9IDB4MDAwNCwKKyAgICAgICAgVFJJQU5HTEVfU1RSSVAgPSAweDAwMDUsCisgICAg
ICAgIFRSSUFOR0xFX0ZBTiA9IDB4MDAwNiwKKyAgICAgICAgWkVSTyA9IDAsCisgICAgICAgIE9O
RSA9IDEsCisgICAgICAgIFNSQ19DT0xPUiA9IDB4MDMwMCwKKyAgICAgICAgT05FX01JTlVTX1NS
Q19DT0xPUiA9IDB4MDMwMSwKKyAgICAgICAgU1JDX0FMUEhBID0gMHgwMzAyLAorICAgICAgICBP
TkVfTUlOVVNfU1JDX0FMUEhBID0gMHgwMzAzLAorICAgICAgICBEU1RfQUxQSEEgPSAweDAzMDQs
CisgICAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgPSAweDAzMDUsCisgICAgICAgIERTVF9DT0xP
UiA9IDB4MDMwNiwKKyAgICAgICAgT05FX01JTlVTX0RTVF9DT0xPUiA9IDB4MDMwNywKKyAgICAg
ICAgU1JDX0FMUEhBX1NBVFVSQVRFID0gMHgwMzA4LAorICAgICAgICBGVU5DX0FERCA9IDB4ODAw
NiwKKyAgICAgICAgQkxFTkRfRVFVQVRJT04gPSAweDgwMDksCisgICAgICAgIEJMRU5EX0VRVUFU
SU9OX1JHQiA9IDB4ODAwOSwKKyAgICAgICAgQkxFTkRfRVFVQVRJT05fQUxQSEEgPSAweDg4M0Qs
CisgICAgICAgIEZVTkNfU1VCVFJBQ1QgPSAweDgwMEEsCisgICAgICAgIEZVTkNfUkVWRVJTRV9T
VUJUUkFDVCA9IDB4ODAwQiwKKyAgICAgICAgQkxFTkRfRFNUX1JHQiA9IDB4ODBDOCwKKyAgICAg
ICAgQkxFTkRfU1JDX1JHQiA9IDB4ODBDOSwKKyAgICAgICAgQkxFTkRfRFNUX0FMUEhBID0gMHg4
MENBLAorICAgICAgICBCTEVORF9TUkNfQUxQSEEgPSAweDgwQ0IsCisgICAgICAgIENPTlNUQU5U
X0NPTE9SID0gMHg4MDAxLAorICAgICAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgPSAweDgw
MDIsCisgICAgICAgIENPTlNUQU5UX0FMUEhBID0gMHg4MDAzLAorICAgICAgICBPTkVfTUlOVVNf
Q09OU1RBTlRfQUxQSEEgPSAweDgwMDQsCisgICAgICAgIEJMRU5EX0NPTE9SID0gMHg4MDA1LAor
ICAgICAgICBBUlJBWV9CVUZGRVIgPSAweDg4OTIsCisgICAgICAgIEVMRU1FTlRfQVJSQVlfQlVG
RkVSID0gMHg4ODkzLAorICAgICAgICBBUlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5NCwKKyAg
ICAgICAgRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5NSwKKyAgICAgICAgU1RS
RUFNX0RSQVcgPSAweDg4RTAsCisgICAgICAgIFNUQVRJQ19EUkFXID0gMHg4OEU0LAorICAgICAg
ICBEWU5BTUlDX0RSQVcgPSAweDg4RTgsCisgICAgICAgIEJVRkZFUl9TSVpFID0gMHg4NzY0LAor
ICAgICAgICBCVUZGRVJfVVNBR0UgPSAweDg3NjUsCisgICAgICAgIENVUlJFTlRfVkVSVEVYX0FU
VFJJQiA9IDB4ODYyNiwKKyAgICAgICAgRlJPTlQgPSAweDA0MDQsCisgICAgICAgIEJBQ0sgPSAw
eDA0MDUsCisgICAgICAgIEZST05UX0FORF9CQUNLID0gMHgwNDA4LAorICAgICAgICBURVhUVVJF
XzJEID0gMHgwREUxLAorICAgICAgICBDVUxMX0ZBQ0UgPSAweDBCNDQsCisgICAgICAgIEJMRU5E
ID0gMHgwQkUyLAorICAgICAgICBESVRIRVIgPSAweDBCRDAsCisgICAgICAgIFNURU5DSUxfVEVT
VCA9IDB4MEI5MCwKKyAgICAgICAgREVQVEhfVEVTVCA9IDB4MEI3MSwKKyAgICAgICAgU0NJU1NP
Ul9URVNUID0gMHgwQzExLAorICAgICAgICBQT0xZR09OX09GRlNFVF9GSUxMID0gMHg4MDM3LAor
ICAgICAgICBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgPSAweDgwOUUsCisgICAgICAgIFNBTVBM
RV9DT1ZFUkFHRSA9IDB4ODBBMCwKKyAgICAgICAgTk9fRVJST1IgPSAwLAorICAgICAgICBJTlZB
TElEX0VOVU0gPSAweDA1MDAsCisgICAgICAgIElOVkFMSURfVkFMVUUgPSAweDA1MDEsCisgICAg
ICAgIElOVkFMSURfT1BFUkFUSU9OID0gMHgwNTAyLAorICAgICAgICBPVVRfT0ZfTUVNT1JZID0g
MHgwNTA1LAorICAgICAgICBDVyA9IDB4MDkwMCwKKyAgICAgICAgQ0NXID0gMHgwOTAxLAorICAg
ICAgICBMSU5FX1dJRFRIID0gMHgwQjIxLAorICAgICAgICBBTElBU0VEX1BPSU5UX1NJWkVfUkFO
R0UgPSAweDg0NkQsCisgICAgICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSA9IDB4ODQ2RSwK
KyAgICAgICAgQ1VMTF9GQUNFX01PREUgPSAweDBCNDUsCisgICAgICAgIEZST05UX0ZBQ0UgPSAw
eDBCNDYsCisgICAgICAgIERFUFRIX1JBTkdFID0gMHgwQjcwLAorICAgICAgICBERVBUSF9XUklU
RU1BU0sgPSAweDBCNzIsCisgICAgICAgIERFUFRIX0NMRUFSX1ZBTFVFID0gMHgwQjczLAorICAg
ICAgICBERVBUSF9GVU5DID0gMHgwQjc0LAorICAgICAgICBTVEVOQ0lMX0NMRUFSX1ZBTFVFID0g
MHgwQjkxLAorICAgICAgICBTVEVOQ0lMX0ZVTkMgPSAweDBCOTIsCisgICAgICAgIFNURU5DSUxf
RkFJTCA9IDB4MEI5NCwKKyAgICAgICAgU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgPSAweDBCOTUs
CisgICAgICAgIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTID0gMHgwQjk2LAorICAgICAgICBTVEVO
Q0lMX1JFRiA9IDB4MEI5NywKKyAgICAgICAgU1RFTkNJTF9WQUxVRV9NQVNLID0gMHgwQjkzLAor
ICAgICAgICBTVEVOQ0lMX1dSSVRFTUFTSyA9IDB4MEI5OCwKKyAgICAgICAgU1RFTkNJTF9CQUNL
X0ZVTkMgPSAweDg4MDAsCisgICAgICAgIFNURU5DSUxfQkFDS19GQUlMID0gMHg4ODAxLAorICAg
ICAgICBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMID0gMHg4ODAyLAorICAgICAgICBTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTID0gMHg4ODAzLAorICAgICAgICBTVEVOQ0lMX0JBQ0tf
UkVGID0gMHg4Q0EzLAorICAgICAgICBTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyA9IDB4OENBNCwK
KyAgICAgICAgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyA9IDB4OENBNSwKKyAgICAgICAgVklFV1BP
UlQgPSAweDBCQTIsCisgICAgICAgIFNDSVNTT1JfQk9YID0gMHgwQzEwLAorICAgICAgICBDT0xP
Ul9DTEVBUl9WQUxVRSA9IDB4MEMyMiwKKyAgICAgICAgQ09MT1JfV1JJVEVNQVNLID0gMHgwQzIz
LAorICAgICAgICBVTlBBQ0tfQUxJR05NRU5UID0gMHgwQ0Y1LAorICAgICAgICBQQUNLX0FMSUdO
TUVOVCA9IDB4MEQwNSwKKyAgICAgICAgTUFYX1RFWFRVUkVfU0laRSA9IDB4MEQzMywKKyAgICAg
ICAgTUFYX1ZJRVdQT1JUX0RJTVMgPSAweDBEM0EsCisgICAgICAgIFNVQlBJWEVMX0JJVFMgPSAw
eDBENTAsCisgICAgICAgIFJFRF9CSVRTID0gMHgwRDUyLAorICAgICAgICBHUkVFTl9CSVRTID0g
MHgwRDUzLAorICAgICAgICBCTFVFX0JJVFMgPSAweDBENTQsCisgICAgICAgIEFMUEhBX0JJVFMg
PSAweDBENTUsCisgICAgICAgIERFUFRIX0JJVFMgPSAweDBENTYsCisgICAgICAgIFNURU5DSUxf
QklUUyA9IDB4MEQ1NywKKyAgICAgICAgUE9MWUdPTl9PRkZTRVRfVU5JVFMgPSAweDJBMDAsCisg
ICAgICAgIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiA9IDB4ODAzOCwKKyAgICAgICAgVEVYVFVSRV9C
SU5ESU5HXzJEID0gMHg4MDY5LAorICAgICAgICBTQU1QTEVfQlVGRkVSUyA9IDB4ODBBOCwKKyAg
ICAgICAgU0FNUExFUyA9IDB4ODBBOSwKKyAgICAgICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFID0g
MHg4MEFBLAorICAgICAgICBTQU1QTEVfQ09WRVJBR0VfSU5WRVJUID0gMHg4MEFCLAorICAgICAg
ICBOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTIsCisgICAgICAgIENPTVBS
RVNTRURfVEVYVFVSRV9GT1JNQVRTID0gMHg4NkEzLAorICAgICAgICBET05UX0NBUkUgPSAweDEx
MDAsCisgICAgICAgIEZBU1RFU1QgPSAweDExMDEsCisgICAgICAgIE5JQ0VTVCA9IDB4MTEwMiwK
KyAgICAgICAgR0VORVJBVEVfTUlQTUFQX0hJTlQgPSAweDgxOTIsCisgICAgICAgIEJZVEUgPSAw
eDE0MDAsCisgICAgICAgIFVOU0lHTkVEX0JZVEUgPSAweDE0MDEsCisgICAgICAgIFNIT1JUID0g
MHgxNDAyLAorICAgICAgICBVTlNJR05FRF9TSE9SVCA9IDB4MTQwMywKKyAgICAgICAgSU5UID0g
MHgxNDA0LAorICAgICAgICBVTlNJR05FRF9JTlQgPSAweDE0MDUsCisgICAgICAgIEZMT0FUID0g
MHgxNDA2LAorICAgICAgICBIQUxGX0ZMT0FUX09FUyA9IDB4OEQ2MSwKKyAgICAgICAgRklYRUQg
PSAweDE0MEMsCisgICAgICAgIERFUFRIX0NPTVBPTkVOVCA9IDB4MTkwMiwKKyAgICAgICAgQUxQ
SEEgPSAweDE5MDYsCisgICAgICAgIFJHQiA9IDB4MTkwNywKKyAgICAgICAgUkdCQSA9IDB4MTkw
OCwKKyAgICAgICAgQkdSQSA9IDB4ODBFMSwKKyAgICAgICAgTFVNSU5BTkNFID0gMHgxOTA5LAor
ICAgICAgICBMVU1JTkFOQ0VfQUxQSEEgPSAweDE5MEEsCisgICAgICAgIFVOU0lHTkVEX1NIT1JU
XzRfNF80XzQgPSAweDgwMzMsCisgICAgICAgIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEgPSAweDgw
MzQsCisgICAgICAgIFVOU0lHTkVEX1NIT1JUXzVfNl81ID0gMHg4MzYzLAorICAgICAgICBGUkFH
TUVOVF9TSEFERVIgPSAweDhCMzAsCisgICAgICAgIFZFUlRFWF9TSEFERVIgPSAweDhCMzEsCisg
ICAgICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDB4ODg2OSwKKyAgICAgICAgTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgPSAweDhERkIsCisgICAgICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAw
eDhERkMsCisgICAgICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4QjRE
LAorICAgICAgICBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNEMsCisgICAg
ICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4ODcyLAorICAgICAgICBNQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTID0gMHg4REZELAorICAgICAgICBTSEFERVJfVFlQRSA9IDB4OEI0
RiwKKyAgICAgICAgREVMRVRFX1NUQVRVUyA9IDB4OEI4MCwKKyAgICAgICAgTElOS19TVEFUVVMg
PSAweDhCODIsCisgICAgICAgIFZBTElEQVRFX1NUQVRVUyA9IDB4OEI4MywKKyAgICAgICAgQVRU
QUNIRURfU0hBREVSUyA9IDB4OEI4NSwKKyAgICAgICAgQUNUSVZFX1VOSUZPUk1TID0gMHg4Qjg2
LAorICAgICAgICBBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIID0gMHg4Qjg3LAorICAgICAgICBB
Q1RJVkVfQVRUUklCVVRFUyA9IDB4OEI4OSwKKyAgICAgICAgQUNUSVZFX0FUVFJJQlVURV9NQVhf
TEVOR1RIID0gMHg4QjhBLAorICAgICAgICBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gPSAweDhC
OEMsCisgICAgICAgIENVUlJFTlRfUFJPR1JBTSA9IDB4OEI4RCwKKyAgICAgICAgTkVWRVIgPSAw
eDAyMDAsCisgICAgICAgIExFU1MgPSAweDAyMDEsCisgICAgICAgIEVRVUFMID0gMHgwMjAyLAor
ICAgICAgICBMRVFVQUwgPSAweDAyMDMsCisgICAgICAgIEdSRUFURVIgPSAweDAyMDQsCisgICAg
ICAgIE5PVEVRVUFMID0gMHgwMjA1LAorICAgICAgICBHRVFVQUwgPSAweDAyMDYsCisgICAgICAg
IEFMV0FZUyA9IDB4MDIwNywKKyAgICAgICAgS0VFUCA9IDB4MUUwMCwKKyAgICAgICAgUkVQTEFD
RSA9IDB4MUUwMSwKKyAgICAgICAgSU5DUiA9IDB4MUUwMiwKKyAgICAgICAgREVDUiA9IDB4MUUw
MywKKyAgICAgICAgSU5WRVJUID0gMHgxNTBBLAorICAgICAgICBJTkNSX1dSQVAgPSAweDg1MDcs
CisgICAgICAgIERFQ1JfV1JBUCA9IDB4ODUwOCwKKyAgICAgICAgVkVORE9SID0gMHgxRjAwLAor
ICAgICAgICBSRU5ERVJFUiA9IDB4MUYwMSwKKyAgICAgICAgVkVSU0lPTiA9IDB4MUYwMiwKKyAg
ICAgICAgRVhURU5TSU9OUyA9IDB4MUYwMywKKyAgICAgICAgTkVBUkVTVCA9IDB4MjYwMCwKKyAg
ICAgICAgTElORUFSID0gMHgyNjAxLAorICAgICAgICBORUFSRVNUX01JUE1BUF9ORUFSRVNUID0g
MHgyNzAwLAorICAgICAgICBMSU5FQVJfTUlQTUFQX05FQVJFU1QgPSAweDI3MDEsCisgICAgICAg
IE5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IDB4MjcwMiwKKyAgICAgICAgTElORUFSX01JUE1BUF9M
SU5FQVIgPSAweDI3MDMsCisgICAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiA9IDB4MjgwMCwKKyAg
ICAgICAgVEVYVFVSRV9NSU5fRklMVEVSID0gMHgyODAxLAorICAgICAgICBURVhUVVJFX1dSQVBf
UyA9IDB4MjgwMiwKKyAgICAgICAgVEVYVFVSRV9XUkFQX1QgPSAweDI4MDMsCisgICAgICAgIFRF
WFRVUkUgPSAweDE3MDIsCisgICAgICAgIFRFWFRVUkVfQ1VCRV9NQVAgPSAweDg1MTMsCisgICAg
ICAgIFRFWFRVUkVfQklORElOR19DVUJFX01BUCA9IDB4ODUxNCwKKyAgICAgICAgVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YID0gMHg4NTE1LAorICAgICAgICBURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1ggPSAweDg1MTYsCisgICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSA9
IDB4ODUxNywKKyAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZID0gMHg4NTE4LAor
ICAgICAgICBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogPSAweDg1MTksCisgICAgICAgIFRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiA9IDB4ODUxQSwKKyAgICAgICAgTUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSA9IDB4ODUxQywKKyAgICAgICAgVEVYVFVSRTAgPSAweDg0QzAsCisgICAg
ICAgIFRFWFRVUkUxID0gMHg4NEMxLAorICAgICAgICBURVhUVVJFMiA9IDB4ODRDMiwKKyAgICAg
ICAgVEVYVFVSRTMgPSAweDg0QzMsCisgICAgICAgIFRFWFRVUkU0ID0gMHg4NEM0LAorICAgICAg
ICBURVhUVVJFNSA9IDB4ODRDNSwKKyAgICAgICAgVEVYVFVSRTYgPSAweDg0QzYsCisgICAgICAg
IFRFWFRVUkU3ID0gMHg4NEM3LAorICAgICAgICBURVhUVVJFOCA9IDB4ODRDOCwKKyAgICAgICAg
VEVYVFVSRTkgPSAweDg0QzksCisgICAgICAgIFRFWFRVUkUxMCA9IDB4ODRDQSwKKyAgICAgICAg
VEVYVFVSRTExID0gMHg4NENCLAorICAgICAgICBURVhUVVJFMTIgPSAweDg0Q0MsCisgICAgICAg
IFRFWFRVUkUxMyA9IDB4ODRDRCwKKyAgICAgICAgVEVYVFVSRTE0ID0gMHg4NENFLAorICAgICAg
ICBURVhUVVJFMTUgPSAweDg0Q0YsCisgICAgICAgIFRFWFRVUkUxNiA9IDB4ODREMCwKKyAgICAg
ICAgVEVYVFVSRTE3ID0gMHg4NEQxLAorICAgICAgICBURVhUVVJFMTggPSAweDg0RDIsCisgICAg
ICAgIFRFWFRVUkUxOSA9IDB4ODREMywKKyAgICAgICAgVEVYVFVSRTIwID0gMHg4NEQ0LAorICAg
ICAgICBURVhUVVJFMjEgPSAweDg0RDUsCisgICAgICAgIFRFWFRVUkUyMiA9IDB4ODRENiwKKyAg
ICAgICAgVEVYVFVSRTIzID0gMHg4NEQ3LAorICAgICAgICBURVhUVVJFMjQgPSAweDg0RDgsCisg
ICAgICAgIFRFWFRVUkUyNSA9IDB4ODREOSwKKyAgICAgICAgVEVYVFVSRTI2ID0gMHg4NERBLAor
ICAgICAgICBURVhUVVJFMjcgPSAweDg0REIsCisgICAgICAgIFRFWFRVUkUyOCA9IDB4ODREQywK
KyAgICAgICAgVEVYVFVSRTI5ID0gMHg4NERELAorICAgICAgICBURVhUVVJFMzAgPSAweDg0REUs
CisgICAgICAgIFRFWFRVUkUzMSA9IDB4ODRERiwKKyAgICAgICAgQUNUSVZFX1RFWFRVUkUgPSAw
eDg0RTAsCisgICAgICAgIFJFUEVBVCA9IDB4MjkwMSwKKyAgICAgICAgQ0xBTVBfVE9fRURHRSA9
IDB4ODEyRiwKKyAgICAgICAgTUlSUk9SRURfUkVQRUFUID0gMHg4MzcwLAorICAgICAgICBGTE9B
VF9WRUMyID0gMHg4QjUwLAorICAgICAgICBGTE9BVF9WRUMzID0gMHg4QjUxLAorICAgICAgICBG
TE9BVF9WRUM0ID0gMHg4QjUyLAorICAgICAgICBJTlRfVkVDMiA9IDB4OEI1MywKKyAgICAgICAg
SU5UX1ZFQzMgPSAweDhCNTQsCisgICAgICAgIElOVF9WRUM0ID0gMHg4QjU1LAorICAgICAgICBC
T09MID0gMHg4QjU2LAorICAgICAgICBCT09MX1ZFQzIgPSAweDhCNTcsCisgICAgICAgIEJPT0xf
VkVDMyA9IDB4OEI1OCwKKyAgICAgICAgQk9PTF9WRUM0ID0gMHg4QjU5LAorICAgICAgICBGTE9B
VF9NQVQyID0gMHg4QjVBLAorICAgICAgICBGTE9BVF9NQVQzID0gMHg4QjVCLAorICAgICAgICBG
TE9BVF9NQVQ0ID0gMHg4QjVDLAorICAgICAgICBTQU1QTEVSXzJEID0gMHg4QjVFLAorICAgICAg
ICBTQU1QTEVSX0NVQkUgPSAweDhCNjAsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5B
QkxFRCA9IDB4ODYyMiwKKyAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFID0gMHg4NjIz
LAorICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSA9IDB4ODYyNCwKKyAgICAgICAg
VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFID0gMHg4NjI1LAorICAgICAgICBWRVJURVhfQVRUUklC
X0FSUkFZX05PUk1BTElaRUQgPSAweDg4NkEsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlf
UE9JTlRFUiA9IDB4ODY0NSwKKyAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklO
RElORyA9IDB4ODg5RiwKKyAgICAgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFID0g
MHg4QjlBLAorICAgICAgICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCA9IDB4OEI5
QiwKKyAgICAgICAgQ09NUElMRV9TVEFUVVMgPSAweDhCODEsCisgICAgICAgIElORk9fTE9HX0xF
TkdUSCA9IDB4OEI4NCwKKyAgICAgICAgU0hBREVSX1NPVVJDRV9MRU5HVEggPSAweDhCODgsCisg
ICAgICAgIFNIQURFUl9DT01QSUxFUiA9IDB4OERGQSwKKyAgICAgICAgU0hBREVSX0JJTkFSWV9G
T1JNQVRTID0gMHg4REY4LAorICAgICAgICBOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTID0gMHg4
REY5LAorICAgICAgICBMT1dfRkxPQVQgPSAweDhERjAsCisgICAgICAgIE1FRElVTV9GTE9BVCA9
IDB4OERGMSwKKyAgICAgICAgSElHSF9GTE9BVCA9IDB4OERGMiwKKyAgICAgICAgTE9XX0lOVCA9
IDB4OERGMywKKyAgICAgICAgTUVESVVNX0lOVCA9IDB4OERGNCwKKyAgICAgICAgSElHSF9JTlQg
PSAweDhERjUsCisgICAgICAgIEZSQU1FQlVGRkVSID0gMHg4RDQwLAorICAgICAgICBSRU5ERVJC
VUZGRVIgPSAweDhENDEsCisgICAgICAgIFJHQkE0ID0gMHg4MDU2LAorICAgICAgICBSR0I1X0Ex
ID0gMHg4MDU3LAorICAgICAgICBSR0I1NjUgPSAweDhENjIsCisgICAgICAgIERFUFRIX0NPTVBP
TkVOVDE2ID0gMHg4MUE1LAorICAgICAgICBTVEVOQ0lMX0lOREVYID0gMHgxOTAxLAorICAgICAg
ICBTVEVOQ0lMX0lOREVYOCA9IDB4OEQ0OCwKKyAgICAgICAgUkVOREVSQlVGRkVSX1dJRFRIID0g
MHg4RDQyLAorICAgICAgICBSRU5ERVJCVUZGRVJfSEVJR0hUID0gMHg4RDQzLAorICAgICAgICBS
RU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUID0gMHg4RDQ0LAorICAgICAgICBSRU5ERVJCVUZG
RVJfUkVEX1NJWkUgPSAweDhENTAsCisgICAgICAgIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFID0g
MHg4RDUxLAorICAgICAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFID0gMHg4RDUyLAorICAgICAg
ICBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSA9IDB4OEQ1MywKKyAgICAgICAgUkVOREVSQlVGRkVS
X0RFUFRIX1NJWkUgPSAweDhENTQsCisgICAgICAgIFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUg
PSAweDhENTUsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgPSAw
eDhDRDAsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgPSAweDhD
RDEsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCA9IDB4OENE
MiwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0Ug
PSAweDhDRDMsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQwID0gMHg4Q0UwLAorICAgICAgICBE
RVBUSF9BVFRBQ0hNRU5UID0gMHg4RDAwLAorICAgICAgICBTVEVOQ0lMX0FUVEFDSE1FTlQgPSAw
eDhEMjAsCisgICAgICAgIE5PTkUgPSAwLAorICAgICAgICBGUkFNRUJVRkZFUl9DT01QTEVURSA9
IDB4OENENSwKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UID0gMHg4
Q0Q2LAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA9
IDB4OENENywKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TID0gMHg4
Q0Q5LAorICAgICAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCA9IDB4OENERCwKKyAgICAgICAg
RlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBNiwKKyAgICAgICAgUkVOREVSQlVGRkVSX0JJTkRJ
TkcgPSAweDhDQTcsCisgICAgICAgIE1BWF9SRU5ERVJCVUZGRVJfU0laRSA9IDB4ODRFOCwKKyAg
ICAgICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gPSAweDA1MDYsCisKKyAgICAgICAg
Ly8gV2ViR0wtc3BlY2lmaWMgZW51bXMKKyAgICAgICAgVU5QQUNLX0ZMSVBfWV9XRUJHTCA9IDB4
OTI0MCwKKyAgICAgICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMID0gMHg5MjQxLAor
ICAgICAgICBDT05URVhUX0xPU1RfV0VCR0wgPSAweDkyNDIsCisgICAgICAgIFVOUEFDS19DT0xP
UlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDMsCisgICAgICAgIEJST1dTRVJfREVGQVVM
VF9XRUJHTCA9IDB4OTI0NCwKKyAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFID0gMHg4OEZFLAorICAgICAgICAKKyAgICAgICAgLy8gV2ViR0wyIGNvbnN0YW50cworICAg
ICAgICBSRUFEX0JVRkZFUiA9IDB4MEMwMiwKKyAgICAgICAgVU5QQUNLX1JPV19MRU5HVEggPSAw
eDBDRjIsCisgICAgICAgIFVOUEFDS19TS0lQX1JPV1MgPSAweDBDRjMsCisgICAgICAgIFVOUEFD
S19TS0lQX1BJWEVMUyA9IDB4MENGNCwKKyAgICAgICAgUEFDS19ST1dfTEVOR1RIID0gMHgwRDAy
LAorICAgICAgICBQQUNLX1NLSVBfUk9XUyA9IDB4MEQwMywKKyAgICAgICAgUEFDS19TS0lQX1BJ
WEVMUyA9IDB4MEQwNCwKKyAgICAgICAgQ09MT1IgPSAweDE4MDAsCisgICAgICAgIERFUFRIID0g
MHgxODAxLAorICAgICAgICBTVEVOQ0lMID0gMHgxODAyLAorICAgICAgICBSRUQgPSAweDE5MDMs
CisgICAgICAgIFJHQjggPSAweDgwNTEsCisgICAgICAgIFJHQkE4ID0gMHg4MDU4LAorICAgICAg
ICBSR0IxMF9BMiA9IDB4ODA1OSwKKyAgICAgICAgVEVYVFVSRV9CSU5ESU5HXzNEID0gMHg4MDZB
LAorICAgICAgICBVTlBBQ0tfU0tJUF9JTUFHRVMgPSAweDgwNkQsCisgICAgICAgIFVOUEFDS19J
TUFHRV9IRUlHSFQgPSAweDgwNkUsCisgICAgICAgIFRFWFRVUkVfM0QgPSAweDgwNkYsCisgICAg
ICAgIFRFWFRVUkVfV1JBUF9SID0gMHg4MDcyLAorICAgICAgICBNQVhfM0RfVEVYVFVSRV9TSVpF
ID0gMHg4MDczLAorICAgICAgICBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgPSAweDgzNjgs
CisgICAgICAgIE1BWF9FTEVNRU5UU19WRVJUSUNFUyA9IDB4ODBFOCwKKyAgICAgICAgTUFYX0VM
RU1FTlRTX0lORElDRVMgPSAweDgwRTksCisgICAgICAgIFRFWFRVUkVfTUlOX0xPRCA9IDB4ODEz
QSwKKyAgICAgICAgVEVYVFVSRV9NQVhfTE9EID0gMHg4MTNCLAorICAgICAgICBURVhUVVJFX0JB
U0VfTEVWRUwgPSAweDgxM0MsCisgICAgICAgIFRFWFRVUkVfTUFYX0xFVkVMID0gMHg4MTNELAor
ICAgICAgICBNSU4gPSAweDgwMDcsCisgICAgICAgIE1BWCA9IDB4ODAwOCwKKyAgICAgICAgREVQ
VEhfQ09NUE9ORU5UMjQgPSAweDgxQTYsCisgICAgICAgIE1BWF9URVhUVVJFX0xPRF9CSUFTID0g
MHg4NEZELAorICAgICAgICBURVhUVVJFX0NPTVBBUkVfTU9ERSA9IDB4ODg0QywKKyAgICAgICAg
VEVYVFVSRV9DT01QQVJFX0ZVTkMgPSAweDg4NEQsCisgICAgICAgIENVUlJFTlRfUVVFUlkgPSAw
eDg4NjUsCisgICAgICAgIFFVRVJZX1JFU1VMVCA9IDB4ODg2NiwKKyAgICAgICAgUVVFUllfUkVT
VUxUX0FWQUlMQUJMRSA9IDB4ODg2NywKKyAgICAgICAgU1RSRUFNX1JFQUQgPSAweDg4RTEsCisg
ICAgICAgIFNUUkVBTV9DT1BZID0gMHg4OEUyLAorICAgICAgICBTVEFUSUNfUkVBRCA9IDB4ODhF
NSwKKyAgICAgICAgU1RBVElDX0NPUFkgPSAweDg4RTYsCisgICAgICAgIERZTkFNSUNfUkVBRCA9
IDB4ODhFOSwKKyAgICAgICAgRFlOQU1JQ19DT1BZID0gMHg4OEVBLAorICAgICAgICBNQVhfRFJB
V19CVUZGRVJTID0gMHg4ODI0LAorICAgICAgICBEUkFXX0JVRkZFUjAgPSAweDg4MjUsCisgICAg
ICAgIERSQVdfQlVGRkVSMSA9IDB4ODgyNiwKKyAgICAgICAgRFJBV19CVUZGRVIyID0gMHg4ODI3
LAorICAgICAgICBEUkFXX0JVRkZFUjMgPSAweDg4MjgsCisgICAgICAgIERSQVdfQlVGRkVSNCA9
IDB4ODgyOSwKKyAgICAgICAgRFJBV19CVUZGRVI1ID0gMHg4ODJBLAorICAgICAgICBEUkFXX0JV
RkZFUjYgPSAweDg4MkIsCisgICAgICAgIERSQVdfQlVGRkVSNyA9IDB4ODgyQywKKyAgICAgICAg
RFJBV19CVUZGRVI4ID0gMHg4ODJELAorICAgICAgICBEUkFXX0JVRkZFUjkgPSAweDg4MkUsCisg
ICAgICAgIERSQVdfQlVGRkVSMTAgPSAweDg4MkYsCisgICAgICAgIERSQVdfQlVGRkVSMTEgPSAw
eDg4MzAsCisgICAgICAgIERSQVdfQlVGRkVSMTIgPSAweDg4MzEsCisgICAgICAgIERSQVdfQlVG
RkVSMTMgPSAweDg4MzIsCisgICAgICAgIERSQVdfQlVGRkVSMTQgPSAweDg4MzMsCisgICAgICAg
IERSQVdfQlVGRkVSMTUgPSAweDg4MzQsCisgICAgICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX0NP
TVBPTkVOVFMgPSAweDhCNDksCisgICAgICAgIE1BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRT
ID0gMHg4QjRBLAorICAgICAgICBTQU1QTEVSXzNEID0gMHg4QjVGLAorICAgICAgICBTQU1QTEVS
XzJEX1NIQURPVyA9IDB4OEI2MiwKKyAgICAgICAgRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVf
SElOVCA9IDB4OEI4QiwKKyAgICAgICAgUElYRUxfUEFDS19CVUZGRVIgPSAweDg4RUIsCisgICAg
ICAgIFBJWEVMX1VOUEFDS19CVUZGRVIgPSAweDg4RUMsCisgICAgICAgIFBJWEVMX1BBQ0tfQlVG
RkVSX0JJTkRJTkcgPSAweDg4RUQsCisgICAgICAgIFBJWEVMX1VOUEFDS19CVUZGRVJfQklORElO
RyA9IDB4ODhFRiwKKyAgICAgICAgRkxPQVRfTUFUMngzID0gMHg4QjY1LAorICAgICAgICBGTE9B
VF9NQVQyeDQgPSAweDhCNjYsCisgICAgICAgIEZMT0FUX01BVDN4MiA9IDB4OEI2NywKKyAgICAg
ICAgRkxPQVRfTUFUM3g0ID0gMHg4QjY4LAorICAgICAgICBGTE9BVF9NQVQ0eDIgPSAweDhCNjks
CisgICAgICAgIEZMT0FUX01BVDR4MyA9IDB4OEI2QSwKKyAgICAgICAgU1JHQiA9IDB4OEM0MCwK
KyAgICAgICAgU1JHQjggPSAweDhDNDEsCisgICAgICAgIFNSR0JfQUxQSEEgPSAweDhDNDIsCisg
ICAgICAgIFNSR0I4X0FMUEhBOCA9IDB4OEM0MywKKyAgICAgICAgQ09NUEFSRV9SRUZfVE9fVEVY
VFVSRSA9IDB4ODg0RSwKKyAgICAgICAgUkdCQTMyRiA9IDB4ODgxNCwKKyAgICAgICAgUkdCMzJG
ID0gMHg4ODE1LAorICAgICAgICBSR0JBMTZGID0gMHg4ODFBLAorICAgICAgICBSR0IxNkYgPSAw
eDg4MUIsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUiA9IDB4ODhGRCwKKyAg
ICAgICAgTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTID0gMHg4OEZGLAorICAgICAgICBNSU5fUFJP
R1JBTV9URVhFTF9PRkZTRVQgPSAweDg5MDQsCisgICAgICAgIE1BWF9QUk9HUkFNX1RFWEVMX09G
RlNFVCA9IDB4ODkwNSwKKyAgICAgICAgTUFYX1ZBUllJTkdfQ09NUE9ORU5UUyA9IDB4OEI0QiwK
KyAgICAgICAgVEVYVFVSRV8yRF9BUlJBWSA9IDB4OEMxQSwKKyAgICAgICAgVEVYVFVSRV9CSU5E
SU5HXzJEX0FSUkFZID0gMHg4QzFELAorICAgICAgICBSMTFGX0cxMUZfQjEwRiA9IDB4OEMzQSwK
KyAgICAgICAgVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViA9IDB4OEMzQiwKKyAgICAgICAg
UkdCOV9FNSA9IDB4OEMzRCwKKyAgICAgICAgVU5TSUdORURfSU5UXzVfOV85XzlfUkVWID0gMHg4
QzNFLAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREUgPSAweDhDN0YsCisg
ICAgICAgIE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUyA9IDB4OEM4
MCwKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTID0gMHg4QzgzLAorICAgICAg
ICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUID0gMHg4Qzg0LAorICAgICAgICBUUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkUgPSAweDhDODUsCisgICAgICAgIFRSQU5TRk9STV9G
RUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU4gPSAweDhDODgsCisgICAgICAgIFJBU1RFUklaRVJf
RElTQ0FSRCA9IDB4OEM4OSwKKyAgICAgICAgTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxF
QVZFRF9DT01QT05FTlRTID0gMHg4QzhBLAorICAgICAgICBNQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X1NFUEFSQVRFX0FUVFJJQlMgPSAweDhDOEIsCisgICAgICAgIElOVEVSTEVBVkVEX0FUVFJJQlMg
PSAweDhDOEMsCisgICAgICAgIFNFUEFSQVRFX0FUVFJJQlMgPSAweDhDOEQsCisgICAgICAgIFRS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVIgPSAweDhDOEUsCisgICAgICAgIFRSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfQklORElORyA9IDB4OEM4RiwKKyAgICAgICAgUkdCQTMyVUkgPSAweDhENzAs
CisgICAgICAgIFJHQjMyVUkgPSAweDhENzEsCisgICAgICAgIFJHQkExNlVJID0gMHg4RDc2LAor
ICAgICAgICBSR0IxNlVJID0gMHg4RDc3LAorICAgICAgICBSR0JBOFVJID0gMHg4RDdDLAorICAg
ICAgICBSR0I4VUkgPSAweDhEN0QsCisgICAgICAgIFJHQkEzMkkgPSAweDhEODIsCisgICAgICAg
IFJHQjMySSA9IDB4OEQ4MywKKyAgICAgICAgUkdCQTE2SSA9IDB4OEQ4OCwKKyAgICAgICAgUkdC
MTZJID0gMHg4RDg5LAorICAgICAgICBSR0JBOEkgPSAweDhEOEUsCisgICAgICAgIFJHQjhJID0g
MHg4RDhGLAorICAgICAgICBSRURfSU5URUdFUiA9IDB4OEQ5NCwKKyAgICAgICAgUkdCX0lOVEVH
RVIgPSAweDhEOTgsCisgICAgICAgIFJHQkFfSU5URUdFUiA9IDB4OEQ5OSwKKyAgICAgICAgU0FN
UExFUl8yRF9BUlJBWSA9IDB4OERDMSwKKyAgICAgICAgU0FNUExFUl8yRF9BUlJBWV9TSEFET1cg
PSAweDhEQzQsCisgICAgICAgIFNBTVBMRVJfQ1VCRV9TSEFET1cgPSAweDhEQzUsCisgICAgICAg
IFVOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAorICAgICAgICBVTlNJR05FRF9JTlRfVkVDMyA9
IDB4OERDNywKKyAgICAgICAgVU5TSUdORURfSU5UX1ZFQzQgPSAweDhEQzgsCisgICAgICAgIElO
VF9TQU1QTEVSXzJEID0gMHg4RENBLAorICAgICAgICBJTlRfU0FNUExFUl8zRCA9IDB4OERDQiwK
KyAgICAgICAgSU5UX1NBTVBMRVJfQ1VCRSA9IDB4OERDQywKKyAgICAgICAgSU5UX1NBTVBMRVJf
MkRfQVJSQVkgPSAweDhEQ0YsCisgICAgICAgIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEID0gMHg4
REQyLAorICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExFUl8zRCA9IDB4OEREMywKKyAgICAgICAg
VU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSA9IDB4OERENCwKKyAgICAgICAgVU5TSUdORURfSU5U
X1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCisgICAgICAgIERFUFRIX0NPTVBPTkVOVDMyRiA9
IDB4OENBQywKKyAgICAgICAgREVQVEgzMkZfU1RFTkNJTDggPSAweDhDQUQsCisgICAgICAgIEZM
T0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViA9IDB4OERBRCwKKyAgICAgICAgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyA9IDB4ODIxMCwKKyAgICAgICAgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9DT01QT05FTlRfVFlQRSA9IDB4ODIxMSwKKyAgICAgICAgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9SRURfU0laRSA9IDB4ODIxMiwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9HUkVFTl9TSVpFID0gMHg4MjEzLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0JMVUVfU0laRSA9IDB4ODIxNCwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9B
TFBIQV9TSVpFID0gMHg4MjE1LAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRI
X1NJWkUgPSAweDgyMTYsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9T
SVpFID0gMHg4MjE3LAorICAgICAgICBGUkFNRUJVRkZFUl9ERUZBVUxUID0gMHg4MjE4LAorICAg
ICAgICBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSAweDgyMUEsCisgICAgICAgIERFUFRIX1NU
RU5DSUwgPSAweDg0RjksCisgICAgICAgIFVOU0lHTkVEX0lOVF8yNF84ID0gMHg4NEZBLAorICAg
ICAgICBERVBUSDI0X1NURU5DSUw4ID0gMHg4OEYwLAorICAgICAgICBVTlNJR05FRF9OT1JNQUxJ
WkVEID0gMHg4QzE3LAorICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQTYs
IC8qIFNhbWUgYXMgRlJBTUVCVUZGRVJfQklORElORyAqLworICAgICAgICBSRUFEX0ZSQU1FQlVG
RkVSID0gMHg4Q0E4LAorICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAorICAgICAg
ICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQUEsCisgICAgICAgIFJFTkRFUkJVRkZF
Ul9TQU1QTEVTID0gMHg4Q0FCLAorICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRV
UkVfTEFZRVIgPSAweDhDRDQsCisgICAgICAgIE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA9IDB4OENE
RiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEgPSAweDhDRTEsCisgICAgICAgIENPTE9SX0FU
VEFDSE1FTlQyID0gMHg4Q0UyLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMyA9IDB4OENFMywK
KyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDQgPSAweDhDRTQsCisgICAgICAgIENPTE9SX0FUVEFD
SE1FTlQ1ID0gMHg4Q0U1LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNiA9IDB4OENFNiwKKyAg
ICAgICAgQ09MT1JfQVRUQUNITUVOVDcgPSAweDhDRTcsCisgICAgICAgIENPTE9SX0FUVEFDSE1F
TlQ4ID0gMHg4Q0U4LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UOSA9IDB4OENFOSwKKyAgICAg
ICAgQ09MT1JfQVRUQUNITUVOVDEwID0gMHg4Q0VBLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5U
MTEgPSAweDhDRUIsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMiA9IDB4OENFQywKKyAgICAg
ICAgQ09MT1JfQVRUQUNITUVOVDEzID0gMHg4Q0VELAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5U
MTQgPSAweDhDRUUsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQxNSA9IDB4OENFRiwKKyAgICAg
ICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSA9IDB4OEQ1NiwKKyAgICAgICAg
TUFYX1NBTVBMRVMgPSAweDhENTcsCisgICAgICAgIEhBTEZfRkxPQVQgPSAweDE0MEIsCisgICAg
ICAgIFJHID0gMHg4MjI3LAorICAgICAgICBSR19JTlRFR0VSID0gMHg4MjI4LAorICAgICAgICBS
OCA9IDB4ODIyOSwKKyAgICAgICAgUkc4ID0gMHg4MjJCLAorICAgICAgICBSMTZGID0gMHg4MjJE
LAorICAgICAgICBSMzJGID0gMHg4MjJFLAorICAgICAgICBSRzE2RiA9IDB4ODIyRiwKKyAgICAg
ICAgUkczMkYgPSAweDgyMzAsCisgICAgICAgIFI4SSA9IDB4ODIzMSwKKyAgICAgICAgUjhVSSA9
IDB4ODIzMiwKKyAgICAgICAgUjE2SSA9IDB4ODIzMywKKyAgICAgICAgUjE2VUkgPSAweDgyMzQs
CisgICAgICAgIFIzMkkgPSAweDgyMzUsCisgICAgICAgIFIzMlVJID0gMHg4MjM2LAorICAgICAg
ICBSRzhJID0gMHg4MjM3LAorICAgICAgICBSRzhVSSA9IDB4ODIzOCwKKyAgICAgICAgUkcxNkkg
PSAweDgyMzksCisgICAgICAgIFJHMTZVSSA9IDB4ODIzQSwKKyAgICAgICAgUkczMkkgPSAweDgy
M0IsCisgICAgICAgIFJHMzJVSSA9IDB4ODIzQywKKyAgICAgICAgVkVSVEVYX0FSUkFZX0JJTkRJ
TkcgPSAweDg1QjUsCisgICAgICAgIFI4X1NOT1JNID0gMHg4Rjk0LAorICAgICAgICBSRzhfU05P
Uk0gPSAweDhGOTUsCisgICAgICAgIFJHQjhfU05PUk0gPSAweDhGOTYsCisgICAgICAgIFJHQkE4
X1NOT1JNID0gMHg4Rjk3LAorICAgICAgICBTSUdORURfTk9STUFMSVpFRCA9IDB4OEY5QywKKyAg
ICAgICAgQ09QWV9SRUFEX0JVRkZFUiA9IDB4OEYzNiwKKyAgICAgICAgQ09QWV9XUklURV9CVUZG
RVIgPSAweDhGMzcsCisgICAgICAgIENPUFlfUkVBRF9CVUZGRVJfQklORElORyA9IDB4OEYzNiwg
LyogU2FtZSBhcyBDT1BZX1JFQURfQlVGRkVSICovCisgICAgICAgIENPUFlfV1JJVEVfQlVGRkVS
X0JJTkRJTkcgPSAweDhGMzcsIC8qIFNhbWUgYXMgQ09QWV9XUklURV9CVUZGRVIgKi8KKyAgICAg
ICAgVU5JRk9STV9CVUZGRVIgPSAweDhBMTEsCisgICAgICAgIFVOSUZPUk1fQlVGRkVSX0JJTkRJ
TkcgPSAweDhBMjgsCisgICAgICAgIFVOSUZPUk1fQlVGRkVSX1NUQVJUID0gMHg4QTI5LAorICAg
ICAgICBVTklGT1JNX0JVRkZFUl9TSVpFID0gMHg4QTJBLAorICAgICAgICBNQVhfVkVSVEVYX1VO
SUZPUk1fQkxPQ0tTID0gMHg4QTJCLAorICAgICAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9CTE9D
S1MgPSAweDhBMkQsCisgICAgICAgIE1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUyA9IDB4OEEy
RSwKKyAgICAgICAgTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTID0gMHg4QTJGLAorICAgICAg
ICBNQVhfVU5JRk9STV9CTE9DS19TSVpFID0gMHg4QTMwLAorICAgICAgICBNQVhfQ09NQklORURf
VkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4OEEzMSwKKyAgICAgICAgTUFYX0NPTUJJTkVE
X0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4OEEzMywKKyAgICAgICAgVU5JRk9STV9C
VUZGRVJfT0ZGU0VUX0FMSUdOTUVOVCA9IDB4OEEzNCwKKyAgICAgICAgQUNUSVZFX1VOSUZPUk1f
QkxPQ0tTID0gMHg4QTM2LAorICAgICAgICBVTklGT1JNX1RZUEUgPSAweDhBMzcsCisgICAgICAg
IFVOSUZPUk1fU0laRSA9IDB4OEEzOCwKKyAgICAgICAgVU5JRk9STV9CTE9DS19JTkRFWCA9IDB4
OEEzQSwKKyAgICAgICAgVU5JRk9STV9PRkZTRVQgPSAweDhBM0IsCisgICAgICAgIFVOSUZPUk1f
QVJSQVlfU1RSSURFID0gMHg4QTNDLAorICAgICAgICBVTklGT1JNX01BVFJJWF9TVFJJREUgPSAw
eDhBM0QsCisgICAgICAgIFVOSUZPUk1fSVNfUk9XX01BSk9SID0gMHg4QTNFLAorICAgICAgICBV
TklGT1JNX0JMT0NLX0JJTkRJTkcgPSAweDhBM0YsCisgICAgICAgIFVOSUZPUk1fQkxPQ0tfREFU
QV9TSVpFID0gMHg4QTQwLAorICAgICAgICBVTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUyA9
IDB4OEE0MiwKKyAgICAgICAgVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTID0g
MHg4QTQzLAorICAgICAgICBVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURF
UiA9IDB4OEE0NCwKKyAgICAgICAgVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5U
X1NIQURFUiA9IDB4OEE0NiwKKyAgICAgICAgSU5WQUxJRF9JTkRFWCA9IDB4RkZGRkZGRkYsCisg
ICAgICAgIE1BWF9WRVJURVhfT1VUUFVUX0NPTVBPTkVOVFMgPSAweDkxMjIsCisgICAgICAgIE1B
WF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTID0gMHg5MTI1LAorICAgICAgICBNQVhfU0VSVkVS
X1dBSVRfVElNRU9VVCA9IDB4OTExMSwKKyAgICAgICAgT0JKRUNUX1RZUEUgPSAweDkxMTIsCisg
ICAgICAgIFNZTkNfQ09ORElUSU9OID0gMHg5MTEzLAorICAgICAgICBTWU5DX1NUQVRVUyA9IDB4
OTExNCwKKyAgICAgICAgU1lOQ19GTEFHUyA9IDB4OTExNSwKKyAgICAgICAgU1lOQ19GRU5DRSA9
IDB4OTExNiwKKyAgICAgICAgU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUgPSAweDkxMTcsCisg
ICAgICAgIFVOU0lHTkFMRUQgPSAweDkxMTgsCisgICAgICAgIFNJR05BTEVEID0gMHg5MTE5LAor
ICAgICAgICBBTFJFQURZX1NJR05BTEVEID0gMHg5MTFBLAorICAgICAgICBUSU1FT1VUX0VYUElS
RUQgPSAweDkxMUIsCisgICAgICAgIENPTkRJVElPTl9TQVRJU0ZJRUQgPSAweDkxMUMsCisjaWYg
UExBVEZPUk0oV0lOKQorICAgICAgICBXQUlUX0ZBSUxFRF9XSU4gPSAweDkxMUQsCisjZWxzZQor
ICAgICAgICBXQUlUX0ZBSUxFRCA9IDB4OTExRCwKKyNlbmRpZgorICAgICAgICBTWU5DX0ZMVVNI
X0NPTU1BTkRTX0JJVCA9IDB4MDAwMDAwMDEsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlf
RElWSVNPUiA9IDB4ODhGRSwKKyAgICAgICAgQU5ZX1NBTVBMRVNfUEFTU0VEID0gMHg4QzJGLAor
ICAgICAgICBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFID0gMHg4RDZBLAorICAgICAg
ICBTQU1QTEVSX0JJTkRJTkcgPSAweDg5MTksCisgICAgICAgIFJHQjEwX0EyVUkgPSAweDkwNkYs
CisgICAgICAgIFRFWFRVUkVfU1dJWlpMRV9SID0gMHg4RTQyLAorICAgICAgICBURVhUVVJFX1NX
SVpaTEVfRyA9IDB4OEU0MywKKyAgICAgICAgVEVYVFVSRV9TV0laWkxFX0IgPSAweDhFNDQsCisg
ICAgICAgIFRFWFRVUkVfU1dJWlpMRV9BID0gMHg4RTQ1LAorICAgICAgICBHUkVFTiA9IDB4MTkw
NCwKKyAgICAgICAgQkxVRSA9IDB4MTkwNSwKKyAgICAgICAgSU5UXzJfMTBfMTBfMTBfUkVWID0g
MHg4RDlGLAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0sgPSAweDhFMjIsCisgICAgICAgIFRS
QU5TRk9STV9GRUVEQkFDS19QQVVTRUQgPSAweDhFMjMsCisgICAgICAgIFRSQU5TRk9STV9GRUVE
QkFDS19BQ1RJVkUgPSAweDhFMjQsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5H
ID0gMHg4RTI1LAorICAgICAgICBDT01QUkVTU0VEX1IxMV9FQUMgPSAweDkyNzAsCisgICAgICAg
IENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgPSAweDkyNzEsCisgICAgICAgIENPTVBSRVNTRURf
UkcxMV9FQUMgPSAweDkyNzIsCisgICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDID0g
MHg5MjczLAorICAgICAgICBDT01QUkVTU0VEX1JHQjhfRVRDMiA9IDB4OTI3NCwKKyAgICAgICAg
Q09NUFJFU1NFRF9TUkdCOF9FVEMyID0gMHg5Mjc1LAorICAgICAgICBDT01QUkVTU0VEX1JHQjhf
UFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc2LAorICAgICAgICBDT01QUkVTU0VEX1NS
R0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3NywKKyAgICAgICAgQ09NUFJFU1NF
RF9SR0JBOF9FVEMyX0VBQyA9IDB4OTI3OCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfRVRDMl9FQUMgPSAweDkyNzksCisgICAgICAgIFRFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVCA9
IDB4OTEyRiwKKyAgICAgICAgTUFYX0VMRU1FTlRfSU5ERVggPSAweDhENkIsCisgICAgICAgIE5V
TV9TQU1QTEVfQ09VTlRTID0gMHg5MzgwLAorICAgICAgICBURVhUVVJFX0lNTVVUQUJMRV9MRVZF
TFMgPSAweDgyREYsCisgICAgICAgIFBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYID0gMHg4
RDY5LAorICAgICAgICBQUklNSVRJVkVfUkVTVEFSVCA9IDB4OEY5RCwKKworICAgICAgICAvLyBP
cGVuR0wgRVMgMyBjb25zdGFudHMuCisgICAgICAgIE1BUF9SRUFEX0JJVCA9IDB4MDAwMSwKKwor
ICAgICAgICAvLyBOZWNlc3NhcnkgZGVza3RvcCBPcGVuR0wgY29uc3RhbnRzLgorICAgICAgICBU
RVhUVVJFX1JFQ1RBTkdMRV9BUkIgPSAweDg0RjUKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBE
YXRhRm9ybWF0IDogdWludDhfdCB7CisgICAgICAgIFJHQkE4ID0gMCwKKyAgICAgICAgUkdCQTE2
TGl0dGxlLAorICAgICAgICBSR0JBMTZCaWcsCisgICAgICAgIFJHQkExNkYsCisgICAgICAgIFJH
QkEzMkYsCisgICAgICAgIFJHQjgsCisgICAgICAgIFJHQjE2TGl0dGxlLAorICAgICAgICBSR0Ix
NkJpZywKKyAgICAgICAgUkdCMTZGLAorICAgICAgICBSR0IzMkYsCisgICAgICAgIEJHUjgsCisg
ICAgICAgIEJHUkE4LAorICAgICAgICBCR1JBMTZMaXR0bGUsCisgICAgICAgIEJHUkExNkJpZywK
KyAgICAgICAgQVJHQjgsCisgICAgICAgIEFSR0IxNkxpdHRsZSwKKyAgICAgICAgQVJHQjE2Qmln
LAorICAgICAgICBBQkdSOCwKKyAgICAgICAgUkdCQTU1NTEsCisgICAgICAgIFJHQkE0NDQ0LAor
ICAgICAgICBSR0I1NjUsCisgICAgICAgIFI4LAorICAgICAgICBSMTZMaXR0bGUsCisgICAgICAg
IFIxNkJpZywKKyAgICAgICAgUjE2RiwKKyAgICAgICAgUjMyRiwKKyAgICAgICAgUkE4LAorICAg
ICAgICBSQTE2TGl0dGxlLAorICAgICAgICBSQTE2QmlnLAorICAgICAgICBSQTE2RiwKKyAgICAg
ICAgUkEzMkYsCisgICAgICAgIEFSOCwKKyAgICAgICAgQVIxNkxpdHRsZSwKKyAgICAgICAgQVIx
NkJpZywKKyAgICAgICAgQTgsCisgICAgICAgIEExNkxpdHRsZSwKKyAgICAgICAgQTE2QmlnLAor
ICAgICAgICBBMTZGLAorICAgICAgICBBMzJGLAorICAgICAgICBOdW1Gb3JtYXRzCisgICAgfTsK
KworICAgIGVudW0gY2xhc3MgRGVzdGluYXRpb24gOiB1aW50OF90IHsKKyAgICAgICAgT2Zmc2Ny
ZWVuLAorICAgICAgICBEaXJlY3RseVRvSG9zdFdpbmRvdywKKyAgICB9OworCisgICAgZW51bSBj
bGFzcyBDaGFubmVsQml0cyA6IHVpbnQ4X3QgeworICAgICAgICBSZWQgPSAxLAorICAgICAgICBH
cmVlbiA9IDIsCisgICAgICAgIEJsdWUgPSA0LAorICAgICAgICBBbHBoYSA9IDgsCisgICAgICAg
IERlcHRoID0gMTYsCisgICAgICAgIFN0ZW5jaWwgPSAzMiwKKyAgICAgICAgUkdCID0gUmVkIHwg
R3JlZW4gfCBCbHVlLAorICAgICAgICBSR0JBID0gUkdCIHwgQWxwaGEsCisgICAgICAgIERlcHRo
U3RlbmNpbCA9IERlcHRoIHwgU3RlbmNpbCwKKyAgICB9OworCisgICAgLy8gUG9zc2libGUgYWxw
aGEgb3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZworICAgIC8vIHBpeGVs
IHBhY2tpbmcuIEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11c3QKKyAg
ICAvLyBiZSByZW1vdmVkLgorICAgIGVudW0gQWxwaGFPcCA6IHVpbnQ4X3QgeworICAgICAgICBE
b05vdGhpbmcsCisgICAgICAgIERvUHJlbXVsdGlwbHksCisgICAgICAgIERvVW5tdWx0aXBseSwK
KyAgICB9OworCisgICAgZW51bSBjbGFzcyBET01Tb3VyY2UgOiB1aW50OF90IHsKKyAgICAgICAg
SW1hZ2UsCisgICAgICAgIENhbnZhcywKKyAgICAgICAgVmlkZW8sCisgICAgICAgIE5vbmUsCisg
ICAgfTsKKworI2lmIFVTRShBTkdMRSkKKyAgICBlbnVtIHsKKyAgICAgICAgLy8gVGhlc2UgY29u
c3RhbnRzIGFyZSByZWRlZmluZWQgaGVyZSBmcm9tIEFOR0xFJ3MgT3BlbkdMIEVTIGhlYWRlcnMg
dG8KKyAgICAgICAgLy8gcHJvdmlkZSBhIHNpbmdsZSBwbGFjZSB3aGVyZSBtdWx0aXBsZSBwb3J0
aW9ucyBvZiBwbGF0Zm9ybSBjb2RlIGNhbgorICAgICAgICAvLyByZWZlcmVuY2UgdGhlbS4KKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgIElPU3VyZmFjZVRleHR1cmVUYXJnZXQgPSBURVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIC8vIGFsc28gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUKKyAgICAg
ICAgRUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9IDB4MzQ1QiwgLy8gRUdMX1RFWFRVUkVfUkVD
VEFOR0xFX0FOR0xFCisjZWxzZQorICAgICAgICBJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0ID0gVEVY
VFVSRV8yRCwKKyAgICAgICAgRUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9IDB4MzA1RiwgLy8g
RUdMX1RFWFRVUkVfMkQKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisgICAgfTsKKyNlbmRpZiAv
LyBVU0UoQU5HTEUpCisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
M0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKKworICAgIEFMV0FZU19JTkxJTkUg
c3RhdGljIGJvb2wgaGFzQWxwaGEoRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkE4OgorICAgICAgICBj
YXNlIERhdGFGb3JtYXQ6OkExNkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QTMyRjoKKyAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QVI4
OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMTZGOgorICAgICAgICBjYXNlIERhdGFGb3Jt
YXQ6OlJBMzJGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE4OgorICAgICAgICBjYXNl
IERhdGFGb3JtYXQ6OkJHUkE4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSR0I4OgorICAg
ICAgICBjYXNlIERhdGFGb3JtYXQ6OkFCR1I4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJH
QkExNkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTMyRjoKKyAgICAgICAgY2FzZSBE
YXRhRm9ybWF0OjpSR0JBNDQ0NDoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBNTU1MToK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgYm9vbCBoYXNDb2xvcihEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTg6CisgICAgICAgIGNh
c2UgRGF0YUZvcm1hdDo6UkdCQTE2RjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBMzJG
OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dDo6UkdCMTZGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjMyRjoKKyAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0OjpCR1I4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkJHUkE4OgorICAg
ICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSR0I4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFC
R1I4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE1NTUxOgorICAgICAgICBjYXNlIERh
dGFGb3JtYXQ6OlJHQkE0NDQ0OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjU2NToKKyAg
ICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSODoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSMTZG
OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlIzMkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dDo6UkE4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMTZGOgorICAgICAgICBjYXNlIERh
dGFGb3JtYXQ6OlJBMzJGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSODoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm1hdCBpcyBv
bmUgb2YgdGhlIGZvcm1hdHMgZnJvbSB0aGUgSW1hZ2VEYXRhIG9yIERPTSBlbGVtZW50cy4KKyAg
ICAvLyBUaGUgZm9ybWF0cyBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgUkdCQTguCisgICAgLy8g
VGhlIGZvcm1hdHMgZnJvbSBET00gZWxlbWVudHMgdmFyeSB3aXRoIEdyYXBoaWNzIHBvcnRzLiBJ
dCBjYW4gb25seSBiZSBSR0JBOCBvciBCR1JBOCBmb3Igbm9uLUNHIHBvcnQgd2hpbGUgYSBsaXR0
bGUgbW9yZSBmb3IgQ0cgcG9ydC4KKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNyY0Zv
cm1hdENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YShEYXRhRm9ybWF0IFNyY0Zvcm1hdCkK
KyAgICB7CisjaWYgVVNFKENHKQorI2lmIENQVShCSUdfRU5ESUFOKQorICAgIHJldHVybiBTcmNG
b3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFS
R0I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0I4CisgICAgICAgIHx8IFNyY0Zvcm1h
dCA9PSBEYXRhRm9ybWF0OjpSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFSOCB8fCBT
cmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkE4
OworI2Vsc2UKKyAgICAvLyBUaGF0IExJVFRMRV9FTkRJQU4gY2FzZSBoYXMgbW9yZSBwb3NzaWJs
ZSBmb3JtYXRzIHRoYW4gQklHX0VORElBTiBjYXNlIGlzIGJlY2F1c2Ugc29tZSBkZWNvZGVkIGlt
YWdlIGRhdGEgaXMgYWN0dWFsbHkgYmlnIGVuZGlhbgorICAgIC8vIGV2ZW4gb24gbGl0dGxlIGVu
ZGlhbiBhcmNoaXRlY3R1cmVzLgorICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6
QkdSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFCR1I4IHx8IFNyY0Zvcm1hdCA9PSBE
YXRhRm9ybWF0OjpCR1I4CisgICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0JB
OCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QVJHQjggfHwgU3JjRm9ybWF0ID09IERhdGFG
b3JtYXQ6OlJHQjgKKyAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlI4IHx8IFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBOAorICAgICAgICB8fCBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdDo6UkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBUjg7CisjZW5kaWYKKyNlbHNl
CisgICAgcmV0dXJuIFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpCR1JBOCB8fCBTcmNGb3JtYXQg
PT0gRGF0YUZvcm1hdDo6UkdCQTg7CisjZW5kaWYKKyAgICB9CisKKyAgICBzdHJ1Y3QgQWN0aXZl
SW5mbyB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBHQzNEZW51bSB0eXBlOworICAg
ICAgICBHQzNEaW50IHNpemU7CisgICAgfTsKKworICAgIEdyYXBoaWNzQ29udGV4dEdMKEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcywgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2Ny
ZWVuLCBHcmFwaGljc0NvbnRleHRHTCogc2hhcmVkQ29udGV4dCA9IG51bGxwdHIpOworICAgIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dEdMKCkgPSBkZWZhdWx0OworCisgICAgLy8gPT09PT09PT09
PSBXZWJHTCAxIGVudHJ5IHBvaW50cy4KKworICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJl
KEdDM0RlbnVtIHRleHR1cmUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoU2hhZGVyKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1
aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmlu
ZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZShH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBi
bHVlLCBHQzNEY2xhbXBmIGFscGhhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRXF1YXRp
b24oR0MzRGVudW0gbW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZEVxdWF0aW9uU2Vw
YXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwg
R0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpID0g
MDsKKworICAgIHZpcnR1YWwgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51
bSB0YXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2sp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNs
YW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCBzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNv
bG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBi
bHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxlU2hh
ZGVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRl
QnVmZmVyKCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVGcmFtZWJ1
ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUHJvZ3JhbSgp
ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCkg
PSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVudW0p
ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVGV4dHVyZSgpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhS
YW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHQzNE
ZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zm
c2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZs
dXNoKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZl
clRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVt
IHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCBsZXZlbCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkgPSAwOworCisgICAgdmlydHVhbCBi
b29sIGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGlu
ZGV4LCBBY3RpdmVJbmZvJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRBY3RpdmVVbmlmb3Jt
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0z
RE9iamVjdCogc2hhZGVycykgPSAwOworCisgICAgdmlydHVhbCBHQzNEaW50IGdldEF0dHJpYkxv
Y2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7CisKKyAgICAvLyBnZXRQYXJhbWV0ZXIKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQ2NCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvZ3JhbWl2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9v
bGVhbiogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgR0MzRGVudW0gZ2V0RXJyb3IoKSA9IDA7
CisKKyAgICAvLyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0g
MDsKKworICAgIC8vIGdldFByb2dyYW1QYXJhbWV0ZXIKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQ
cm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICAvLyBnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsK
KworICAgIC8vIGdldFNoYWRlclBhcmFtZXRlcgorICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJp
dihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsK
KworICAgIHZpcnR1YWwgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0g
c2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0MzRGludCogcmFuZ2UsIEdDM0Rp
bnQqIHByZWNpc2lvbikgPSAwOworCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0U2hhZGVyU291cmNl
KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIC8vIGdldFRleFBhcmFtZXRlcgorICAgIHZp
cnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFt
ZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9
IDA7CisKKyAgICAvLyBnZXRVbmlmb3JtCisgICAgdmlydHVhbCB2b2lkIGdldFVuaWZvcm1mdihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFs
dWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpID0gMDsKKworICAgIHZp
cnR1YWwgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lKSA9IDA7CisKKyAgICAvLyBnZXRWZXJ0ZXhBdHRyaWIKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFZlcnRleEF0dHJpYml2
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpID0gMDsKKwor
ICAgIHZpcnR1YWwgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBoaW50KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4g
aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4g
aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNG
cmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCBHQzNEYm9vbGVh
biBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xl
YW4gaXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0Mz
RGJvb2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0Mz
RGJvb2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgbGluZVdpZHRoKEdDM0RmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsaW5rUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBpeGVsU3RvcmVpKEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBvbHln
b25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJv
b2xlYW4gaW52ZXJ0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcm
IHN0cmluZykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1
bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0
ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCBy
ZWYsIEdDM0R1aW50IG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE1hc2soR0Mz
RHVpbnQgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRlKEdD
M0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RlbmNp
bE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51
bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RmbG9hdCBwYXJhbSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWks
IGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWkoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGludCB4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0x
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHkpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIGNvbnN0IEdDM0RpbnQqIHYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2ko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwg
Y29uc3QgR0MzRGludCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZs
b2F0IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1
bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQg
eiwgR0MzRGludCB3KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3Qg
R0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMmYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCog
dmFsdWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0
KiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwg
Y29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhB
dHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUs
IEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zm
c2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0Mz
RGVudW0gdXNhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0
YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2Fn
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCogZGF0YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCB2b2lkKiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgdGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBw
aXhlbHMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1j
b3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNl
dCwgR0MzRHNpemVpIHByaW1jb3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRy
aWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSA9IDA7CisKKyAgICBH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgY29udGV4dEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJzOyB9CisgICAgdm9pZCBzZXRDb250ZXh0QXR0cmlidXRlcyhjb25zdCBHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzKSB7IG1fYXR0cnMgPSBhdHRyczsgfQorCisg
ICAgLy8gVmVydGV4QXJyYXlPamVjdCBjYWxscworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVWZXJ0ZXhBcnJheSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4
QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNW
ZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRW
ZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyNpZiBVU0UoT1BFTkdMKSAmJiBF
TkFCTEUoV0VCR0wyKQorICAgIHZpcnR1YWwgdm9pZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0Mz
RHVpbnQpID0gMDsKKyNlbmRpZgorCisgICAgLy8gU3VwcG9ydCBmb3IgZXh0ZW5zaW9ucy4gUmV0
dXJucyBhIG5vbi1udWxsIG9iamVjdCwgdGhvdWdoIG5vdAorICAgIC8vIGFsbCBtZXRob2RzIGl0
IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQgb24gdGhlCisgICAgLy8gY3Vy
cmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNHTDo6c3VwcG9ydHMoKSB0bworICAg
IC8vIGRldGVybWluZSB0aGlzLgorICAgIHZpcnR1YWwgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNp
b25zKCkgPSAwOworCisgICAgLy8gPT09PT09PT09PSBXZWJHTCAyIGVudHJ5IHBvaW50cy4KKwor
ICAgIHZpcnR1YWwgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2VzcykgPSAw
OworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gdW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJn
ZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRw
dHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0cikgPSAwOworCisgICAgLy8gZ2V0SW50ZXJuYWxG
b3JtYXRQYXJhbWV0ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZXJuYWxmb3JtYXRpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RHNpemVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXpl
aSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdGV4U3RvcmFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0
ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6
ZWkgZGVwdGgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRBY3RpdmVVbmlmb3JtcyhQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRp
Y2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+JiBwYXJhbXMpID0gMDsKKworICAg
IC8vID09PT09PT09PT0gTm9uLVdlYkdMIGJhc2VkIGVudHJ5IHBvaW50cy4KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBlKEdDM0RlbnVtKTsKKyAgICBz
dGF0aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0MzRGVudW0pOworCisgICAgc3Rh
dGljIHVpbnQ4X3QgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQzNEZW51bSk7CisKKyAgICBEZXN0
aW5hdGlvbiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKwor
cHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgbV9hdHRyczsKKyAgICBE
ZXN0aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTkyNWEzNWNl
ZjNjOTM0ODhmODgwNGNlMzdiM2UzODI5YzMyZDM4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5o
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNl
IHsKKyAgICBEZWZhdWx0LAorICAgIExvd1Bvd2VyLAorICAgIEhpZ2hQZXJmb3JtYW5jZQorfTsK
Kworc3RydWN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyB7CisgICAgLy8gV2ViR0xDb250
ZXh0QXR0cmlidXRlcworICAgIGJvb2wgYWxwaGEgeyB0cnVlIH07CisgICAgYm9vbCBkZXB0aCB7
IHRydWUgfTsKKyAgICBib29sIHN0ZW5jaWwgeyBmYWxzZSB9OworICAgIGJvb2wgYW50aWFsaWFz
IHsgdHJ1ZSB9OworICAgIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhIHsgdHJ1ZSB9OworICAgIGJv
b2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHsgZmFsc2UgfTsKKyAgICBib29sIGZhaWxJZk1ham9y
UGVyZm9ybWFuY2VDYXZlYXQgeyBmYWxzZSB9OworICAgIHVzaW5nIFBvd2VyUHJlZmVyZW5jZSA9
IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOworICAgIFBvd2VyUHJlZmVyZW5jZSBw
b3dlclByZWZlcmVuY2UgeyBQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQgfTsKKworICAgIC8vIEFk
ZGl0aW9uYWwgYXR0cmlidXRlcy4KKyAgICBib29sIHNoYXJlUmVzb3VyY2VzIHsgdHJ1ZSB9Owor
ICAgIGJvb2wgaXNXZWJHTDIgeyBmYWxzZSB9OworICAgIGJvb2wgbm9FeHRlbnNpb25zIHsgZmFs
c2UgfTsKKyAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvIHsgMSB9OworICAgIFBvd2VyUHJlZmVy
ZW5jZSBpbml0aWFsUG93ZXJQcmVmZXJlbmNlIHsgUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0IH07
Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHAKaW5kZXggMGU4ZGFmMWVhOTU1ODljNTM0MGUwMjZlNDQ2ODU1YTUxMTJiYzA1Ni4u
MWEwZjgxNmZkYTgwMzAyNzk2YWEzYTNlNTliNmRmOTE5OTVkMDNjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMTkxLDcgKzE5
MSw3IEBAIFBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QK
ICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rl
bnVtLCBib29sLCBib29sKQorYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJl
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdD
M0RlbnVtLCBib29sLCBib29sKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDExODgwY2ExODU2
ODJlMzQwYTA1ODVkZjFlMDFlNTE1OTlkMDIxNTQuLjUzMzNjZjRlYzIyOGY5ZGIzNzNmMjU4ZTZi
OWM3YjllZTRmYzhhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBJbWFnZTsKIGNs
YXNzIEltYWdlRGF0YTsKIGNsYXNzIEludFBvaW50OwpAQCAtMTM0LDcgKzEzNCw3IEBAIHB1Ymxp
YzoKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhv
ZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCiAgICAgLy8gd2l0aCB0
ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5
cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBH
QzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpOworICAgIGJv
b2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0MzRGVu
dW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKTsKIAogICAgIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGlj
aCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgogICAgIHN0YXRpYyBi
b29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IDYzNTU3ODI0YWYz
NmIzNDBmYzJhM2I5YTA5YzAxYWU1MTVkYzVlMWMuLjBhMzUzY2JjMjE5OGE3YWVjZTI5ZTI5MzQz
N2ZkN2FhNjQ3ZjlmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKQEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIE1lZGlhUGxheWVyOjpw
YWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQmIHAsIGNvbnN0IEZsb2F0
UmVjdAogICAgIG1fcHJpdmF0ZS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQocCwgcik7CiB9
CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBm
bGlwWSkKK2Jvb2wgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0
dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9y
bWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBmbGlwWSkKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5jb3B5VmlkZW9UZXh0dXJl
VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGV4dHVyZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKaW5kZXggMGM3
ZGQ5YjYwZTZlMDBlY2U5YTkwNWIzZDA0ODBlMzM2MDY4YWJhOS4uNzYxZTUxZGZlNWY4N2ViYzI4
OTFiMzM0OTEyMWY5NzIxYjk1YzkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEF1ZGlvU291cmNlUHJvdmlkZXI7CiBjbGFzcyBDRE1JbnN0YW5jZTsKIGNsYXNz
IENhY2hlZFJlc291cmNlTG9hZGVyOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIElu
YmFuZFRleHRUcmFja1ByaXZhdGU7CiBjbGFzcyBMZWdhY3lDRE1TZXNzaW9uQ2xpZW50OwpAQCAt
NDIxLDcgKzQyMSw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZGVzdGluYXRpb24gdGV4dHVyZSBt
YXkgbmVlZCB0byBiZSByZXNpemVkIHRvIHRvIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBzb3VyY2Ug
dGV4dHVyZSBvciByZS1kZWZpbmVkIHRvIHRoZSByZXF1aXJlZCBpbnRlcm5hbEZvcm1hdC4KICAg
ICAvLyBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBi
ZSBSR0Igb3IgUkdCQSwgdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2ZWwgc2hv
dWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KIAotICAgIGJvb2wgY29w
eVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJl
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGZsaXBZKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
Rm9yQ3VycmVudFRpbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAppbmRleCA2MmM3ZGQwMmZiZjNmYjFmYWE4MzUz
MWUyNzMwZmYxZTUzMjUyN2EzLi5iMDAzYjFjMWE3YjBkNjg4MTgzMzMwYTFmMDUwZDM0YmYzYjg2
ZDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllclByaXZhdGUuaApAQCAtMTU3LDcgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4
dCYgYywgY29uc3QgRmxvYXRSZWN0JiByKSB7IHBhaW50KGMsIHIpOyB9Ci0gICAgdmlydHVhbCBi
b29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCos
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0s
IEdDM0RlbnVtLCBib29sLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKSB7IHJldHVybiBudWxs
cHRyOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9h
ZCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGlt
cy5jcHAKaW5kZXggZjc5NzZlNjFkZDg1MjQ2ZDJmNGUyNzYyYzhjMTg3ZTA5OTgwNGRjNS4uNTI4
MGJlZjFlNzMxM2RmNWY2ZDIyNGIzZDZkNTgxODUxZWE3NzJlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNwcApAQCAtMTcsNyArMTcsNyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF8zRCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKIAogI2RlZmluZSBESVNBQkxF
X1NISU1TCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKQEAgLTIzMCw0ICsyMzAsNCBAQCBib29s
IGluaXRpYWxpemVPcGVuR0xTaGltcygpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQorI2VuZGlmIC8vIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwZWE0MGNiOTA5OTYyMTcyMmQ2MjI3MzVmYmZhOGQ0MzQwZjc4YjNhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xFLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJF
eHRlbnNpb25zM0RBTkdMRS5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQot
I2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+Ci0jaW5jbHVk
ZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfM18wX2F1dG9nZW4uaD4KLS8vIFNraXAgdGhlIGlu
Y2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZvciBub3cu
Ci0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNkZWZpbmUgR0xfQU5HTEVfZXhw
bGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7Ci0jaW5jbHVk
ZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLQotLy8gTm90ZTogdGhp
cyBmaWxlIGNhbid0IGJlIGNvbXBpbGVkIGluIHRoZSBzYW1lIHVuaWZpZWQgc291cmNlIGZpbGUK
LS8vIGFzIG90aGVycyB3aGljaCBpbmNsdWRlIHRoZSBzeXN0ZW0ncyBPcGVuR0wgaGVhZGVycy4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1FeHRlbnNpb25zM0RBTkdMRTo6RXh0ZW5zaW9uczNE
QU5HTEUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGJvb2wgdXNlSW5kZXhlZEdldFN0cmlu
ZykKLSAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQotICAgICwg
bV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lzTlZJRElBKGZhbHNlKQotICAgICwgbV9pc0FN
RChmYWxzZSkKLSAgICAsIG1faXNJbnRlbChmYWxzZSkKLSAgICAsIG1faXNJbWFnaW5hdGlvbihm
YWxzZSkKLSAgICAsIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24oZmFsc2UpCi0g
ICAgLCBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZShmYWxzZSkKLSAgICAs
IG1fdXNlSW5kZXhlZEdldFN0cmluZyh1c2VJbmRleGVkR2V0U3RyaW5nKQotewotICAgIC8vIEZJ
WE1FOiBpZGVhbGx5LCByZW1vdmUgdGhpcyBpbml0aWFsaXphdGlvbiBhbHRvZ2V0aGVyLiBBTkdM
RQotICAgIC8vIHN1YnN1bWVzIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgZ3JhcGhpY3MgZHJpdmVy
IHdvcmthcm91bmRzLgotICAgIG1fdmVuZG9yID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGdsOjpHZXRTdHJpbmcoR0xfVkVORE9SKSkpOwotICAgIG1fcmVuZGVyZXIgPSBT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9SRU5E
RVJFUikpKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHZlbmRvckNvbXBvbmVudHMgPSBtX3ZlbmRv
ci5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcgJyk7Ci0gICAgaWYgKHZlbmRvckNv
bXBvbmVudHMuY29udGFpbnMoIm52aWRpYSIpKQotICAgICAgICBtX2lzTlZJRElBID0gdHJ1ZTsK
LSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiYXRpIikgfHwgdmVuZG9yQ29tcG9u
ZW50cy5jb250YWlucygiYW1kIikpCi0gICAgICAgIG1faXNBTUQgPSB0cnVlOwotICAgIGlmICh2
ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbnRlbCIpKQotICAgICAgICBtX2lzSW50ZWwgPSB0
cnVlOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbWFnaW5hdGlvbiIpKQot
ICAgICAgICBtX2lzSW1hZ2luYXRpb24gPSB0cnVlOwotfQotCi1FeHRlbnNpb25zM0RBTkdMRTo6
fkV4dGVuc2lvbnMzREFOR0xFKCkgPSBkZWZhdWx0OwotCi1ib29sIEV4dGVuc2lvbnMzREFOR0xF
OjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFtX2luaXRpYWxpemVk
QXZhaWxhYmxlRXh0ZW5zaW9ucykKLSAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lv
bnMoKTsKLQotICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lvbihuYW1lKTsKLX0KLQotdm9pZCBF
eHRlbnNpb25zM0RBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpLgot
ICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAmJiAhbV9lbmFi
bGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lvbkFOR0xFKG5hbWUu
YXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBtX2VuYWJsZWRFeHRlbnNpb25zLmFkZChuYW1lKTsK
LSAgICB9Ci19Ci0KLWJvb2wgRXh0ZW5zaW9uczNEQU5HTEU6OmlzRW5hYmxlZChjb25zdCBTdHJp
bmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhu
YW1lKSB8fCBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOwotfQotCi1pbnQgRXh0
ZW5zaW9uczNEQU5HTEU6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotewotICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci19Ci0KLVN0cmluZyBFeHRlbnNpb25zM0RB
TkdMRTo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwotICAgIG1fY29udGV4dC0+Z2V0U2hh
ZGVyaXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAm
c291cmNlTGVuZ3RoKTsKLSAgICBpZiAoIXNvdXJjZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShzb3VyY2VMZW5ndGgpOyAvLyBH
TF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFIGluY2x1ZGVzIG51bGwgdGVy
bWluYXRpb24uCi0gICAgaW50IHJldHVybmVkTGVuZ3RoID0gMDsKLSAgICBnbDo6R2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlciwgc291cmNlTGVuZ3RoLCAmcmV0dXJuZWRMZW5n
dGgsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIXJldHVybmVkTGVuZ3RoKQotICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAvLyByZXR1cm5lZExlbmd0aCBkb2VzIG5vdCBpbmNsdWRl
IHRoZSBudWxsIHRlcm1pbmF0b3IuCi0gICAgQVNTRVJUKHJldHVybmVkTGVuZ3RoID09IHNvdXJj
ZUxlbmd0aCAtIDEpOwotICAgIHJldHVybiBTdHJpbmcobmFtZS5kYXRhKCksIHJldHVybmVkTGVu
Z3RoKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4
dGVuc2lvbnMoKQotewotICAgIGlmIChtX3VzZUluZGV4ZWRHZXRTdHJpbmcpIHsKLSAgICAgICAg
R0xpbnQgbnVtRXh0ZW5zaW9ucyA9IDA7Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9OVU1f
RVhURU5TSU9OUywgJm51bUV4dGVuc2lvbnMpOwotICAgICAgICBmb3IgKEdMaW50IGkgPSAwOyBp
IDwgbnVtRXh0ZW5zaW9uczsgKytpKQotICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25z
LmFkZChnbDo6R2V0U3RyaW5naShHTF9FWFRFTlNJT05TLCBpKSk7Ci0gICAgICAgIGdsOjpHZXRJ
bnRlZ2VydihHTF9OVU1fUkVRVUVTVEFCTEVfRVhURU5TSU9OU19BTkdMRSwgJm51bUV4dGVuc2lv
bnMpOwotICAgICAgICBmb3IgKEdMaW50IGkgPSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsgKytpKQot
ICAgICAgICAgICAgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuYWRkKGdsOjpHZXRTdHJpbmdpKEdM
X1JFUVVFU1RBQkxFX0VYVEVOU0lPTlNfQU5HTEUsIGkpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICAgICAgZm9y
IChhdXRvJiBleHRlbnNpb24gOiBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCcgJykpCi0gICAgICAg
ICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGV4dGVuc2lvbik7Ci0gICAgICAgIGV4dGVu
c2lvbnNTdHJpbmcgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6Okdl
dFN0cmluZyhHTF9SRVFVRVNUQUJMRV9FWFRFTlNJT05TX0FOR0xFKSkpOwotICAgICAgICBmb3Ig
KGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoJyAnKSkKLSAgICAgICAg
ICAgIG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmFkZChleHRlbnNpb24pOwotICAgIH0KLSAgICBt
X2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IHRydWU7Ci19Ci0KLXZvaWQgRXh0ZW5z
aW9uczNEQU5HTEU6OnJlYWRuUGl4ZWxzRVhUKGludCwgaW50LCBHQzNEc2l6ZWksIEdDM0RzaXpl
aSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIHZvaWQgKikKLXsKLSAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBF
eHRlbnNpb25zM0RBTkdMRTo6Z2V0blVuaWZvcm1mdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6
ZWksIGZsb2F0ICopCi17Ci0gICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmdldG5Vbmlmb3Jt
aXZFWFQoR0MzRHVpbnQsIGludCwgR0MzRHNpemVpLCBpbnQgKikKLXsKLSAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRl
bnNpb25zM0RBTkdMRTo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxv
bmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEs
IGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCi17
Ci0gICAgLy8gRklYTUU6IGNvbnNpZGVyIGFkZGluZyBzdXBwb3J0IGZvciBBUFBMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZS4KLSAgICBnbDo6QmxpdEZyYW1lYnVmZmVyQU5HTEUoc3JjWDAsIHNy
Y1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0
ZXIpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQpCi17Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFO
R0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci1QbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzREFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQg
YXJyYXkgPSAwOwotICAgIGdsOjpHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKLSAgICBy
ZXR1cm4gYXJyYXk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmRlbGV0ZVZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bDo6RGVsZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7Ci19Ci0KLUdDM0Rib29sZWFuIEV4
dGVuc2lvbnMzREFOR0xFOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkp
Ci17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJy
YXlPRVMoYXJyYXkpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpiaW5kVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi12
b2lkIEV4dGVuc2lvbnMzREFOR0xFOjppbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcm
KQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VY
VF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KLSAgICByZXR1cm47Ci19Ci0KLXZvaWQgRXh0
ZW5zaW9uczNEQU5HTEU6OnB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19t
YXJrZXIgaW4gc3VwcG9ydHMoKS4KLSAgICByZXR1cm47Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNE
QU5HTEU6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygp
LgotICAgIHJldHVybjsKLX0KLQotYm9vbCBFeHRlbnNpb25zM0RBTkdMRTo6c3VwcG9ydHNFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMobmFtZSkgfHwgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
bmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmRyYXdCdWZmZXJzRVhUKEdDM0Rz
aXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVmcykKLXsKLSAgICBnbDo6RHJhd0J1ZmZlcnNFWFQo
biwgYnVmcyk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KQotewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNl
ZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9u
ZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwg
Y291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjp2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQotewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0KLVN0cmluZyBFeHRlbnNpb25zM0RB
TkdMRTo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhU
XzNEKSAmJiBVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDY0NTg1OTUzZjRlNWY5ZGE4Y2Q1N2VjZTk5Y2U5MzA1NzY1ZTc5OC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
RXh0ZW5zaW9uczNEQU5HTEUgOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8g
YmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KLSAg
ICBFeHRlbnNpb25zM0RBTkdMRShHcmFwaGljc0NvbnRleHQzRCosIGJvb2wgdXNlSW5kZXhlZEdl
dFN0cmluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RBTkdMRSgpOwotCi0g
ICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCi0gICAgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
aW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSBvdmVycmlkZTsKLQotICAgIFBsYXRmb3Jt
M0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0
ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIEdDM0Rib29s
ZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHBv
cEdyb3VwTWFya2VyRVhUKHZvaWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0J1ZmZlcnNFWFQo
R0MzRHNpemVpLCBjb25zdCBHQzNEZW51bSopIG92ZXJyaWRlOwotCi0gICAgU3RyaW5nIGdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3Jj
WDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcg
ZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBH
QzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKLQotICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gdXNl
cyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKLSAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGlu
dCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxv
Y2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaXNOVklE
SUEoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzTlZJRElBOyB9Ci0gICAgYm9vbCBpc0FNRCgpIG92
ZXJyaWRlIHsgcmV0dXJuIG1faXNBTUQ7IH0KLSAgICBib29sIGlzSW50ZWwoKSBvdmVycmlkZSB7
IHJldHVybiBtX2lzSW50ZWw7IH0KLSAgICBib29sIGlzSW1hZ2luYXRpb24oKSBvdmVycmlkZSB7
IHJldHVybiBtX2lzSW1hZ2luYXRpb247IH0KLSAgICBTdHJpbmcgdmVuZG9yKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV92ZW5kb3I7IH0KLQotICAgIGJvb2wgcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25F
bXVsYXRpb24oKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11
bGF0aW9uOyB9Ci0gICAgYm9vbCByZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUo
KSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6
ZTsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RGOjpT
dHJpbmcmKTsKLSAgICBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpOwotCi0gICAgdmlydHVhbCB2b2lk
IGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7Ci0gICAgYm9vbCBtX2luaXRpYWxpemVk
QXZhaWxhYmxlRXh0ZW5zaW9uczsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRl
bnNpb25zOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9uczsKLSAg
ICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9uczsKLQotICAgIC8vIFdlYWsgcG9p
bnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNELgotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBt
X2NvbnRleHQ7Ci0KLSAgICBib29sIG1faXNOVklESUE7Ci0gICAgYm9vbCBtX2lzQU1EOwotICAg
IGJvb2wgbV9pc0ludGVsOwotICAgIGJvb2wgbV9pc0ltYWdpbmF0aW9uOwotICAgIGJvb2wgbV9y
ZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbjsKLSAgICBib29sIG1fcmVxdWlyZXNSZXN0
cmljdGVkTWF4aW11bVRleHR1cmVTaXplOwotCi0gICAgYm9vbCBtX3VzZUluZGV4ZWRHZXRTdHJp
bmcgeyBmYWxzZSB9OwotCi0gICAgU3RyaW5nIG1fdmVuZG9yOwotICAgIFN0cmluZyBtX3JlbmRl
cmVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg3NTEzYWJlZDk4YmY0ZTc0MjQ1OTA5ZTIzZjY0MTY2MGU2NjU5NzgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9F
eHRlbnNpb25zR0xBTkdMRS5jcHAKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKEFOR0xF
KQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIgorCisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8w
X2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18zXzBfYXV0b2dl
bi5oPgorLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBl
bnRyeSBwb2ludHMgZm9yIG5vdy4KKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAor
I2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdM
ZWdsQ29udGV4dDsKKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dl
bi5oPgorCisvLyBOb3RlOiB0aGlzIGZpbGUgY2FuJ3QgYmUgY29tcGlsZWQgaW4gdGhlIHNhbWUg
dW5pZmllZCBzb3VyY2UgZmlsZQorLy8gYXMgb3RoZXJzIHdoaWNoIGluY2x1ZGUgdGhlIHN5c3Rl
bSdzIE9wZW5HTCBoZWFkZXJzLgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnNH
TEFOR0xFOjpFeHRlbnNpb25zR0xBTkdMRShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4
dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJs
ZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faXNO
VklESUEoZmFsc2UpCisgICAgLCBtX2lzQU1EKGZhbHNlKQorICAgICwgbV9pc0ludGVsKGZhbHNl
KQorICAgICwgbV9pc0ltYWdpbmF0aW9uKGZhbHNlKQorICAgICwgbV9yZXF1aXJlc0J1aWx0SW5G
dW5jdGlvbkVtdWxhdGlvbihmYWxzZSkKKyAgICAsIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11
bVRleHR1cmVTaXplKGZhbHNlKQorICAgICwgbV91c2VJbmRleGVkR2V0U3RyaW5nKHVzZUluZGV4
ZWRHZXRTdHJpbmcpCit7CisgICAgLy8gRklYTUU6IGlkZWFsbHksIHJlbW92ZSB0aGlzIGluaXRp
YWxpemF0aW9uIGFsdG9nZXRoZXIuIEFOR0xFCisgICAgLy8gc3Vic3VtZXMgdGhlIHJlc3BvbnNp
YmlsaXR5IGZvciBncmFwaGljcyBkcml2ZXIgd29ya2Fyb3VuZHMuCisgICAgbV92ZW5kb3IgPSBT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9WRU5E
T1IpKSk7CisgICAgbV9yZW5kZXJlciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihnbDo6R2V0U3RyaW5nKEdMX1JFTkRFUkVSKSkpOworCisgICAgVmVjdG9yPFN0cmluZz4g
dmVuZG9yQ29tcG9uZW50cyA9IG1fdmVuZG9yLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3Bs
aXQoJyAnKTsKKyAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygibnZpZGlhIikpCisg
ICAgICAgIG1faXNOVklESUEgPSB0cnVlOworICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRh
aW5zKCJhdGkiKSB8fCB2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJhbWQiKSkKKyAgICAgICAg
bV9pc0FNRCA9IHRydWU7CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImludGVs
IikpCisgICAgICAgIG1faXNJbnRlbCA9IHRydWU7CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMu
Y29udGFpbnMoImltYWdpbmF0aW9uIikpCisgICAgICAgIG1faXNJbWFnaW5hdGlvbiA9IHRydWU7
Cit9CisKK0V4dGVuc2lvbnNHTEFOR0xFOjp+RXh0ZW5zaW9uc0dMQU5HTEUoKSA9IGRlZmF1bHQ7
CisKK2Jvb2wgRXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKQorICAgICAgICBp
bml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworCisgICAgcmV0dXJuIHN1cHBvcnRzRXh0
ZW5zaW9uKG5hbWUpOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVk
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAo
aWYgbm90IGVuYWJsZWQgYWxyZWFkeSkuCisgICAgaWYgKG1fcmVxdWVzdGFibGVFeHRlbnNpb25z
LmNvbnRhaW5zKG5hbWUpICYmICFtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7
CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIGdsOjpS
ZXF1ZXN0RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIG1fZW5h
YmxlZEV4dGVuc2lvbnMuYWRkKG5hbWUpOworICAgIH0KK30KKworYm9vbCBFeHRlbnNpb25zR0xB
TkdMRTo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpIHx8IG1fZW5hYmxlZEV4dGVuc2lvbnMuY29u
dGFpbnMobmFtZSk7Cit9CisKK2ludCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsK
K30KKworU3RyaW5nIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgaW50IHNvdXJjZUxlbmd0aCA9
IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdMX1RSQU5TTEFURURfU0hB
REVSX1NPVVJDRV9MRU5HVEhfQU5HTEUsICZzb3VyY2VMZW5ndGgpOworICAgIGlmICghc291cmNl
TGVuZ3RoKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBWZWN0b3I8R0xjaGFy
PiBuYW1lKHNvdXJjZUxlbmd0aCk7IC8vIEdMX1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5H
VEhfQU5HTEUgaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBpbnQgcmV0dXJuZWRMZW5n
dGggPSAwOworICAgIGdsOjpHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyLCBz
b3VyY2VMZW5ndGgsICZyZXR1cm5lZExlbmd0aCwgbmFtZS5kYXRhKCkpOworICAgIGlmICghcmV0
dXJuZWRMZW5ndGgpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIC8vIHJldHVy
bmVkTGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIG51bGwgdGVybWluYXRvci4KKyAgICBBU1NF
UlQocmV0dXJuZWRMZW5ndGggPT0gc291cmNlTGVuZ3RoIC0gMSk7CisgICAgcmV0dXJuIFN0cmlu
ZyhuYW1lLmRhdGEoKSwgcmV0dXJuZWRMZW5ndGgpOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAgaWYgKG1fdXNlSW5k
ZXhlZEdldFN0cmluZykgeworICAgICAgICBHTGludCBudW1FeHRlbnNpb25zID0gMDsKKyAgICAg
ICAgZ2w6OkdldEludGVnZXJ2KEdMX05VTV9FWFRFTlNJT05TLCAmbnVtRXh0ZW5zaW9ucyk7Cisg
ICAgICAgIGZvciAoR0xpbnQgaSA9IDA7IGkgPCBudW1FeHRlbnNpb25zOyArK2kpCisgICAgICAg
ICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGdsOjpHZXRTdHJpbmdpKEdMX0VYVEVOU0lP
TlMsIGkpKTsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX05VTV9SRVFVRVNUQUJMRV9FWFRF
TlNJT05TX0FOR0xFLCAmbnVtRXh0ZW5zaW9ucyk7CisgICAgICAgIGZvciAoR0xpbnQgaSA9IDA7
IGkgPCBudW1FeHRlbnNpb25zOyArK2kpCisgICAgICAgICAgICBtX3JlcXVlc3RhYmxlRXh0ZW5z
aW9ucy5hZGQoZ2w6OkdldFN0cmluZ2koR0xfUkVRVUVTVEFCTEVfRVhURU5TSU9OU19BTkdMRSwg
aSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gZ2V0
RXh0ZW5zaW9ucygpOworICAgICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNT
dHJpbmcuc3BsaXQoJyAnKSkKKyAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQo
ZXh0ZW5zaW9uKTsKKyAgICAgICAgZXh0ZW5zaW9uc1N0cmluZyA9IFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdMX1JFUVVFU1RBQkxFX0VYVEVOU0lP
TlNfQU5HTEUpKSk7CisgICAgICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogZXh0ZW5zaW9uc1N0
cmluZy5zcGxpdCgnICcpKQorICAgICAgICAgICAgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuYWRk
KGV4dGVuc2lvbik7CisgICAgfQorICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
ID0gdHJ1ZTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZG5QaXhlbHNFWFQoaW50
LCBpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXpl
aSwgdm9pZCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2
RVhUKEdDM0R1aW50LCBpbnQsIEdDM0RzaXplaSwgZmxvYXQgKikKK3sKKyAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWks
IGludCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIo
bG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RY
MCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNr
LCB1bnNpZ25lZCBsb25nIGZpbHRlcikKK3sKKyAgICAvLyBGSVhNRTogY29uc2lkZXIgYWRkaW5n
IHN1cHBvcnQgZm9yIEFQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlLgorICAgIGdsOjpCbGl0
RnJhbWVidWZmZXJBTkdMRShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkw
LCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBnbDo6UmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uc0dM
QU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBhcnJheSA9IDA7CisgICAgZ2w6OkdlblZlcnRleEFy
cmF5c09FUygxLCAmYXJyYXkpOworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBFeHRlbnNp
b25zR0xBTkdMRTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkK
K3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFy
cmF5KTsKK30KKworR0MzRGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICBy
ZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK3ZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQor
eworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkJpbmRWZXJ0
ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6Omluc2VydEV2
ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0
aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgor
ICAgIHJldHVybjsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cHVzaEdyb3VwTWFya2Vy
RVhUKGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0
aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgorICAgIHJldHVy
bjsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cG9wR3JvdXBNYXJrZXJFWFQodm9pZCkK
K3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRf
ZGVidWdfbWFya2VyIGluIHN1cHBvcnRzKCkuCisgICAgcmV0dXJuOworfQorCitib29sIEV4dGVu
c2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSB8fCBtX3JlcXVl
c3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6ZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpIG4sIGNvbnN0IEdDM0RlbnVtKiBidWZzKQor
eworICAgIGdsOjpEcmF3QnVmZmVyc0VYVChuLCBidWZzKTsKK30KKwordm9pZCBFeHRlbnNpb25z
R0xBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkK
K3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEcmF3RWxl
bWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxH
THZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5k
ZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsK
K30KKworU3RyaW5nIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmco
R0xfRVhURU5TSU9OUykpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xF
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xB
TkdMRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjExMTRkNDhmNzhmN2M3MzlmNDdkOTE2NjhhMDhmYzZkNmYyNjMw
NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lvbnNHTEFOR0xFIDogcHVibGljIEV4
dGVuc2lvbnNHTCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
Ly8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMuCisgICAgRXh0ZW5zaW9uc0dMQU5HTEUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqLCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcgPSBmYWxzZSk7
CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dMQU5HTEUoKTsKKworICAgIC8vIEV4dGVuc2lvbnNH
TCBtZXRob2RzLgorICAgIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIGJvb2wg
aXNFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIGludCBnZXRHcmFwaGljc1Jl
c2V0U3RhdHVzQVJCKCkgb3ZlcnJpZGU7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZl
cnRleEFycmF5T0VTKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJr
ZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJF
WFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2
b2lkKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3Qg
R0MzRGVudW0qKSBvdmVycmlkZTsKKworICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291
cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGJsaXRGcmFt
ZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBs
b25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBs
b25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdB
cnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNv
dW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdFbGVtZW50
c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOworICAgIHZv
aWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikg
b3ZlcnJpZGU7CisKKyAgICAvLyBFWFQgUm9idXN0bmVzcyAtIHVzZXMgZ2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpCisgICAgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkgb3ZlcnJpZGU7CisgICAgdm9pZCBn
ZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0blVuaWZvcm1p
dkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBp
bnQgKnBhcmFtcykgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzTlZJRElBKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9pc05WSURJQTsgfQorICAgIGJvb2wgaXNBTUQoKSBvdmVycmlkZSB7IHJldHVybiBt
X2lzQU1EOyB9CisgICAgYm9vbCBpc0ludGVsKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0ludGVs
OyB9CisgICAgYm9vbCBpc0ltYWdpbmF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0ltYWdp
bmF0aW9uOyB9CisgICAgU3RyaW5nIHZlbmRvcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVuZG9y
OyB9CisKKyAgICBib29sIHJlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbjsgfQorICAgIGJv
b2wgcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemU7IH0KKworcHJpdmF0ZToK
KyAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgU3Ry
aW5nIGdldEV4dGVuc2lvbnMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxh
YmxlRXh0ZW5zaW9ucygpOworICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lv
bnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBIYXNo
U2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+
IG1fZW5hYmxlZEV4dGVuc2lvbnM7CisKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTC4KKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogbV9jb250
ZXh0OworCisgICAgYm9vbCBtX2lzTlZJRElBOworICAgIGJvb2wgbV9pc0FNRDsKKyAgICBib29s
IG1faXNJbnRlbDsKKyAgICBib29sIG1faXNJbWFnaW5hdGlvbjsKKyAgICBib29sIG1fcmVxdWly
ZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247CisgICAgYm9vbCBtX3JlcXVpcmVzUmVzdHJpY3Rl
ZE1heGltdW1UZXh0dXJlU2l6ZTsKKworICAgIGJvb2wgbV91c2VJbmRleGVkR2V0U3RyaW5nIHsg
ZmFsc2UgfTsKKworICAgIFN0cmluZyBtX3ZlbmRvcjsKKyAgICBTdHJpbmcgbV9yZW5kZXJlcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdM
RS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNDVhOWY0NWMwZTJhMjI0YmM4
MmVmMjY3NGUyMTg3YmZhYjRjOTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhp
Y3NDb250ZXh0M0RBTkdMRS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODM3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKEFO
R0xFKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCi0jZW5kaWYKLSNpbmNs
dWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJUZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRl
IDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkU3BlY2lmaWMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotLy8gU2tpcCB0aGUgaW5jbHVz
aW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KLSNk
ZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNp
dF9jb250ZXh0X2dsZXMxCi10eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKLSNpbmNsdWRlIDxB
TkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5oPgotI2luY2x1ZGUgPEFOR0xFL2Vu
dHJ5X3BvaW50c19nbGVzXzNfMF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9p
bnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4KLSNpbmNs
dWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLQotLy8gTm90ZTogdGhpcyBmaWxlIGNhbid0IGJl
IGNvbXBpbGVkIGluIHRoZSBzYW1lIHVuaWZpZWQgc291cmNlIGZpbGUKLS8vIGFzIG90aGVycyB3
aGljaCBpbmNsdWRlIHRoZSBzeXN0ZW0ncyBPcGVuR0wgaGVhZGVycy4KLQotLy8gVGhpcyBvbmUg
ZGVmaW5pdGlvbiBzaG9ydC1jaXJjdWl0cyB0aGUgbmVlZCBmb3IgZ2wyZXh0LmgsIHdoaWNoCi0v
LyB3b3VsZCBuZWVkIG1vcmUgd29yayB0byBiZSBpbmNsdWRlZCBmcm9tIFdlYkNvcmUuCi0jZGVm
aW5lIEdMX01BWF9TQU1QTEVTX0VYVCAweDhENTcKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
MF9FWFQgMHg4Q0UwCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCAweDhENDAKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb25OYW1lID0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCI7Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotI2lmIFBMQVRG
T1JNKE1BQykKLXN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0
aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIC8vIFdlIGNhbiBh
c3N1bWUgdGhpcyBkb2Vzbid0IG92ZXJmbG93IGJlY2F1c2UgdGhlIGNhbGxpbmcgZnVuY3Rpb25z
Ci0gICAgLy8gdXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KLSAgICBpbnQgdG90YWxCeXRlcyA9IHdp
ZHRoICogaGVpZ2h0ICogNDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkKLSAgICAgICAgcGl4ZWxzW2kgKyAzXSA9IDI1NTsKLX0KLSNlbmRpZgotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMp
Ci17Ci0gICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2ZSBhIGJ1ZyB3aGVyZSBjYWxsaW5nIHJlYWRQ
aXhlbHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3cm9uZyB2YWx1ZXMgZm9yIHRoZSBhbHBoYSBj
aGFubmVsIHdoZW4gdGhlIGFscGhhIGlzIG9mZiBmb3IgdGhlIGNvbnRleHQuCi0gICAgZ2w6OlJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
cGl4ZWxzKTsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAg
ICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5y
b3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBzcmMuZGF0YSA9IHBpeGVsczsKLQotICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LndpZHRo
ID0gd2lkdGg7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEg
PSBwaXhlbHM7Ci0KLSAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JB
LgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdl
UGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKLSNlbHNlCi0gICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dh
cChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMp
Ci0gICAgaWYgKCFjb250ZXh0QXR0cmlidXRlcygpLmFscGhhKQotICAgICAgICB3aXBlQWxwaGFD
aGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwotI2VuZGlmCi19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCi17Ci0gICAgdmFsaWRh
dGVEZXB0aFN0ZW5jaWwocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7Ci19Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCi17
Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgY29uc3QgaW50IHdp
ZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgp
OwotICAgIEdMdWludCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSAw
OwotICAgIGlmIChhdHRycy5hbHBoYSkgewotICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQg
PSBHTF9SR0JBODsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7Ci0gICAgICAgIGNvbG9y
Rm9ybWF0ID0gR0xfUkdCOwotICAgIH0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5k
ZXB0aCkgewotICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNp
bCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgICAgICAvLyBTZWUgR3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLQotICAgICAgICBFeHRlbnNpb25zM0QmIGV4
dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0
aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgotICAgICAgICBpZiAoZXh0ZW5zaW9u
cy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25OYW1lKSkKLSAgICAgICAgICAg
IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xf
REVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgfQotCi0gICAgLy8gUmVzaXplIG11bHRpc2FtcGxlIEZC
Ty4KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIEdMaW50IG1heFNhbXBsZUNv
dW50OwotICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfQU5HTEUsICZtYXhT
YW1wbGVDb3VudCk7Ci0gICAgICAgIC8vIFVzaW5nIG1vcmUgdGhhbiA0IHNhbXBsZXMgaXMgc2xv
dyBvbiBzb21lIGhhcmR3YXJlIGFuZCBpcyB1bmxpa2VseSB0bwotICAgICAgICAvLyBwcm9kdWNl
IGEgc2lnbmlmaWNhbnRseSBiZXR0ZXIgcmVzdWx0LgotICAgICAgICBHTGludCBzYW1wbGVDb3Vu
dCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIGdsOjpCaW5k
UmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
TF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRo
KSB7Ci0gICAgICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgZ2V0RXh0ZW5zaW9u
cygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBs
ZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAg
ICAgICAgICAvLyBXZWJHTCAxLjAncyBydWxlcyBzdGF0ZSB0aGF0IGNvbWJpbmVkIGRlcHRoL3N0
ZW5jaWwgcmVuZGVyYnVmZmVycwotICAgICAgICAgICAgLy8gaGF2ZSB0byBiZSBhdHRhY2hlZCB0
byB0aGUgc3ludGhldGljIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCBwb2ludC4KLSAgICAgICAg
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
ID09IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTKQotICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
LCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpCi0gICAg
ICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChhdHRycy5kZXB0aCkKLSAg
ICAgICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGds
OjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIGlmIChnbDo6
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUikgIT0gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgotICAgICAgICAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHJlc2l6ZSByZWd1
bGFyIEZCTwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsK
LSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGFsbG9j
YXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIHVw
ZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOwotICAgIGdsOjpG
cmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUsIDAp
OwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BTkdMRSwgbV90ZXh0dXJlKTsKLSAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BTkdMRSwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgZ2w6OkZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSwgMCk7Ci0gICAgaWYgKG1fY29tcG9zaXRv
clRleHR1cmUpIHsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FOR0xFLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICBn
bDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOwotICAgICAgICBn
bDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1faW50ZXJtZWRpYXRl
VGV4dHVyZSk7Ci0gICAgICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FO
R0xFLCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9y
bWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwKTsKLSAgICB9Ci0jZWxzZQotI2Vycm9yIEZJWE1FOiBQ
b3J0IHRvIG5vbi1Db2NvYSBwbGF0Zm9ybXMuCi0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0K
LSAgICBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRoU3Rl
bmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0g
dHJ1ZTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICBpZiAobV9z
dGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICAgICAgbXVzdFJlc3Rv
cmVGQk8gPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZC
TyA9PSBtX2ZibykKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG11c3RSZXN0b3JlRkJPOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBhdXRvIGF0dHJz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmICghYXR0cnMuYW50aWFsaWFzICYmIChh
dHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkgewotICAgICAgICBnbDo6QmluZFJlbmRlcmJ1
ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBpbnRlcm5hbERlcHRoU3RlbmNp
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0
YXRlIHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCi0gICAgICAgIC8v
IGhhdmUgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHN5bnRoZXRpYyBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQgcG9pbnQuCi0gICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIGludGVybmFs
RGVwdGhTdGVuY2lsRm9ybWF0ID09IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTKQotICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQotICAgICAgICAg
ICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
LSAgICAgICAgICAgIGlmIChhdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICBnbDo6RnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdM
X1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAg
IGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7Ci0gICAgfQotCi0gICAg
aWYgKGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAvLyBGSVhNRTogY2xlYW51cAotICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVz
b2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xf
RkFMU0UpOwotICAgIFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVS
LCBHTF9GQUxTRSk7Ci0KLSAgICBHTGludCBib3VuZEZyYW1lQnVmZmVyOwotICAgIGdsOjpHZXRJ
bnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmYm91bmRGcmFtZUJ1ZmZlcik7Ci0gICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFLCBtX211bHRpc2Ft
cGxlRkJPKTsKLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5H
TEUsIG1fZmJvKTsKLQotICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IG1vcmUgZWZmaWNpZW50IHNv
bHV0aW9uIGZvciBpT1MuCi0gICAgSW50UmVjdCByZXNvbHZlUmVjdCA9IHJlY3Q7Ci0gICAgLy8g
V2hlbiB1c2luZyBhbiBFUyAyLjAgY29udGV4dCwgdGhlIGZ1bGwgZnJhbWVidWZmZXIgbXVzdCBh
bHdheXMgYmUKLSAgICAvLyByZXNvbHZlZDsgcGFydGlhbCBibGl0cyBhcmUgbm90IGFsbG93ZWQu
Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgfHwgcmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJlc29sdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KTsKLQotICAgIGdsOjpCbGl0RnJhbWVidWZmZXJBTkdMRShyZXNvbHZlUmVjdC54KCksIHJl
c29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIHJl
c29sdmVSZWN0LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCksIHJlc29s
dmVSZWN0Lm1heFkoKSwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTkVBUkVTVCk7Ci0gICAgZ2w6
OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYm91bmRGcmFtZUJ1ZmZlcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpSZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgc3dpdGNoIChwbmFt
ZSkgewotICAgIGNhc2UgTUFYX1RFWFRVUkVfU0laRToKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2
KE1BWF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMoKS5y
ZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKLSAgICAgICAgICAgICp2YWx1
ZSA9IHN0ZDo6bWluKDQwOTYsICp2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUFY
X0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9DVUJF
X01BUF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMoKS5y
ZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKLSAgICAgICAgICAgICp2YWx1
ZSA9IHN0ZDo6bWluKDEwMjQsICp2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICAvLyBTb21lIG9sZGVyIGhhcmR3YXJlIGFkdmVydGlzZXMgYSBsYXJnZXIgbWF4
aW11bSB0aGFuIHRoZXkKLSAgICAvLyBjYW4gYWN0dWFsbHkgaGFuZGxlLiBSYXRoZXIgdGhhbiBk
ZXRlY3Rpbmcgc3VjaCBkZXZpY2VzLCBzaW1wbHkKLSAgICAvLyBjbGFtcCB0aGUgbWF4aW11bSB0
byA4MTkyLCB3aGljaCBpcyBiaWcgZW5vdWdoIGZvciBhIDVLIGRpc3BsYXkuCi0gICAgY2FzZSBN
QVhfUkVOREVSQlVGRkVSX1NJWkU6Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfUkVOREVS
QlVGRkVSX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oODE5MiwgKnZh
bHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhfVklFV1BPUlRfRElNUzoKLSAgICAg
ICAgZ2w6OkdldEludGVnZXJ2KE1BWF9WSUVXUE9SVF9ESU1TLCB2YWx1ZSk7Ci0gICAgICAgIHZh
bHVlWzBdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMF0pOwotICAgICAgICB2YWx1ZVsxXSA9IHN0
ZDo6bWluKDgxOTIsIHZhbHVlWzFdKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZh
dWx0OgotICAgICAgICBnbDo6R2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51
bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0Mz
RGludCogcHJlY2lzaW9uKQotewotICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKLSAgICBB
U1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVChwcmVjaXNpb24pOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMT1dfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElV
TV9JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6Ci0gICAgICAgIC8v
IFRoZXNlIHZhbHVlcyBhcmUgZm9yIGEgMzItYml0IHR3b3MtY29tcGxlbWVudCBpbnRlZ2VyIGZv
cm1hdC4KLSAgICAgICAgcmFuZ2VbMF0gPSAzMTsKLSAgICAgICAgcmFuZ2VbMV0gPSAzMDsKLSAg
ICAgICAgcHJlY2lzaW9uWzBdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TE9XX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElV
TV9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0ZMT0FUOgotICAgICAg
ICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGZvciBhbiBJRUVFIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRp
bmctcG9pbnQgZm9ybWF0LgotICAgICAgICByYW5nZVswXSA9IDEyNzsKLSAgICAgICAgcmFuZ2Vb
MV0gPSAxMjc7Ci0gICAgICAgIHByZWNpc2lvblswXSA9IDIzOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIGlmICh3aWR0aCAm
JiBoZWlnaHQgJiYgIXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHRleEltYWdlMkRE
aXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYg
ekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGVwdGhSYW5nZWYo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDbGVhckRlcHRoZihzdGF0aWNf
Y2FzdDxmbG9hdD4oZGVwdGgpKTsKLX0KLQotRXh0ZW5zaW9uczNEJiBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1f
ZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNEQU5HTEU+KHRoaXMpOwotICAgIHJl
dHVybiAqbV9leHRlbnNpb25zOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4
ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICAv
LyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVn
IGlzIGZpeGVkLCBpLmUuLAotICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hv
dWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsOjpGbHVzaCgpOwotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRl
cygpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nhcnko
SW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIGdsOjpG
bHVzaCgpOwotICAgIH0KLSAgICBnbDo6UmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFhdHRycy5hbHBoYSAmJiAoZm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QkdSQSkg
JiYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8gfHwgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0
YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkKLSAgICAgICAgd2lwZUFscGhhQ2hh
bm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGRhdGEpKTsKLSNlbmRpZgotfQotCi0KLS8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbiBmb2xsb3csIHBvcnRlZCB0byB1c2UgQU5HTEUuCi0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbikKLXsKLSAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lvbnMgPSBn
ZXRFeHRlbnNpb25zKCk7Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0K
LSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0
cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7Ci0gICAgICAgICAgICBleHRlbnNpb25z
LmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKLSAgICAgICAgICAg
IC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KLSAgICAgICAgICAgIGF0dHJzLmRl
cHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhdHRycy5zdGVuY2lsID0g
ZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9Ci0gICAg
aWYgKGF0dHJzLmFudGlhbGlhcykgewotICAgICAgICAvLyBGSVhNRTogbXVzdCBhZGp1c3QgdGhp
cyB3aGVuIHVwZ3JhZGluZyB0byBXZWJHTCAyLjAgLyBPcGVuR0wgRVMgMy4wIHN1cHBvcnQuCi0g
ICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiKSB8fCAhZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCIpIHx8ICFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9PRVNfcmdiOF9yZ2JhOCIpKSB7Ci0g
ICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICAgICAgICAgIHNldENvbnRl
eHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4dGVu
c2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsK
LSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCIpOwotICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9PRVNf
cmdiOF9yZ2JhOCIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIpCi17Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiByb3dCeXRlcyA9IENoZWNr
ZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50V2lkdGgpICogNDsKLSAgICBpZiAocm93
Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDaGVja2VkPGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gcm93Qnl0ZXMgKiBtX2N1cnJl
bnRIZWlnaHQ7Ci0gICAgaWYgKHRvdGFsQnl0ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGludCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5z
YWZlR2V0KCk7Ci0KLSAgICBhdXRvIHBpeGVscyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBj
aGFyPih0b3RhbEJ5dGVzKTsKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKLQotICAg
IGlmICghY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKLSAgICAgICAgICAgIC8v
IFByZW11bHRpcGx5IGFscGhhLgotICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWlu
KDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICAgICAg
cGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsg
M10gLyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4
ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCksIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAg
ICAvLyBGSVhNRTogd29yayBvbiBpT1MgaW50ZWdyYXRpb24uCi0gICAgcHJlc2VudFJlbmRlcmJ1
ZmZlcigpOwotI2VuZGlmCi19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCi17Ci0gICAgLy8gTm90IG5lZWRlZCBh
dCB0aGUgbW9tZW50LCBzbyByZXR1cm4gdGhhdCBub3RoaW5nIHdhcyBkb25lLgotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICAvLyBSZWFkaW5nIHByZW11bHRp
cGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcwotICAg
IC8vIGxvc3N5LgotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBo
YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOwot
ICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0g
ICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IDQgKiBD
aGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIENoZWNrZWQ8aW50
LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50SGVpZ2h0KTsKLSAgICBpZiAodG90YWxCeXRlc0No
ZWNrZWQuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwotICAgIGlu
dCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7Ci0KLSAgICByZWFk
UmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFsQnl0ZXMpOwotCi0gICAgLy8gQ29udmVydCB0
byBSR0JBLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQotICAg
ICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKLQotICAgIHJldHVybiBp
bWFnZURhdGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkK
LXsKLSAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFs
aWFzKQotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7Ci0KLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21w
b3NpdG9yVGV4dHVyZSk7Ci0gICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVU
ZXh0dXJlKTsKLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9B
VFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSwgMCk7Ci0g
ICAgZ2w6OkZsdXNoKCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykKLSAg
ICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fc3RhdGUuYm91bmRGQk8pOwotICAgIGVsc2UKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSNlbHNlCi0gICAgZ2w6
OkZsdXNoKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRl
cmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKLXsKLSAg
ICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBib29s
IG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50
aWFsaWFzKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLSAg
ICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgICAgICBtdXN0
UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7Ci0gICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGln
bm1lbnQgPSBmYWxzZTsKLSAgICBnbDo6R2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZw
YWNrQWxpZ25tZW50KTsKLSAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKLSAgICAgICAgZ2w6
OlBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKLSAgICAgICAgbXVzdFJlc3RvcmVQ
YWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIHBp
eGVscyk7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQotICAgICAgICBnbDo6
UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwotCi0gICAgaWYg
KG11c3RSZXN0b3JlRkJPKQotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIGlmICgh
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
d2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDApOwot
ICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwotICAg
IG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNj
b3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5QU5H
TEVTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKLQotICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLSAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8vIEluaXRpYWxpemUg
cmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAs
IDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOwotICAgIEdM
Ym9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
fSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZm
ZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOwotICAgIEdMYml0ZmllbGQgY2xlYXJN
YXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAgICBnbDo6R2V0RmxvYXR2KEdMX0NPTE9SX0NM
RUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
LSAgICBnbDo6R2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOwotICAg
IGdsOjpDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7Ci0gICAg
aWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIGdsOjpHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJf
VkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVw
dGgoMSk7Ci0gICAgICAgIGdsOjpHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0
aE1hc2spOwotICAgICAgICBnbDo6RGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1h
c2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwp
IHsKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVh
clN0ZW5jaWwpOwotICAgICAgICBnbDo6Q2xlYXJTdGVuY2lsKDApOwotICAgICAgICBnbDo6R2V0
SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigm
c3RlbmNpbE1hc2spKTsKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19X
UklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0g
ICAgICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAg
ICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0gICAg
ICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAgZ2w6
OkNsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICBnbDo6Q2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBj
bGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICBnbDo6Q29s
b3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFz
a1szXSk7Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICBnbDo6RGVwdGhNYXNrKGRlcHRoTWFz
ayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGdsOjpDbGVhclN0
ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
RlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
QkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLQotICAgIGdsOjpGbHVzaCgpOwotfQotCi1JbnRTaXpl
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVy
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3N0YXRlLmFjdGl2ZVRleHR1
cmVVbml0ID0gdGV4dHVyZTsKLSAgICBnbDo6QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwot
ICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpB
dHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
LCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCaW5kQnVmZmVyKHRhcmdldCwg
YnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdD
M0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBm
Ym8gPSBidWZmZXI7Ci0gICAgZWxzZQotICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMo
KS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwotICAgIGlmIChmYm8gIT0g
bV9zdGF0ZS5ib3VuZEZCTykgewotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKHRhcmdldCwg
ZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
bV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVy
ZSwgdGFyZ2V0KTsKLSAgICBnbDo6QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNs
YW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNE
ZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCbGVuZEVx
dWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9u
U2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJH
QiwgbW9kZUFscGhhKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMo
R0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdD
M0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNS
R0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNE
ZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QnVmZmVy
RGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2
b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9m
ZnNldCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQqIEdyYXBoaWNzQ29udGV4dDNEOjptYXBCdWZm
ZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIg
bGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwg
YWNjZXNzKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OnVubWFwQnVmZmVy
KEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1
cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFy
Z2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0Rz
aXplaXB0ciBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDb3B5
QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVP
ZmZzZXQsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbGZv
cm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50
ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNp
emVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsOjpUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFk
ZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3Qg
VmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8
R0MzRGludD4mIHBhcmFtcykKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0KLSAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlm
b3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBhcmFtcy5k
YXRhKCkpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBmIGcs
IEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6Q2xlYXIobWFzayk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVh
biBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgLy8gV2UgbmVlZCB0aGlzIGV4dGVuc2lvbiB0byBzdXBwb3J0IElP
U3VyZmFjZSBiYWNrYnVmZmVycywgYnV0IHdlCi0gICAgLy8gZG9uJ3Qgd2FudCBpdCBleHBvc2Vk
IHRvIFdlYkdMIHVzZXIgc2hhZGVycy4gVGVtcG9yYXJpbHkgZGlzYWJsZQotICAgIC8vIGl0IGR1
cmluZyBzaGFkZXIgY29tcGlsYXRpb24uCi0gICAgZ2w6OkRpc2FibGVFeHRlbnNpb25BTkdMRSgi
R0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiKTsKLSAgICBnbDo6Q29tcGlsZVNoYWRlcihzaGFk
ZXIpOwotICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUoIkdMX0FOR0xFX3RleHR1cmVfcmVj
dGFuZ2xlIik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXJEaXJl
Y3QoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICBnbDo6Qmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAg
IH0KLSAgICBnbDo6Q29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAm
JiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIGdsOjpCaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxl
RkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBhdXRvIGF0dHJzID0gY29u
dGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBs
aW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
Ci0gICAgfQotICAgIGdsOjpDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFz
ICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1w
bGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZShHQzNEZW51bSBt
b2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDdWxsRmFjZShtb2Rl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRlcHRoRnVuYyhmdW5jKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRlcHRoTWFzayhmbGFnKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dy
YW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2w6OkRpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBnbDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotICAgIGNoZWNrR1BV
U3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdFbGVtZW50cyhHQzNE
ZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zm
c2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEcmF3RWxlbWVudHMo
bW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpKTsKLSAgICBjaGVja0dQVVN0YXR1cygpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpFbmFibGUoY2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RmluaXNoKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Rmx1
c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFj
aG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwg
R0MzRGludCBsZXZlbCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RnJh
bWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNl
KEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkZy
b250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBt
YXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IG1heEF0dHJpYnV0ZVNp
emUgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVU
RV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFt
ZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGlu
Y2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAg
ICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgZ2w6OkdldEFjdGl2
ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZz
aXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOwotICAgIGlmICghbmFtZUxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1l
TGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0
dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQotewotICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGluZGV4
LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybUlt
cGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYg
aW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgZ2w6
OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4
VW5pZm9ybVNpemUpOwotCi0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7
IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlv
bi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAg
IEdMZW51bSB0eXBlID0gMDsKLSAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRl
eCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgp
KTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlu
Zm8ubmFtZSA9IFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50eXBl
ID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2Jq
ZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1h
eENvdW50LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIHJldHVybiBnbDo6R2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFt
ZSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYm9vbCBtb3ZlZEFu
RXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhl
cmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCi0gICAgLy8gYSBwcm9ibGVtIGRyaXZlciBo
YXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgotICAgIC8v
IE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgR0MzRGVudW0g
ZXJyb3IgPSBnbDo6R2V0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7
Ci0gICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vdmVk
QW5FcnJvcjsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsK
LSAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBOZWVk
IHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBp
biBjYXNlCi0gICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhl
IGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKLSAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0
RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCi0gICAgICAgIG1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgICAgICByZXR1cm4gbV9zeW50aGV0
aWNFcnJvcnMudGFrZUZpcnN0KCk7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIGdsOjpHZXRFcnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6Okdl
dFN0cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbDo6SGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc0VuYWJsZWQoY2FwKTsKLX0KLQotR0Mz
RGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVj
dCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4g
R0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6Oklz
RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXBy
b2dyYW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1HQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5k
ZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6SXNSZW5k
ZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIGlmICghc2hhZGVy
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAg
IGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2w6OkxpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9y
LCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6
OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6U2FtcGxlQ292ZXJhZ2UodmFs
dWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgY29uc3QgQ1N0cmluZyYg
c2hhZGVyU291cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogc2hh
ZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7Ci0gICAgaW50IHNoYWRl
clNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7Ci0gICAgZ2w6OlNo
YWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFkZXJTb3VyY2VMZW5n
dGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBm
dW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6U3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBnbDo6U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYs
IG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNEdWlu
dCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpTdGVuY2lsTWFz
ayhtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZh
aWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0x
Zihsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0y
ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm00Zihsb2NhdGlvbiwgdjAs
IHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQot
ewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXpl
LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50IHYwKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0Mz
RGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZv
cm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlvbiwg
djAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCi17Ci0gICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsOjpVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYz
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCi17Ci0gICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxv
YXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBs
ZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewot
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5LgotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBz
aXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3Nl
LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9n
cmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWYWxpZGF0ZVByb2dy
YW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZs
b2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4
QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliMmYoaW5k
ZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJm
dihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2
Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihHQzNEdWlu
dCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwg
djEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRm
dihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQg
aW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXpl
ZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5
cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWaWV3cG9ydCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlVmVydGV4QXJyYXkoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIEdMdWludCBhcnJheSA9IDA7Ci0gICAgZ2w6OkdlblZlcnRleEFycmF5cygxLCAmYXJyYXkp
OwotICAgIHJldHVybiBhcnJheTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
VmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBpZiAoIWFycmF5KQot
ICAgICAgICByZXR1cm47Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRlbGV0
ZVZlcnRleEFycmF5cygxLCAmYXJyYXkpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHQzRDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICgh
YXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXkoYXJyYXkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmluZFZlcnRleEFycmF5KGFycmF5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5h
bWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBnbDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6
OkdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZh
bHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRGbG9hdHYocG5h
bWUsIHZhbHVlKTsKLX0KLSAgICAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXI2
NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHBuYW1lKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAqdmFsdWUgPSAwOwotICAg
IC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0
Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdl
YkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0gICAgLy8gZ2w6OkdldEludGVnZXI2
NHYocG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UKQotICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJ
TF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCi0gICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsK
LX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgR0MzRHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxv
ZykKLXsKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50
KTsKLSAgICBMT0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRm
OCgpLmRhdGEoKSk7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKLQotICAgIC8v
IEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRvIHRoZSBzaGFkZXIgc291cmNl
IHRoYXQKLSAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUgY29tcGlsZXJzLiBUaGVyZSBp
cyBubyBwb2ludCBzaG93aW5nCi0gICAgLy8gdGhpcyB3YXJuaW5nIHRvIHRoZSB1c2VyIHNpbmNl
IHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKLSAgICAvLyBpcyBjYXVzaW5nIGl0Lgot
ICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFuZ2xlV2FybmluZyB7ICJX
QVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFkZXI1JyBpcyBub3Qgc3VwcG9y
dGVkXG4iX3MgfTsKLSAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJu
aW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7Ci0gICAgcHJvY2Vzc2VkTG9n
LmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9t
KSk7Ci0KLSAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJv
Y2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHByb2Nlc3Nl
ZExvZy50b1N0cmluZygpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBsZW5ndGggPSAwOwot
ICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3Ro
KTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdM
c2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIGds
OjpHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7
Ci0KLSAgICBHQzNEc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJd
OwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOwot
Ci0gICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0cmluZyhp
bmZvLmRhdGEoKSwgc2l6ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5h
bWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZv
TG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbGVuZ3RoID0gMDsKLSAgICBnbDo6
R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlm
ICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXpl
ID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgZ2w6OkdldFNoYWRl
ckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICBQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OwotICAgIHJldHVybiBnZXRV
bm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNE
T2JqZWN0KQotewotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0VW5pZm9ybWl2KHByb2dyYW0s
IGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAg
ICBnbDo6R2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2ZmLCBHQzNEaW50
IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhl
bFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVy
IGZyb20gdGhlIHN1YmltYWdlIHNpemUuCi0gICAgZ2w6OlRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwot
ICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0
dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJl
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNp
emUsIGRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJy
ZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdM
dWludCBvID0gMDsKLSAgICBnbDo6R2VuQnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19
Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVy
KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAg
Z2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwotfQotCi1Q
bGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbDo6
R2VuUmVuZGVyYnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6Q3JlYXRlU2hhZGVyKCh0
eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhf
U0hBREVSKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
VGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAw
OwotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZy
YW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChmcmFtZWJ1
ZmZlciA9PSBtX3N0YXRlLmJvdW5kRkJPKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJh
bWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKLSAgICAgICAgLy8g
b3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZl
cihGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwg
JmZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2w6OkRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVy
cygxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsOjpEZWxldGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3Zl
SWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewotICAgICAgICByZXR1cm4ga2V5VmFsdWUu
dmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKLSAgICB9KTsKLSAgICBnbDo6RGVsZXRlVGV4dHVyZXMo
MSwgJnRleHR1cmUpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4
dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdD
M0RlbnVtIGVycm9yKQotewotICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMg
dG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIG9yZGVy
IG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKLSAgICAvLyBhbnkg
ZXJyb3JzIGZyb20gZ2w6OkVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemlu
Zy4KLSAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX3N5bnRoZXRp
Y0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29u
dGV4dENoYW5nZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQotewotICAgIG1fbGF5
ZXJDb21wb3NpdGVkID0gdHJ1ZTsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVj
dG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlkQ29tcG9zaXRlKCk7Ci19Ci0KLWJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmb3Jj
ZUNvbnRleHRMb3N0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3Rvciht
X2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVjeWNsZUNvbnRleHQoKQotewotICAgIGZvciAoYXV0byog
Y2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+cmVjeWNs
ZUNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9W
ZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRE
aXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwg
R0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0lu
c3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0
dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0
ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRy
YXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQp
OwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0g
ICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwot
fQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKEFO
R0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTFhNTIx
YzRiOGE0YzJlZWRlYTg2M2FlZGFkNWE0ZTEwZWJhMTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHAKQEAgLTAsMCArMSwxODM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdS
QVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShBTkdMRSkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKyNpbmNsdWRlICJFeHRlbnNpb25z
R0xBTkdMRS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUZW1w
b3JhcnlBTkdMRVNldHRpbmcuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhw
cmVzc2lvbi5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9B
Y2NlbGVyYXRlLmg+CisjZW5kaWYKKworLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3Mg
ZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KKyNkZWZpbmUgR0xfQU5HTEVf
ZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMx
Cit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2lu
dHNfZ2xlc18yXzBfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVz
XzNfMF9hdXRvZ2VuLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1
dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9nbDJl
eHRfYW5nbGUuaD4KKworLy8gTm90ZTogdGhpcyBmaWxlIGNhbid0IGJlIGNvbXBpbGVkIGluIHRo
ZSBzYW1lIHVuaWZpZWQgc291cmNlIGZpbGUKKy8vIGFzIG90aGVycyB3aGljaCBpbmNsdWRlIHRo
ZSBzeXN0ZW0ncyBPcGVuR0wgaGVhZGVycy4KKworLy8gVGhpcyBvbmUgZGVmaW5pdGlvbiBzaG9y
dC1jaXJjdWl0cyB0aGUgbmVlZCBmb3IgZ2wyZXh0LmgsIHdoaWNoCisvLyB3b3VsZCBuZWVkIG1v
cmUgd29yayB0byBiZSBpbmNsdWRlZCBmcm9tIFdlYkNvcmUuCisjZGVmaW5lIEdMX01BWF9TQU1Q
TEVTX0VYVCAweDhENTcKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgMHg4Q0UwCisj
ZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCAweDhENDAKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25O
YW1lID0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykK
K3N0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwgaW50IGhl
aWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQoreworICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhp
cyBkb2Vzbid0IG92ZXJmbG93IGJlY2F1c2UgdGhlIGNhbGxpbmcgZnVuY3Rpb25zCisgICAgLy8g
dXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRoICogaGVp
Z2h0ICogNDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAg
ICAgICAgcGl4ZWxzW2kgKyAzXSA9IDI1NTsKK30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4
LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit7
CisgICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2ZSBhIGJ1ZyB3aGVyZSBjYWxsaW5nIHJlYWRQaXhl
bHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3cm9uZyB2YWx1ZXMgZm9yIHRoZSBhbHBoYSBjaGFu
bmVsIHdoZW4gdGhlIGFscGhhIGlzIG9mZiBmb3IgdGhlIGNvbnRleHQuCisgICAgZ2w6OlJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4
ZWxzKTsKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKKyAgICBz
cmMuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHNyYy53aWR0aCA9IHdpZHRoOworICAgIHNyYy5yb3dC
eXRlcyA9IHdpZHRoICogNDsKKyAgICBzcmMuZGF0YSA9IHBpeGVsczsKKworICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKKyAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKKyAgICBkZXN0LndpZHRoID0g
d2lkdGg7CisgICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKKyAgICBkZXN0LmRhdGEgPSBw
aXhlbHM7CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgor
ICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgdkltYWdlUGVy
bXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsK
KyNlbHNlCisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgIHN0ZDo6c3dhcChw
aXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgaWYgKCFjb250ZXh0QXR0cmlidXRlcygpLmFscGhhKQorICAgICAgICB3aXBlQWxwaGFDaGFu
bmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOworI2VuZGlmCit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcygpCit7CisgICAgdmFs
aWRhdGVEZXB0aFN0ZW5jaWwocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uTmFtZSk7Cit9CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgY29u
c3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGNvbnN0IGludCBoZWlnaHQgPSBzaXpl
LmhlaWdodCgpOworICAgIEdMdWludCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQgPSAwOworICAgIGlmIChhdHRycy5hbHBoYSkgeworICAgICAgICBtX2ludGVybmFsQ29s
b3JGb3JtYXQgPSBHTF9SR0JBODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7CisgICAg
ICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCB8
fCBhdHRycy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hl
cmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBTZWUg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcy4KKworICAgICAgICBF
eHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgICAgIC8vIFVz
ZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgorICAgICAg
ICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25OYW1l
KSkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgfQorCisgICAgLy8gUmVzaXpl
IG11bHRpc2FtcGxlIEZCTy4KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIEdM
aW50IG1heFNhbXBsZUNvdW50OworICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBM
RVNfQU5HTEUsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIC8vIFVzaW5nIG1vcmUgdGhhbiA0
IHNhbXBsZXMgaXMgc2xvdyBvbiBzb21lIGhhcmR3YXJlIGFuZCBpcyB1bmxpa2VseSB0bworICAg
ICAgICAvLyBwcm9kdWNlIGEgc2lnbmlmaWNhbnRseSBiZXR0ZXIgcmVzdWx0LgorICAgICAgICBH
TGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29s
b3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5ERVJCVUZG
RVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRycy5zdGVuY2ls
IHx8IGF0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9S
RU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAg
ICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5E
RVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgICAgICAvLyBXZWJHTCAxLjAncyBydWxlcyBzdGF0ZSB0aGF0IGNv
bWJpbmVkIGRlcHRoL3N0ZW5jaWwgcmVuZGVyYnVmZmVycworICAgICAgICAgICAgLy8gaGF2ZSB0
byBiZSBhdHRhY2hlZCB0byB0aGUgc3ludGhldGljIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCBw
b2ludC4KKyAgICAgICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0ID09IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTKQorICAgICAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgREVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJz
LnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIs
IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChh
dHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIs
IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7Cisg
ICAgICAgIGlmIChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUikgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVw
LgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIHJlc2l6ZSByZWd1bGFyIEZCTworICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG1fZmJvKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUod2lkdGgsIGhl
aWdodCkpOworICAgIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXll
cigpOworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dEdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0
LCBtX3RleHR1cmUsIDApOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIGdsOjpCaW5kVGV4dHVy
ZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0dXJlKTsKKyAgICBnbDo6VGV4SW1h
Z2UyRChHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Cisg
ICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSwgMCk7CisgICAg
aWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAgZ2w6
OlRleEltYWdlMkQoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOworICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IDApOworICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgICAgIGdsOjpUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FOR0xFLCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwKTsKKyAgICB9CisjZWxzZQor
I2Vycm9yIEZJWE1FOiBQb3J0IHRvIG5vbi1Db2NvYSBwbGF0Zm9ybXMuCisjZW5kaWYgLy8gUExB
VEZPUk0oQ09DT0EpCisKKyAgICBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBib29sIG11
c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAg
IGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwor
ICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAg
ICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bV9zdGF0ZS5ib3VuZEZCTyA9PSBtX2ZibykKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG11c3RSZXN0b3JlRkJPOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRl
ZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmICgh
YXR0cnMuYW50aWFsaWFzICYmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkgeworICAg
ICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVS
LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIC8v
IFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5k
ZXJidWZmZXJzCisgICAgICAgIC8vIGhhdmUgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHN5bnRoZXRp
YyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgcG9pbnQuCisgICAgICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpICYmIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID09IEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTKQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhdHRy
cy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChhdHRycy5kZXB0aCkKKyAgICAg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdM
X0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICB9CisgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZF
UiwgMCk7CisgICAgfQorCisgICAgaWYgKGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZS
QU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAvLyBGSVhN
RTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWRT
Y2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOworICAgIFRlbXBvcmFyeUFOR0xFU2V0
dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7CisKKyAgICBHTGludCBib3Vu
ZEZyYW1lQnVmZmVyOworICAgIGdsOjpHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5H
LCAmYm91bmRGcmFtZUJ1ZmZlcik7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZS
QU1FQlVGRkVSX0FOR0xFLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICBnbDo6QmluZEZyYW1lYnVm
ZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUsIG1fZmJvKTsKKworICAgIC8vIEZJWE1FOiBm
aWd1cmUgb3V0IG1vcmUgZWZmaWNpZW50IHNvbHV0aW9uIGZvciBpT1MuCisgICAgSW50UmVjdCBy
ZXNvbHZlUmVjdCA9IHJlY3Q7CisgICAgLy8gV2hlbiB1c2luZyBhbiBFUyAyLjAgY29udGV4dCwg
dGhlIGZ1bGwgZnJhbWVidWZmZXIgbXVzdCBhbHdheXMgYmUKKyAgICAvLyByZXNvbHZlZDsgcGFy
dGlhbCBibGl0cyBhcmUgbm90IGFsbG93ZWQuCisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkg
fHwgcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc29sdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBt
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKworICAgIGdsOjpCbGl0RnJhbWVidWZm
ZXJBTkdMRShyZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4
WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIHJlc29sdmVSZWN0LngoKSwgcmVzb2x2ZVJlY3QueSgp
LCByZXNvbHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1heFkoKSwgR0xfQ09MT1JfQlVGRkVS
X0JJVCwgR0xfTkVBUkVTVCk7CisgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgYm91bmRGcmFtZUJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgTUFY
X1RFWFRVUkVfU0laRToKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9URVhUVVJFX1NJWkUs
IHZhbHVlKTsKKyAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3RyaWN0ZWRN
YXhpbXVtVGV4dHVyZVNpemUoKSkKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWluKDQwOTYs
ICp2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTUFYX0NVQkVfTUFQX1RFWFRVUkVf
U0laRToKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUs
IHZhbHVlKTsKKyAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3RyaWN0ZWRN
YXhpbXVtVGV4dHVyZVNpemUoKSkKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWluKDEwMjQs
ICp2YWx1ZSk7CisgICAgICAgIGJyZWFrOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBTb21l
IG9sZGVyIGhhcmR3YXJlIGFkdmVydGlzZXMgYSBsYXJnZXIgbWF4aW11bSB0aGFuIHRoZXkKKyAg
ICAvLyBjYW4gYWN0dWFsbHkgaGFuZGxlLiBSYXRoZXIgdGhhbiBkZXRlY3Rpbmcgc3VjaCBkZXZp
Y2VzLCBzaW1wbHkKKyAgICAvLyBjbGFtcCB0aGUgbWF4aW11bSB0byA4MTkyLCB3aGljaCBpcyBi
aWcgZW5vdWdoIGZvciBhIDVLIGRpc3BsYXkuCisgICAgY2FzZSBNQVhfUkVOREVSQlVGRkVSX1NJ
WkU6CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfUkVOREVSQlVGRkVSX1NJWkUsIHZhbHVl
KTsKKyAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oODE5MiwgKnZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBNQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2
KE1BWF9WSUVXUE9SVF9ESU1TLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlWzBdID0gc3RkOjptaW4o
ODE5MiwgdmFsdWVbMF0pOworICAgICAgICB2YWx1ZVsxXSA9IHN0ZDo6bWluKDgxOTIsIHZhbHVl
WzFdKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBnbDo6
R2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBl
LCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lz
aW9uKQoreworICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKKyAgICBBU1NFUlQocmFuZ2Up
OworICAgIEFTU0VSVChwcmVjaXNpb24pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1FRElVTV9JTlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9JTlQ6CisgICAgICAgIC8vIFRoZXNlIHZhbHVl
cyBhcmUgZm9yIGEgMzItYml0IHR3b3MtY29tcGxlbWVudCBpbnRlZ2VyIGZvcm1hdC4KKyAgICAg
ICAgcmFuZ2VbMF0gPSAzMTsKKyAgICAgICAgcmFuZ2VbMV0gPSAzMDsKKyAgICAgICAgcHJlY2lz
aW9uWzBdID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TE9XX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1FRElVTV9GTE9BVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0ZMT0FUOgorICAgICAgICAvLyBUaGVzZSB2
YWx1ZXMgYXJlIGZvciBhbiBJRUVFIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9y
bWF0LgorICAgICAgICByYW5nZVswXSA9IDEyNzsKKyAgICAgICAgcmFuZ2VbMV0gPSAxMjc7Cisg
ICAgICAgIHByZWNpc2lvblswXSA9IDIzOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
Citib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIGlmICh3aWR0aCAmJiBoZWln
aHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRleEltYWdlMkREaXJlY3Qo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYg
ekZhcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGVwdGhSYW5nZWYo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRl
cHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpDbGVhckRlcHRoZihz
dGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsKK30KKworRXh0ZW5zaW9uc0dMJiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMp
CisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMQU5HTEU+KHRo
aXMpOworICAgIHJldHVybiAqbV9leHRlbnNpb25zOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9p
ZCogZGF0YSkKK3sKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3
aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFsbCBwcmV2aW91cyBy
ZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgorICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpGbHVzaCgpOworICAgIGF1dG8gYXR0cnMg
PSBjb250ZXh0QXR0cmlidXRlcygpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0
ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAg
IGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zi
byk7CisgICAgICAgIGdsOjpGbHVzaCgpOworICAgIH0KKyAgICBnbDo6UmVhZFBpeGVscyh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAgIGlmIChhdHRycy5hbnRp
YWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBn
bDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFhdHRycy5hbHBoYSAm
JiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBIHx8IGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6QkdSQSkgJiYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8gfHwgKGF0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkKKyAg
ICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpKTsKKyNlbmRpZgorfQorCisKKy8vIFRoZSBjb250ZW50
cyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbiBmb2xsb3csIHBvcnRlZCB0byB1c2Ug
QU5HTEUuCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlRGVwdGhTdGVu
Y2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKK3sKKyAgICBFeHRl
bnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgYXV0byBhdHRycyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAg
ICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7
CisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1
ZS4KKyAgICAgICAgICAgIGF0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBhdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgICAgIHNldENvbnRleHRBdHRyaWJ1
dGVzKGF0dHJzKTsKKyAgICB9CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykgeworICAgICAgICAv
LyBGSVhNRTogbXVzdCBhZGp1c3QgdGhpcyB3aGVuIHVwZ3JhZGluZyB0byBXZWJHTCAyLjAgLyBP
cGVuR0wgRVMgMy4wIHN1cHBvcnQuCisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygi
R0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSB8fCAhZXh0ZW5zaW9ucy5zdXBwb3J0
cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpIHx8ICFleHRlbnNpb25zLnN1cHBvcnRzKCJH
TF9PRVNfcmdiOF9yZ2JhOCIpKSB7CisgICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5h
YmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpOworICAgICAgICAgICAgZXh0ZW5zaW9u
cy5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCit7CisgICAgQ2hlY2tlZDxpbnQsIFJl
Y29yZE92ZXJmbG93PiByb3dCeXRlcyA9IENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9j
dXJyZW50V2lkdGgpICogNDsKKyAgICBpZiAocm93Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0
ZXNDaGVja2VkID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisgICAgaWYgKHRvdGFsQnl0
ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCB0b3Rh
bEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7CisKKyAgICBhdXRvIHBpeGVs
cyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPih0b3RhbEJ5dGVzKTsKKyAgICBpZiAo
IXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4
ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgIGlmICghY29udGV4dEF0dHJpYnV0ZXMoKS5w
cmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5
dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFscGhhLgorICAgICAg
ICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVs
c1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1
NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4
ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10g
LyAyNTUpOworICAgICAgICB9CisgICAgfQorCisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0
KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVmZmVy
LT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisKKyNpZiBQTEFURk9S
TShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICAvLyBGSVhNRTogd29yayBvbiBpT1MgaW50
ZWdyYXRpb24uCisgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOworI2VuZGlmCit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJ
bWFnZUJ1ZmZlciopCit7CisgICAgLy8gTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50LCBzbyByZXR1
cm4gdGhhdCBub3RoaW5nIHdhcyBkb25lLgorICAgIHJldHVybiBmYWxzZTsKK30KKworUmVmUHRy
PEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291
bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcworICAgIC8vIGxvc3N5LgorICAg
IGlmIChjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKElu
dFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOworICAgIHVuc2lnbmVkIGNo
YXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgQ2hlY2tlZDxpbnQs
IFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IDQgKiBDaGVja2VkPGludCwgUmVj
b3JkT3ZlcmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxv
dz4obV9jdXJyZW50SGVpZ2h0KTsKKyAgICBpZiAodG90YWxCeXRlc0NoZWNrZWQuaGFzT3ZlcmZs
b3dlZCgpKQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGludCB0b3RhbEJ5dGVzID0g
dG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0
cyhwaXhlbHMsIHRvdGFsQnl0ZXMpOworCisgICAgLy8gQ29udmVydCB0byBSR0JBLgorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAo
cGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBp
ZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQorICAg
ICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4
dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
KyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgZ2w6
OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2w6OkZs
dXNoKCk7CisKKyAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykKKyAgICAgICAgZ2w6
OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUu
Ym91bmRGQk8pOworICAgIGVsc2UKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyNlbHNlCisgICAgZ2w6OkZsdXNoKCk7
CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBp
ZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBib29sIG11
c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFs
aWFzKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKyAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVz
dG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorCisgICAg
R0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1l
bnQgPSBmYWxzZTsKKyAgICBnbDo6R2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNr
QWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKKyAgICAgICAgZ2w6OlBp
eGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNr
QWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdS
QUlmTmVjZXNzYXJ5KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIHBpeGVs
cyk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQorICAgICAgICBnbDo6UGl4
ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOworCisgICAgaWYgKG11
c3RSZXN0b3JlRkJPKQorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlm
ICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRoID49IDAgJiYgaGVpZ2h0ID49IDAp
OworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwor
ICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5n
IHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5
QU5HTEVTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKKworICAgIGJv
b2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsK
KyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIC8vIEluaXRpYWxp
emUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAs
IDAsIDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOworICAg
IEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9U
UlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZm
ZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOworICAgIEdMYml0ZmllbGQgY2xl
YXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBnbDo6R2V0RmxvYXR2KEdMX0NPTE9S
X0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAw
KTsKKyAgICBnbDo6R2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOwor
ICAgIGdsOjpDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7Cisg
ICAgaWYgKGF0dHJzLmRlcHRoKSB7CisgICAgICAgIGdsOjpHZXRGbG9hdHYoR0xfREVQVEhfQ0xF
QVJfVkFMVUUsICZjbGVhckRlcHRoKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgoMSk7CisgICAgICAgIGdsOjpHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1B
U0ssICZkZXB0aE1hc2spOworICAgICAgICBnbDo6RGVwdGhNYXNrKEdMX1RSVUUpOworICAgICAg
ICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaWYgKGF0dHJz
LnN0ZW5jaWwpIHsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFM
VUUsICZjbGVhclN0ZW5jaWwpOworICAgICAgICBnbDo6Q2xlYXJTdGVuY2lsKDApOworICAgICAg
ICBnbDo6R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8
R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5D
SUxfQkFDS19XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tC
YWNrKSk7CisgICAgICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZm
ZmZmKTsKKyAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZm
Zik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQor
CisgICAgZ2w6OkNsZWFyKGNsZWFyTWFzayk7CisKKyAgICBnbDo6Q2xlYXJDb2xvcihjbGVhckNv
bG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKKyAg
ICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0s
IGNvbG9yTWFza1szXSk7CisgICAgaWYgKGF0dHJzLmRlcHRoKSB7CisgICAgICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICBnbDo6RGVw
dGhNYXNrKGRlcHRoTWFzayk7CisgICAgfQorICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIGdsOjpDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgZ2w6OlN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsKKyAgICAgICAgZ2w6OlN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0xfQkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKKyAgICB9CisKKyAgICBpZiAo
bXVzdFJlc3RvcmVGQk8pCisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKKworICAgIGdsOjpGbHVzaCgp
OworfQorCitJbnRTaXplIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFj
dGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKKyAgICBnbDo6QWN0
aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hh
ZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0
aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgR0x1aW50IGZibzsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICBmYm8gPSBi
dWZmZXI7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRp
YWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOworICAgIGlmIChmYm8gIT0gbV9zdGF0
ZS5ib3VuZEZCTykgeworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKHRhcmdldCwgZmJvKTsK
KyAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IGZibzsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Cit9CisKKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwg
dGV4dHVyZSwgdGFyZ2V0KTsKKyAgICBnbDo6QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQzNEY2xhbXBm
IHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhh
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCbGVuZENvbG9yKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpCbGVuZEVxdWF0aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVu
dW0gbW9kZUFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCbGVu
ZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0g
ZGZhY3RvcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QmxlbmRGdW5j
KHNmYWN0b3IsIGRmYWN0b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVu
dW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEs
IGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNp
emUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRh
LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRw
dHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNl
dCwgc2l6ZSwgZGF0YSk7Cit9CisKK3ZvaWQqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBC
dWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlw
dHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGxlbmd0
aCwgYWNjZXNzKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
bWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdD
M0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3Jp
dGVPZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVh
ZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCog
cGFyYW1zKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRJbnRlcm5h
bGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RHNpemVpIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpUZXhT
dG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFj
dGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDM0R1
aW50PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4mIHBh
cmFtcykKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5z
aXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBhcmFtcy5kYXRhKCkpOworfQor
CitHQzNEZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0
dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBmIGcs
IEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6Q2xlYXIobWFzayk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQg
cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Q2xlYXJTdGVuY2lsKHMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0MzRGJvb2xl
YW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4g
YWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNvbG9yTWFzayhy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgLy8gV2UgbmVlZCB0aGlz
IGV4dGVuc2lvbiB0byBzdXBwb3J0IElPU3VyZmFjZSBiYWNrYnVmZmVycywgYnV0IHdlCisgICAg
Ly8gZG9uJ3Qgd2FudCBpdCBleHBvc2VkIHRvIFdlYkdMIHVzZXIgc2hhZGVycy4gVGVtcG9yYXJp
bHkgZGlzYWJsZQorICAgIC8vIGl0IGR1cmluZyBzaGFkZXIgY29tcGlsYXRpb24uCisgICAgZ2w6
OkRpc2FibGVFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiKTsKKyAg
ICBnbDo6Q29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5H
TEUoIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Cit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2w6OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
TykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIH0KKyAgICBnbDo6Q29weVRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IGJvcmRlcik7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMo
KTsKKworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nhcnko
SW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIGds
OjpDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpDdWxsRmFjZShtb2RlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlcHRoRnVuYyhmdW5jKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZs
YWcpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlcHRoTWFzayhmbGFn
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNT
RVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGlu
ZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RHJhd0FycmF5cyhtb2RlLCBm
aXJzdCwgY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsOjpEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKKyAg
ICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
bmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBnbDo6RmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZsdXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Rmx1
c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBy
ZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJn
ZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7Cisg
ICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFM
VUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOworICAgIGdsOjpHZXRQcm9ncmFt
aXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRl
U2l6ZSk7CisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xf
QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisg
ICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVu
dW0gdHlwZSA9IDA7CisgICAgZ2w6OkdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4
QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOwor
ICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5mby5u
YW1lID0gU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0
eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIHJldHVy
biBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBp
ZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgZ2w6OkdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwor
CisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9V
TklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVp
IG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAwOworICAgIEdMZW51bSB0eXBlID0g
MDsKKyAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNp
emUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKKyAgICBpZiAoIW5h
bWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0cmlu
ZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBp
bmZvLnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGdldEFjdGl2
ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0
KiBzaGFkZXJzKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENv
dW50LCBjb3VudCwgc2hhZGVycyk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHJldHVybiBnbDo6R2V0QXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgbmFtZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJhcnkg
bGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8gYSBw
cm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhl
IGVycm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdv
dCBOT19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAg
ICAgICAgR0MzRGVudW0gZXJyb3IgPSBnbDo6R2V0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9y
ID09IE5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fc3ludGhldGljRXJy
b3JzLmFkZChlcnJvcik7CisgICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKK30KKworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEVycm9yKCkKK3sKKyAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBz
eW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCisgICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxy
ZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKKyAgICAgICAg
Ly8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBj
b2RlIG9uY2UuCisgICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
ICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7CisgICAgfQorCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpHZXRFcnJvcigpOworfQorCitT
dHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9k
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6SGludCh0YXJnZXQsIG1v
ZGUpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIo
UGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBn
bDo6SXNCdWZmZXIoYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgcmV0dXJuIGdsOjpJc0VuYWJsZWQoY2FwKTsKK30KKworR0MzRGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFt
ZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OklzRnJhbWVi
dWZmZXIoZnJhbWVidWZmZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXBy
b2dyYW0pCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHByb2dyYW0pOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVj
dCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6
SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAg
IGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7Cit9CisKK0dDM0Ri
b29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNF
OworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpJc1RleHR1cmUo
dGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChH
QzNEZmxvYXQgd2lkdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6Okxp
bmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQ
cm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkxpbmtQcm9ncmFtKHByb2dyYW0p
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQzNEZW51
bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5p
dHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlBvbHlnb25PZmZzZXQo
ZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBs
ZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVy
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBBU1NFUlQo
c2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgY29uc3QgQ1N0cmlu
ZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4KCk7CisgICAgY29uc3QgY2hhciog
c2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAgaW50IHNo
YWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisgICAgZ2w6
OlNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQdHIsICZzaGFkZXJTb3VyY2VM
ZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U3RlbmNpbEZ1bmNTZXBhcmF0ZShm
YWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpTdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNr
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpTdGVuY2lsTWFza1NlcGFy
YXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVu
Y2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpTdGVuY2lsT3AoZmFpbCwgemZhaWws
IHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0Rl
bnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm0x
Zihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtMWZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2
MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybTJmKGxvY2F0
aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAy
LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZs
b2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtM2Yo
bG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNE
ZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2
MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OlVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsOjpVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlm
b3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGlu
dCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm0x
aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm0yaShsb2NhdGlv
biwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkp
Cit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm0yaXYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNp
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm0zaShsb2NhdGlvbiwg
djAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5
KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtM2l2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBH
QzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3Jt
NGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29u
c3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDQuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZv
cm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXpl
LCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5LgorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJh
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpVc2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VS
VChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWYWxpZGF0
ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0Mz
RGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVy
dGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29uc3Qg
R0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
VmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2
Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihH
QzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVp
bnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFs
aXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUs
IHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpW
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBhcnJheSA9IDA7CisgICAgZ2w6OkdlblZlcnRleEFy
cmF5cygxLCAmYXJyYXkpOworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkK
K3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OkRlbGV0ZVZlcnRleEFycmF5cygxLCAmYXJyYXkpOworfQorCitHQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJy
YXkoYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4
QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6QmluZFZlcnRleEFycmF5KGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2
YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0Qm9vbGVhbnYo
cG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldEJ1ZmZlclBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRGbG9hdHYocG5hbWUsIHZh
bHVlKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHBuYW1lKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAqdmFsdWUgPSAwOworICAg
IC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0
Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdl
YkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCisgICAgLy8gZ2w6OkdldEludGVnZXI2
NHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3Ig
U1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgZ2w6OkdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5h
bWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1h
bmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgR0MzRHNpemVpIGNvdW50
LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7CisgICAg
VU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICBMT0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZv
TG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHByb2Nl
c3NlZExvZzsKKworICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBpbnRv
IHRoZSBzaGFkZXIgc291cmNlIHRoYXQKKyAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNvbWUg
Y29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCisgICAgLy8gdGhpcyB3YXJuaW5n
IHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKKyAgICAv
LyBpcyBjYXVzaW5nIGl0LgorICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9zaGFk
ZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKKyAgICBpbnQgc3RhcnRGcm9tID0gbG9nLnN0
YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6IDA7
CisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgbG9nLmxl
bmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQgU2hhZGVy
SW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQorCitTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBHTGludCBsZW5ndGggPSAwOworICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hh
cj4gaW5mbyhsZW5ndGgpOworICAgIGdsOjpHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5n
dGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQzNEc2l6ZWkgY291bnQ7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFt
LCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2co
c2hhZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKK30KKworU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAgICBnbDo6R2V0U2hhZGVyaXYoc2hh
ZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAgIGlmICghbGVuZ3RoKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXplaSBzaXplID0gMDsKKyAgICBWZWN0
b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgZ2w6OkdldFNoYWRlckluZm9Mb2coc2hhZGVy
LCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9n
KHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCitTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KQor
eworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldFVuaWZvcm1mdihwcm9ncmFtLCBs
b2NhdGlvbiwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0VW5p
Zm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK0dDM0RpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OkdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwor
R0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworCisgICAgR0x2b2lkKiBwb2ludGVyID0gMDsKKyAgICBnbDo6R2V0VmVydGV4QXR0
cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2ZmLCBHQzNEaW50IHlvZmYsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFt
cyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1
YmltYWdlIHNpemUuCisgICAgZ2w6OlRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwg
eW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOworICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNp
emUsIGRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJy
ZW50Qm91bmRUZXh0dXJlKCkpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIEdMdWludCBvID0gMDsKKyAgICBnbDo6R2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJu
IG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQg
byA9IDA7CisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9
CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVByb2dy
YW0oKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6Q3JlYXRl
UHJvZ3JhbSgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEdMdWludCBvID0gMDsKKyAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbyk7CisgICAgcmV0
dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBnbDo6Q3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBH
TF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKworUGxhdGZvcm0zRE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsOjpHZW5UZXh0dXJl
cygxLCAmbyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKKyAgICByZXR1
cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGdsOjpEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVy
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBt
X3N0YXRlLmJvdW5kRkJPKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIg
aXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKKyAgICAgICAgLy8gb3BlcmF0aW9u
cyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJV
RkZFUiwgMCk7CisgICAgfQorICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVm
ZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2w6OkRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZl
cikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RGVsZXRlUmVuZGVyYnVm
ZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9zdGF0ZS5ib3VuZFRl
eHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgeworICAgICAgICBy
ZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKKyAgICB9KTsKKyAgICBnbDo6
RGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5yZW1vdmVBbGwodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIC8vIE5lZWQgdG8gbW92
ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCisgICAg
Ly8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Ig
d2lsbCBnZXQKKyAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2w6OkVycm9yIGJlZm9yZSB0aGUgZXJy
b3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIG1fbGF5ZXJD
b21wb3NpdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1h
cmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKKwor
ICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAg
IGNsaWVudC0+ZGlkQ29tcG9zaXRlKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3Np
dGVkOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmb3JjZUNvbnRleHRMb3N0
KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQor
ICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQoreworICAgIGZvciAoYXV0byogY2xpZW50
IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRl
eHQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9W
ZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5j
dXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBnZXRFeHRlbnNpb25zKCku
ZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAg
Y2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJh
d0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAg
Z2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwg
b2Zmc2V0LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgs
IEdDM0R1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRp
dmlzb3IoaW5kZXgsIGRpdmlzb3IpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5j
cHAKaW5kZXggYmI5NThkYTAyYTBkNjRmOWQ0MzJkM2JiYmMxZjlmYWRhNGU4YmYyYi4uNjE5OTQz
ZGEyYjMyZDkzMDBkZWFmZDEwNzNiNDJmMDVkZDBmNWViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9UZW1wb3JhcnlBTkdM
RVNldHRpbmcuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAot
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoQU5HTEUpCisjaWYgRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShBTkdMRSkKICNpbmNsdWRlICJUZW1wb3JhcnlB
TkdMRVNldHRpbmcuaCIKIAogI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9h
dXRvZ2VuLmg+CkBAIC02MCw0ICs2MCw0IEBAIFRlbXBvcmFyeUFOR0xFU2V0dGluZzo6flRlbXBv
cmFyeUFOR0xFU2V0dGluZygpCiAKIH0KIAotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05U
RVhUXzNEKSAmJiBVU0UoQU5HTEUpCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpICYmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAppbmRleCBmOGJmZWNiZjYzOTZh
ZDJiN2RiM2M2ODVhYzY5YWRiNTgyYTM4OTNlLi41YmQ0ZTFmYjBkZjI5YjU3ODEzNmJhZDA1MTNm
ODZhZTdkZGU2ZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCkBAIC0yNzEsNyArMjcxLDcgQEAg
cHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCB3YWl0Rm9yVmlkZW9PdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdl
KCk7CiAKLSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKyAgICBi
b29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpp
bmRleCA1MTI5NDNmNWUxMjdlMmQ0Yjc3YTU0Mjk0OGFhZDM1NDNlMjA1MmYwLi4xYmVhY2Q0MzNj
NGM3YzVjNzUwNDFiYjQ3Njg1Y2M1OTY4OWJkY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0K
QEAgLTM4LDExICszOCwxMSBAQAogI2ltcG9ydCAiQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMu
aCIKICNpbXBvcnQgIkNvb2tpZS5oIgogI2ltcG9ydCAiRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdz
LmgiCi0jaW1wb3J0ICJFeHRlbnNpb25zM0QuaCIKKyNpbXBvcnQgIkV4dGVuc2lvbnNHTC5oIgog
I2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRD
Ry5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbXBvcnQgIkltYWdl
Um90YXRpb25TZXNzaW9uVlQuaCIKICNpbXBvcnQgIkluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJp
dmF0ZUFWRi5oIgogI2ltcG9ydCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMuaCIKQEAg
LTIyOTUsNyArMjI5NSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6cGFpbnRXaXRoVmlkZW9PdXRwdXQoR3JhcGhpY3NDb250ZXh0JiBjCiAKIH0KIAotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0
Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3Qg
b3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJl
LCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Rm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDLmgKaW5kZXggNTMxNDA5YmQzNmI4NjRjNGQ1MmExMDZhOWYxYTI2ZTQ5YjE0NWZh
Yi4uMDUwMDFlNzNmMzE2ZjJhNzM1NTdiYTk1NzZmMTk0MmE5ZDE3MDlmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDLmgKQEAgLTIyMyw3ICsyMjMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgdXBk
YXRlTGFzdEltYWdlKCk7CiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wg
Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxh
dGZvcm0zRE9iamVjdCwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOworICAgIGJvb2wgY29weVZpZGVvVGV4
dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0z
RE9iamVjdCwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJh
dGVkUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHJl
bmRlcmluZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0IG9mIGFjY2VsZXJhdGVkIHJlbmRl
cmluZyBtb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCmluZGV4IDMwYTIwNjUwZGMxNWQ3
MDZiZTI3OTgwZjY0NTdkZGM0MmIzOTU5MmIuLjc1NWY1YmU0Mzk5ZjhjNGVhNjAxMzFiYjIyZDhj
YTAyZmRjMzhhZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KQEAgLTYyNyw3ICs2Mjcs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6cGFpbnRDdXJy
ZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDbwogICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdl
KGltYWdlLCBpbWFnZVJlY3Quc2l6ZSgpLCBvdXRwdXRSZWN0LCBpbWFnZVJlY3QpOwogfQogCi1i
b29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y29weVZpZGVvVGV4dHVy
ZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNE
T2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRw
dXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICAvLyBXZSBoYXZlIGJlZW4gYXNrZWQg
dG8gcGFpbnQgaW50byBhIFdlYkdMIGNhbnZhcywgc28gdGFrZSB0aGF0IGFzIGEgc2lnbmFsIHRv
IGNyZWF0ZQogICAgIC8vIGEgZGVjb21wcmVzc2lvbiBzZXNzaW9uLCBldmVuIGlmIHRoYXQgbWVh
bnMgdGhlIG5hdGl2ZSB2aWRlbyBjYW4ndCBhbHNvIGJlIGRpc3BsYXllZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHQzRENhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4OTU3
ZTJlNTdjODA2NjcwMTgzMWIzMDdjZDk3OGMxZGQzOTcxNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05U
RVhUXzNEKSAmJiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8
Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVmYXVsdDsKLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCi17Ci0gICAgaWYgKCFtX2lt
YWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gV2UgbmVlZCB0aGlzIHRvIHN0YXkg
aW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGltYWdlIGlzIGp1c3QgYSBzaGFsbG93IGNvcHkg
b2YgdGhlIGRhdGEuCi0gICAgQWxwaGFPcHRpb24gYWxwaGFPcHRpb24gPSBwcmVtdWx0aXBseUFs
cGhhID8gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgOiBBbHBoYU9wdGlvbjo6Tm90UHJlbXVs
dGlwbGllZDsKLSAgICBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbiA9IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gR2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6QXBwbGll
ZDsKLSAgICBhdXRvIHNvdXJjZSA9IEltYWdlU291cmNlOjpjcmVhdGUobnVsbHB0ciwgYWxwaGFP
cHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKLSAgICBtX2FscGhhT3AgPSBBbHBo
YU9wOjpEb05vdGhpbmc7Ci0KLSAgICBpZiAobV9pbWFnZS0+ZGF0YSgpKSB7Ci0gICAgICAgIHNv
dXJjZS0+c2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOwotICAgICAgICBpZiAoIXNvdXJj
ZS0+ZnJhbWVDb3VudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2lt
YWdlU3VyZmFjZSA9IHNvdXJjZS0+Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoMCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwotICAgICAgICAvLyAxLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxWaWRl
b0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5QWxwaGEgaGFkIGJlZW4gYXBwbGll
ZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVhY2ggcGl4ZWwsCi0gICAgICAgIC8v
IHdoaWNoIGlzIHRydWUgYXQgcHJlc2VudCBhbmQgbWF5IGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVy
ZSBhbmQgbmVlZHMgYWRqdXN0bWVudCBhY2NvcmRpbmdseS4KLSAgICAgICAgLy8gMi4gRm9yIHRl
eEltYWdlMkQgd2l0aCBIVE1MQ2FudmFzRWxlbWVudCBpbnB1dCBpbiB3aGljaCBBbHBoYSBpcyBh
bHJlYWR5IFByZW11bHRpcGxpZWQgaW4gdGhpcyBwb3J0LCAKLSAgICAgICAgLy8gZG8gQWxwaGFE
b1VubXVsdGlwbHkgaWYgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIGlzIHNldCB0byBm
YWxzZS4KLSAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhICYmIG1faW1hZ2VIdG1sRG9tU291
cmNlICE9IERPTVNvdXJjZTo6VmlkZW8pCi0gICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYU9w
OjpEb1VubXVsdGlwbHk7Ci0KLSAgICAgICAgLy8gaWYgbV9pbWFnZVN1cmZhY2UgaXMgbm90IGFu
IGltYWdlLCBleHRyYWN0IGEgY29weSBvZiB0aGUgc3VyZmFjZQotICAgICAgICBpZiAobV9pbWFn
ZVN1cmZhY2UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlU3VyZmFjZS5nZXQoKSkg
IT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAgICAgICAgICBJbnRTaXplIHN1cmZh
Y2VTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgICAg
ICAgICBhdXRvIHRtcFN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZShDQUlST19GT1JNQVRfQVJHQjMyLCBzdXJmYWNlU2l6ZS53aWR0aCgpLCBzdXJmYWNlU2l6ZS5o
ZWlnaHQoKSkpOwotICAgICAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlciht
X2ltYWdlU3VyZmFjZS5nZXQoKSwgdG1wU3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0
KEludFBvaW50KCksIHN1cmZhY2VTaXplKSwgSW50U2l6ZSgpLCBDQUlST19PUEVSQVRPUl9TT1VS
Q0UpOwotICAgICAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBXVEZNb3ZlKHRtcFN1cmZhY2UpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2ltYWdlU3VyZmFjZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9pbWFnZVN1
cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSk7Ci0KLSAgICBJbnRTaXpl
IGltYWdlU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAg
IG1faW1hZ2VXaWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOwotICAgIG1faW1hZ2VIZWlnaHQgPSBp
bWFnZVNpemUuaGVpZ2h0KCk7Ci0gICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWln
aHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9mb3JtYXQobV9pbWFnZVN1cmZhY2UuZ2V0KCkpICE9IENBSVJPX0ZPUk1BVF9BUkdCMzIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGludCBzcmNVbnBhY2tBbGln
bm1lbnQgPSAxOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3N0cmlkZShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgc2l6ZV90IGJpdHNQZXJQaXhl
bCA9IDMyOwotICAgIHVuc2lnbmVkIHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhl
bCAvIDggKiBtX2ltYWdlV2lkdGg7Ci0gICAgaWYgKHBhZGRpbmcpIHsKLSAgICAgICAgc3JjVW5w
YWNrQWxpZ25tZW50ID0gcGFkZGluZyArIDE7Ci0gICAgICAgIHdoaWxlIChieXRlc1BlclJvdyAl
IHNyY1VucGFja0FsaWdubWVudCkKLSAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25tZW50Owot
ICAgIH0KLQotICAgIG1faW1hZ2VQaXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gRGF0
YUZvcm1hdDo6QkdSQTg7Ci0gICAgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCA9IHNyY1Vu
cGFja0FsaWdubWVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29u
c3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUu
aXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQtPmNyKCk7Ci0gICAgcGxhdGZvcm1D
b250ZXh0LT5zYXZlKCk7Ci0KLSAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1Np
emUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IpOwotCi0gICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIGNvbnN0X2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KGltYWdlUGl4ZWxzKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgaW1hZ2VTaXplLndpZHRoKCkgKiA0KSk7Ci0KLSAgICAv
LyBPcGVuR0wga2VlcHMgdGhlIHBpeGVscyBzdG9yZWQgYm90dG9tIHVwLCBzbyB3ZSBuZWVkIHRv
IGZsaXAgdGhlIGltYWdlIGhlcmUuCi0gICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCAwLCBpbWFnZVNp
emUuaGVpZ2h0KCkpOwotICAgIGNhaXJvX3NjYWxlKGNyLCAxLCAtMSk7Ci0KLSAgICBjYWlyb19z
ZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIpOwotICAgIGNhaXJvX3NldF9zb3Vy
Y2Vfc3VyZmFjZShjciwgaW1hZ2VTdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAgICBjYWlyb19yZWN0
YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgLWNhbnZhc1NpemUuaGVpZ2h0KCkp
OwotCi0gICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgcGxhdGZvcm1Db250ZXh0LT5yZXN0b3JlKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKSAmJiBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBhNWNjOWQ2MTU1ZmZhODcyZDNkMTBiMGFmNmRhOWVjN2M1ZjIzMGUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNF
KENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFj
dG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQoreworICAgIGlmICghbV9pbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFdlIG5lZWQgdGhpcyB0byBzdGF5IGlu
IHNjb3BlIGJlY2F1c2UgdGhlIG5hdGl2ZSBpbWFnZSBpcyBqdXN0IGEgc2hhbGxvdyBjb3B5IG9m
IHRoZSBkYXRhLgorICAgIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uID0gcHJlbXVsdGlwbHlBbHBo
YSA/IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkIDogQWxwaGFPcHRpb246Ok5vdFByZW11bHRp
cGxpZWQ7CisgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24gPSBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEdhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246OkFwcGxpZWQ7
CisgICAgYXV0byBzb3VyY2UgPSBJbWFnZVNvdXJjZTo6Y3JlYXRlKG51bGxwdHIsIGFscGhhT3B0
aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAgbV9hbHBoYU9wID0gQWxwaGFP
cDo6RG9Ob3RoaW5nOworCisgICAgaWYgKG1faW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBzb3Vy
Y2UtPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKKyAgICAgICAgaWYgKCFzb3VyY2Ut
PmZyYW1lQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9pbWFn
ZVN1cmZhY2UgPSBzb3VyY2UtPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKKyAgICAgICAgLy8gMS4gRm9yIHRleEltYWdlMkQgd2l0aCBIVE1MVmlkZW9F
bG1lbnQgaW5wdXQsIGFzc3VtZSBubyBQcmVtdWx0aXBseUFscGhhIGhhZCBiZWVuIGFwcGxpZWQg
YW5kIHRoZSBhbHBoYSB2YWx1ZSBpcyAweEZGIGZvciBlYWNoIHBpeGVsLAorICAgICAgICAvLyB3
aGljaCBpcyB0cnVlIGF0IHByZXNlbnQgYW5kIG1heSBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1cmUg
YW5kIG5lZWRzIGFkanVzdG1lbnQgYWNjb3JkaW5nbHkuCisgICAgICAgIC8vIDIuIEZvciB0ZXhJ
bWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1lbnQgaW5wdXQgaW4gd2hpY2ggQWxwaGEgaXMgYWxy
ZWFkeSBQcmVtdWx0aXBsaWVkIGluIHRoaXMgcG9ydCwgCisgICAgICAgIC8vIGRvIEFscGhhRG9V
bm11bHRpcGx5IGlmIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCBpcyBzZXQgdG8gZmFs
c2UuCisgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiBtX2ltYWdlSHRtbERvbVNvdXJj
ZSAhPSBET01Tb3VyY2U6OlZpZGVvKQorICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6
RG9Vbm11bHRpcGx5OworCisgICAgICAgIC8vIGlmIG1faW1hZ2VTdXJmYWNlIGlzIG5vdCBhbiBp
bWFnZSwgZXh0cmFjdCBhIGNvcHkgb2YgdGhlIHN1cmZhY2UKKyAgICAgICAgaWYgKG1faW1hZ2VT
dXJmYWNlICYmIGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9pbWFnZVN1cmZhY2UuZ2V0KCkpICE9
IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgeworICAgICAgICAgICAgSW50U2l6ZSBzdXJmYWNl
U2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOworICAgICAgICAg
ICAgYXV0byB0bXBTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUo
Q0FJUk9fRk9STUFUX0FSR0IzMiwgc3VyZmFjZVNpemUud2lkdGgoKSwgc3VyZmFjZVNpemUuaGVp
Z2h0KCkpKTsKKyAgICAgICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIobV9p
bWFnZVN1cmZhY2UuZ2V0KCksIHRtcFN1cmZhY2UuZ2V0KCksIEludFNpemUoKSwgSW50UmVjdChJ
bnRQb2ludCgpLCBzdXJmYWNlU2l6ZSksIEludFNpemUoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNF
KTsKKyAgICAgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gV1RGTW92ZSh0bXBTdXJmYWNlKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9pbWFnZVN1cmZhY2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1faW1hZ2VTdXJm
YWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworCisgICAgSW50U2l6ZSBp
bWFnZVNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBt
X2ltYWdlV2lkdGggPSBpbWFnZVNpemUud2lkdGgoKTsKKyAgICBtX2ltYWdlSGVpZ2h0ID0gaW1h
Z2VTaXplLmhlaWdodCgpOworICAgIGlmICghbV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZm9ybWF0KG1faW1hZ2VTdXJmYWNlLmdldCgpKSAhPSBDQUlST19GT1JNQVRfQVJHQjMyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBzcmNVbnBhY2tBbGlnbm1lbnQg
PSAxOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0
cmlkZShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7CisgICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDMy
OworICAgIHVuc2lnbmVkIHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDgg
KiBtX2ltYWdlV2lkdGg7CisgICAgaWYgKHBhZGRpbmcpIHsKKyAgICAgICAgc3JjVW5wYWNrQWxp
Z25tZW50ID0gcGFkZGluZyArIDE7CisgICAgICAgIHdoaWxlIChieXRlc1BlclJvdyAlIHNyY1Vu
cGFja0FsaWdubWVudCkKKyAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25tZW50OworICAgIH0K
KworICAgIG1faW1hZ2VQaXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1f
aW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gRGF0YUZvcm1h
dDo6QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCA9IHNyY1VucGFja0Fs
aWdubWVudDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgY29u
c3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVNpemUu
aXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQtPmNyKCk7CisgICAgcGxhdGZvcm1D
b250ZXh0LT5zYXZlKCk7CisKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1Np
emUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworCisgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIGNvbnN0X2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KGltYWdlUGl4ZWxzKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgaW1hZ2VTaXplLndpZHRoKCkgKiA0KSk7CisKKyAgICAv
LyBPcGVuR0wga2VlcHMgdGhlIHBpeGVscyBzdG9yZWQgYm90dG9tIHVwLCBzbyB3ZSBuZWVkIHRv
IGZsaXAgdGhlIGltYWdlIGhlcmUuCisgICAgY2Fpcm9fdHJhbnNsYXRlKGNyLCAwLCBpbWFnZVNp
emUuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NjYWxlKGNyLCAxLCAtMSk7CisKKyAgICBjYWlyb19z
ZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIpOworICAgIGNhaXJvX3NldF9zb3Vy
Y2Vfc3VyZmFjZShjciwgaW1hZ2VTdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19yZWN0
YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgLWNhbnZhc1NpemUuaGVpZ2h0KCkp
OworCisgICAgY2Fpcm9fZmlsbChjcik7CisgICAgcGxhdGZvcm1Db250ZXh0LT5yZXN0b3JlKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKSAmJiBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4IDZi
NjdmNTVkYzk4YjA3NjZhMDMxYzNhNGU3YjkwNjBmZGI4YjUwNGUuLjlkZTkwNDQ4MDdiOTE3Njll
NGYzNGQzNWNiMTZlNjM0NTNlNmJkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC03MjMs
NyArNzIzLDcgQEAgUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBj
b25zdAogICAgIHJldHVybiAwOwogfQogCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9u
U2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQs
IHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQz
RENHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM5MzhiNDQyYjgxMThhYWJh
M2Y0MzMxMDZiMTc3ZDBmODI3NWQyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU0NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNETkVPTi5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4
dC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0RhdGFQcm92aWRlci5oPgotI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0ltYWdlLmg+Ci0KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVu
dW0gU291cmNlRGF0YUZvcm1hdEJhc2UgewotICAgIFNvdXJjZUZvcm1hdEJhc2VSID0gMCwKLSAg
ICBTb3VyY2VGb3JtYXRCYXNlQSwKLSAgICBTb3VyY2VGb3JtYXRCYXNlUkEsCi0gICAgU291cmNl
Rm9ybWF0QmFzZUFSLAotICAgIFNvdXJjZUZvcm1hdEJhc2VSR0IsCi0gICAgU291cmNlRm9ybWF0
QmFzZVJHQkEsCi0gICAgU291cmNlRm9ybWF0QmFzZUFSR0IsCi0gICAgU291cmNlRm9ybWF0QmFz
ZU51bUZvcm1hdHMKLX07Ci0KLWVudW0gQWxwaGFGb3JtYXQgewotICAgIEFscGhhRm9ybWF0Tm9u
ZSA9IDAsCi0gICAgQWxwaGFGb3JtYXRGaXJzdCwKLSAgICBBbHBoYUZvcm1hdExhc3QsCi0gICAg
QWxwaGFGb3JtYXROdW1Gb3JtYXRzCi19OwotCi0vLyBUaGlzIHJldHVybnMgU291cmNlRm9ybWF0
TnVtRm9ybWF0cyBpZiB0aGUgY29tYmluYXRpb24gb2YgaW5wdXQgcGFyYW1ldGVycyBpcyB1bnN1
cHBvcnRlZC4KLXN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBnZXRTb3VyY2VE
YXRhRm9ybWF0KHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCwgQWxwaGFGb3JtYXQgYWxwaGFG
b3JtYXQsIGJvb2wgaXMxNkJpdEZvcm1hdCwgYm9vbCBiaWdFbmRpYW4pCi17Ci0gICAgY29uc3Qg
c3RhdGljIFNvdXJjZURhdGFGb3JtYXRCYXNlIGZvcm1hdFRhYmxlQmFzZVs0XVtBbHBoYUZvcm1h
dE51bUZvcm1hdHNdID0geyAvLyBjb21wb25lbnRzUGVyUGl4ZWwgeCBBbHBoYUZvcm1hdAotICAg
ICAgICAvLyBBbHBoYUZvcm1hdE5vbmUgICAgICAgICAgICBBbHBoYUZvcm1hdEZpcnN0ICAgICAg
ICAgICAgQWxwaGFGb3JtYXRMYXN0Ci0gICAgICAgIHsgU291cmNlRm9ybWF0QmFzZVIsICAgICAg
ICAgIFNvdXJjZUZvcm1hdEJhc2VBLCAgICAgICAgICBTb3VyY2VGb3JtYXRCYXNlQSAgICAgICAg
ICB9LCAvLyAxIGNvbXBvbmVudHNQZXJQaXhlbAotICAgICAgICB7IFNvdXJjZUZvcm1hdEJhc2VO
dW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNlQVIsICAgICAgICAgU291cmNlRm9ybWF0QmFzZVJB
ICAgICAgICAgfSwgLy8gMiBjb21wb25lbnRzUGVyUGl4ZWwKLSAgICAgICAgeyBTb3VyY2VGb3Jt
YXRCYXNlUkdCLCAgICAgICAgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNvdXJjZUZvcm1h
dEJhc2VOdW1Gb3JtYXRzIH0sIC8vIDMgY29tcG9uZW50c1BlclBpeGVsCi0gICAgICAgIHsgU291
cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNvdXJjZUZvcm1hdEJhc2VBUkdCLCAgICAgICBTb3Vy
Y2VGb3JtYXRCYXNlUkdCQSAgICAgICAgfSAvLyA0IGNvbXBvbmVudHNQZXJQaXhlbAotICAgIH07
Ci0gICAgY29uc3Qgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGZvcm1hdFRh
YmxlW1NvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzXVs0XSA9IHsgLy8gU291cmNlRGF0YUZvcm1h
dDo6QmFzZSB4IGJpdHNQZXJDb21wb25lbnQgeCBlbmRpYW4KLSAgICAgICAgLy8gOGJpdHMsIGxp
dHRsZSBlbmRpYW4gICAgICAgICAgICAgICAgIDhiaXRzLCBiaWcgZW5kaWFuICAgICAgICAgICAg
ICAgICAgICAgMTZiaXRzLCBsaXR0bGUgZW5kaWFuICAgICAgICAgICAgICAgICAgICAgICAgMTZi
aXRzLCBiaWcgZW5kaWFuCi0gICAgICAgIHsgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlI4LCAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjgsICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZMaXR0bGUsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSMTZCaWcgfSwKLSAgICAgICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QTgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBOCwgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkxpdHRsZSwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkExNkJpZyB9LAotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpBUjgsICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgICBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkxpdHRsZSwgICBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkExNkJpZyB9LAotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSQTgsICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSOCwgICBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVIxNkxpdHRsZSwgICBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6QVIxNkJpZyB9LAotICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpCR1I4LCAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsICBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZMaXR0bGUsICBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcgfSwKLSAgICAgICAgeyBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6QUJHUjgsIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JB
OCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkxpdHRsZSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkJpZyB9LAotICAgICAgICB7IEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpCR1JBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OkFSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjE2TGl0dGxlLCBHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjE2QmlnIH0KLSAgICB9OwotCi0gICAgQVNT
RVJUKGNvbXBvbmVudHNQZXJQaXhlbCA8PSA0ICYmIGNvbXBvbmVudHNQZXJQaXhlbCA+IDApOwot
ICAgIFNvdXJjZURhdGFGb3JtYXRCYXNlIGZvcm1hdEJhc2UgPSBmb3JtYXRUYWJsZUJhc2VbY29t
cG9uZW50c1BlclBpeGVsIC0gMV1bYWxwaGFGb3JtYXRdOwotICAgIGlmIChmb3JtYXRCYXNlID09
IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6Ok51bUZvcm1hdHM7Ci0gICAgcmV0dXJuIGZvcm1hdFRhYmxlW2Zv
cm1hdEJhc2VdWyhpczE2Qml0Rm9ybWF0ID8gMiA6IDApICsgKGJpZ0VuZGlhbiA/IDEgOiAwKV07
Ci19Ci0KLW5hbWVzcGFjZSB7Ci11aW50OF90IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHVpbnQx
Nl90IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZSA+PiA4OwotfQotCi11aW50OF90IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90Pih2YWx1ZSAmIDB4MDBGRik7Ci19Ci0KLXRlbXBsYXRlPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0IGZvcm1hdCwgdHlwZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRHN0
VHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KGNvbnN0
IFNvdXJjZVR5cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZv
cm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkxpdHRsZSwg
dWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCQTE2TGl0dGxlVG9SR0JBOChzb3Vy
Y2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwotI2VuZGlmCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRp
b25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0
aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsyXSk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzNdKTsKLSAg
ICAgICAgc291cmNlICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZCaWcsIHVpbnQxNl90LCB1aW50
OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2Qmln
VG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZC
aWdUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3Ix
NkJpZ1RvOChzb3VyY2VbMl0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVszXSk7Ci0gICAgICAgIHNvdXJjZSArPSA0OwotICAgICAgICBkZXN0
aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotI2lmIEhBVkUo
QVJNX05FT05fSU5UUklOU0lDUykKLSAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJHQjE2TGl0dGxl
VG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwotI2VuZGlmCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRl
c3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAg
ICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwot
ICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsy
XSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKLSAgICAgICAgc291cmNlICs9IDM7
Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0IxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90
KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKLSAg
ICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOwot
ICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsyXSk7
Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKLSAgICAgICAgc291cmNlICs9IDM7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQot
ewotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBTSU1EOjp1bnBhY2tPbmVSb3dP
ZkFSR0IxNkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsK
LSNlbmRpZgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJj
ZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgo
c291cmNlWzJdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRs
ZVRvOChzb3VyY2VbM10pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIHNvdXJjZSArPSA0OwotICAgICAgICBkZXN0
aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
QVJHQjE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRp
b25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5h
dGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsyXSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uWzJdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzNdKTsKLSAgICAgICAgZGVz
dGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBz
b3VyY2UgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNv
bnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgo
c291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRs
ZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKLSAg
ICAgICAgc291cmNlICs9IDE7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZCaWcsIHVpbnQxNl90LCB1aW50OF90
Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84
KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdU
bzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJp
Z1RvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IDB4RkY7Ci0gICAgICAg
IHNvdXJjZSArPSAxOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+
KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVU
bzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxp
dHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xv
cjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVy
dENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAgICAgICAgc291cmNlICs9IDI7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSQTE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVz
dGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBk
ZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKLSAgICAg
ICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOwotICAg
ICAgICBzb3VyY2UgKz0gMjsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0K
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50
OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0
dGxlVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9y
MTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0
Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNv
bnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIHNvdXJjZSArPSAyOwot
ICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6QVIxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAg
IGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKLSAgICAg
ICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOwotICAg
ICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsK
LSAgICAgICAgc291cmNlICs9IDI7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JH
QkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZMaXR0bGUsIHVpbnQxNl90LCB1
aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IDB4MDsKLSAgICAgICAg
ZGVzdGluYXRpb25bMV0gPSAweDA7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gMHgwOwotICAg
ICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7
Ci0gICAgICAgIHNvdXJjZSArPSAxOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0K
LX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9S
R0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2QmlnLCB1aW50MTZfdCwgdWlu
dDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxz
UGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSAweDA7Ci0gICAgICAgIGRl
c3RpbmF0aW9uWzFdID0gMHgwOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IDB4MDsKLSAgICAg
ICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAg
ICAgICBzb3VyY2UgKz0gMTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKLSAgICB9Ci19Ci0K
LXZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdCBzcmNGb3JtYXQsIGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0jZGVmaW5lIENPTlZFUlQxNkJJVEZPUk1B
VFRPUkdCQTgoU3JjRm9ybWF0KSBcCi0gICAgY2FzZSBTcmNGb3JtYXQ6IFwKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8U3JjRm9ybWF0Pihzb3VyY2UsIGRlc3RpbmF0
aW9uLCBwaXhlbHNQZXJSb3cpOwotCi0gICAgc3dpdGNoIChzcmNGb3JtYXQpIHsKLSAgICAgICAg
Q09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZCaWcpCi0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRP
UkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkxpdHRsZSkKLSAgICAgICAg
Q09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
QTE2QmlnKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSQTE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRU
T1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2QmlnKQotICAgICAgICBD
T05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpB
UjE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpBUjE2QmlnKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRU
T1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkxpdHRsZSkKLSAgICAg
ICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCMTZCaWcpCi0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkxpdHRsZSkKLSAgICAgICAgQ09OVkVSVDE2QklU
Rk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2QmlnKQot
ICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpBUkdCMTZMaXR0bGUpCi0gICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgo
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0IxNkJpZykKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0jdW5kZWYgQ09OVkVSVDE2QklU
Rk9STUFUVE9SR0JBOAotfQotCi19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rv
cjo6fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OwotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKLXsKLSAgICBpZiAoIW1faW1hZ2UpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIGhhc0FscGhhID0gIW1faW1hZ2UtPmN1cnJlbnRG
cmFtZUtub3duVG9CZU9wYXF1ZSgpOwotICAgIGlmICgoaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgp
KSB7Ci0gICAgICAgIGF1dG8gc291cmNlID0gSW1hZ2VTb3VyY2U6OmNyZWF0ZShudWxscHRyLCBB
bHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZCwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUg
PyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uOjpBcHBsaWVkKTsKLSAgICAgICAgc291cmNlLT5zZXREYXRhKG1faW1hZ2UtPmRh
dGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghc291cmNlLT5mcmFtZUNvdW50KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9kZWNvZGVkSW1hZ2UgPSBzb3VyY2UtPmNy
ZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOwotICAgICAgICBtX2NnSW1hZ2UgPSBtX2RlY29kZWRJ
bWFnZTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9jZ0ltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIW1fY2dJbWFnZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgbV9pbWFnZVdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG1fY2dJbWFnZS5n
ZXQoKSk7Ci0gICAgbV9pbWFnZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQobV9jZ0ltYWdlLmdl
dCgpKTsKLSAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2VlIHdoZXRoZXIgdGhlIGltYWdlIGlzIHVzaW5nIGFu
IGluZGV4ZWQgY29sb3Igc3BhY2UsIGFuZCBpZgotICAgIC8vIHNvLCByZS1yZW5kZXIgaXQgaW50
byBhbiBSR0IgY29sb3Igc3BhY2UuIFRoZSBpbWFnZSByZS1wYWNraW5nCi0gICAgLy8gY29kZSBy
ZXF1aXJlcyBjb2xvciBkYXRhLCBub3QgY29sb3IgdGFibGUgaW5kaWNlcywgZm9yIHRoZQotICAg
IC8vIGltYWdlIGRhdGEuCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0ltYWdl
R2V0Q29sb3JTcGFjZShtX2NnSW1hZ2UuZ2V0KCkpOwotICAgIENHQ29sb3JTcGFjZU1vZGVsIG1v
ZGVsID0gQ0dDb2xvclNwYWNlR2V0TW9kZWwoY29sb3JTcGFjZSk7Ci0gICAgaWYgKG1vZGVsID09
IGtDR0NvbG9yU3BhY2VNb2RlbEluZGV4ZWQpIHsKLSAgICAgICAgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gYml0bWFwQ29udGV4dDsKLSAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm9iYWJs
eSBtYW51YWxseSBjb252ZXJ0IHRoZSBpbWFnZSBieSBpbmRleGluZyBpbnRvCi0gICAgICAgIC8v
IHRoZSBjb2xvciB0YWJsZSwgd2hpY2ggd291bGQgYWxsb3cgdXMgdG8gYXZvaWQgcHJlbXVsdGlw
bHlpbmcgdGhlCi0gICAgICAgIC8vIGFscGhhIGNoYW5uZWwuIENyZWF0aW9uIG9mIGEgYml0bWFw
IGNvbnRleHQgd2l0aCBhbiBhbHBoYSBjaGFubmVsCi0gICAgICAgIC8vIGRvZXNuJ3Qgc2VlbSB0
byB3b3JrIHVubGVzcyBpdCdzIHByZW11bHRpcGxpZWQuCi0gICAgICAgIGJpdG1hcENvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VI
ZWlnaHQsIDgsIG1faW1hZ2VXaWR0aCAqIDQsCi0gICAgICAgICAgICBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVy
MzJIb3N0KSk7Ci0gICAgICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5n
ZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRp
b25RdWFsaXR5KGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0ludGVycG9sYXRpb25Ob25lKTsKLSAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgbV9pbWFnZVdpZHRoLCBtX2ltYWdlSGVpZ2h0KSwgbV9jZ0ltYWdlLmdldCgpKTsKLQot
ICAgICAgICAvLyBOb3cgZGlzY2FyZCB0aGUgb3JpZ2luYWwgQ0cgaW1hZ2UgYW5kIHJlcGxhY2Ug
aXQgd2l0aCBhIGNvcHkgZnJvbSB0aGUgYml0bWFwIGNvbnRleHQuCi0gICAgICAgIG1fZGVjb2Rl
ZEltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0
LmdldCgpKSk7Ci0gICAgICAgIG1fY2dJbWFnZSA9IG1fZGVjb2RlZEltYWdlLmdldCgpOwotICAg
IH0KLQotICAgIHNpemVfdCBiaXRzUGVyQ29tcG9uZW50ID0gQ0dJbWFnZUdldEJpdHNQZXJDb21w
b25lbnQobV9jZ0ltYWdlLmdldCgpKTsKLSAgICBzaXplX3QgYml0c1BlclBpeGVsID0gQ0dJbWFn
ZUdldEJpdHNQZXJQaXhlbChtX2NnSW1hZ2UuZ2V0KCkpOwotICAgIGlmIChiaXRzUGVyQ29tcG9u
ZW50ICE9IDggJiYgYml0c1BlckNvbXBvbmVudCAhPSAxNikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChiaXRzUGVyUGl4ZWwgJSBiaXRzUGVyQ29tcG9uZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgc2l6ZV90IGNvbXBvbmVudHNQZXJQaXhlbCA9IGJpdHNQZXJQaXhlbCAv
IGJpdHNQZXJDb21wb25lbnQ7Ci0KLSAgICBDR0JpdG1hcEluZm8gYml0SW5mbyA9IENHSW1hZ2VH
ZXRCaXRtYXBJbmZvKG1fY2dJbWFnZS5nZXQoKSk7Ci0gICAgYm9vbCBiaWdFbmRpYW5Tb3VyY2Ug
PSBmYWxzZTsKLSAgICAvLyBUaGVzZSBjb3VsZCB0ZWNobmljYWxseSBiZSBjb21iaW5lZCBpbnRv
IG9uZSBsYXJnZSBzd2l0Y2gKLSAgICAvLyBzdGF0ZW1lbnQsIGJ1dCB3ZSBwcmVmZXIgbm90IHRv
IHNvIHRoYXQgd2UgZmFpbCBmYXN0IGlmIHdlCi0gICAgLy8gZW5jb3VudGVyIGFuIHVuZXhwZWN0
ZWQgaW1hZ2UgY29uZmlndXJhdGlvbi4KLSAgICBpZiAoYml0c1BlckNvbXBvbmVudCA9PSAxNikg
ewotICAgICAgICBzd2l0Y2ggKGJpdEluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXJNYXNrKSB7Ci0g
ICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMTZCaWc6Ci0gICAgICAgICAgICBiaWdFbmRp
YW5Tb3VyY2UgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Uga0NHQml0
bWFwQnl0ZU9yZGVyMTZMaXR0bGU6Ci0gICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlckRl
ZmF1bHQ6Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgYnVnIGluIGVhcmxpZXIgdmVyc2lvbiBv
ZiBjZyB3aGVyZSB0aGUgZGVmYXVsdCBlbmRpYW4KLSAgICAgICAgICAgIC8vIGlzIGxpdHRsZSB3
aGVyZWFzIHRoZSBkZWNvZGVkIDE2LWJpdCBwbmcgaW1hZ2UgZGF0YSBpcyBhY3R1YWxseQotICAg
ICAgICAgICAgLy8gQmlnLiBMYXRlciB2ZXJzaW9uICgxMC42LjQpIG5vIGxvbmdlciByZXR1cm5z
IEJ5dGVPcmRlckRlZmF1bHQuCi0gICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGJpdEluZm8g
JiBrQ0dCaXRtYXBCeXRlT3JkZXJNYXNrKSB7Ci0gICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9y
ZGVyMzJCaWc6Ci0gICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGU6Ci0gICAg
ICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBJdCBh
cHBlYXJzIHRoYXQgdGhlIGRlZmF1bHQgYnl0ZSBvcmRlciBpcyBhY3R1YWxseSBiaWcKLSAgICAg
ICAgICAgIC8vIGVuZGlhbiBldmVuIG9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlcy4KLSAg
ICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90aGluZzsKLSAgICBBbHBoYUZvcm1h
dCBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Tm9uZTsKLSAgICBzd2l0Y2ggKENHSW1hZ2VHZXRB
bHBoYUluZm8obV9jZ0ltYWdlLmdldCgpKSkgewotICAgIGNhc2Uga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRGaXJzdDoKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAg
ICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9Vbm11bHRpcGx5OwotICAgICAgICBhbHBoYUZvcm1h
dCA9IEFscGhhRm9ybWF0Rmlyc3Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga0NHSW1hZ2VB
bHBoYUZpcnN0OgotICAgICAgICAvLyBUaGlzIHBhdGggaXMgb25seSBhY2Nlc3NpYmxlIGZvciBN
YWNPUyBlYXJsaWVyIHRoYW4gMTAuNi40LgotICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkK
LSAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvUHJlbXVsdGlwbHk7Ci0gICAgICAg
IGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdDoKLSAgICAgICAgLy8gVGhpcyBwYXRoIGlzIG9u
bHkgYWNjZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFuIDEwLjYuNC4KLSAgICAgICAgYWxw
aGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDoKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFs
cGhhKQotICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9Vbm11bHRpcGx5OwotICAg
ICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBrQ0dJbWFnZUFscGhhTGFzdDoKLSAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0g
ICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1ByZW11bHRpcGx5OwotICAgICAgICBh
bHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBr
Q0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OgotICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9y
bWF0TGFzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9uZToKLSAg
ICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdE5vbmU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX2ltYWdlU291
cmNlRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4ZWwsIGFscGhh
Rm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2UpOwotICAgIGlm
IChtX2ltYWdlU291cmNlRm9ybWF0ID09IERhdGFGb3JtYXQ6Ok51bUZvcm1hdHMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIG1fcGl4ZWxEYXRhID0gYWRvcHRDRihDR0RhdGFQcm92aWRl
ckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIobV9jZ0ltYWdlLmdldCgpKSkpOwotICAg
IGlmICghbV9waXhlbERhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1faW1hZ2VQ
aXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihDRkRhdGFHZXRCeXRlUHRy
KG1fcGl4ZWxEYXRhLmdldCgpKSk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgc3JjVW5wYWNrQWxpZ25t
ZW50ID0gMDsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3co
bV9jZ0ltYWdlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBwYWRkaW5nID0gYnl0ZXNQZXJSb3cgLSBi
aXRzUGVyUGl4ZWwgLyA4ICogbV9pbWFnZVdpZHRoOwotICAgIGlmIChwYWRkaW5nKSB7Ci0gICAg
ICAgIHNyY1VucGFja0FsaWdubWVudCA9IHBhZGRpbmcgKyAxOwotICAgICAgICB3aGlsZSAoYnl0
ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgICAgICArK3NyY1VucGFja0Fs
aWdubWVudDsKLSAgICB9Ci0KLSAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3Jj
VW5wYWNrQWxpZ25tZW50OwotICAgIC8vIFVzaW5nIGEgYml0bWFwIGNvbnRleHQgY3JlYXRlZCBh
Y2NvcmRpbmcgdG8gZGVzdGluYXRpb24gZm9ybWF0IGFuZCBkcmF3aW5nIHRoZSBDR0ltYWdlIHRv
IHRoZSBiaXRtYXAgY29udGV4dCBjYW4gYWxzbyBkbyB0aGUgZm9ybWF0IGNvbnZlcnNpb24sCi0g
ICAgLy8gYnV0IGl0IHdvdWxkIHByZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsIGFzIGEgc2lk
ZSBlZmZlY3QuCi0gICAgLy8gUHJlZmVyIHRvIG1hbm51YWxseSBDb252ZXJ0IDE2Yml0IHBlci1j
b21wb25lbnQgZm9ybWF0cyB0byBSR0JBOCBmb3JtYXRzIGluc3RlYWQuCi0gICAgaWYgKGJpdHNQ
ZXJDb21wb25lbnQgPT0gMTYpIHsKLSAgICAgICAgbV9mb3JtYWxpemVkUkdCQThEYXRhID0gbWFr
ZVVuaXF1ZUFycmF5PHVpbnQ4X3Q+KChDaGVja2VkPHNpemVfdD4obV9pbWFnZVdpZHRoKSAqIG1f
aW1hZ2VIZWlnaHQgKiA0VSkudW5zYWZlR2V0KCkpOwotICAgICAgICBjb25zdCB1aW50MTZfdCog
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KG1faW1hZ2VQaXhlbERh
dGEpOwotICAgICAgICB1aW50OF90KiBkZXN0aW5hdGlvbiA9IG1fZm9ybWFsaXplZFJHQkE4RGF0
YS5nZXQoKTsKLSAgICAgICAgY29uc3QgcHRyZGlmZl90IHNyY1N0cmlkZUluRWxlbWVudHMgPSBi
eXRlc1BlclJvdyAvIHNpemVvZih1aW50MTZfdCk7Ci0gICAgICAgIGNvbnN0IHB0cmRpZmZfdCBk
c3RTdHJpZGVJbkVsZW1lbnRzID0gNCAqIG1faW1hZ2VXaWR0aDsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0wOyBpIDwgbV9pbWFnZUhlaWdodDsgaSsrKSB7Ci0gICAgICAgICAgICBjb252ZXJ0
MTZCaXRGb3JtYXRUb1JHQkE4KG1faW1hZ2VTb3VyY2VGb3JtYXQsIHNvdXJjZSwgZGVzdGluYXRp
b24sIG1faW1hZ2VXaWR0aCk7Ci0gICAgICAgICAgICBzb3VyY2UgKz0gc3JjU3RyaWRlSW5FbGVt
ZW50czsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IGRzdFN0cmlkZUluRWxlbWVudHM7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9pbWFnZVBpeGVsRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3Qgdm9pZCo+KG1fZm9ybWFsaXplZFJHQkE4RGF0YS5nZXQoKSk7Ci0gICAgICAgIG1faW1hZ2VT
b3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0OjpSR0JBODsKLSAgICAgICAgbV9pbWFnZVNvdXJjZVVu
cGFja0FsaWdubWVudCA9IDE7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
dm9pZCByZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpCi17
Ci0gICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4
ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGlt
YWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZVNpemUud2lkdGgoKSAqIDQ7Ci0gICAgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0KLSAgICBpZiAoY29udGV4dC5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGNvcGllZFBp
eGVsczsKLQotICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW1hZ2VTaXplLmhlaWdodCgpLCBy
b3dCeXRlcykuZ2V0VmFsdWUoY29waWVkUGl4ZWxzKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBtZW1jcHkoY29waWVkUGl4ZWxzLCBpbWFnZVBpeGVscywgcm93Qnl0ZXMgKiBpbWFn
ZVNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJvd0J5dGVzICog
aW1hZ2VTaXplLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdo
KGNvcGllZFBpeGVscywgZGF0YVNpemUpOwotICAgICAgICBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgY29waWVkUGl4ZWxzLCBkYXRhU2l6ZSwg
cmVsZWFzZUltYWdlRGF0YSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemVfdCBkYXRhU2l6
ZSA9IHJvd0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFnZUJ1
ZmZlcklzQmlnRW5vdWdoKGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGRhdGFQcm92
aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBpbWFnZVBpeGVs
cywgZGF0YVNpemUsIDApKTsKLSAgICB9Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJ
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXpl
LmhlaWdodCgpLCA4LCAzMiwgcm93Qnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsCi0gICAg
ICAgIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpKTsKLQotICAgIC8vIENTUyBzdHlsaW5nIG1heSBjYXVzZSB0aGUgY2FudmFzJ3MgY29udGVu
dCB0byBiZSByZXNpemVkIG9uCi0gICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZh
cyB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0Ci0gICAgLy8gd2lkdGggYW5kIGhlaWdodCB0byBk
cmF3LgotICAgIEZsb2F0UmVjdCBjYW52YXNSZWN0KEZsb2F0UG9pbnQoKSwgY2FudmFzU2l6ZSk7
Ci0gICAgLy8gV2Ugd2FudCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZnJh
bWUncwotICAgIC8vIHJlbmRlcmluZyByZXN1bHRzLgotCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7Ci0gICAgY29udGV4dC50cmFuc2xhdGUoMCwgLWltYWdlU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25R
dWFsaXR5OjpEb05vdEludGVycG9sYXRlKTsKLSAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShj
Z0ltYWdlLCBpbWFnZVNpemUsIGNhbnZhc1JlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGlt
YWdlU2l6ZSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgfSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRHTENHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjAzMGUwOGE1YzY2YjkzODU2YWEwYTk1YTM3
YmMyNWMyZmY0ZDliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKQEAgLTAsMCArMSw1NDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMTkVPTi5oIgorI2VuZGlmCisKKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHQ29udGV4dC5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0RhdGFQcm92aWRlci5oPgor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CisKKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2VudW0gU291cmNlRGF0YUZvcm1hdEJhc2UgeworICAgIFNvdXJjZUZvcm1hdEJhc2VS
ID0gMCwKKyAgICBTb3VyY2VGb3JtYXRCYXNlQSwKKyAgICBTb3VyY2VGb3JtYXRCYXNlUkEsCisg
ICAgU291cmNlRm9ybWF0QmFzZUFSLAorICAgIFNvdXJjZUZvcm1hdEJhc2VSR0IsCisgICAgU291
cmNlRm9ybWF0QmFzZVJHQkEsCisgICAgU291cmNlRm9ybWF0QmFzZUFSR0IsCisgICAgU291cmNl
Rm9ybWF0QmFzZU51bUZvcm1hdHMKK307CisKK2VudW0gQWxwaGFGb3JtYXQgeworICAgIEFscGhh
Rm9ybWF0Tm9uZSA9IDAsCisgICAgQWxwaGFGb3JtYXRGaXJzdCwKKyAgICBBbHBoYUZvcm1hdExh
c3QsCisgICAgQWxwaGFGb3JtYXROdW1Gb3JtYXRzCit9OworCisvLyBUaGlzIHJldHVybnMgU291
cmNlRm9ybWF0TnVtRm9ybWF0cyBpZiB0aGUgY29tYmluYXRpb24gb2YgaW5wdXQgcGFyYW1ldGVy
cyBpcyB1bnN1cHBvcnRlZC4KK3N0YXRpYyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBn
ZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCwgQWxwaGFGb3Jt
YXQgYWxwaGFGb3JtYXQsIGJvb2wgaXMxNkJpdEZvcm1hdCwgYm9vbCBiaWdFbmRpYW4pCit7Cisg
ICAgY29uc3Qgc3RhdGljIFNvdXJjZURhdGFGb3JtYXRCYXNlIGZvcm1hdFRhYmxlQmFzZVs0XVtB
bHBoYUZvcm1hdE51bUZvcm1hdHNdID0geyAvLyBjb21wb25lbnRzUGVyUGl4ZWwgeCBBbHBoYUZv
cm1hdAorICAgICAgICAvLyBBbHBoYUZvcm1hdE5vbmUgICAgICAgICAgICBBbHBoYUZvcm1hdEZp
cnN0ICAgICAgICAgICAgQWxwaGFGb3JtYXRMYXN0CisgICAgICAgIHsgU291cmNlRm9ybWF0QmFz
ZVIsICAgICAgICAgIFNvdXJjZUZvcm1hdEJhc2VBLCAgICAgICAgICBTb3VyY2VGb3JtYXRCYXNl
QSAgICAgICAgICB9LCAvLyAxIGNvbXBvbmVudHNQZXJQaXhlbAorICAgICAgICB7IFNvdXJjZUZv
cm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNlQVIsICAgICAgICAgU291cmNlRm9y
bWF0QmFzZVJBICAgICAgICAgfSwgLy8gMiBjb21wb25lbnRzUGVyUGl4ZWwKKyAgICAgICAgeyBT
b3VyY2VGb3JtYXRCYXNlUkdCLCAgICAgICAgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNv
dXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzIH0sIC8vIDMgY29tcG9uZW50c1BlclBpeGVsCisgICAg
ICAgIHsgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNvdXJjZUZvcm1hdEJhc2VBUkdCLCAg
ICAgICBTb3VyY2VGb3JtYXRCYXNlUkdCQSAgICAgICAgfSAvLyA0IGNvbXBvbmVudHNQZXJQaXhl
bAorICAgIH07CisgICAgY29uc3Qgc3RhdGljIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IGZvcm1hdFRhYmxlW1NvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzXVs0XSA9IHsgLy8gU291cmNl
RGF0YUZvcm1hdDo6QmFzZSB4IGJpdHNQZXJDb21wb25lbnQgeCBlbmRpYW4KKyAgICAgICAgLy8g
OGJpdHMsIGxpdHRsZSBlbmRpYW4gICAgICAgICAgICAgICAgIDhiaXRzLCBiaWcgZW5kaWFuICAg
ICAgICAgICAgICAgICAgICAgMTZiaXRzLCBsaXR0bGUgZW5kaWFuICAgICAgICAgICAgICAgICAg
ICAgICAgMTZiaXRzLCBiaWcgZW5kaWFuCisgICAgICAgIHsgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlI4LCAgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjgsICAgIEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZMaXR0bGUsICAgIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSMTZCaWcgfSwKKyAgICAgICAgeyBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QTgsICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBOCwgICAg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkxpdHRsZSwgICAgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpBUjgsICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBOCwg
ICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkxpdHRsZSwgICBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTgsICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFS
OCwgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVIxNkxpdHRsZSwgICBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVIxNkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4LCAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJHQjgsICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZMaXR0bGUsICBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcgfSwKKyAgICAgICAgeyBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QUJHUjgsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkxpdHRsZSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkJpZyB9LAorICAgICAgICB7IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkFSR0I4LCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjE2TGl0
dGxlLCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjE2QmlnIH0KKyAgICB9Owor
CisgICAgQVNTRVJUKGNvbXBvbmVudHNQZXJQaXhlbCA8PSA0ICYmIGNvbXBvbmVudHNQZXJQaXhl
bCA+IDApOworICAgIFNvdXJjZURhdGFGb3JtYXRCYXNlIGZvcm1hdEJhc2UgPSBmb3JtYXRUYWJs
ZUJhc2VbY29tcG9uZW50c1BlclBpeGVsIC0gMV1bYWxwaGFGb3JtYXRdOworICAgIGlmIChmb3Jt
YXRCYXNlID09IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzKQorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6Ok51bUZvcm1hdHM7CisgICAgcmV0dXJuIGZvcm1h
dFRhYmxlW2Zvcm1hdEJhc2VdWyhpczE2Qml0Rm9ybWF0ID8gMiA6IDApICsgKGJpZ0VuZGlhbiA/
IDEgOiAwKV07Cit9CisKK25hbWVzcGFjZSB7Cit1aW50OF90IGNvbnZlcnRDb2xvcjE2TGl0dGxl
VG84KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSA+PiA4OworfQorCit1aW50
OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSAmIDB4MDBGRik7Cit9CisKK3RlbXBsYXRlPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGZvcm1hdCwgdHlwZW5hbWUgU291cmNlVHlwZSwgdHlw
ZW5hbWUgRHN0VHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JH
QkE4KGNvbnN0IFNvdXJjZVR5cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZl
cnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEx
NkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisjaWYgSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQorICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdCQTE2TGl0dGxlVG9S
R0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOworI2VuZGlmCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAg
ZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOworICAg
ICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsyXSk7
CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNl
WzNdKTsKKyAgICAgICAgc291cmNlICs9IDQ7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3Jt
YXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZCaWcsIHVpbnQx
Nl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRD
b2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVy
dENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252
ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMl0pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNv
bnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVszXSk7CisgICAgICAgIHNvdXJjZSArPSA0OworICAg
ICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCog
c291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQorewor
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJH
QjE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOworI2Vu
ZGlmCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Cisg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBd
KTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3Vy
Y2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84
KHNvdXJjZVsyXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKKyAgICAgICAgc291
cmNlICs9IDM7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0
IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytp
KSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNl
WzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3Vy
Y2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNv
dXJjZVsyXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKKyAgICAgICAgc291cmNl
ICs9IDM7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQoreworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBTSU1EOjp1bnBh
Y2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxz
UGVyUm93KTsKKyNlbmRpZgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJS
b3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxl
VG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZM
aXR0bGVUbzgoc291cmNlWzJdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29s
b3IxNkxpdHRsZVRvOChzb3VyY2VbM10pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZl
cnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAgIHNvdXJjZSArPSA0OworICAg
ICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QVJHQjE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAg
ZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOworICAgICAg
ICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsyXSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzNdKTsKKyAg
ICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwor
ICAgICAgICBzb3VyY2UgKz0gNDsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdC
QTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkxpdHRsZSwgdWludDE2X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZM
aXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29s
b3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZl
cnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0g
MHhGRjsKKyAgICAgICAgc291cmNlICs9IDE7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3Jt
YXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZCaWcsIHVpbnQxNl90
LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
aXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0
Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IDB4RkY7
CisgICAgICAgIHNvdXJjZSArPSAxOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0K
K30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9S
R0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkxpdHRsZSwgdWludDE2X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9y
MTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0
Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNv
bnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNd
ID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKKyAgICAgICAgc291cmNlICs9
IDI7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAg
ICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwor
ICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7
CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBd
KTsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2Vb
MV0pOworICAgICAgICBzb3VyY2UgKz0gMjsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1h
dFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSMTZMaXR0bGUsIHVpbnQx
Nl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRD
b2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29u
dmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMl0g
PSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlv
blszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAgIHNvdXJj
ZSArPSAyOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6QVIxNkJpZywgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7
CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFd
KTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2Vb
MV0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291
cmNlWzBdKTsKKyAgICAgICAgc291cmNlICs9IDI7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRG
b3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZMaXR0bGUsIHVp
bnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9IDB4MDsK
KyAgICAgICAgZGVzdGluYXRpb25bMV0gPSAweDA7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0g
MHgwOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNv
dXJjZVswXSk7CisgICAgICAgIHNvdXJjZSArPSAxOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0
OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0
Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2QmlnLCB1aW50
MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSAweDA7Cisg
ICAgICAgIGRlc3RpbmF0aW9uWzFdID0gMHgwOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IDB4
MDsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2Vb
MF0pOworICAgICAgICBzb3VyY2UgKz0gMTsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAg
ICB9Cit9CisKK3ZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBOChHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisjZGVmaW5lIENPTlZFUlQx
NkJJVEZPUk1BVFRPUkdCQTgoU3JjRm9ybWF0KSBcCisgICAgY2FzZSBTcmNGb3JtYXQ6IFwKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8U3JjRm9ybWF0Pihzb3VyY2Us
IGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOworCisgICAgc3dpdGNoIChzcmNGb3JtYXQpIHsK
KyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UjE2TGl0dGxlKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZCaWcpCisgICAgICAgIENPTlZFUlQxNkJJ
VEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkxpdHRsZSkK
KyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTE2QmlnKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2TGl0dGxlKQorICAgICAgICBDT05WRVJUMTZC
SVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2QmlnKQor
ICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpBUjE2TGl0dGxlKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjE2QmlnKQorICAgICAgICBDT05WRVJUMTZC
SVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkxpdHRs
ZSkKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCMTZCaWcpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgo
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkxpdHRsZSkKKyAgICAgICAgQ09O
VkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTE2QmlnKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUpCisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1B
VFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0IxNkJpZykKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisjdW5kZWYgQ09O
VkVSVDE2QklURk9STUFUVE9SR0JBOAorfQorCit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OworCitib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKK3sKKyAg
ICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGhhc0FscGhh
ID0gIW1faW1hZ2UtPmN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpOworICAgIGlmICgoaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhh
KSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7CisgICAgICAgIGF1dG8gc291cmNlID0gSW1hZ2VTb3Vy
Y2U6OmNyZWF0ZShudWxscHRyLCBBbHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZCwgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUgPyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3Jl
ZCA6IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKTsKKyAgICAgICAgc291cmNl
LT5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CisgICAgICAgIGlmICghc291cmNlLT5m
cmFtZUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9kZWNv
ZGVkSW1hZ2UgPSBzb3VyY2UtPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOworICAgICAgICBt
X2NnSW1hZ2UgPSBtX2RlY29kZWRJbWFnZTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jZ0ltYWdl
ID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIW1fY2dJ
bWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pbWFnZVdpZHRoID0gQ0dJbWFn
ZUdldFdpZHRoKG1fY2dJbWFnZS5nZXQoKSk7CisgICAgbV9pbWFnZUhlaWdodCA9IENHSW1hZ2VH
ZXRIZWlnaHQobV9jZ0ltYWdlLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9p
bWFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU2VlIHdoZXRoZXIg
dGhlIGltYWdlIGlzIHVzaW5nIGFuIGluZGV4ZWQgY29sb3Igc3BhY2UsIGFuZCBpZgorICAgIC8v
IHNvLCByZS1yZW5kZXIgaXQgaW50byBhbiBSR0IgY29sb3Igc3BhY2UuIFRoZSBpbWFnZSByZS1w
YWNraW5nCisgICAgLy8gY29kZSByZXF1aXJlcyBjb2xvciBkYXRhLCBub3QgY29sb3IgdGFibGUg
aW5kaWNlcywgZm9yIHRoZQorICAgIC8vIGltYWdlIGRhdGEuCisgICAgQ0dDb2xvclNwYWNlUmVm
IGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZShtX2NnSW1hZ2UuZ2V0KCkpOworICAg
IENHQ29sb3JTcGFjZU1vZGVsIG1vZGVsID0gQ0dDb2xvclNwYWNlR2V0TW9kZWwoY29sb3JTcGFj
ZSk7CisgICAgaWYgKG1vZGVsID09IGtDR0NvbG9yU3BhY2VNb2RlbEluZGV4ZWQpIHsKKyAgICAg
ICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gYml0bWFwQ29udGV4dDsKKyAgICAgICAgLy8gRklY
TUU6IHdlIHNob3VsZCBwcm9iYWJseSBtYW51YWxseSBjb252ZXJ0IHRoZSBpbWFnZSBieSBpbmRl
eGluZyBpbnRvCisgICAgICAgIC8vIHRoZSBjb2xvciB0YWJsZSwgd2hpY2ggd291bGQgYWxsb3cg
dXMgdG8gYXZvaWQgcHJlbXVsdGlwbHlpbmcgdGhlCisgICAgICAgIC8vIGFscGhhIGNoYW5uZWwu
IENyZWF0aW9uIG9mIGEgYml0bWFwIGNvbnRleHQgd2l0aCBhbiBhbHBoYSBjaGFubmVsCisgICAg
ICAgIC8vIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHVubGVzcyBpdCdzIHByZW11bHRpcGxpZWQuCisg
ICAgICAgIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBt
X2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1faW1hZ2VXaWR0aCAqIDQsCisgICAgICAg
ICAgICBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0
IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7CisgICAgICAgIGlmICghYml0bWFwQ29udGV4
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENH
Q29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0lu
dGVycG9sYXRpb25Ob25lKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbV9pbWFnZVdpZHRoLCBtX2ltYWdlSGVpZ2h0KSwg
bV9jZ0ltYWdlLmdldCgpKTsKKworICAgICAgICAvLyBOb3cgZGlzY2FyZCB0aGUgb3JpZ2luYWwg
Q0cgaW1hZ2UgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIGNvcHkgZnJvbSB0aGUgYml0bWFwIGNvbnRl
eHQuCisgICAgICAgIG1fZGVjb2RlZEltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1fY2dJbWFnZSA9IG1fZGVj
b2RlZEltYWdlLmdldCgpOworICAgIH0KKworICAgIHNpemVfdCBiaXRzUGVyQ29tcG9uZW50ID0g
Q0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQobV9jZ0ltYWdlLmdldCgpKTsKKyAgICBzaXplX3Qg
Yml0c1BlclBpeGVsID0gQ0dJbWFnZUdldEJpdHNQZXJQaXhlbChtX2NnSW1hZ2UuZ2V0KCkpOwor
ICAgIGlmIChiaXRzUGVyQ29tcG9uZW50ICE9IDggJiYgYml0c1BlckNvbXBvbmVudCAhPSAxNikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChiaXRzUGVyUGl4ZWwgJSBiaXRzUGVyQ29t
cG9uZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2l6ZV90IGNvbXBvbmVudHNQZXJQ
aXhlbCA9IGJpdHNQZXJQaXhlbCAvIGJpdHNQZXJDb21wb25lbnQ7CisKKyAgICBDR0JpdG1hcElu
Zm8gYml0SW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKG1fY2dJbWFnZS5nZXQoKSk7CisgICAg
Ym9vbCBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKKyAgICAvLyBUaGVzZSBjb3VsZCB0ZWNobmlj
YWxseSBiZSBjb21iaW5lZCBpbnRvIG9uZSBsYXJnZSBzd2l0Y2gKKyAgICAvLyBzdGF0ZW1lbnQs
IGJ1dCB3ZSBwcmVmZXIgbm90IHRvIHNvIHRoYXQgd2UgZmFpbCBmYXN0IGlmIHdlCisgICAgLy8g
ZW5jb3VudGVyIGFuIHVuZXhwZWN0ZWQgaW1hZ2UgY29uZmlndXJhdGlvbi4KKyAgICBpZiAoYml0
c1BlckNvbXBvbmVudCA9PSAxNikgeworICAgICAgICBzd2l0Y2ggKGJpdEluZm8gJiBrQ0dCaXRt
YXBCeXRlT3JkZXJNYXNrKSB7CisgICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMTZCaWc6
CisgICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMTZMaXR0bGU6CisgICAgICAgICAgICBi
aWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQ6CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgYnVn
IGluIGVhcmxpZXIgdmVyc2lvbiBvZiBjZyB3aGVyZSB0aGUgZGVmYXVsdCBlbmRpYW4KKyAgICAg
ICAgICAgIC8vIGlzIGxpdHRsZSB3aGVyZWFzIHRoZSBkZWNvZGVkIDE2LWJpdCBwbmcgaW1hZ2Ug
ZGF0YSBpcyBhY3R1YWxseQorICAgICAgICAgICAgLy8gQmlnLiBMYXRlciB2ZXJzaW9uICgxMC42
LjQpIG5vIGxvbmdlciByZXR1cm5zIEJ5dGVPcmRlckRlZmF1bHQuCisgICAgICAgICAgICBiaWdF
bmRpYW5Tb3VyY2UgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBzd2l0Y2ggKGJpdEluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXJNYXNrKSB7CisgICAgICAg
IGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWc6CisgICAgICAgICAgICBiaWdFbmRpYW5Tb3Vy
Y2UgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NHQml0bWFwQnl0
ZU9yZGVyMzJMaXR0bGU6CisgICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQ6
CisgICAgICAgICAgICAvLyBJdCBhcHBlYXJzIHRoYXQgdGhlIGRlZmF1bHQgYnl0ZSBvcmRlciBp
cyBhY3R1YWxseSBiaWcKKyAgICAgICAgICAgIC8vIGVuZGlhbiBldmVuIG9uIGxpdHRsZSBlbmRp
YW4gYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90
aGluZzsKKyAgICBBbHBoYUZvcm1hdCBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Tm9uZTsKKyAg
ICBzd2l0Y2ggKENHSW1hZ2VHZXRBbHBoYUluZm8obV9jZ0ltYWdlLmdldCgpKSkgeworICAgIGNh
c2Uga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdDoKKyAgICAgICAgaWYgKCFwcmVtdWx0
aXBseUFscGhhKQorICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9Vbm11bHRpcGx5
OworICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2Uga0NHSW1hZ2VBbHBoYUZpcnN0OgorICAgICAgICAvLyBUaGlzIHBhdGggaXMg
b25seSBhY2Nlc3NpYmxlIGZvciBNYWNPUyBlYXJsaWVyIHRoYW4gMTAuNi40LgorICAgICAgICBp
ZiAocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRv
UHJlbXVsdGlwbHk7CisgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJzdDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdDoKKyAgICAg
ICAgLy8gVGhpcyBwYXRoIGlzIG9ubHkgYWNjZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFu
IDEwLjYuNC4KKyAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDoKKyAgICAg
ICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFP
cDo6RG9Vbm11bHRpcGx5OworICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhTGFzdDoKKyAgICAgICAgaWYg
KHByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1By
ZW11bHRpcGx5OworICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OgorICAgICAgICBh
bHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBr
Q0dJbWFnZUFscGhhTm9uZToKKyAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdE5vbmU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21w
b25lbnRzUGVyUGl4ZWwsIGFscGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdF
bmRpYW5Tb3VyY2UpOworICAgIGlmIChtX2ltYWdlU291cmNlRm9ybWF0ID09IERhdGFGb3JtYXQ6
Ok51bUZvcm1hdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGl4ZWxEYXRhID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIobV9j
Z0ltYWdlLmdldCgpKSkpOworICAgIGlmICghbV9waXhlbERhdGEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIG1faW1hZ2VQaXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHZv
aWQqPihDRkRhdGFHZXRCeXRlUHRyKG1fcGl4ZWxEYXRhLmdldCgpKSk7CisKKyAgICB1bnNpZ25l
ZCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAwOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1h
Z2VHZXRCeXRlc1BlclJvdyhtX2NnSW1hZ2UuZ2V0KCkpOworICAgIHVuc2lnbmVkIHBhZGRpbmcg
PSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDggKiBtX2ltYWdlV2lkdGg7CisgICAgaWYg
KHBhZGRpbmcpIHsKKyAgICAgICAgc3JjVW5wYWNrQWxpZ25tZW50ID0gcGFkZGluZyArIDE7Cisg
ICAgICAgIHdoaWxlIChieXRlc1BlclJvdyAlIHNyY1VucGFja0FsaWdubWVudCkKKyAgICAgICAg
ICAgICsrc3JjVW5wYWNrQWxpZ25tZW50OworICAgIH0KKworICAgIG1faW1hZ2VTb3VyY2VVbnBh
Y2tBbGlnbm1lbnQgPSBzcmNVbnBhY2tBbGlnbm1lbnQ7CisgICAgLy8gVXNpbmcgYSBiaXRtYXAg
Y29udGV4dCBjcmVhdGVkIGFjY29yZGluZyB0byBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIGRyYXdp
bmcgdGhlIENHSW1hZ2UgdG8gdGhlIGJpdG1hcCBjb250ZXh0IGNhbiBhbHNvIGRvIHRoZSBmb3Jt
YXQgY29udmVyc2lvbiwKKyAgICAvLyBidXQgaXQgd291bGQgcHJlbXVsdGlwbHkgdGhlIGFscGhh
IGNoYW5uZWwgYXMgYSBzaWRlIGVmZmVjdC4KKyAgICAvLyBQcmVmZXIgdG8gbWFubnVhbGx5IENv
bnZlcnQgMTZiaXQgcGVyLWNvbXBvbmVudCBmb3JtYXRzIHRvIFJHQkE4IGZvcm1hdHMgaW5zdGVh
ZC4KKyAgICBpZiAoYml0c1BlckNvbXBvbmVudCA9PSAxNikgeworICAgICAgICBtX2Zvcm1hbGl6
ZWRSR0JBOERhdGEgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhfdD4oKENoZWNrZWQ8c2l6ZV90Piht
X2ltYWdlV2lkdGgpICogbV9pbWFnZUhlaWdodCAqIDRVKS51bnNhZmVHZXQoKSk7CisgICAgICAg
IGNvbnN0IHVpbnQxNl90KiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90
Kj4obV9pbWFnZVBpeGVsRGF0YSk7CisgICAgICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uID0gbV9m
b3JtYWxpemVkUkdCQThEYXRhLmdldCgpOworICAgICAgICBjb25zdCBwdHJkaWZmX3Qgc3JjU3Ry
aWRlSW5FbGVtZW50cyA9IGJ5dGVzUGVyUm93IC8gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICAgICAg
Y29uc3QgcHRyZGlmZl90IGRzdFN0cmlkZUluRWxlbWVudHMgPSA0ICogbV9pbWFnZVdpZHRoOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPTA7IGkgPCBtX2ltYWdlSGVpZ2h0OyBpKyspIHsKKyAg
ICAgICAgICAgIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTgobV9pbWFnZVNvdXJjZUZvcm1hdCwg
c291cmNlLCBkZXN0aW5hdGlvbiwgbV9pbWFnZVdpZHRoKTsKKyAgICAgICAgICAgIHNvdXJjZSAr
PSBzcmNTdHJpZGVJbkVsZW1lbnRzOworICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gZHN0U3Ry
aWRlSW5FbGVtZW50czsKKyAgICAgICAgfQorICAgICAgICBtX2ltYWdlUGl4ZWxEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obV9mb3JtYWxpemVkUkdCQThEYXRhLmdldCgpKTsK
KyAgICAgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IERhdGFGb3JtYXQ6OlJHQkE4OworICAgICAg
ICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gMTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURhdGEodm9pZCosIGNvbnN0IHZvaWQq
IGRhdGEsIHNpemVfdCkKK3sKKyAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50VG9DYW52YXMoY29uc3Qg
dW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAg
IGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1wdHkoKSB8fCBjYW52YXNTaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByb3dCeXRlcyA9IGltYWdlU2l6ZS53
aWR0aCgpICogNDsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRl
cjsKKworICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICAgICAg
dW5zaWduZWQgY2hhciogY29waWVkUGl4ZWxzOworCisgICAgICAgIGlmICghdHJ5RmFzdENhbGxv
YyhpbWFnZVNpemUuaGVpZ2h0KCksIHJvd0J5dGVzKS5nZXRWYWx1ZShjb3BpZWRQaXhlbHMpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1lbWNweShjb3BpZWRQaXhlbHMsIGltYWdl
UGl4ZWxzLCByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgc2l6ZV90
IGRhdGFTaXplID0gcm93Qnl0ZXMgKiBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29waWVkUGl4ZWxzLCBkYXRhU2l6ZSk7CisgICAgICAg
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBj
b3BpZWRQaXhlbHMsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcm93Qnl0ZXMgKiBpbWFnZVNpemUuaGVpZ2h0KCk7
CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goaW1hZ2VQaXhlbHMsIGRhdGFT
aXplKTsKKyAgICAgICAgZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhEYXRhKDAsIGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSwgMCkpOworICAgIH0KKworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdl
U2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIDMyLCByb3dCeXRlcywgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCwKKyAgICAgICAgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNh
dXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQgb24KKyAgICAvLyB0aGUgcGFn
ZS4gR28gYmFjayB0byB0aGUgQ2FudmFzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKKyAgICAv
LyB3aWR0aCBhbmQgaGVpZ2h0IHRvIGRyYXcuCisgICAgRmxvYXRSZWN0IGNhbnZhc1JlY3QoRmxv
YXRQb2ludCgpLCBjYW52YXNTaXplKTsKKyAgICAvLyBXZSB3YW50IHRvIGNvbXBsZXRlbHkgb3Zl
cndyaXRlIHRoZSBwcmV2aW91cyBmcmFtZSdzCisgICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCisK
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAg
Y29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgw
LCAtaW1hZ2VTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0LnNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGUpOworICAgIGNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKGNnSW1hZ2UsIGltYWdlU2l6ZSwgY2FudmFzUmVjdCwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eSB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdS
QVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjY2I0NDU1YWE1Y2I3ZmNhNzZiYzRkM2ViZjg3MWFl
Zjc1MDZkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENv
Y29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsODUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4
dDNELmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhVVNFKEFOR0xFKQotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKLSNlbmRpZgotCi0jaW1wb3J0ICJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dDNETWFuYWdlci5oIgotI2ltcG9ydCAiSFRNTENhbnZhc0VsZW1lbnQuaCIK
LSNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJHTExheWVyLmgiCi0jaW1wb3J0ICJXZWJHTE9iamVj
dC5oIgotI2ltcG9ydCAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgotI2ltcG9ydCA8Q29y
ZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgotI2ltcG9ydCA8c3lzL3N5c2N0bC5oPgotI2lt
cG9ydCA8c3lzZXhpdHMuaD4KLSNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+Ci0j
aW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2ltcG9y
dCA8T3BlbkdMRVMvRUFHTC5oPgotI2ltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdhYmxlLmg+Ci0j
aW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+Ci0jaW1wb3J0IDxPcGVuR0xFUy9FUzIv
Z2xleHQuaD4KLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2ltcG9ydCA8cGFs
L3NwaS9pb3MvT3BlbkdMRVNTUEkuaD4KLSNlbGlmIFVTRShPUEVOR0wpCi0jaW1wb3J0IDxJT0tp
dC9JT0tpdExpYi5oPgotI2ltcG9ydCA8T3BlbkdML2dsLmg+Ci0jZWxpZiBVU0UoQU5HTEUpCi0j
ZGVmaW5lIEVHTF9FR0xfUFJPVE9UWVBFUyAwCi0vLyBTa2lwIHRoZSBpbmNsdXNpb24gb2YgQU5H
TEUncyBleHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50cyBmb3Igbm93LgotI2RlZmluZSBHTF9B
TkdMRV9leHBsaWNpdF9jb250ZXh0Ci0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHRf
Z2xlczEKLXR5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0OwotI2luY2x1ZGUgPEFOR0xFL2VnbC5o
PgotI2luY2x1ZGUgPEFOR0xFL2VnbGV4dC5oPgotI2luY2x1ZGUgPEFOR0xFL2VnbGV4dF9hbmds
ZS5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19lZ2wuaD4KLSNpbmNsdWRlIDxBTkdM
RS9lbnRyeV9wb2ludHNfZWdsX2V4dC5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19n
bGVzXzJfMF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0
X2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9n
bDJleHRfYW5nbGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKE9QRU5HTF9FUykgfHwgVVNFKE9QRU5H
TCkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNlbGlmIFVTRShBTkdMRSkKLSNp
bmNsdWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMp
Ci0jaW1wb3J0ICJTY3JlZW5Qcm9wZXJ0aWVzLmgiCi0jaWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFO
R0xFKQotI2ltcG9ydCA8T3BlbkdML0NHTFJlbmRlcmVycy5oPgotI2VuZGlmCi0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3RhdHVzQ2hlY2tU
aHJlc2hvbGQgPSA1OwotCi0vLyBGSVhNRTogVGhpcyBjbGFzcyBpcyBjdXJyZW50bHkgZW1wdHkg
b24gTWFjLCBidXQgd2lsbCBnZXQgcG9wdWxhdGVkIGFzCi0vLyB0aGUgcmVzdHJ1Y3R1cmluZyBp
biBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY5MDMgaXMgZG9uZQot
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250
ZXh0M0QqKSB7IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkgeyB9Ci19
OwotCi1SZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93
LCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCi17Ci0gICAgLy8g
VGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBk
aXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGlu
YXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIE1ha2Ugc3BhY2UgZm9yIHRoZSBpbmNvbWluZyBjb250ZXh0IGlmIHdlJ3JlIGZ1bGwu
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVjeWNsZUNv
bnRleHRJZk5lY2Vzc2FyeSgpOwotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5oYXNUb29NYW55Q29udGV4dHMoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihu
ZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5kb3csIGRlc3RpbmF0aW9uKSk7Ci0K
LSAgICBpZiAoIWNvbnRleHQtPm1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250
ZXh0KGNvbnRleHQuZ2V0KCksIGhvc3RXaW5kb3cpOwotCi0gICAgcmV0dXJuIGNvbnRleHQ7Ci19
Ci0KLVJlZjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYXJl
ZChHcmFwaGljc0NvbnRleHQzRCYgc2hhcmVkQ29udGV4dCkKLXsKLSAgICBhdXRvIGhvc3RXaW5k
b3cgPSBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5ob3N0V2luZG93
Rm9yQ29udGV4dCgmc2hhcmVkQ29udGV4dCk7Ci0gICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYo
Km5ldyBHcmFwaGljc0NvbnRleHQzRChzaGFyZWRDb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCks
IGhvc3RXaW5kb3csIHNoYXJlZENvbnRleHQuZGVzdGluYXRpb24oKSwgJnNoYXJlZENvbnRleHQp
KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmFkZENv
bnRleHQoY29udGV4dC5wdHIoKSwgaG9zdFdpbmRvdyk7Ci0KLSAgICByZXR1cm4gY29udGV4dDsK
LX0KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpIC8v
IEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBiZSBqdXN0IChVU0UoT1BFTkdMKSB8fCBVU0Uo
QU5HTEUpKSAtIHNlZSA8cmRhcjovLzUzMDYyNzk0Pi4KLQotc3RhdGljIHZvaWQgc2V0R1BVQnlS
ZWdpc3RyeUlEKENHTENvbnRleHRPYmogY29udGV4dE9iaiwgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4
ZWxGb3JtYXRPYmosIElPUmVnaXN0cnlHUFVJRCBwcmVmZXJyZWRHUFVJRCkKLXsKLSAgICAvLyBX
aGVuIHRoZSBXZWJQcm9jZXNzIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBXaW5kb3dTZXJ2
ZXIsIHRoZXJlIGlzIG5vIHdheSBmb3IgT3BlbkdMIHRvIHRlbGwgd2hpY2ggR1BVIGlzIGNvbm5l
Y3RlZCB0byBhIGRpc3BsYXkuCi0gICAgLy8gT24gMTAuMTMrLCBmaW5kIHRoZSB2aXJ0dWFsIHNj
cmVlbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcmVmZXJyZWQgR1BVIGJ5IGl0cyByZWdpc3Ry
eUlELgotICAgIC8vIENHTFNldFZpcnR1YWxTY3JlZW4gY2FuIHRoZW4gYmUgdXNlZCB0byB0ZWxs
IE9wZW5HTCB3aGljaCBHUFUgaXQgc2hvdWxkIGJlIHVzaW5nLgotCi0gICAgaWYgKCFjb250ZXh0
T2JqIHx8ICFwcmVmZXJyZWRHUFVJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0xpbnQgdmly
dHVhbFNjcmVlbkNvdW50ID0gMDsKLSAgICBDR0xFcnJvciBlcnJvciA9IENHTERlc2NyaWJlUGl4
ZWxGb3JtYXQocGl4ZWxGb3JtYXRPYmosIDAsIGtDR0xQRkFWaXJ0dWFsU2NyZWVuQ291bnQsICZ2
aXJ0dWFsU2NyZWVuQ291bnQpOwotICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Ci0K
LSAgICBHTGludCBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuID0gLTE7Ci0KLSAgICBmb3IgKEdMaW50
IHZpcnR1YWxTY3JlZW4gPSAwOyB2aXJ0dWFsU2NyZWVuIDwgdmlydHVhbFNjcmVlbkNvdW50OyAr
K3ZpcnR1YWxTY3JlZW4pIHsKLSAgICAgICAgR0xpbnQgZGlzcGxheU1hc2sgPSAwOwotICAgICAg
ICBlcnJvciA9IENHTERlc2NyaWJlUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXRPYmosIHZpcnR1YWxT
Y3JlZW4sIGtDR0xQRkFEaXNwbGF5TWFzaywgJmRpc3BsYXlNYXNrKTsKLSAgICAgICAgQVNTRVJU
KGVycm9yID09IGtDR0xOb0Vycm9yKTsKLQotICAgICAgICBhdXRvIGdwdUlEID0gZ3B1SURGb3JE
aXNwbGF5TWFzayhkaXNwbGF5TWFzayk7Ci0KLSAgICAgICAgaWYgKGdwdUlEID09IHByZWZlcnJl
ZEdQVUlEKSB7Ci0gICAgICAgICAgICBlcnJvciA9IENHTFNldFZpcnR1YWxTY3JlZW4oY29udGV4
dE9iaiwgdmlydHVhbFNjcmVlbik7Ci0gICAgICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5v
RXJyb3IpOwotICAgICAgICAgICAgTE9HKFdlYkdMLCAiQ29udGV4dCAoJXApIHNldCB0byBHUFUg
d2l0aCBJRDogKCVsbGQpLiIsIGNvbnRleHRPYmosIGdwdUlEKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmaXJzdEFjY2VsZXJhdGVkU2NyZWVuIDwgMCkg
ewotICAgICAgICAgICAgR0xpbnQgaXNBY2NlbGVyYXRlZCA9IDA7Ci0gICAgICAgICAgICBlcnJv
ciA9IENHTERlc2NyaWJlUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXRPYmosIHZpcnR1YWxTY3JlZW4s
IGtDR0xQRkFBY2NlbGVyYXRlZCwgJmlzQWNjZWxlcmF0ZWQpOwotICAgICAgICAgICAgQVNTRVJU
KGVycm9yID09IGtDR0xOb0Vycm9yKTsKLSAgICAgICAgICAgIGlmIChpc0FjY2VsZXJhdGVkKQot
ICAgICAgICAgICAgICAgIGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4gPSB2aXJ0dWFsU2NyZWVuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm8gcmVnaXN0cnlJRCBtYXRjaCBmb3VuZDsgc2V0
IHRvIGZpcnN0IGhhcmR3YXJlLWFjY2VsZXJhdGVkIHZpcnR1YWwgc2NyZWVuLgotICAgIGlmIChm
aXJzdEFjY2VsZXJhdGVkU2NyZWVuID49IDApIHsKLSAgICAgICAgZXJyb3IgPSBDR0xTZXRWaXJ0
dWFsU2NyZWVuKGNvbnRleHRPYmosIGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4pOwotICAgICAgICBB
U1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOwotICAgICAgICBMT0coV2ViR0wsICJSZWdpc3Ry
eUlEICglbGxkKSBub3QgbWF0Y2hlZDsgQ29udGV4dCAoJXApIHNldCB0byB2aXJ0dWFsIHNjcmVl
biAoJWQpLiIsIHByZWZlcnJlZEdQVUlELCBjb250ZXh0T2JqLCBmaXJzdEFjY2VsZXJhdGVkU2Ny
ZWVuKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdM
KSB8fCBVU0UoQU5HTEUpKQotCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0Qo
R3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93
LCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdyYXBoaWNzQ29u
dGV4dDNEKiBzaGFyZWRDb250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0M0RCYXNlKGF0dHJz
LCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4odGhpcykpCi17Ci0gICAgQVNTRVJUKEFOR0xFV2Vi
S2l0QnJpZGdlOjphbmdsZUF2YWlsYWJsZSgpKTsKLSAgICBpZiAoIUFOR0xFV2ViS2l0QnJpZGdl
OjphbmdsZUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzRm9yV2ViR0wy
ID0gYXR0cnMuaXNXZWJHTDI7Ci0KLSNpZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCi0g
ICAgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24gPSAoaGFzTG93QW5kSGlnaFBvd2Vy
R1BVcygpICYmIGF0dHJzLnBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHQzRFBvd2Vy
UHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSA/IEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVm
ZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UgOiBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5j
ZTo6RGVmYXVsdDsKLSNlbHNlCi0gICAgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24g
PSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdDsKLSNlbmRpZgotCi0j
aWYgIVVTRShBTkdMRSkKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIGlmIChtX2lzRm9yV2ViR0wy
KQotICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQs
IFNIX1dFQkdMMl9TUEVDKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdl
YktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCk7Ci0jZWxzZQotICAgIGlmIChtX2lzRm9yV2ViR0wy
KQotICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF80MTBfQ09S
RV9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKLSNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQotI2Vu
ZGlmIC8vICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIFVOVVNFRF9QQVJB
TShob3N0V2luZG93KTsKLSAgICBFQUdMUmVuZGVyaW5nQVBJIGFwaSA9IG1faXNGb3JXZWJHTDIg
PyBrRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMyA6IGtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMy
OwotICAgIEVBR0xDb250ZXh0ICpjb250ZXh0T2JqOwotICAgIGlmICghc2hhcmVkQ29udGV4dCkK
LSAgICAgICAgY29udGV4dE9iaiA9IFtbRUFHTENvbnRleHQgYWxsb2NdIGluaXRXaXRoQVBJOmFw
aV07Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0T2JqID0gW1tFQUdMQ29udGV4dCBhbGxvY10g
aW5pdFdpdGhBUEk6YXBpIHNoYXJlZ3JvdXA6c3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4oc2hh
cmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKS5zaGFyZWdyb3VwXTsKLQotICAgIG1fY29udGV4dE9i
aiA9IHN0YXRpY19jYXN0PHZvaWQgKj4oY29udGV4dE9iaik7Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAgICA6OmdsRW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7Ci0jZWxpZiBV
U0UoT1BFTkdMKQotCi0gICAgYm9vbCB1c2VNdWx0aXNhbXBsaW5nID0gYXR0cnMuYW50aWFsaWFz
OwotCi0gICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOwotICAgIENH
TFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKLSAgICBHTGludCBudW1QaXhlbEZv
cm1hdHMgPSAwOwotCi0gICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFjY2VsZXJhdGVkKTsKLSAg
ICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsKLSAgICBhdHRyaWJzLmFwcGVuZChz
dGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpKTsKLSAgICBhdHRyaWJzLmFw
cGVuZChrQ0dMUEZBRGVwdGhTaXplKTsKLSAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpKTsKLQotICAgIC8vIFRoaXMgYXR0cmlidXRlLCB3
aGlsZSBtZW50aW9uaW5nIG9mZmxpbmUgcmVuZGVyZXJzLCBpcyBhY3R1YWxseQotICAgIC8vIGFs
bG93aW5nIHVzIHRvIHJlcXVlc3QgdGhlIGludGVncmF0ZWQgZ3JhcGhpY3Mgb24gYSBkdWFsIEdQ
VQotICAgIC8vIHN5c3RlbSwgYW5kIG5vdCBmb3JjZSB0aGUgZGlzY3JldGUgR1BVLgotICAgIC8v
IFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvdGVjaG5vdGVzL3Ru
MjIyOS9faW5kZXguaHRtbAotICAgIGlmIChhbGxvd09mZmxpbmVSZW5kZXJlcnMoKSkKLSAgICAg
ICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFsbG93T2ZmbGluZVJlbmRlcmVycyk7Ci0KLSAgICBp
ZiAodXNlTXVsdGlzYW1wbGluZykgewotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBTXVs
dGlzYW1wbGUpOwotICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBU2FtcGxlQnVmZmVycyk7
Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlPigxKSk7Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFTYW1wbGVzKTsKLSAgICAg
ICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDQp
KTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc0ZvcldlYkdMMikgewotICAgICAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiBiYWNraW5nIGEgV2ViR0wyIEdyYXBoaWNzQ29udGV4dDNEIHdpdGggYSBPcGVu
R0wgNCBjb250ZXh0LCB3ZSBzaG91bGQgaW5zdGVhZCBiYWNrIGl0IHdpdGggQU5HTEUuCi0gICAg
ICAgIC8vIFVzZSBhbiBPcGVuR0wgNCBjb250ZXh0IGZvciBub3cgdW50aWwgdGhlIEFOR0xFIGJh
Y2tlbmQgaXMgcmVhZHkuCi0gICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFPcGVuR0xQcm9m
aWxlKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRB
dHRyaWJ1dGU+KGtDR0xPR0xQVmVyc2lvbl9HTDRfQ29yZSkpOwotICAgIH0KLQotICAgIGF0dHJp
YnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSk7Ci0KLSAg
ICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0T2JqLCAm
bnVtUGl4ZWxGb3JtYXRzKTsKLQotICAgIGlmICghbnVtUGl4ZWxGb3JtYXRzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOwotICAgIENH
TENvbnRleHRPYmogc2hhcmVkQ0dMQ29udGV4dCA9IHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2Fz
dDxDR0xDb250ZXh0T2JqPihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopIDogbnVsbHB0cjsK
LQotICAgIENHTEVycm9yIGVyciA9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXRPYmosIHNo
YXJlZENHTENvbnRleHQsICZjZ2xDb250ZXh0KTsKLSAgICBHTGludCBhYm9ydE9uQmxhY2tsaXN0
ID0gMDsKLSAgICBDR0xTZXRQYXJhbWV0ZXIoY2dsQ29udGV4dCwga0NHTENQQWJvcnRPbkdQVVJl
c3RhcnRTdGF0dXNCbGFja2xpc3RlZCwgJmFib3J0T25CbGFja2xpc3QpOwotCi0jaWYgUExBVEZP
Uk0oTUFDKSAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgYmUgVVNFKE9QRU5HTCkgLSBz
ZWUgPHJkYXI6Ly81MzA2Mjc5ND4uCi0KLSAgICBhdXRvIGdwdUlEID0gKGhvc3RXaW5kb3cgJiYg
aG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpID8gZ3B1SURGb3JEaXNwbGF5KGhvc3RXaW5kb3ctPmRp
c3BsYXlJRCgpKSA6IHByaW1hcnlHUFVJRCgpOwotICAgIHNldEdQVUJ5UmVnaXN0cnlJRChjZ2xD
b250ZXh0LCBwaXhlbEZvcm1hdE9iaiwgZ3B1SUQpOwotCi0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShob3N0V2luZG93KTsKLSNlbmRpZgotCi0gICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0KHBpeGVs
Rm9ybWF0T2JqKTsKLQotICAgIG1fY29udGV4dE9iaiA9IGNnbENvbnRleHQ7Ci0KLSAgICBpZiAo
ZXJyICE9IGtDR0xOb0Vycm9yIHx8ICFtX2NvbnRleHRPYmopIHsKLSAgICAgICAgLy8gV2Ugd2Vy
ZSB1bmFibGUgdG8gY3JlYXRlIHRoZSBjb250ZXh0LgotICAgICAgICBtX2NvbnRleHRPYmogPSAw
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0T2JqID0gY2dsQ29udGV4
dDsKLQotICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENvbnRleHQpOwotCi0gICAgLy8gV2Vi
R0wgMiBleHBlY3RzIEVTIDMtb25seSBQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCB0byBi
ZSBlbmFibGVkOyB3ZSBtdXN0IGVtdWxhdGUgdGhpcyBvbiBub24tRVMgMyBzeXN0ZW1zLgotICAg
IGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAgICA6OmdsRW5hYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpQUklNSVRJVkVfUkVTVEFSVCk7Ci0KLSNlbGlmIFVTRShBTkdMRSkKLQotICAgIG1fZGlzcGxh
eU9iaiA9IEVHTF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAgIGlmIChtX2Rp
c3BsYXlPYmogPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAgIHJldHVybjsKLSAgICBFR0xpbnQg
bWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247Ci0gICAgaWYgKEVHTF9Jbml0aWFsaXplKG1fZGlz
cGxheU9iaiwgJm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lvbikgPT0gRUdMX0ZBTFNFKSB7Ci0g
ICAgICAgIExPRyhXZWJHTCwgIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIExPRyhXZWJHTCwgIkFOR0xFIGluaXRpYWxpc2Vk
IE1ham9yOiAlZCBNaW5vcjogJWQiLCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbik7Ci0gICAg
Y29uc3QgY2hhciAqZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcobV9kaXNwbGF5
T2JqLCBFR0xfRVhURU5TSU9OUyk7Ci0gICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBk
aXNwbGF5RXh0ZW5zaW9ucyk7Ci0KLSAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0gewot
ICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgICAg
IEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgICAgIEVH
TF9CTFVFX1NJWkUsIDgsCi0gICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAotICAgICAgICBFR0xf
Tk9ORQotICAgIH07Ci0gICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7Ci0gICAg
RUdMX0Nob29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZtX2NvbmZp
Z09iaiwgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7Ci0gICAgaWYgKG51bWJlckNvbmZpZ3NS
ZXR1cm5lZCAhPSAxKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVHTENvbmZpZyBJbml0aWFsaXph
dGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTE9HKFdlYkdMLCAi
R290IEVHTENvbmZpZyIpOwotCi0gICAgRUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19BUEkpOwot
ICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgewotICAgICAgICBMT0coV2Vi
R0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8RUdMaW50PiBlZ2xDb250ZXh0QXR0cmlidXRlczsKLSAgICBp
ZiAobV9pc0ZvcldlYkdMMikgewotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQo
RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOwotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRl
cy5hcHBlbmQoMyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKLSAgICAgICAgZWdsQ29udGV4dEF0
dHJpYnV0ZXMuYXBwZW5kKDIpOwotICAgICAgICAvLyBBTkdMRSB3aWxsIHVwZ3JhZGUgdGhlIGNv
bnRleHQgdG8gRVMzIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHRoaXMgaXMgc3BlY2lmaWVkLgotICAg
ICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tX
QVJEU19DT01QQVRJQkxFX0FOR0xFKTsKLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKEVHTF9GQUxTRSk7Ci0gICAgfQotICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChF
R0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsKLSAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOwotCi0gICAgaWYgKHN0cnN0cihkaXNwbGF5RXh0ZW5z
aW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKLSAgICAgICAgZWdsQ29udGV4
dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKLSAgICAgICAg
Ly8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hhbmdlIHRvCi0gICAgICAg
IC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQuCi0gICAgICAgIGVnbENvbnRleHRB
dHRyaWJ1dGVzLmFwcGVuZChFR0xfTE9XX1BPV0VSX0FOR0xFKTsKLSAgICB9Ci0gICAgZWdsQ29u
dGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKLQotICAgIG1fY29udGV4dE9iaiA9IEVH
TF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmosIHNoYXJlZENvbnRleHQg
PyBzdGF0aWNfY2FzdDxFR0xDb250ZXh0PihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopIDog
RUdMX05PX0NPTlRFWFQsIGVnbENvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7Ci0gICAgaWYgKG1f
Y29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAgICBMT0coV2ViR0wsICJFR0xD
b250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOwotCi0gICAgRUdMX01ha2VDdXJyZW50
KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRP
YmopOwotCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIGdsOjpFbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYKTsKLQotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHJlcXVpcmVkRXh0ZW5zaW9uc1td
ID0gewotICAgICAgICAiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiLCAvLyBGb3IgSU9TdXJm
YWNlLWJhY2tlZCB0ZXh0dXJlcy4KLSAgICAgICAgIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCIsIC8vIEZvciBjcmVhdGluZyB0aGUgRUdMIHN1cmZhY2UgZnJvbSBhbiBJT1N1cmZhY2Uu
Ci0gICAgfTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChy
ZXF1aXJlZEV4dGVuc2lvbnMpOyArK2kpIHsKLSAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBv
cnRzKHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSkpIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIk1p
c3NpbmcgcmVxdWlyZWQgZXh0ZW5zaW9uLiAlcyIsIHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBleHRlbnNpb25zLmVuc3Vy
ZUVuYWJsZWQocmVxdWlyZWRFeHRlbnNpb25zW2ldKTsKLSAgICB9Ci0KLSAgICBFR0xEZXZpY2VF
WFQgZGV2aWNlID0gbnVsbHB0cjsKLSAgICBFR0xfUXVlcnlEaXNwbGF5QXR0cmliRVhUKG1fZGlz
cGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRl
dmljZSkpOwotICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxwdHI7Ci0gICAgQ0dM
UGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQgPSBudWxscHRyOwotICAgIEVHTF9RdWVyeURldmlj
ZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfQ09OVEVYVF9BTkdMRSwgcmVpbnRlcnByZXRfY2Fz
dDxFR0xBdHRyaWIqPigmY2dsQ29udGV4dCkpOwotICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVY
VChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FOR0xFLCByZWludGVycHJldF9jYXN0PEVH
TEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOwotICAgIGF1dG8gZ3B1SUQgPSAoaG9zdFdpbmRvdyAm
JiBob3N0V2luZG93LT5kaXNwbGF5SUQoKSkgPyBncHVJREZvckRpc3BsYXkoaG9zdFdpbmRvdy0+
ZGlzcGxheUlEKCkpIDogcHJpbWFyeUdQVUlEKCk7Ci0gICAgc2V0R1BVQnlSZWdpc3RyeUlEKGNn
bENvbnRleHQsIHBpeGVsRm9ybWF0LCBncHVJRCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSho
b3N0V2luZG93KTsKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNlbmRpZiAvLyAjZWxpZiBV
U0UoQU5HTEUpCi0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlv
bi4KLQotICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgotICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwotICAgICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBh
bGxvY10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDp0aGlzXSk7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICBbbV93ZWJHTExheWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOwotI2VuZGlmCi0j
aWYgVVNFKEFOR0xFKQotICAgICAgICBbbV93ZWJHTExheWVyIHNldEVHTERpc3BsYXk6bV9kaXNw
bGF5T2JqIGNvbmZpZzptX2NvbmZpZ09ial07Ci0jZW5kaWYKLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCi0KLSNpZiBVU0UoT1BFTkdMKQotICAgIGlmICh1c2VNdWx0aXNhbXBsaW5nKQot
ICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJU0FNUExFKTsKLSNlbmRpZgotCi0gICAgLy8gQ3Jl
YXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgZnJhbWVidWZmZXIuCi0j
aWYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJl
KTsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotICAgIC8vIFdlIGJpbmQgdG8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhUIHJhdGhlciB0aGFu
IFRFWFRVUkVfMkQgYmVjYXVzZQotICAgIC8vIHRoYXQncyB3aGF0IGlzIHJlcXVpcmVkIGZvciBh
IHRleHR1cmUgYmFja2VkIGJ5IElPU3VyZmFjZS4KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV9SRUNUQU5HTEVfRVhULCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVY
VFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9FWFQsIDApOwotCi0jZWxpZiBVU0UoQU5HTEUpCi0KLSAgICBHTGVu
dW0gdGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDNEOjpJT1N1cmZhY2VUZXh0dXJlVGFy
Z2V0OwotCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsOjpCaW5k
VGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1
cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbDo6
QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7Ci0jZWxzZQotI2Vycm9yIFVuc3VwcG9ydGVk
IGNvbmZpZ3VyYXRpb24KLSNlbmRpZgotCi0jaWYgVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9F
UykKLSAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdC4KLSAgICA6OmdsR2VuRnJh
bWVidWZmZXJzRVhUKDEsICZtX2Zibyk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLQotICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsK
LSAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0
aCkpCi0gICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0KLSAgICAvLyBJZiBuZWNlc3NhcnksIGNyZWF0ZSBhbm90aGVyIGZyYW1lYnVmZmVy
IGZvciB0aGUgbXVsdGlzYW1wbGUgcmVzdWx0cy4KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7
Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwot
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJP
OwotICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCi0gICAg
ICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgfQotI2VsaWYgVVNFKEFOR0xFKQotICAgIGdsOjpHZW5GcmFtZWJ1
ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCBtX2Zibyk7Ci0gICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwotCi0gICAgaWYgKCFhdHRy
cy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpKQotICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotCi0gICAgLy8g
SWYgbmVjZXNzYXJ5LCBjcmVhdGUgYW5vdGhlciBmcmFtZWJ1ZmZlciBmb3IgdGhlIG11bHRpc2Ft
cGxlIHJlc3VsdHMuCi0gICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewotICAgICAgICBnbDo6R2Vu
RnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3Rh
dGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICBnbDo6R2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJzLnN0
ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygx
LCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotCi0jZW5kaWYgLy8g
VVNFKEFOR0xFKQotCi0jaWYgIVVTRShBTkdMRSkKLSAgICAvLyBBTkdMRSBzaGFkZXIgY29tcGls
ZXIgaW5pdGlhbGl6YXRpb24uCi0KLSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJj
ZXM7Ci0gICAgc2g6OkluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7Ci0KLSAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5H
TEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7
Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAm
QU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdh
eXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyA9IDE7Ci0gICAgCi0gICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwotICAgIGdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVS
LCBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAg
IEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCByYW5n
ZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVS
ZXNvdXJjZXMpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCi0gICAgCi0jaWYgVVNFKE9QRU5HTCkK
LSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQUklURSk7
Ci0jZW5kaWYKLQotI2lmIFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgZ2w6OkNsZWFyQ29s
b3IoMCwgMCwgMCwgMCk7Ci0jZW5kaWYKLQotICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFw
aGljc0NvbnRleHQzRCAoJXApLiIsIHRoaXMpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6fkdy
YXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJl
ZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotCi0gICAgaWYgKG1fY29udGV4dE9iaikg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cnMgPSBjb250ZXh0QXR0
cmlidXRlcygpOwotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCAqPihtX2NvbnRleHRPYmop
IHJlbmRlcmJ1ZmZlclN0b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21EcmF3YWJsZTpuaWxdOwot
ICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKLSNlbGlmIFVT
RShPUEVOR0wpCi0gICAgICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0
PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9iaik7Ci0gICAgICAgIENHTFNldEN1cnJlbnRDb250
ZXh0KGNnbENvbnRleHQpOwotICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlP
YmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKLSAgICAg
ICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2VuZGlmCi0KLSNpZiBVU0Uo
T1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQotICAgICAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7
Ci0gICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRl
cHRoKQotICAgICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xEZWxldGVGcmFt
ZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAg
ICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
LSAgICAgICAgfQotICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7
Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKLSAgICAg
ICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOwotICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCi0gICAg
ICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAm
bV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYXR0
cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICBnbDo6RGVsZXRlUmVu
ZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAg
IGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNlbmRpZgotCi0jaWYgVVNFKE9Q
RU5HTF9FUykKLSAgICAgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOwotICAg
ICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4obV9jb250ZXh0T2JqKSByZWxlYXNlXTsK
LSNlbGlmIFVTRShPUEVOR0wpCi0gICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwotICAg
ICAgICBDR0xEZXN0cm95Q29udGV4dChjZ2xDb250ZXh0KTsKLSNlbGlmIFVTRShBTkdMRSkKLSAg
ICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9O
T19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgIEVHTF9EZXN0cm95Q29udGV4dCht
X2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaik7Ci0jZW5kaWYKLSAgICAgICAgW21fd2ViR0xMYXll
ciBzZXRDb250ZXh0Om51bGxwdHJdOwotICAgIH0KLQotICAgIExPRyhXZWJHTCwgIkRlc3Ryb3ll
ZCBhIEdyYXBoaWNzQ29udGV4dDNEICglcCkuIiwgdGhpcyk7Ci19Ci0KLSNpZiBVU0UoT1BFTkdM
X0VTKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21E
cmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgLy8gV2Ug
bmVlZCB0byBtYWtlIGEgY2FsbCB0byBzZXRCb3VuZHMgYmVsb3cgdG8gdXBkYXRlIHRoZSBiYWNr
aW5nIHN0b3JlIHNpemUgYnV0IHdlIGFsc28KLSAgICAvLyBkbyBub3Qgd2FudCB0byBjbG9iYmVy
IHRoZSBib3VuZHMgc2V0IGR1cmluZyBsYXlvdXQuCi0gICAgQ0dSZWN0IHByZXZpb3VzQm91bmRz
ID0gW21fd2ViR0xMYXllci5nZXQoKSBib3VuZHNdOwotCi0gICAgW21fd2ViR0xMYXllciBzZXRC
b3VuZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07Ci0gICAgW21fd2ViR0xMYXll
ciBzZXRPcGFxdWU6IWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOwotCi0gICAgW3N0YXRpY19j
YXN0PEVBR0xDb250ZXh0ICo+KG1fY29udGV4dE9iaikgcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9S
RU5ERVJCVUZGRVIgZnJvbURyYXdhYmxlOnN0YXRpY19jYXN0PGlkPEVBR0xEcmF3YWJsZT4+KG1f
d2ViR0xMYXllci5nZXQoKSldOwotCi0gICAgW21fd2ViR0xMYXllciBzZXRCb3VuZHM6cHJldmlv
dXNCb3VuZHNdOwotfQotI2VuZGlmCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250
ZXh0Q3VycmVudCgpCi17Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgaWYgKFtFQUdMQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQotICAgICAgICByZXR1cm4gW0VBR0xDb250ZXh0IHNl
dEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKV07
Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBD
R0xHZXRDdXJyZW50Q29udGV4dCgpOwotICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRl
eHRPYmopCi0gICAgICAgIHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChzdGF0aWNfY2FzdDxD
R0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopKSA9PSBrQ0dMTm9FcnJvcjsKLSNlbGlmIFVTRShB
TkdMRSkKLSAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQot
ICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOwotI2VuZGlmCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKCkKLXsKLSAg
ICBpZiAobV9mYWlsTmV4dFN0YXR1c0NoZWNrKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlByZXRl
bmRpbmcgdGhlIEdQVSBoYXMgcmVzZXQgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsK
LSAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gZmFsc2U7Ci0gICAgICAgIGZvcmNlQ29u
dGV4dExvc3QoKTsKLSNpZiBVU0UoT1BFTkdMKQotICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4
dCgwKTsKLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJy
ZW50Q29udGV4dDowXTsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICAgICAgRUdMX01ha2VDdXJyZW50
KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09O
VEVYVCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE9ubHkgZG8g
dGhlIGNoZWNrIGV2ZXJ5IHN0YXR1c0NoZWNrVGhyZXNob2xkIGNhbGxzLgotICAgIGlmIChtX3N0
YXR1c0NoZWNrQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdHVzQ2hlY2tDb3Vu
dCA9IChtX3N0YXR1c0NoZWNrQ291bnQgKyAxKSAlIHN0YXR1c0NoZWNrVGhyZXNob2xkOwotCi0g
ICAgR0xpbnQgcmVzdGFydFN0YXR1cyA9IDA7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBDR0xDb250
ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihwbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEKCkpOwotICAgIENHTEdldFBhcmFtZXRlcihjZ2xDb250ZXh0LCBrQ0dM
Q1BHUFVSZXN0YXJ0U3RhdHVzLCAmcmVzdGFydFN0YXR1cyk7Ci0gICAgaWYgKHJlc3RhcnRTdGF0
dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlzdGVkKSB7Ci0gICAgICAgIExPRyhX
ZWJHTCwgIlRoZSBHUFUgaGFzIGJsYWNrbGlzdGVkIHVzICglcCkuIFRlcm1pbmF0aW5nLiIsIHRo
aXMpOwotICAgICAgICBleGl0KEVYX09TRVJSKTsKLSAgICB9Ci0gICAgaWYgKHJlc3RhcnRTdGF0
dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0NhdXNlZCkgewotICAgICAgICBMT0coV2ViR0ws
ICJUaGUgR1BVIGhhcyByZXNldCB1cyAoJXApLiBMb3NlIHRoZSBjb250ZXh0LiIsIHRoaXMpOwot
ICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7Ci0gICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0
KDApOwotICAgIH0KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0gICAgRUFHTENvbnRleHQqIGN1cnJl
bnRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKCkpOwotICAgIFtjdXJyZW50Q29udGV4dCBnZXRQYXJhbWV0ZXI6a0VBR0xDUEdQVVJl
c3RhcnRTdGF0dXMgdG86JnJlc3RhcnRTdGF0dXNdOwotICAgIGlmIChyZXN0YXJ0U3RhdHVzID09
IGtFQUdMQ1BHUFVSZXN0YXJ0U3RhdHVzQ2F1c2VkIHx8IHJlc3RhcnRTdGF0dXMgPT0ga0VBR0xD
UEdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgewotICAgICAgICBMT0coV2ViR0wsICJUaGUg
R1BVIGhhcyBlaXRoZXIgcmVzZXQgb3IgYmxhY2tsaXN0ZWQgdXMgKCVwKS4gTG9zZSB0aGUgY29u
dGV4dC4iLCB0aGlzKTsKLSAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOwotICAgICAgICBbRUFH
TENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6MF07Ci0gICAgfQotI2VsaWYgVVNFKEFOR0xFKQot
ICAgIC8vIEZJWE1FOiBjaGVjayB2aWEgS0hSX3JvYnVzdG5lc3MuCi0gICAgcmVzdGFydFN0YXR1
cyA9IDA7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShPUEVOR0xfRVMpCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwcmVzZW50UmVuZGVyYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCi0gICAgICAgIHJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQotICAgIDo6Z2xGbHVzaCgpOwotICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKLSAgICBbc3Rh
dGljX2Nhc3Q8RUFHTENvbnRleHQqPihtX2NvbnRleHRPYmopIHByZXNlbnRSZW5kZXJidWZmZXI6
R0xfUkVOREVSQlVGRkVSXTsKLSAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmls
XTsKLX0KLSNlbmRpZgotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZUlPU3VyZmFj
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
T1N1cmZhY2VSZWYgc3VyZmFjZSwgR0MzRHVpbnQgcGxhbmUpCi17Ci0jaWYgVVNFKE9QRU5HTCkK
LSAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2Jq
PihwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgIHJldHVybiBrQ0dMTm9FcnJvciA9
PSBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKGNnbENvbnRleHQsIHRhcmdldCwgaW50ZXJuYWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3VyZmFjZSwgcGxhbmUpOwotI2VsaWYg
VVNFKE9QRU5HTF9FUykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQotICAgIHJl
dHVybiBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4ocGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCgpKSB0ZXhJbWFnZUlPU3VyZmFjZTpzdXJmYWNlIHRhcmdldDp0YXJnZXQgaW50ZXJuYWxGb3Jt
YXQ6aW50ZXJuYWxGb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBmb3JtYXQ6Zm9ybWF0
IHR5cGU6dHlwZSBwbGFuZTpwbGFuZV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdp
ZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0
KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHN1cmZhY2UpOwot
ICAgIFVOVVNFRF9QQVJBTShwbGFuZSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0K
LSNpZiBVU0UoT1BFTkdMKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWxsb2NhdGVJT1N1cmZh
Y2VCYWNraW5nU3RvcmUoSW50U2l6ZSBzaXplKQotewotICAgIExPRyhXZWJHTCwgIkdyYXBoaWNz
Q29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZSBhdCAlZCB4ICVkLiAoJXAp
Iiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB0aGlzKTsKLSAgICBbbV93ZWJHTExheWVy
IGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6c2l6ZSB1c2luZ0FscGhhOmNv
bnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQotewotICAgIExP
RyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNr
aW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOwotICAgIFttX3dlYkdMTGF5ZXIgYmlu
ZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVwZGF0ZUNHTENvbnRleHQoKQotewotICAgIGlmICghbV9jb250ZXh0T2JqKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coV2ViR0wsICJEZXRlY3RlZCBhIG11eCBzd2l0Y2gg
b3IgZGlzcGxheSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dMVXBkYXRlQ29udGV4dC4gKCVwKSIs
IHRoaXMpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgQ0dMVXBkYXRlQ29udGV4
dChzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopKTsKLSAgICBtX2hhc1N3
aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUgPSB0cnVlOwotfQotCi0jZW5kaWYgLy8gVVNFKE9Q
RU5HTCkKLQotI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQotewotICAgIGlmICht
X3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiA9PSBHcmFwaGljc0NvbnRleHQzRFBvd2Vy
UHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7Ci0gICAgICAgIGlmIChpc1Zpc2libGUpCi0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRD
b250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVD
b250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMpOwotICAgIH0KLX0KLSNlbmRpZiAv
LyBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCi0KLSNpZiBVU0UoQU5HTEUpCi0KLSNpZiBQTEFU
Rk9STShNQUMpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVDR0xDb250ZXh0KCkKLXsK
LSAgICBpZiAoIW1fY29udGV4dE9iaikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKFdlYkdM
LCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3BsYXkgcmVjb25maWd1cmF0aW9uLiBDYWxs
IENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBudWxscHRyOwotICAgIEVHTF9RdWVyeURp
c3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRlcnByZXRf
Y2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7Ci0gICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0
ID0gbnVsbHB0cjsKLSAgICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2aWNlLCBFR0xfQ0dM
X0NPTlRFWFRfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmNnbENvbnRleHQp
KTsKLQotICAgIENHTFVwZGF0ZUNvbnRleHQoY2dsQ29udGV4dCk7Ci0gICAgbV9oYXNTd2l0Y2hl
ZFRvSGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplIHNpemUpCi17
Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0Q6
OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlIGF0ICVkIHggJWQuICglcCkiLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksIHRoaXMpOwotICAgIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJ
T1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVzaW5nQWxwaGE6Y29udGV4dEF0dHJp
YnV0ZXMoKS5hbHBoYV07Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSNlbmRpZgot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNr
aW5nU3RvcmVGcm9tTGF5ZXIoKQotewotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIExPRyhXZWJH
TCwgIkdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3Rv
cmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOwotICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1l
YnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0Uo
QU5HTEUpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRE1h
bmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250ZXh0cygpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjphbGxvd09mZmxpbmVSZW5kZXJlcnMoKSBjb25zdAotewotI2lmIFBM
QVRGT1JNKE1BQykgJiYgRU5BQkxFKFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQot
ICAgIC8vIFdoZW4gV2luZG93U2VydmVyIGFjY2VzcyBpcyBibG9ja2VkIGluIHRoZSBXZWJQcm9j
ZXNzLCB0aGVyZSBpcyBubyB3YXkKLSAgICAvLyBmb3IgT3BlbkdMIHRvIGRlY2lkZSB3aGljaCBH
UFUgaXMgY29ubmVjdGVkIHRvIGEgZGlzcGxheSAob25saW5lL29mZmxpbmUpLgotICAgIC8vIE9w
ZW5HTCB3aWxsIHRoZW4gY29uc2lkZXIgYWxsIEdQVXMsIG9yIHJlbmRlcmVycywgYXMgb2ZmbGlu
ZSwgd2hpY2ggbWVhbnMKLSAgICAvLyBhbGwgb2ZmbGluZSByZW5kZXJlcnMgbmVlZCB0byBiZSBj
b25zaWRlcmVkIHdoZW4gZmluZGluZyBhIHBpeGVsIGZvcm1hdC4KLSAgICAvLyBJbiBXZWJLaXQg
bGVnYWN5LCB0aGVyZSB3aWxsIHN0aWxsIGJlIGEgV2luZG93U2VydmVyIGNvbm5lY3Rpb24sIGFu
ZAotICAgIC8vIG1fZGlzcGxheU1hc2sgd2lsbCBub3QgYmUgc2V0IGluIHRoaXMgY2FzZS4KLSAg
ICBpZiAocHJpbWFyeU9wZW5HTERpc3BsYXlNYXNrKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
I2VsaWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgLy8gRklYTUU6IDxyZGFyOi8vNTMwNjI3
OTQ+IFdlJ3JlIHZlcnkgaW5jb25zaXN0ZW50IGFib3V0IFdFQlBST0NFU1NfV0lORE9XU0VSVkVS
X0JMT0NLSU5HCi0gICAgLy8gYW5kIE1BQy9NQUNDQVRBTFlTVCBhbmQgT1BFTkdML09QRU5HTEVT
LgotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgICAgIAotI2lmIEhBVkUoQVBQTEVfR1JB
UEhJQ1NfQ09OVFJPTCkKLSAgICBpZiAoaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lm
IFBMQVRGT1JNKE1BQykKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjcmVlbkRpZENoYW5nZShQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCi17Ci0gICAgaWYgKCFtX2NvbnRleHRPYmopCi0g
ICAgICAgIHJldHVybjsKLSNpZiBVU0UoQU5HTEUpCi0gICAgaWYgKCFtX2hhc1N3aXRjaGVkVG9I
aWdoUGVyZm9ybWFuY2VHUFUpIHsKLSAgICAgICAgRUdMRGV2aWNlRVhUIGRldmljZSA9IG51bGxw
dHI7Ci0gICAgICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xf
REVWSUNFX0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7Ci0gICAg
ICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxwdHI7Ci0gICAgICAgIENHTFBpeGVs
Rm9ybWF0T2JqIHBpeGVsRm9ybWF0ID0gbnVsbHB0cjsKLSAgICAgICAgRUdMX1F1ZXJ5RGV2aWNl
QXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9DT05URVhUX0FOR0xFLCByZWludGVycHJldF9jYXN0
PEVHTEF0dHJpYio+KCZjZ2xDb250ZXh0KSk7Ci0gICAgICAgIEVHTF9RdWVyeURldmljZUF0dHJp
YkVYVChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FOR0xFLCByZWludGVycHJldF9jYXN0
PEVHTEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOwotICAgICAgICBzZXRHUFVCeVJlZ2lzdHJ5SUQo
Y2dsQ29udGV4dCwgcGl4ZWxGb3JtYXQsIGdwdUlERm9yRGlzcGxheShkaXNwbGF5SUQpKTsKLSAg
ICB9Ci0jZWxzZQotI2lmIFVTRShPUEVOR0wpCi0gICAgaWYgKCFtX2hhc1N3aXRjaGVkVG9IaWdo
UGVyZm9ybWFuY2VHUFUpIHsKLSAgICAgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250ZXh0T2JqKTsKLSAgICAgICAgc2V0R1BVQnlS
ZWdpc3RyeUlEKGNnbENvbnRleHQsIENHTEdldFBpeGVsRm9ybWF0KGNnbENvbnRleHQpLCBncHVJ
REZvckRpc3BsYXkoZGlzcGxheUlEKSk7Ci0gICAgfQotI2VuZGlmCi0jZW5kaWYgLy8gVVNFKEFO
R0xFKQotfQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpCi0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShHUkFQSElDU19DT05URVhUXzNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Q29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI3NWNmOTVmYmY2MGU5YjgyYzExNzA0MzY3ZDgwZTZhMjlm
YzE5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KQEAgLTAsMCArMSw4NTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiAhVVNFKEFOR0xFKQorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5o
IgorI2VuZGlmCisKKyNpbXBvcnQgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmgiCisjaW1wb3J0ICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2ltcG9ydCAiSG9zdFdpbmRv
dy5oIgorI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgIldlYkdMTGF5ZXIuaCIKKyNpbXBvcnQgIldlYkdMT2JqZWN0LmgiCisjaW1wb3J0ICJXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBD
b250ZXh0Lmg+CisjaW1wb3J0IDxzeXMvc3lzY3RsLmg+CisjaW1wb3J0IDxzeXNleGl0cy5oPgor
I2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworI2lmIFVTRShPUEVOR0xfRVMpCisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+
CisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyNpbXBvcnQgPE9wZW5HTEVTL0VB
R0xJT1N1cmZhY2UuaD4KKyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxwYWwvc3BpL2lvcy9PcGVuR0xFU1NQ
SS5oPgorI2VsaWYgVVNFKE9QRU5HTCkKKyNpbXBvcnQgPElPS2l0L0lPS2l0TGliLmg+CisjaW1w
b3J0IDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFVTRShBTkdMRSkKKyNkZWZpbmUgRUdMX0VHTF9QUk9U
T1RZUEVTIDAKKy8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRl
eHQgZW50cnkgcG9pbnRzIGZvciBub3cuCisjZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRl
eHQKKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQordHlwZWRlZiB2b2lk
KiBHTGVnbENvbnRleHQ7CisjaW5jbHVkZSA8QU5HTEUvZWdsLmg+CisjaW5jbHVkZSA8QU5HTEUv
ZWdsZXh0Lmg+CisjaW5jbHVkZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+CisjaW5jbHVkZSA8QU5H
TEUvZW50cnlfcG9pbnRzX2VnbC5oPgorI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19lZ2xf
ZXh0Lmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4K
KyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2luY2x1
ZGUgPEFOR0xFL2dsMmV4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorI2Vu
ZGlmCisKKyNpZiBVU0UoT1BFTkdMX0VTKSB8fCBVU0UoT1BFTkdMKQorI2luY2x1ZGUgIkV4dGVu
c2lvbnNHTE9wZW5HTC5oIgorI2VsaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TEFOR0xFLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBvcnQgIlNjcmVlblBy
b3BlcnRpZXMuaCIKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCisjaW1wb3J0IDxPcGVu
R0wvQ0dMUmVuZGVyZXJzLmg+CisjZW5kaWYKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzdGF0dXNDaGVja1RocmVzaG9sZCA9IDU7CisKKy8v
IEZJWE1FOiBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSBlbXB0eSBvbiBNYWMsIGJ1dCB3aWxsIGdl
dCBwb3B1bGF0ZWQgYXMKKy8vIHRoZSByZXN0cnVjdHVyaW5nIGluIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjkwMyBpcyBkb25lCitjbGFzcyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTFByaXZhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCopIHsgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUoKSB7
IH0KK307CisKK1JlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dEdMOjpEZXN0aW5hdGlvbiBkZXN0aW5h
dGlvbikKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1
cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgorICAgIGlmIChkZXN0
aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgLy8gTWFrZSBzcGFjZSBmb3IgdGhlIGluY29taW5nIGNvbnRl
eHQgaWYgd2UncmUgZnVsbC4KKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5yZWN5Y2xlQ29udGV4dElmTmVjZXNzYXJ5KCk7CisgICAgaWYgKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmhhc1Rvb01hbnlDb250
ZXh0cygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTChhdHRycywgaG9zdFdpbmRvdywgZGVzdGluYXRpb24pKTsKKworICAgIGlmICghY29udGV4
dC0+bV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4
dC5nZXQoKSwgaG9zdFdpbmRvdyk7CisKKyAgICByZXR1cm4gY29udGV4dDsKK30KKworUmVmPEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hh
cmVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBzaGFyZWRDb250ZXh0KQoreworICAgIGF1dG8g
aG9zdFdpbmRvdyA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmhvc3RXaW5kb3dGb3JDb250ZXh0KCZzaGFyZWRDb250ZXh0KTsKKyAgICBhdXRvIGNvbnRl
eHQgPSBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKHNoYXJlZENvbnRleHQu
Y29udGV4dEF0dHJpYnV0ZXMoKSwgaG9zdFdpbmRvdywgc2hhcmVkQ29udGV4dC5kZXN0aW5hdGlv
bigpLCAmc2hhcmVkQ29udGV4dCkpOworCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyOjpzaGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dChjb250ZXh0LnB0cigpLCBob3N0V2luZG93
KTsKKworICAgIHJldHVybiBjb250ZXh0OworfQorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAoVVNF
KE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGJl
IGp1c3QgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpIC0gc2VlIDxyZGFyOi8vNTMwNjI3OTQ+
LgorCitzdGF0aWMgdm9pZCBzZXRHUFVCeVJlZ2lzdHJ5SUQoQ0dMQ29udGV4dE9iaiBjb250ZXh0
T2JqLCBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiwgSU9SZWdpc3RyeUdQVUlEIHBy
ZWZlcnJlZEdQVUlEKQoreworICAgIC8vIFdoZW4gdGhlIFdlYlByb2Nlc3MgZG9lcyBub3QgaGF2
ZSBhY2Nlc3MgdG8gdGhlIFdpbmRvd1NlcnZlciwgdGhlcmUgaXMgbm8gd2F5IGZvciBPcGVuR0wg
dG8gdGVsbCB3aGljaCBHUFUgaXMgY29ubmVjdGVkIHRvIGEgZGlzcGxheS4KKyAgICAvLyBPbiAx
MC4xMyssIGZpbmQgdGhlIHZpcnR1YWwgc2NyZWVuIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBy
ZWZlcnJlZCBHUFUgYnkgaXRzIHJlZ2lzdHJ5SUQuCisgICAgLy8gQ0dMU2V0VmlydHVhbFNjcmVl
biBjYW4gdGhlbiBiZSB1c2VkIHRvIHRlbGwgT3BlbkdMIHdoaWNoIEdQVSBpdCBzaG91bGQgYmUg
dXNpbmcuCisKKyAgICBpZiAoIWNvbnRleHRPYmogfHwgIXByZWZlcnJlZEdQVUlEKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHTGludCB2aXJ0dWFsU2NyZWVuQ291bnQgPSAwOworICAgIENHTEVy
cm9yIGVycm9yID0gQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdChwaXhlbEZvcm1hdE9iaiwgMCwga0NH
TFBGQVZpcnR1YWxTY3JlZW5Db3VudCwgJnZpcnR1YWxTY3JlZW5Db3VudCk7CisgICAgQVNTRVJU
KGVycm9yID09IGtDR0xOb0Vycm9yKTsKKworICAgIEdMaW50IGZpcnN0QWNjZWxlcmF0ZWRTY3Jl
ZW4gPSAtMTsKKworICAgIGZvciAoR0xpbnQgdmlydHVhbFNjcmVlbiA9IDA7IHZpcnR1YWxTY3Jl
ZW4gPCB2aXJ0dWFsU2NyZWVuQ291bnQ7ICsrdmlydHVhbFNjcmVlbikgeworICAgICAgICBHTGlu
dCBkaXNwbGF5TWFzayA9IDA7CisgICAgICAgIGVycm9yID0gQ0dMRGVzY3JpYmVQaXhlbEZvcm1h
dChwaXhlbEZvcm1hdE9iaiwgdmlydHVhbFNjcmVlbiwga0NHTFBGQURpc3BsYXlNYXNrLCAmZGlz
cGxheU1hc2spOworICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOworCisgICAg
ICAgIGF1dG8gZ3B1SUQgPSBncHVJREZvckRpc3BsYXlNYXNrKGRpc3BsYXlNYXNrKTsKKworICAg
ICAgICBpZiAoZ3B1SUQgPT0gcHJlZmVycmVkR1BVSUQpIHsKKyAgICAgICAgICAgIGVycm9yID0g
Q0dMU2V0VmlydHVhbFNjcmVlbihjb250ZXh0T2JqLCB2aXJ0dWFsU2NyZWVuKTsKKyAgICAgICAg
ICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7CisgICAgICAgICAgICBMT0coV2ViR0ws
ICJDb250ZXh0ICglcCkgc2V0IHRvIEdQVSB3aXRoIElEOiAoJWxsZCkuIiwgY29udGV4dE9iaiwg
Z3B1SUQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZp
cnN0QWNjZWxlcmF0ZWRTY3JlZW4gPCAwKSB7CisgICAgICAgICAgICBHTGludCBpc0FjY2VsZXJh
dGVkID0gMDsKKyAgICAgICAgICAgIGVycm9yID0gQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdChwaXhl
bEZvcm1hdE9iaiwgdmlydHVhbFNjcmVlbiwga0NHTFBGQUFjY2VsZXJhdGVkLCAmaXNBY2NlbGVy
YXRlZCk7CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOworICAgICAg
ICAgICAgaWYgKGlzQWNjZWxlcmF0ZWQpCisgICAgICAgICAgICAgICAgZmlyc3RBY2NlbGVyYXRl
ZFNjcmVlbiA9IHZpcnR1YWxTY3JlZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBObyBy
ZWdpc3RyeUlEIG1hdGNoIGZvdW5kOyBzZXQgdG8gZmlyc3QgaGFyZHdhcmUtYWNjZWxlcmF0ZWQg
dmlydHVhbCBzY3JlZW4uCisgICAgaWYgKGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4gPj0gMCkgewor
ICAgICAgICBlcnJvciA9IENHTFNldFZpcnR1YWxTY3JlZW4oY29udGV4dE9iaiwgZmlyc3RBY2Nl
bGVyYXRlZFNjcmVlbik7CisgICAgICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Cisg
ICAgICAgIExPRyhXZWJHTCwgIlJlZ2lzdHJ5SUQgKCVsbGQpIG5vdCBtYXRjaGVkOyBDb250ZXh0
ICglcCkgc2V0IHRvIHZpcnR1YWwgc2NyZWVuICglZCkuIiwgcHJlZmVycmVkR1BVSUQsIGNvbnRl
eHRPYmosIGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4pOworICAgIH0KK30KKworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCisKK0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dEdM
OjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIHNoYXJl
ZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRycywgZGVzdGluYXRpb24sIHNo
YXJlZENvbnRleHQpCit7CisgICAgQVNTRVJUKEFOR0xFV2ViS2l0QnJpZGdlOjphbmdsZUF2YWls
YWJsZSgpKTsKKyAgICBpZiAoIUFOR0xFV2ViS2l0QnJpZGdlOjphbmdsZUF2YWlsYWJsZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMuaXNXZWJHTDI7CisK
KyNpZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCisgICAgbV9wb3dlclByZWZlcmVuY2VV
c2VkRm9yQ3JlYXRpb24gPSAoaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpICYmIGF0dHJzLnBvd2Vy
UHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZv
cm1hbmNlKSA/IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFu
Y2UgOiBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdDsKKyNlbHNlCisg
ICAgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24gPSBHcmFwaGljc0NvbnRleHRHTFBv
d2VyUHJlZmVyZW5jZTo6RGVmYXVsdDsKKyNlbmRpZgorCisjaWYgIVVTRShBTkdMRSkKKyNpZiBV
U0UoT1BFTkdMX0VTKQorICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICBtX2NvbXBpbGVy
ID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09V
VFBVVCk7CisjZWxzZQorICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICBtX2NvbXBpbGVy
ID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF80MTBfQ09SRV9PVVRQVVQsIFNIX1dFQkdMMl9T
UEVDKTsKKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQorI2VuZGlmIC8vICFVU0UoQU5HTEUpCisK
KyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKKyAgICBF
QUdMUmVuZGVyaW5nQVBJIGFwaSA9IG1faXNGb3JXZWJHTDIgPyBrRUFHTFJlbmRlcmluZ0FQSU9w
ZW5HTEVTMyA6IGtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMyOworICAgIEVBR0xDb250ZXh0ICpj
b250ZXh0T2JqOworICAgIGlmICghc2hhcmVkQ29udGV4dCkKKyAgICAgICAgY29udGV4dE9iaiA9
IFtbRUFHTENvbnRleHQgYWxsb2NdIGluaXRXaXRoQVBJOmFwaV07CisgICAgZWxzZQorICAgICAg
ICBjb250ZXh0T2JqID0gW1tFQUdMQ29udGV4dCBhbGxvY10gaW5pdFdpdGhBUEk6YXBpIHNoYXJl
Z3JvdXA6c3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4oc2hhcmVkQ29udGV4dC0+bV9jb250ZXh0
T2JqKS5zaGFyZWdyb3VwXTsKKworICAgIG1fY29udGV4dE9iaiA9IHN0YXRpY19jYXN0PHZvaWQg
Kj4oY29udGV4dE9iaik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmICht
X2lzRm9yV2ViR0wyKQorICAgICAgICA6OmdsRW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklN
SVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7CisjZWxpZiBVU0UoT1BFTkdMKQorCisgICAgYm9v
bCB1c2VNdWx0aXNhbXBsaW5nID0gYXR0cnMuYW50aWFsaWFzOworCisgICAgVmVjdG9yPENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOworICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVs
Rm9ybWF0T2JqID0gMDsKKyAgICBHTGludCBudW1QaXhlbEZvcm1hdHMgPSAwOworCisgICAgYXR0
cmlicy5hcHBlbmQoa0NHTFBGQUFjY2VsZXJhdGVkKTsKKyAgICBhdHRyaWJzLmFwcGVuZChrQ0dM
UEZBQ29sb3JTaXplKTsKKyAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZT4oMzIpKTsKKyAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBRGVwdGhTaXpl
KTsKKyAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZT4oMzIpKTsKKworICAgIC8vIFRoaXMgYXR0cmlidXRlLCB3aGlsZSBtZW50aW9uaW5nIG9mZmxp
bmUgcmVuZGVyZXJzLCBpcyBhY3R1YWxseQorICAgIC8vIGFsbG93aW5nIHVzIHRvIHJlcXVlc3Qg
dGhlIGludGVncmF0ZWQgZ3JhcGhpY3Mgb24gYSBkdWFsIEdQVQorICAgIC8vIHN5c3RlbSwgYW5k
IG5vdCBmb3JjZSB0aGUgZGlzY3JldGUgR1BVLgorICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Bl
ci5hcHBsZS5jb20vbGlicmFyeS9tYWMvdGVjaG5vdGVzL3RuMjIyOS9faW5kZXguaHRtbAorICAg
IGlmIChhbGxvd09mZmxpbmVSZW5kZXJlcnMoKSkKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NH
TFBGQUFsbG93T2ZmbGluZVJlbmRlcmVycyk7CisKKyAgICBpZiAodXNlTXVsdGlzYW1wbGluZykg
eworICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBTXVsdGlzYW1wbGUpOworICAgICAgICBh
dHRyaWJzLmFwcGVuZChrQ0dMUEZBU2FtcGxlQnVmZmVycyk7CisgICAgICAgIGF0dHJpYnMuYXBw
ZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigxKSk7CisgICAgICAgIGF0
dHJpYnMuYXBwZW5kKGtDR0xQRkFTYW1wbGVzKTsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDQpKTsKKyAgICB9CisKKyAgICBpZiAo
bV9pc0ZvcldlYkdMMikgeworICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBiYWNraW5nIGEg
V2ViR0wyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHdpdGggYSBPcGVuR0wgNCBjb250ZXh0LCB3
ZSBzaG91bGQgaW5zdGVhZCBiYWNrIGl0IHdpdGggQU5HTEUuCisgICAgICAgIC8vIFVzZSBhbiBP
cGVuR0wgNCBjb250ZXh0IGZvciBub3cgdW50aWwgdGhlIEFOR0xFIGJhY2tlbmQgaXMgcmVhZHku
CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFPcGVuR0xQcm9maWxlKTsKKyAgICAgICAg
YXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGtDR0xP
R0xQVmVyc2lvbl9HTDRfQ29yZSkpOworICAgIH0KKworICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRp
Y19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSk7CisKKyAgICBDR0xDaG9vc2VQaXhl
bEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRz
KTsKKworICAgIGlmICghbnVtUGl4ZWxGb3JtYXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBD
R0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOworICAgIENHTENvbnRleHRPYmogc2hh
cmVkQ0dMQ29udGV4dCA9IHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2Jq
PihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopIDogbnVsbHB0cjsKKworICAgIENHTEVycm9y
IGVyciA9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXRPYmosIHNoYXJlZENHTENvbnRleHQs
ICZjZ2xDb250ZXh0KTsKKyAgICBHTGludCBhYm9ydE9uQmxhY2tsaXN0ID0gMDsKKyAgICBDR0xT
ZXRQYXJhbWV0ZXIoY2dsQ29udGV4dCwga0NHTENQQWJvcnRPbkdQVVJlc3RhcnRTdGF0dXNCbGFj
a2xpc3RlZCwgJmFib3J0T25CbGFja2xpc3QpOworCisjaWYgUExBVEZPUk0oTUFDKSAvLyBGSVhN
RTogVGhpcyBwcm9iYWJseSBzaG91bGQgYmUgVVNFKE9QRU5HTCkgLSBzZWUgPHJkYXI6Ly81MzA2
Mjc5ND4uCisKKyAgICBhdXRvIGdwdUlEID0gKGhvc3RXaW5kb3cgJiYgaG9zdFdpbmRvdy0+ZGlz
cGxheUlEKCkpID8gZ3B1SURGb3JEaXNwbGF5KGhvc3RXaW5kb3ctPmRpc3BsYXlJRCgpKSA6IHBy
aW1hcnlHUFVJRCgpOworICAgIHNldEdQVUJ5UmVnaXN0cnlJRChjZ2xDb250ZXh0LCBwaXhlbEZv
cm1hdE9iaiwgZ3B1SUQpOworCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsK
KyNlbmRpZgorCisgICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqKTsKKwor
ICAgIG1fY29udGV4dE9iaiA9IGNnbENvbnRleHQ7CisKKyAgICBpZiAoZXJyICE9IGtDR0xOb0Vy
cm9yIHx8ICFtX2NvbnRleHRPYmopIHsKKyAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gY3Jl
YXRlIHRoZSBjb250ZXh0LgorICAgICAgICBtX2NvbnRleHRPYmogPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9jb250ZXh0T2JqID0gY2dsQ29udGV4dDsKKworICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KGNnbENvbnRleHQpOworCisgICAgLy8gV2ViR0wgMiBleHBlY3RzIEVT
IDMtb25seSBQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCB0byBiZSBlbmFibGVkOyB3ZSBt
dXN0IGVtdWxhdGUgdGhpcyBvbiBub24tRVMgMyBzeXN0ZW1zLgorICAgIGlmIChtX2lzRm9yV2Vi
R0wyKQorICAgICAgICA6OmdsRW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVfUkVT
VEFSVCk7CisKKyNlbGlmIFVTRShBTkdMRSkKKworICAgIG1fZGlzcGxheU9iaiA9IEVHTF9HZXRE
aXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworICAgIGlmIChtX2Rpc3BsYXlPYmogPT0gRUdM
X05PX0RJU1BMQVkpCisgICAgICAgIHJldHVybjsKKyAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBt
aW5vclZlcnNpb247CisgICAgaWYgKEVHTF9Jbml0aWFsaXplKG1fZGlzcGxheU9iaiwgJm1ham9y
VmVyc2lvbiwgJm1pbm9yVmVyc2lvbikgPT0gRUdMX0ZBTFNFKSB7CisgICAgICAgIExPRyhXZWJH
TCwgIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIExPRyhXZWJHTCwgIkFOR0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5v
cjogJWQiLCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbik7CisgICAgY29uc3QgY2hhciAqZGlz
cGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5T
SU9OUyk7CisgICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9u
cyk7CisKKyAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1tdID0geworICAgICAgICBFR0xfUkVO
REVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisgICAgICAgIEVHTF9SRURfU0laRSwg
OCwKKyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgs
CisgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICBFR0xfTk9ORQorICAgIH07Cisg
ICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7CisgICAgRUdMX0Nob29zZUNvbmZp
ZyhtX2Rpc3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZtX2NvbmZpZ09iaiwgMSwgJm51bWJl
ckNvbmZpZ3NSZXR1cm5lZCk7CisgICAgaWYgKG51bWJlckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7
CisgICAgICAgIExPRyhXZWJHTCwgIkVHTENvbmZpZyBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgTE9HKFdlYkdMLCAiR290IEVHTENvbmZpZyIp
OworCisgICAgRUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19BUEkpOworICAgIGlmIChFR0xfR2V0
RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8g
YmluZCB0byBPUEVOR0xfRVNfQVBJIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBW
ZWN0b3I8RUdMaW50PiBlZ2xDb250ZXh0QXR0cmlidXRlczsKKyAgICBpZiAobV9pc0ZvcldlYkdM
MikgeworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJ
RU5UX1ZFUlNJT04pOworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05U
RVhUX0NMSUVOVF9WRVJTSU9OKTsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5k
KDIpOworICAgICAgICAvLyBBTkdMRSB3aWxsIHVwZ3JhZGUgdGhlIGNvbnRleHQgdG8gRVMzIGF1
dG9tYXRpY2FsbHkgdW5sZXNzIHRoaXMgaXMgc3BlY2lmaWVkLgorICAgICAgICBlZ2xDb250ZXh0
QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxF
X0FOR0xFKTsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7
CisgICAgfQorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9XRUJH
TF9DT01QQVRJQklMSVRZX0FOR0xFKTsKKyAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQo
RUdMX1RSVUUpOworCisgICAgaWYgKHN0cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdM
RV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBw
ZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKKyAgICAgICAgLy8gRUdMX0xPV19QT1dF
Ul9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hhbmdlIHRvCisgICAgICAgIC8vIEVHTF9ISUdIX1BP
V0VSX0FOR0xFIGlmIGRlc2lyZWQuCisgICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVu
ZChFR0xfTE9XX1BPV0VSX0FOR0xFKTsKKyAgICB9CisgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMu
YXBwZW5kKEVHTF9OT05FKTsKKworICAgIG1fY29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0
KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmosIHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxF
R0xDb250ZXh0PihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopIDogRUdMX05PX0NPTlRFWFQs
IGVnbENvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7CisgICAgaWYgKG1fY29udGV4dE9iaiA9PSBF
R0xfTk9fQ09OVEVYVCkgeworICAgICAgICBMT0coV2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxp
emF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBMT0coV2ViR0ws
ICJHb3QgRUdMQ29udGV4dCIpOworCisgICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOworCisgICAgaWYg
KG1faXNGb3JXZWJHTDIpCisgICAgICAgIGdsOjpFbmFibGUoR3JhcGhpY3NDb250ZXh0R0w6OlBS
SU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBF
eHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGNvbnN0IGNoYXIqIHJlcXVpcmVkRXh0ZW5zaW9uc1tdID0geworICAgICAgICAi
R0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiLCAvLyBGb3IgSU9TdXJmYWNlLWJhY2tlZCB0ZXh0
dXJlcy4KKyAgICAgICAgIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIsIC8vIEZvciBj
cmVhdGluZyB0aGUgRUdMIHN1cmZhY2UgZnJvbSBhbiBJT1N1cmZhY2UuCisgICAgfTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChyZXF1aXJlZEV4dGVuc2lv
bnMpOyArK2kpIHsKKyAgICAgICAgaWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKHJlcXVpcmVkRXh0
ZW5zaW9uc1tpXSkpIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIk1pc3NpbmcgcmVxdWlyZWQg
ZXh0ZW5zaW9uLiAlcyIsIHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocmVxdWly
ZWRFeHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVs
bHB0cjsKKyAgICBFR0xfUXVlcnlEaXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RF
VklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOworICAgIENH
TENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxwdHI7CisgICAgQ0dMUGl4ZWxGb3JtYXRPYmog
cGl4ZWxGb3JtYXQgPSBudWxscHRyOworICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZp
Y2UsIEVHTF9DR0xfQ09OVEVYVF9BTkdMRSwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigm
Y2dsQ29udGV4dCkpOworICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9D
R0xfUElYRUxfRk9STUFUX0FOR0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZwaXhl
bEZvcm1hdCkpOworICAgIGF1dG8gZ3B1SUQgPSAoaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5k
aXNwbGF5SUQoKSkgPyBncHVJREZvckRpc3BsYXkoaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpIDog
cHJpbWFyeUdQVUlEKCk7CisgICAgc2V0R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRleHQsIHBpeGVs
Rm9ybWF0LCBncHVJRCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyAjZWxpZiBVU0UoQU5HTEUpCisKKyAg
ICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIC8vIENy
ZWF0ZSB0aGUgV2ViR0xMYXllcgorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAg
ICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhH
cmFwaGljc0NvbnRleHRHTDp0aGlzXSk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBbbV93ZWJH
TExheWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOworI2VuZGlmCisjaWYgVVNFKEFOR0xFKQor
ICAgICAgICBbbV93ZWJHTExheWVyIHNldEVHTERpc3BsYXk6bV9kaXNwbGF5T2JqIGNvbmZpZzpt
X2NvbmZpZ09ial07CisjZW5kaWYKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisKKyNp
ZiBVU0UoT1BFTkdMKQorICAgIGlmICh1c2VNdWx0aXNhbXBsaW5nKQorICAgICAgICA6OmdsRW5h
YmxlKEdMX01VTFRJU0FNUExFKTsKKyNlbmRpZgorCisgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJl
IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgZnJhbWVidWZmZXIuCisjaWYgVVNFKE9QRU5HTF9F
UykKKyAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsKKyNlbGlmIFVTRShP
UEVOR0wpCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIC8vIFdlIGJp
bmQgdG8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhUIHJhdGhlciB0aGFuIFRFWFRVUkVfMkQgYmVj
YXVzZQorICAgIC8vIHRoYXQncyB3aGF0IGlzIHJlcXVpcmVkIGZvciBhIHRleHR1cmUgYmFja2Vk
IGJ5IElPU3VyZmFjZS4KKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
RVhULCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFO
R0xFX0VYVCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0VYVCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdM
RV9FWFQsIDApOworCisjZWxpZiBVU0UoQU5HTEUpCisKKyAgICBHTGVudW0gdGV4dHVyZVRhcmdl
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0OworCisgICAgZ2w6
OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJl
VGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQs
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVy
aSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAg
Z2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbDo6QmluZFRleHR1cmUodGV4
dHVyZVRhcmdldCwgMCk7CisjZWxzZQorI2Vycm9yIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24K
KyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykKKyAgICAvLyBDcmVh
dGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdC4KKyAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEs
ICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKKworICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKyAgICBpZiAoIWF0dHJz
LmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkpCisgICAgICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisKKyAgICAv
LyBJZiBuZWNlc3NhcnksIGNyZWF0ZSBhbm90aGVyIGZyYW1lYnVmZmVyIGZvciB0aGUgbXVsdGlz
YW1wbGUgcmVzdWx0cy4KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xH
ZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICA6Omds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAg
ICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsR2Vu
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgfQorI2VsaWYgVVNFKEFOR0xFKQorICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJv
KTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAg
bV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOworCisgICAgaWYgKCFhdHRycy5hbnRpYWxpYXMgJiYg
KGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpKQorICAgICAgICBnbDo6R2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworCisgICAgLy8gSWYgbmVjZXNzYXJ5LCBj
cmVhdGUgYW5vdGhlciBmcmFtZWJ1ZmZlciBmb3IgdGhlIG11bHRpc2FtcGxlIHJlc3VsdHMuCisg
ICAgaWYgKGF0dHJzLmFudGlhbGlhcykgeworICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBt
X211bHRpc2FtcGxlRkJPOworICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMu
ZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorCisjZW5kaWYgLy8gVVNFKEFOR0xFKQorCisj
aWYgIVVTRShBTkdMRSkKKyAgICAvLyBBTkdMRSBzaGFkZXIgY29tcGlsZXIgaW5pdGlhbGl6YXRp
b24uCisKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgc2g6Oklu
aXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
VmVydGV4QXR0cmlicyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZl
Y3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkFSWUlOR19W
RUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZB
TkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAm
QU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dEdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMu
TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CisKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9y
IE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAg
CisgICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOworICAgIGdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRl
eHRHTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIEFOR0xFUmVzb3VyY2Vz
LkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNp
b24pOworCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworI2Vu
ZGlmIC8vICFVU0UoQU5HTEUpCisgICAgCisjaWYgVVNFKE9QRU5HTCkKKyAgICA6OmdsRW5hYmxl
KEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKQorICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQUklURSk7CisjZW5kaWYKKworI2lm
IFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
CisjZW5kaWYKKworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCAoJXApLiIsIHRoaXMpOworfQorCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOworCisgICAgaWYgKG1fY29u
dGV4dE9iaikgeworICAgICAgICBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOworCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29udGV4dCAqPihtX2Nv
bnRleHRPYmopIHJlbmRlcmJ1ZmZlclN0b3JhZ2U6R0xfUkVOREVSQlVGRkVSIGZyb21EcmF3YWJs
ZTpuaWxdOworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV90ZXh0dXJlKTsK
KyNlbGlmIFVTRShPUEVOR0wpCisgICAgICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0
YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9iaik7CisgICAgICAgIENHTFNldEN1
cnJlbnRDb250ZXh0KGNnbENvbnRleHQpOworICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwg
Jm1fdGV4dHVyZSk7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgICAgIEVHTF9NYWtlQ3VycmVudCht
X2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgbV9jb250ZXh0T2Jq
KTsKKyAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2VuZGlmCisK
KyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQorICAgICAgICBpZiAoYXR0cnMuYW50
aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8
IGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xE
ZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAg
ICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEs
ICZtX2Zibyk7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgICAgIGlmIChhdHRycy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVw
dGgpCisgICAgICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBnbDo6
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9
CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyNlbmRpZgorCisj
aWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0
OjBdOworICAgICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4obV9jb250ZXh0T2JqKSBy
ZWxlYXNlXTsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0
KDApOworICAgICAgICBDR0xEZXN0cm95Q29udGV4dChjZ2xDb250ZXh0KTsKKyNlbGlmIFVTRShB
TkdMRSkKKyAgICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIEVHTF9EZXN0cm95
Q29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaik7CisjZW5kaWYKKyAgICAgICAgW21f
d2ViR0xMYXllciBzZXRDb250ZXh0Om51bGxwdHJdOworICAgIH0KKworICAgIExPRyhXZWJHTCwg
IkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMICglcCkuIiwgdGhpcyk7Cit9CisK
KyNpZiBVU0UoT1BFTkdMX0VTKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0UmVu
ZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCit7CisgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgY2FsbCB0byBzZXRCb3VuZHMgYmVs
b3cgdG8gdXBkYXRlIHRoZSBiYWNraW5nIHN0b3JlIHNpemUgYnV0IHdlIGFsc28KKyAgICAvLyBk
byBub3Qgd2FudCB0byBjbG9iYmVyIHRoZSBib3VuZHMgc2V0IGR1cmluZyBsYXlvdXQuCisgICAg
Q0dSZWN0IHByZXZpb3VzQm91bmRzID0gW21fd2ViR0xMYXllci5nZXQoKSBib3VuZHNdOworCisg
ICAgW21fd2ViR0xMYXllciBzZXRCb3VuZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0
KV07CisgICAgW21fd2ViR0xMYXllciBzZXRPcGFxdWU6IWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGFdOworCisgICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0ICo+KG1fY29udGV4dE9iaikgcmVu
ZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJCVUZGRVIgZnJvbURyYXdhYmxlOnN0YXRpY19jYXN0
PGlkPEVBR0xEcmF3YWJsZT4+KG1fd2ViR0xMYXllci5nZXQoKSldOworCisgICAgW21fd2ViR0xM
YXllciBzZXRCb3VuZHM6cHJldmlvdXNCb3VuZHNdOworfQorI2VuZGlmCisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgaWYgKCFtX2Nv
bnRleHRPYmopCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIFVTRShPUEVOR0xfRVMpCisg
ICAgaWYgKFtFQUdMQ29udGV4dCBjdXJyZW50Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQorICAg
ICAgICByZXR1cm4gW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVB
R0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKV07CisjZWxpZiBVU0UoT1BFTkdMKQorICAgIENHTENv
bnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOworICAgIGlm
IChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybiBDR0xTZXRD
dXJyZW50Q29udGV4dChzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopKSA9
PSBrQ0dMTm9FcnJvcjsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICBpZiAoRUdMX0dldEN1cnJlbnRD
b250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50
KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRP
YmopOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVzKCkKK3sKKyAgICBpZiAobV9mYWlsTmV4dFN0YXR1c0No
ZWNrKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlByZXRlbmRpbmcgdGhlIEdQVSBoYXMgcmVzZXQg
KCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKKyAgICAgICAgbV9mYWlsTmV4dFN0YXR1
c0NoZWNrID0gZmFsc2U7CisgICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKKyNpZiBVU0UoT1BF
TkdMKQorICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKKyNlbGlmIFVTRShPUEVOR0xf
RVMpCisgICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKKyNlbGlmIFVT
RShBTkdMRSkKKyAgICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NV
UkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIE9ubHkgZG8gdGhlIGNoZWNrIGV2ZXJ5IHN0YXR1c0No
ZWNrVGhyZXNob2xkIGNhbGxzLgorICAgIGlmIChtX3N0YXR1c0NoZWNrQ291bnQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3RhdHVzQ2hlY2tDb3VudCA9IChtX3N0YXR1c0NoZWNrQ291bnQg
KyAxKSAlIHN0YXR1c0NoZWNrVGhyZXNob2xkOworCisgICAgR0xpbnQgcmVzdGFydFN0YXR1cyA9
IDA7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0
aWNfY2FzdDxDR0xDb250ZXh0T2JqPihwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpOworICAg
IENHTEdldFBhcmFtZXRlcihjZ2xDb250ZXh0LCBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzLCAmcmVz
dGFydFN0YXR1cyk7CisgICAgaWYgKHJlc3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0
YXR1c0JsYWNrbGlzdGVkKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlRoZSBHUFUgaGFzIGJsYWNr
bGlzdGVkIHVzICglcCkuIFRlcm1pbmF0aW5nLiIsIHRoaXMpOworICAgICAgICBleGl0KEVYX09T
RVJSKTsKKyAgICB9CisgICAgaWYgKHJlc3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0
YXR1c0NhdXNlZCkgeworICAgICAgICBMT0coV2ViR0wsICJUaGUgR1BVIGhhcyByZXNldCB1cyAo
JXApLiBMb3NlIHRoZSBjb250ZXh0LiIsIHRoaXMpOworICAgICAgICBmb3JjZUNvbnRleHRMb3N0
KCk7CisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOworICAgIH0KKyNlbGlmIFVTRShP
UEVOR0xfRVMpCisgICAgRUFHTENvbnRleHQqIGN1cnJlbnRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8
RUFHTENvbnRleHQqPihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpOworICAgIFtjdXJyZW50
Q29udGV4dCBnZXRQYXJhbWV0ZXI6a0VBR0xDUEdQVVJlc3RhcnRTdGF0dXMgdG86JnJlc3RhcnRT
dGF0dXNdOworICAgIGlmIChyZXN0YXJ0U3RhdHVzID09IGtFQUdMQ1BHUFVSZXN0YXJ0U3RhdHVz
Q2F1c2VkIHx8IHJlc3RhcnRTdGF0dXMgPT0ga0VBR0xDUEdQVVJlc3RhcnRTdGF0dXNCbGFja2xp
c3RlZCkgeworICAgICAgICBMT0coV2ViR0wsICJUaGUgR1BVIGhhcyBlaXRoZXIgcmVzZXQgb3Ig
YmxhY2tsaXN0ZWQgdXMgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKKyAgICAgICAg
Zm9yY2VDb250ZXh0TG9zdCgpOworICAgICAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRl
eHQ6MF07CisgICAgfQorI2VsaWYgVVNFKEFOR0xFKQorICAgIC8vIEZJWE1FOiBjaGVjayB2aWEg
S0hSX3JvYnVzdG5lc3MuCisgICAgcmVzdGFydFN0YXR1cyA9IDA7CisjZW5kaWYKK30KKworI2lm
IFVTRShPUEVOR0xfRVMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVzZW50UmVu
ZGVyYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoY29udGV4
dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZO
ZWNlc3NhcnkoKTsKKworICAgIDo6Z2xGbHVzaCgpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
KEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRl
eHQqPihtX2NvbnRleHRPYmopIHByZXNlbnRSZW5kZXJidWZmZXI6R0xfUkVOREVSQlVGRkVSXTsK
KyAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKK30KKyNlbmRpZgorCiti
b29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZUlPU3VyZmFjZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYg
c3VyZmFjZSwgR0MzRHVpbnQgcGxhbmUpCit7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBDR0xDb250
ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihwbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMKCkpOworICAgIHJldHVybiBrQ0dMTm9FcnJvciA9PSBDR0xUZXhJbWFn
ZUlPU3VyZmFjZTJEKGNnbENvbnRleHQsIHRhcmdldCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3VyZmFjZSwgcGxhbmUpOworI2VsaWYgVVNFKE9QRU5HTF9F
UykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQorICAgIHJldHVybiBbc3RhdGlj
X2Nhc3Q8RUFHTENvbnRleHQgKj4ocGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKSB0ZXhJbWFn
ZUlPU3VyZmFjZTpzdXJmYWNlIHRhcmdldDp0YXJnZXQgaW50ZXJuYWxGb3JtYXQ6aW50ZXJuYWxG
b3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBmb3JtYXQ6Zm9ybWF0IHR5cGU6dHlwZSBw
bGFuZTpwbGFuZV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNF
RF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7CisgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKKyAgICBV
TlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKKyAgICBVTlVT
RURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN1cmZhY2UpOworICAgIFVOVVNFRF9Q
QVJBTShwbGFuZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNpZiBVU0UoT1BF
TkdMKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNr
aW5nU3RvcmUoSW50U2l6ZSBzaXplKQoreworICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZSBhdCAlZCB4ICVkLiAoJXAp
Iiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB0aGlzKTsKKyAgICBbbV93ZWJHTExheWVy
IGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNpemU6c2l6ZSB1c2luZ0FscGhhOmNv
bnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQorewor
ICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZl
clRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOworICAgIFttX3dl
YkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVwZGF0ZUNHTENvbnRleHQoKQoreworICAgIGlm
ICghbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coV2ViR0wsICJEZXRl
Y3RlZCBhIG11eCBzd2l0Y2ggb3IgZGlzcGxheSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dMVXBk
YXRlQ29udGV4dC4gKCVwKSIsIHRoaXMpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgQ0dMVXBkYXRlQ29udGV4dChzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRP
YmopKTsKKyAgICBtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUgPSB0cnVlOworfQor
CisjZW5kaWYgLy8gVVNFKE9QRU5HTCkKKworI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wg
aXNWaXNpYmxlKQoreworICAgIGlmIChtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiA9
PSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7Cisg
ICAgICAgIGlmIChpc1Zpc2libGUpCisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1h
bmNlKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0UmVxdWlyaW5nSGlnaFBl
cmZvcm1hbmNlKHRoaXMpOworICAgIH0KK30KKyNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCBVU0Uo
QU5HTEUpCisKKyNpZiBVU0UoQU5HTEUpCisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVDR0xDb250ZXh0KCkKK3sKKyAgICBpZiAoIW1fY29u
dGV4dE9iaikKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKFdlYkdMLCAiRGV0ZWN0ZWQgYSBt
dXggc3dpdGNoIG9yIGRpc3BsYXkgcmVjb25maWd1cmF0aW9uLiBDYWxsIENHTFVwZGF0ZUNvbnRl
eHQuICglcCkiLCB0aGlzKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEVHTERl
dmljZUVYVCBkZXZpY2UgPSBudWxscHRyOworICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQo
bV9kaXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIq
PigmZGV2aWNlKSk7CisgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gbnVsbHB0cjsKKyAg
ICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2aWNlLCBFR0xfQ0dMX0NPTlRFWFRfQU5HTEUs
IHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmNnbENvbnRleHQpKTsKKworICAgIENHTFVw
ZGF0ZUNvbnRleHQoY2dsQ29udGV4dCk7CisgICAgbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1h
bmNlR1BVID0gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplIHNpemUpCit7CisjaWYgSEFW
RShJT1NVUkZBQ0UpCisgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFs
bG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlIGF0ICVkIHggJWQuICglcCkiLCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIHRoaXMpOworICAgIFttX3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1
cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVzaW5nQWxwaGE6Y29udGV4dEF0dHJpYnV0
ZXMoKS5hbHBoYV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyNlbmRpZgorfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVC
YWNraW5nU3RvcmVGcm9tTGF5ZXIoKQoreworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIExPRyhX
ZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVC
YWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOworICAgIFttX3dlYkdMTGF5ZXIg
YmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07CisjZW5kaWYKK30KKyNlbmRp
ZiAvLyBVU0UoQU5HTEUpCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJD
b21wbGlhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKK3sKKyAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVB
bGxDb250ZXh0cygpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvd09m
ZmxpbmVSZW5kZXJlcnMoKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFdF
QlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQorICAgIC8vIFdoZW4gV2luZG93U2VydmVy
IGFjY2VzcyBpcyBibG9ja2VkIGluIHRoZSBXZWJQcm9jZXNzLCB0aGVyZSBpcyBubyB3YXkKKyAg
ICAvLyBmb3IgT3BlbkdMIHRvIGRlY2lkZSB3aGljaCBHUFUgaXMgY29ubmVjdGVkIHRvIGEgZGlz
cGxheSAob25saW5lL29mZmxpbmUpLgorICAgIC8vIE9wZW5HTCB3aWxsIHRoZW4gY29uc2lkZXIg
YWxsIEdQVXMsIG9yIHJlbmRlcmVycywgYXMgb2ZmbGluZSwgd2hpY2ggbWVhbnMKKyAgICAvLyBh
bGwgb2ZmbGluZSByZW5kZXJlcnMgbmVlZCB0byBiZSBjb25zaWRlcmVkIHdoZW4gZmluZGluZyBh
IHBpeGVsIGZvcm1hdC4KKyAgICAvLyBJbiBXZWJLaXQgbGVnYWN5LCB0aGVyZSB3aWxsIHN0aWxs
IGJlIGEgV2luZG93U2VydmVyIGNvbm5lY3Rpb24sIGFuZAorICAgIC8vIG1fZGlzcGxheU1hc2sg
d2lsbCBub3QgYmUgc2V0IGluIHRoaXMgY2FzZS4KKyAgICBpZiAocHJpbWFyeU9wZW5HTERpc3Bs
YXlNYXNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VsaWYgUExBVEZPUk0oTUFDQ0FUQUxZ
U1QpCisgICAgLy8gRklYTUU6IDxyZGFyOi8vNTMwNjI3OTQ+IFdlJ3JlIHZlcnkgaW5jb25zaXN0
ZW50IGFib3V0IFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HCisgICAgLy8gYW5kIE1B
Qy9NQUNDQVRBTFlTVCBhbmQgT1BFTkdML09QRU5HTEVTLgorICAgIHJldHVybiB0cnVlOworI2Vu
ZGlmCisgICAgICAgIAorI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKyAgICBpZiAo
aGFzTG93QW5kSGlnaFBvd2VyR1BVcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQpCit7CisgICAgaWYgKCFtX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybjsKKyNp
ZiBVU0UoQU5HTEUpCisgICAgaWYgKCFtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUp
IHsKKyAgICAgICAgRUdMRGV2aWNlRVhUIGRldmljZSA9IG51bGxwdHI7CisgICAgICAgIEVHTF9R
dWVyeURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRl
cnByZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7CisgICAgICAgIENHTENvbnRleHRPYmog
Y2dsQ29udGV4dCA9IG51bGxwdHI7CisgICAgICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9y
bWF0ID0gbnVsbHB0cjsKKyAgICAgICAgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwg
RUdMX0NHTF9DT05URVhUX0FOR0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZjZ2xD
b250ZXh0KSk7CisgICAgICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9D
R0xfUElYRUxfRk9STUFUX0FOR0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZwaXhl
bEZvcm1hdCkpOworICAgICAgICBzZXRHUFVCeVJlZ2lzdHJ5SUQoY2dsQ29udGV4dCwgcGl4ZWxG
b3JtYXQsIGdwdUlERm9yRGlzcGxheShkaXNwbGF5SUQpKTsKKyAgICB9CisjZWxzZQorI2lmIFVT
RShPUEVOR0wpCisgICAgaWYgKCFtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUpIHsK
KyAgICAgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4
dE9iaj4obV9jb250ZXh0T2JqKTsKKyAgICAgICAgc2V0R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRl
eHQsIENHTEdldFBpeGVsRm9ybWF0KGNnbENvbnRleHQpLCBncHVJREZvckRpc3BsYXkoZGlzcGxh
eUlEKSk7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLy8gVVNFKEFOR0xFKQorfQorI2VuZGlmIC8v
ICFQTEFURk9STShNQUMpCisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhU
X0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9T
dXJmYWNlLm1tCmluZGV4IGRhZTE4N2RhNjVkMjBiMjgwNmYyYmQzOWU4YzNiMDY5Mzk3YzRiYWIu
LmMyMTI1YzNlZjE2MGMwODEwMTA5ODIzYjRiOTAzNmRkZjZmYmNmNjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KQEAgLTI4
LDggKzI4LDggQEAKIAogI2lmIEhBVkUoSU9TVVJGQUNFKQogCi0jaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJ
T1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5oCmluZGV4IGU2YzQ1
ZmI1NzA1ZDYyMDQ5ZTRiYjE5NzZlZGE4ODMwNzliODcyMzMuLmY3Njc5MDk3NDdmZWZmNDg3MTRi
MWJhZDA5ZjEzMmJkZWI4YmY2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiB9CiAKIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCkBAIC00Niw3ICs0Niw3IEBAIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCiAjZXJyb3IgVW5zdXBwb3J0ZWQgcGxhdGZvcm0KICNlbmRpZgog
ewotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBfY29udGV4dDsKKyAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogX2NvbnRleHQ7CiAgICAgZmxvYXQgX2RldmljZVBp
eGVsUmF0aW87CiAjaWYgSEFWRShJT1NVUkZBQ0UpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5H
TEUpKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IF9jb250ZW50c0J1
ZmZlcjsKQEAgLTY1LDkgKzY1LDkgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVH
SU4KICNlbmRpZgogfQogCi1AcHJvcGVydHkgKG5vbmF0b21pYykgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQ7CitAcHJvcGVydHkgKG5vbmF0b21pYykgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQ7CiAKLS0gKGlkKWluaXRXaXRoR3JhcGhpY3NDb250
ZXh0M0Q6KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0OworLSAoaWQpaW5pdFdp
dGhHcmFwaGljc0NvbnRleHRHTDooV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKWNv
bnRleHQ7CiAKIC0gKENHSW1hZ2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZToo
Q0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCmluZGV4IDc1ODhmOTExNWM1YzM4
ZWI5ODYxMDUwYmViMjYzMmNlM2I0MGYwZDkuLjI5MjAxNmFjMTRlYWMyYWE4ZmU0ZDE1ZDI4Zjk0
YjAyZTJkNjc1Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1dlYkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViR0xMYXllci5tbQpAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJH
TCkKICNpbXBvcnQgIldlYkdMTGF5ZXIuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTC5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgogI2ltcG9ydCAiR3JhcGhp
Y3NMYXllckNBLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCkBAIC02MSw3
ICs2MSw3IEBACiAKIEBzeW50aGVzaXplIGNvbnRleHQ9X2NvbnRleHQ7CiAKLS0oaWQpaW5pdFdp
dGhHcmFwaGljc0NvbnRleHQzRDooV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqKWNvbnRleHQK
Ky0oaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHRHTDooV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqKWNvbnRleHQKIHsKICAgICBfY29udGV4dCA9IGNvbnRleHQ7CiAgICAgc2VsZiA9
IFtzdXBlciBpbml0XTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2
b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogI2lmIFVTRShPUEVOR0wpCi0gICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4oX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QoKSk7CisgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8Q0dMQ29udGV4dE9iaj4oX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSk7
CiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY2dsQ29udGV4dCk7CiAKICAgICBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBpbWFnZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwpAQCAtMTYzLDcg
KzE2Myw3IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQgKiwgY29uc3Qgdm9pZCAqZGF0YSwg
c2l6ZV90IC8qIHNpemUgKi8pCiAgICAgICAgIGlmIChfbGF0Y2hlZFBidWZmZXIpIHsKIAogICAg
ICAgICAgICAgR0MzRGVudW0gdGV4dHVyZSA9IF9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKTsK
LSAgICAgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6SU9TdXJmYWNl
VGV4dHVyZVRhcmdldCwgdGV4dHVyZSk7CisgICAgICAgICAgICBnbDo6QmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0w6OklPU3VyZmFjZVRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwogICAgICAg
ICAgICAgaWYgKCFFR0xfUmVsZWFzZVRleEltYWdlKF9lZ2xEaXNwbGF5LCBfbGF0Y2hlZFBidWZm
ZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcmVwb3J0
IGVycm9yLgogICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0yMjIsNyArMjIy
LDcgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkICpkYXRhLCBzaXpl
X3QgLyogc2l6ZSAqLykKICAgICAgICAgRUdMX1dJRFRILCBzaXplLndpZHRoKCksCiAgICAgICAg
IEVHTF9IRUlHSFQsIHNpemUuaGVpZ2h0KCksCiAgICAgICAgIEVHTF9JT1NVUkZBQ0VfUExBTkVf
QU5HTEUsIDAsCi0gICAgICAgIEVHTF9URVhUVVJFX1RBUkdFVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQsCisgICAgICAgIEVHTF9URVhUVVJFX1RBUkdFVCwg
R3JhcGhpY3NDb250ZXh0R0w6OkVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQsCiAgICAgICAgIEVH
TF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSwgdXNpbmdBbHBoYSA/IEdMX0JHUkFfRVhU
IDogR0xfUkdCLAogICAgICAgICBFR0xfVEVYVFVSRV9GT1JNQVQsIEVHTF9URVhUVVJFX1JHQkEs
CiAgICAgICAgIEVHTF9URVhUVVJFX1RZUEVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsCkBAIC0y
NTAsMTMgKzI1MCwxMyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQg
KmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgIEdDM0RlbnVtIGludGVybmFsRm9ybWF0ID0g
X3VzaW5nQWxwaGEgPyBHTF9SR0JBIDogR0xfUkdCOwogCiAgICAgLy8gTGluayB0aGUgSU9TdXJm
YWNlIHRvIHRoZSB0ZXh0dXJlLgotICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRp
Y19jYXN0PENHTENvbnRleHRPYmo+KF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkpOworICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRl
eHRPYmo+KF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpOwogICAgIENHTEVy
cm9yIGVycm9yID0gQ0dMVGV4SW1hZ2VJT1N1cmZhY2UyRChjZ2xDb250ZXh0LCBHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIGludGVybmFsRm9ybWF0LCBfYnVmZmVyU2l6ZS53aWR0aCgpLCBfYnVm
ZmVyU2l6ZS5oZWlnaHQoKSwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBp
b1N1cmZhY2UsIDApOwogICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsIGVycm9yID09IGtDR0xOb0Vy
cm9yKTsKICNlbGlmIFVTRShBTkdMRSkKICAgICBHQzNEZW51bSB0ZXh0dXJlID0gX2NvbnRleHQt
PnBsYXRmb3JtVGV4dHVyZSgpOwogCi0gICAgZ2w6OkJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LCB0ZXh0dXJlKTsKKyAgICBnbDo6QmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0w6OklPU3VyZmFjZVRleHR1cmVUYXJnZXQsIHRleHR1cmUpOwog
CiAgICAgaWYgKF9sYXRjaGVkUGJ1ZmZlcikgewogICAgICAgICBpZiAoIUVHTF9SZWxlYXNlVGV4
SW1hZ2UoX2VnbERpc3BsYXksIF9sYXRjaGVkUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFw
aGljc0NvbnRleHQzRE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vR3JhcGhpY3NDb250ZXh0M0RORU9OLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGMwNDNmZWRkNGE5YTYyYmVlZTVjYjhiNDUwZDg0OTc2ZTNkYzZkYTUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHQzRE5FT04uaAorKysgL2Rldi9udWxs
CkBAIC0xLDMwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdhYm9yIFJhcGNz
YW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRE5FT05faAotI2RlZmluZSBHcmFwaGljc0NvbnRl
eHQzRE5FT05faAotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotCi0jaW5jbHVkZSA8
YXJtX25lb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgU0lNRCB7Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkExNkxpdHRsZVRvUkdCQTgoY29u
c3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBp
eGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVy
Um93ICogNDsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cg
JSAxNjsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0
YWlsQ29tcG9uZW50czsKLSAgICBjb25zdCB1aW50OF90KiBzcmMgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2UpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvbXBvbmVudHNTaXplOyBpICs9IDE2KSB7Ci0gICAgICAgIHVpbnQ4eDE2eDJfdCBjb21wb25l
bnRzID0gdmxkMnFfdTgoc3JjICsgaSAqIDIpOwotICAgICAgICB2c3QxcV91OChkZXN0aW5hdGlv
biArIGksIGNvbXBvbmVudHMudmFsWzFdKTsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gY29tcG9u
ZW50c1NpemU7Ci0gICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemU7Ci0gICAgcGl4ZWxz
UGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgdW5w
YWNrT25lUm93T2ZSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVp
bnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNp
Z25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogMzsKLSAgICB1bnNpZ25lZCB0
YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAyNDsKLSAgICB1bnNpZ25lZCBjb21w
b25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLQotICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRBID0gdmR1cF9uX3U4KDB4RkYpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAyNCkgewotICAgICAgICB1aW50MTZ4OHgz
X3QgUkdCMTYgPSB2bGQzcV91MTYoc291cmNlICsgaSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21w
b25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihSR0IxNi52YWxbMF0sIDgpKTsKLSAgICAg
ICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZzaHJxX25fdTE2KFJHQjE2LnZh
bFsxXSwgOCkpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodnNo
cnFfbl91MTYoUkdCMTYudmFsWzJdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0g
e3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAg
ICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIFJHQkE4KTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0g
MzI7Ci0gICAgfQotCi0gICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOwotICAgIHBpeGVsc1Bl
clJvdyA9IHRhaWxDb21wb25lbnRzIC8gMzsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFj
a09uZVJvd09mQVJHQjE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWlu
dDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQotewotICAgIHVuc2ln
bmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cgKiA0OwotICAgIHVuc2lnbmVkIHRh
aWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMyOwotICAgIHVuc2lnbmVkIGNvbXBv
bmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxDb21wb25lbnRzOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7Ci0gICAgICAg
IHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291cmNlICsgaSk7Ci0gICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzBd
LCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9u
X3UxNihBUkdCMTYudmFsWzFdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0g
dnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJdLCA4KSk7Ci0gICAgICAgIHVpbnQ4
eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzNdLCA4
KSk7Ci0gICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRH
LCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24g
KyBpLCBSR0JBOCk7Ci0gICAgfQotCi0gICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOwotICAg
IGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxD
b21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mQkdS
QTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQotewotICAgIHVuc2lnbmVkIGNvbXBvbmVu
dHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cgKiA0OwotICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRz
ID0gY29tcG9uZW50c1BlclJvdyAlIDMyOwotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0g
Y29tcG9uZW50c1BlclJvdyAtIHRhaWxDb21wb25lbnRzOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7Ci0gICAgICAgIHVpbnQxNng4eDRf
dCBBUkdCMTYgPSB2bGQ0cV91MTYoc291cmNlICsgaSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21w
b25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzBdLCA4KSk7Ci0gICAg
ICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYu
dmFsWzFdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2
c2hycV9uX3UxNihBUkdCMTYudmFsWzJdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25l
bnRBID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzNdLCA4KSk7Ci0gICAgICAg
IHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRC
LCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7
Ci0gICAgfQotCi0gICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOwotICAgIGRlc3RpbmF0aW9u
ICs9IGNvbXBvbmVudHNTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8g
NDsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4
KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVk
JiBwaXhlbHNQZXJSb3cpCi17Ci0gICAgdW5zaWduZWQgdGFpbFBpeGVscyA9IHBpeGVsc1BlclJv
dyAlIDg7Ci0gICAgdW5zaWduZWQgcGl4ZWxTaXplID0gcGl4ZWxzUGVyUm93IC0gdGFpbFBpeGVs
czsKLQotICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgwZiA9IHZkdXBxX25fdTE2KDB4MEYpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkgKz0gOCkgewotICAgICAg
ICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJjZSArIGkpOwotCi0gICAg
ICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihlaWdodFBp
eGVscywgMTIpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZh
bmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgOCksIGltbWVkaWF0ZTB4MGYpKTsKLSAg
ICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9u
X3UxNihlaWdodFBpeGVscywgNCksIGltbWVkaWF0ZTB4MGYpKTsKLSAgICAgICAgdWludDh4OF90
IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihlaWdodFBpeGVscywgaW1tZWRpYXRl
MHgwZikpOwotCi0gICAgICAgIGNvbXBvbmVudFIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25l
bnRSLCA0KSwgY29tcG9uZW50Uik7Ci0gICAgICAgIGNvbXBvbmVudEcgPSB2b3JyX3U4KHZzaGxf
bl91OChjb21wb25lbnRHLCA0KSwgY29tcG9uZW50Ryk7Ci0gICAgICAgIGNvbXBvbmVudEIgPSB2
b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCA0KSwgY29tcG9uZW50Qik7Ci0gICAgICAgIGNv
bXBvbmVudEEgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRBLCA0KSwgY29tcG9uZW50QSk7
Ci0KLSAgICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7e2NvbXBvbmVudFIsIGNv
bXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsKLSAgICAgICAgdnN0NF91OChkZXN0
aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOwotICAgICAgICBkZXN0aW5hdGlvbiArPSAzMjsKLSAg
ICB9Ci0KLSAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxQ
aXhlbHM7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWdu
ZWRTaG9ydDQ0NDQoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlv
biwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVy
Um93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNv
bXBvbmVudHNQZXJSb3cgJSAzMjsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBv
bmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLQotICAgIHVpbnQ4X3QqIGRzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsKLSAgICB1aW50OHg4X3QgaW1tZWRp
YXRlMHhmMCA9IHZkdXBfbl91OCgweEYwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKLSAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2
bGQ0X3U4KHNvdXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFu
ZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4ZjApOwotICAgICAgICB1aW50OHg4X3QgY29t
cG9uZW50RyA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHhmMCks
IDQpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZhbmRfdTgoUkdCQTgudmFsWzJd
LCBpbW1lZGlhdGUweGYwKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2c2hyX25f
dTgodmFuZF91OChSR0JBOC52YWxbM10sIGltbWVkaWF0ZTB4ZjApLCA0KTsKLQotICAgICAgICB1
aW50OHg4eDJfdCBSR0JBNDsKLSAgICAgICAgUkdCQTQudmFsWzBdID0gdm9ycl91OChjb21wb25l
bnRCLCBjb21wb25lbnRBKTsKLSAgICAgICAgUkdCQTQudmFsWzFdID0gdm9ycl91OChjb21wb25l
bnRSLCBjb21wb25lbnRHKTsKLSAgICAgICAgdnN0Ml91OChkc3QsIFJHQkE0KTsKLSAgICAgICAg
ZHN0ICs9IDE2OwotICAgIH0KLQotICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKLSAgICBk
ZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZSAvIDQ7Ci0gICAgcGl4ZWxzUGVyUm93ID0gdGFp
bENvbXBvbmVudHMgLyA0OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZS
R0JBNTU1MVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCB0YWlsUGl4ZWxz
ID0gcGl4ZWxzUGVyUm93ICUgODsKLSAgICB1bnNpZ25lZCBwaXhlbFNpemUgPSBwaXhlbHNQZXJS
b3cgLSB0YWlsUGl4ZWxzOwotCi0gICAgdWludDh4OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91
OCgweDcpOwotICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweGZmID0gdmR1cF9uX3U4KDB4RkYpOwot
ICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxZiA9IHZkdXBxX25fdTE2KDB4MUYpOwotICAgIHVp
bnQxNng4X3QgaW1tZWRpYXRlMHgxID0gdmR1cHFfbl91MTYoMHgxKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkgKz0gOCkgewotICAgICAgICB1aW50MTZ4OF90
IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMTEpKTsK
LSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hy
cV9uX3UxNihlaWdodFBpeGVscywgNiksIGltbWVkaWF0ZTB4MWYpKTsKLSAgICAgICAgdWludDh4
OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBp
eGVscywgMSksIGltbWVkaWF0ZTB4MWYpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEg
PSB2cW1vdm5fdTE2KHZhbmRxX3UxNihlaWdodFBpeGVscywgaW1tZWRpYXRlMHgxKSk7Ci0KLSAg
ICAgICAgY29tcG9uZW50UiA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudFIsIDMpLCB2YW5k
X3U4KGNvbXBvbmVudFIsIGltbWVkaWF0ZTB4NykpOwotICAgICAgICBjb21wb25lbnRHID0gdm9y
cl91OCh2c2hsX25fdTgoY29tcG9uZW50RywgMyksIHZhbmRfdTgoY29tcG9uZW50RywgaW1tZWRp
YXRlMHg3KSk7Ci0gICAgICAgIGNvbXBvbmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25l
bnRCLCAzKSwgdmFuZF91OChjb21wb25lbnRCLCBpbW1lZGlhdGUweDcpKTsKLSAgICAgICAgY29t
cG9uZW50QSA9IHZtdWxfdTgoY29tcG9uZW50QSwgaW1tZWRpYXRlMHhmZik7Ci0KLSAgICAgICAg
dWludDh4OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNv
bXBvbmVudEIsIGNvbXBvbmVudEF9fTsKLSAgICAgICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVz
dENvbXBvbmVudHMpOwotICAgICAgICBkZXN0aW5hdGlvbiArPSAzMjsKLSAgICB9Ci0KLSAgICBz
b3VyY2UgKz0gcGl4ZWxTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxQaXhlbHM7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTEo
Y29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQm
IHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxz
UGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJS
b3cgJSAzMjsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cg
LSB0YWlsQ29tcG9uZW50czsKLQotICAgIHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KGRlc3RpbmF0aW9uKTsKLQotICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweGY4ID0g
dmR1cF9uX3U4KDB4RjgpOwotICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweDE4ID0gdmR1cF9uX3U4
KDB4MTgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSAr
PSAzMikgewotICAgICAgICB1aW50OHg4eDRfdCBSR0JBOCA9IHZsZDRfdTgoc291cmNlICsgaSk7
Ci0KLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudFIgPSB2YW5kX3U4KFJHQkE4LnZhbFswXSwg
aW1tZWRpYXRlMHhmOCk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHM2JpdCA9IHZzaHJf
bl91OChSR0JBOC52YWxbMV0sIDUpOwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHMmJp
dCA9IHZzaGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHgxOCksIDMpOwot
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZh
bFsyXSwgaW1tZWRpYXRlMHhmOCksIDIpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QSA9
IHZzaHJfbl91OChSR0JBOC52YWxbM10sIDcpOwotCi0gICAgICAgIHVpbnQ4eDh4Ml90IFJHQkE1
NTUxOwotICAgICAgICBSR0JBNTU1MS52YWxbMF0gPSB2b3JyX3U4KHZvcnJfdTgoY29tcG9uZW50
RzJiaXQsIGNvbXBvbmVudEIpLCBjb21wb25lbnRBKTsKLSAgICAgICAgUkdCQTU1NTEudmFsWzFd
ID0gdm9ycl91OChjb21wb25lbnRSLCBjb21wb25lbnRHM2JpdCk7Ci0gICAgICAgIHZzdDJfdTgo
ZHN0LCBSR0JBNTU1MSk7Ci0gICAgICAgIGRzdCArPSAxNjsKLSAgICB9Ci0KLSAgICBzb3VyY2Ug
Kz0gY29tcG9uZW50c1NpemU7Ci0gICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemUgLyA0
OwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIHVucGFja09uZVJvd09mUkdCNTY1VG9SR0JBOChjb25zdCB1aW50MTZfdComIHNv
dXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQotewot
ICAgIHVuc2lnbmVkIHRhaWxQaXhlbHMgPSBwaXhlbHNQZXJSb3cgJSA4OwotICAgIHVuc2lnbmVk
IHBpeGVsU2l6ZSA9IHBpeGVsc1BlclJvdyAtIHRhaWxQaXhlbHM7Ci0KLSAgICB1aW50MTZ4OF90
IGltbWVkaWF0ZTB4M2YgPSB2ZHVwcV9uX3UxNigweDNGKTsKLSAgICB1aW50MTZ4OF90IGltbWVk
aWF0ZTB4MWYgPSB2ZHVwcV9uX3UxNigweDFGKTsKLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgz
ID0gdmR1cF9uX3U4KDB4Myk7Ci0gICAgdWludDh4OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91
OCgweDcpOwotCi0gICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2ZHVwX25fdTgoMHhGRik7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxTaXplOyBpICs9IDgpIHsKLSAgICAg
ICAgdWludDE2eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3UxNihzb3VyY2UgKyBpKTsKLQotICAg
ICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoZWlnaHRQ
aXhlbHMsIDExKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2
YW5kcV91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDUpLCBpbW1lZGlhdGUweDNmKSk7Ci0g
ICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQ
aXhlbHMsIGltbWVkaWF0ZTB4MWYpKTsKLQotICAgICAgICBjb21wb25lbnRSID0gdm9ycl91OCh2
c2hsX25fdTgoY29tcG9uZW50UiwgMyksIHZhbmRfdTgoY29tcG9uZW50UiwgaW1tZWRpYXRlMHg3
KSk7Ci0gICAgICAgIGNvbXBvbmVudEcgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRHLCAy
KSwgdmFuZF91OChjb21wb25lbnRHLCBpbW1lZGlhdGUweDMpKTsKLSAgICAgICAgY29tcG9uZW50
QiA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudEIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudEIs
IGltbWVkaWF0ZTB4NykpOwotCi0gICAgICAgIHVpbnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0g
e3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAg
ICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIGRlc3RDb21wb25lbnRzKTsKLSAgICAgICAgZGVzdGlu
YXRpb24gKz0gMzI7Ci0gICAgfQotCi0gICAgc291cmNlICs9IHBpeGVsU2l6ZTsKLSAgICBwaXhl
bHNQZXJSb3cgPSB0YWlsUGl4ZWxzOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJv
d09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjUoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2
X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25l
ZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0YWls
Q29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKLSAgICB1bnNpZ25lZCBjb21wb25l
bnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLSAgICB1aW50OF90
KiBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbik7Ci0KLSAgICB1
aW50OHg4X3QgaW1tZWRpYXRlMHhmOCA9IHZkdXBfbl91OCgweEY4KTsKLSAgICB1aW50OHg4X3Qg
aW1tZWRpYXRlMHgxYyA9IHZkdXBfbl91OCgweDFDKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKLSAgICAgICAgdWludDh4OHg0X3QgUkdC
QTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRS
ID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4ZjgpOwotICAgICAgICB1aW50OHg4
X3QgY29tcG9uZW50R0xlZnQgPSB2c2hyX25fdTgoUkdCQTgudmFsWzFdLCA1KTsKLSAgICAgICAg
dWludDh4OF90IGNvbXBvbmVudEdSaWdodCA9IHZzaGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsx
XSwgaW1tZWRpYXRlMHgxYyksIDMpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZz
aHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhmOCksIDMpOwotCi0gICAg
ICAgIHVpbnQ4eDh4Ml90IFJHQjU2NTsKLSAgICAgICAgUkdCNTY1LnZhbFswXSA9IHZvcnJfdTgo
Y29tcG9uZW50R1JpZ2h0LCBjb21wb25lbnRCKTsKLSAgICAgICAgUkdCNTY1LnZhbFsxXSA9IHZv
cnJfdTgoY29tcG9uZW50UiwgY29tcG9uZW50R0xlZnQpOwotICAgICAgICB2c3QyX3U4KGRzdCwg
UkdCNTY1KTsKLSAgICAgICAgZHN0ICs9IDE2OwotICAgIH0KLQotICAgIHNvdXJjZSArPSBjb21w
b25lbnRzU2l6ZTsKLSAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZSAvIDQ7Ci0gICAg
cGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OwotfQotCi19IC8vIG5hbWVzcGFjZSBT
SU1ECi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dDNETkVPTl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL0dyYXBoaWNzQ29u
dGV4dEdMTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9H
cmFwaGljc0NvbnRleHRHTE5FT04uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTlhYzQ0NGUxOWQ0MzZjZTJhYWE1
NGNhYzlkYzAwN2M0OWU2YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHRHTE5FT04uaApAQCAtMCwwICsx
LDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHYWJvciBSYXBjc2FueWkgKHJnYWJv
ckBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorCisjaW5jbHVkZSA8YXJtX25l
b24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU0lNRCB7CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWlu
dDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1Bl
clJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICog
NDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAxNjsK
KyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29t
cG9uZW50czsKKyAgICBjb25zdCB1aW50OF90KiBzcmMgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihzb3VyY2UpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBv
bmVudHNTaXplOyBpICs9IDE2KSB7CisgICAgICAgIHVpbnQ4eDE2eDJfdCBjb21wb25lbnRzID0g
dmxkMnFfdTgoc3JjICsgaSAqIDIpOworICAgICAgICB2c3QxcV91OChkZXN0aW5hdGlvbiArIGks
IGNvbXBvbmVudHMudmFsWzFdKTsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gY29tcG9uZW50c1Np
emU7CisgICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemU7CisgICAgcGl4ZWxzUGVyUm93
ID0gdGFpbENvbXBvbmVudHMgLyA0OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25l
Um93T2ZSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3Qq
JiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBj
b21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogMzsKKyAgICB1bnNpZ25lZCB0YWlsQ29t
cG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAyNDsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRz
U2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKworICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRBID0gdmR1cF9uX3U4KDB4RkYpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAyNCkgeworICAgICAgICB1aW50MTZ4OHgzX3QgUkdC
MTYgPSB2bGQzcV91MTYoc291cmNlICsgaSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRS
ID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihSR0IxNi52YWxbMF0sIDgpKTsKKyAgICAgICAgdWlu
dDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZzaHJxX25fdTE2KFJHQjE2LnZhbFsxXSwg
OCkpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91
MTYoUkdCMTYudmFsWzJdLCA4KSk7CisgICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21w
b25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZz
dDRfdTgoZGVzdGluYXRpb24sIFJHQkE4KTsKKyAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7Cisg
ICAgfQorCisgICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOworICAgIHBpeGVsc1BlclJvdyA9
IHRhaWxDb21wb25lbnRzIC8gMzsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJv
d09mQVJHQjE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdCom
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQoreworICAgIHVuc2lnbmVkIGNv
bXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cgKiA0OworICAgIHVuc2lnbmVkIHRhaWxDb21w
b25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMyOworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNT
aXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxDb21wb25lbnRzOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7CisgICAgICAgIHVpbnQx
Nng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291cmNlICsgaSk7CisgICAgICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzBdLCA4KSk7
CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihB
UkdCMTYudmFsWzFdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3Zu
X3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBj
b21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzNdLCA4KSk7Cisg
ICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21w
b25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24gKyBpLCBS
R0JBOCk7CisgICAgfQorCisgICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOworICAgIGRlc3Rp
bmF0aW9uICs9IGNvbXBvbmVudHNTaXplOworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25l
bnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mQkdSQTE2TGl0
dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQoreworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJS
b3cgPSBwaXhlbHNQZXJSb3cgKiA0OworICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29t
cG9uZW50c1BlclJvdyAlIDMyOworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9u
ZW50c1BlclJvdyAtIHRhaWxDb21wb25lbnRzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7CisgICAgICAgIHVpbnQxNng4eDRfdCBBUkdC
MTYgPSB2bGQ0cV91MTYoc291cmNlICsgaSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRC
ID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzBdLCA4KSk7CisgICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFd
LCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9u
X3UxNihBUkdCMTYudmFsWzJdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0g
dnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzNdLCA4KSk7CisgICAgICAgIHVpbnQ4
eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21w
b25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7CisgICAg
fQorCisgICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOworICAgIGRlc3RpbmF0aW9uICs9IGNv
bXBvbmVudHNTaXplOworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mUkdCQTQ0NDRUb1JHQkE4KGNvbnN0
IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90KiYgZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhl
bHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgdGFpbFBpeGVscyA9IHBpeGVsc1BlclJvdyAlIDg7
CisgICAgdW5zaWduZWQgcGl4ZWxTaXplID0gcGl4ZWxzUGVyUm93IC0gdGFpbFBpeGVsczsKKwor
ICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgwZiA9IHZkdXBxX25fdTE2KDB4MEYpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkgKz0gOCkgeworICAgICAgICB1aW50
MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJjZSArIGkpOworCisgICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywg
MTIpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZhbmRxX3Ux
Nih2c2hycV9uX3UxNihlaWdodFBpeGVscywgOCksIGltbWVkaWF0ZTB4MGYpKTsKKyAgICAgICAg
dWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihl
aWdodFBpeGVscywgNCksIGltbWVkaWF0ZTB4MGYpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBv
bmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihlaWdodFBpeGVscywgaW1tZWRpYXRlMHgwZikp
OworCisgICAgICAgIGNvbXBvbmVudFIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRSLCA0
KSwgY29tcG9uZW50Uik7CisgICAgICAgIGNvbXBvbmVudEcgPSB2b3JyX3U4KHZzaGxfbl91OChj
b21wb25lbnRHLCA0KSwgY29tcG9uZW50Ryk7CisgICAgICAgIGNvbXBvbmVudEIgPSB2b3JyX3U4
KHZzaGxfbl91OChjb21wb25lbnRCLCA0KSwgY29tcG9uZW50Qik7CisgICAgICAgIGNvbXBvbmVu
dEEgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRBLCA0KSwgY29tcG9uZW50QSk7CisKKyAg
ICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7e2NvbXBvbmVudFIsIGNvbXBvbmVu
dEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsKKyAgICAgICAgdnN0NF91OChkZXN0aW5hdGlv
biwgZGVzdENvbXBvbmVudHMpOworICAgICAgICBkZXN0aW5hdGlvbiArPSAzMjsKKyAgICB9CisK
KyAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxQaXhlbHM7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9y
dDQ0NDQoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0g
cGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVu
dHNQZXJSb3cgJSAzMjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQ
ZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKworICAgIHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhm
MCA9IHZkdXBfbl91OCgweEYwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9u
ZW50c1NpemU7IGkgKz0gMzIpIHsKKyAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4
KHNvdXJjZSArIGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChS
R0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4ZjApOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50
RyA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHhmMCksIDQpOwor
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZhbmRfdTgoUkdCQTgudmFsWzJdLCBpbW1l
ZGlhdGUweGYwKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2c2hyX25fdTgodmFu
ZF91OChSR0JBOC52YWxbM10sIGltbWVkaWF0ZTB4ZjApLCA0KTsKKworICAgICAgICB1aW50OHg4
eDJfdCBSR0JBNDsKKyAgICAgICAgUkdCQTQudmFsWzBdID0gdm9ycl91OChjb21wb25lbnRCLCBj
b21wb25lbnRBKTsKKyAgICAgICAgUkdCQTQudmFsWzFdID0gdm9ycl91OChjb21wb25lbnRSLCBj
b21wb25lbnRHKTsKKyAgICAgICAgdnN0Ml91OChkc3QsIFJHQkE0KTsKKyAgICAgICAgZHN0ICs9
IDE2OworICAgIH0KKworICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBkZXN0aW5h
dGlvbiArPSBjb21wb25lbnRzU2l6ZSAvIDQ7CisgICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBv
bmVudHMgLyA0OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0JBNTU1
MVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCB0YWlsUGl4ZWxzID0gcGl4
ZWxzUGVyUm93ICUgODsKKyAgICB1bnNpZ25lZCBwaXhlbFNpemUgPSBwaXhlbHNQZXJSb3cgLSB0
YWlsUGl4ZWxzOworCisgICAgdWludDh4OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcp
OworICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweGZmID0gdmR1cF9uX3U4KDB4RkYpOworICAgIHVp
bnQxNng4X3QgaW1tZWRpYXRlMHgxZiA9IHZkdXBxX25fdTE2KDB4MUYpOworICAgIHVpbnQxNng4
X3QgaW1tZWRpYXRlMHgxID0gdmR1cHFfbl91MTYoMHgxKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwaXhlbFNpemU7IGkgKz0gOCkgeworICAgICAgICB1aW50MTZ4OF90IGVpZ2h0
UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJjZSArIGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21w
b25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMTEpKTsKKyAgICAg
ICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3Ux
NihlaWdodFBpeGVscywgNiksIGltbWVkaWF0ZTB4MWYpKTsKKyAgICAgICAgdWludDh4OF90IGNv
bXBvbmVudEIgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywg
MSksIGltbWVkaWF0ZTB4MWYpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1v
dm5fdTE2KHZhbmRxX3UxNihlaWdodFBpeGVscywgaW1tZWRpYXRlMHgxKSk7CisKKyAgICAgICAg
Y29tcG9uZW50UiA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudFIsIDMpLCB2YW5kX3U4KGNv
bXBvbmVudFIsIGltbWVkaWF0ZTB4NykpOworICAgICAgICBjb21wb25lbnRHID0gdm9ycl91OCh2
c2hsX25fdTgoY29tcG9uZW50RywgMyksIHZhbmRfdTgoY29tcG9uZW50RywgaW1tZWRpYXRlMHg3
KSk7CisgICAgICAgIGNvbXBvbmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCAz
KSwgdmFuZF91OChjb21wb25lbnRCLCBpbW1lZGlhdGUweDcpKTsKKyAgICAgICAgY29tcG9uZW50
QSA9IHZtdWxfdTgoY29tcG9uZW50QSwgaW1tZWRpYXRlMHhmZik7CisKKyAgICAgICAgdWludDh4
OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVu
dEIsIGNvbXBvbmVudEF9fTsKKyAgICAgICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBv
bmVudHMpOworICAgICAgICBkZXN0aW5hdGlvbiArPSAzMjsKKyAgICB9CisKKyAgICBzb3VyY2Ug
Kz0gcGl4ZWxTaXplOworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxQaXhlbHM7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTEoY29uc3Qg
dWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVs
c1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93
ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAz
MjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWls
Q29tcG9uZW50czsKKworICAgIHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRlc3RpbmF0aW9uKTsKKworICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweGY4ID0gdmR1cF9u
X3U4KDB4RjgpOworICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweDE4ID0gdmR1cF9uX3U4KDB4MTgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikg
eworICAgICAgICB1aW50OHg4eDRfdCBSR0JBOCA9IHZsZDRfdTgoc291cmNlICsgaSk7CisKKyAg
ICAgICAgdWludDh4OF90IGNvbXBvbmVudFIgPSB2YW5kX3U4KFJHQkE4LnZhbFswXSwgaW1tZWRp
YXRlMHhmOCk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHM2JpdCA9IHZzaHJfbl91OChS
R0JBOC52YWxbMV0sIDUpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHMmJpdCA9IHZz
aGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHgxOCksIDMpOworICAgICAg
ICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwg
aW1tZWRpYXRlMHhmOCksIDIpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QSA9IHZzaHJf
bl91OChSR0JBOC52YWxbM10sIDcpOworCisgICAgICAgIHVpbnQ4eDh4Ml90IFJHQkE1NTUxOwor
ICAgICAgICBSR0JBNTU1MS52YWxbMF0gPSB2b3JyX3U4KHZvcnJfdTgoY29tcG9uZW50RzJiaXQs
IGNvbXBvbmVudEIpLCBjb21wb25lbnRBKTsKKyAgICAgICAgUkdCQTU1NTEudmFsWzFdID0gdm9y
cl91OChjb21wb25lbnRSLCBjb21wb25lbnRHM2JpdCk7CisgICAgICAgIHZzdDJfdTgoZHN0LCBS
R0JBNTU1MSk7CisgICAgICAgIGRzdCArPSAxNjsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gY29t
cG9uZW50c1NpemU7CisgICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1NpemUgLyA0OworICAg
IHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIHVucGFja09uZVJvd09mUkdCNTY1VG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwg
dWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQoreworICAgIHVu
c2lnbmVkIHRhaWxQaXhlbHMgPSBwaXhlbHNQZXJSb3cgJSA4OworICAgIHVuc2lnbmVkIHBpeGVs
U2l6ZSA9IHBpeGVsc1BlclJvdyAtIHRhaWxQaXhlbHM7CisKKyAgICB1aW50MTZ4OF90IGltbWVk
aWF0ZTB4M2YgPSB2ZHVwcV9uX3UxNigweDNGKTsKKyAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4
MWYgPSB2ZHVwcV9uX3UxNigweDFGKTsKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgzID0gdmR1
cF9uX3U4KDB4Myk7CisgICAgdWludDh4OF90IGltbWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcp
OworCisgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2ZHVwX25fdTgoMHhGRik7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxTaXplOyBpICs9IDgpIHsKKyAgICAgICAgdWlu
dDE2eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3UxNihzb3VyY2UgKyBpKTsKKworICAgICAgICB1
aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMs
IDExKSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2YW5kcV91
MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDUpLCBpbW1lZGlhdGUweDNmKSk7CisgICAgICAg
IHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMs
IGltbWVkaWF0ZTB4MWYpKTsKKworICAgICAgICBjb21wb25lbnRSID0gdm9ycl91OCh2c2hsX25f
dTgoY29tcG9uZW50UiwgMyksIHZhbmRfdTgoY29tcG9uZW50UiwgaW1tZWRpYXRlMHg3KSk7Cisg
ICAgICAgIGNvbXBvbmVudEcgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRHLCAyKSwgdmFu
ZF91OChjb21wb25lbnRHLCBpbW1lZGlhdGUweDMpKTsKKyAgICAgICAgY29tcG9uZW50QiA9IHZv
cnJfdTgodnNobF9uX3U4KGNvbXBvbmVudEIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudEIsIGltbWVk
aWF0ZTB4NykpOworCisgICAgICAgIHVpbnQ4eDh4NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21w
b25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZz
dDRfdTgoZGVzdGluYXRpb24sIGRlc3RDb21wb25lbnRzKTsKKyAgICAgICAgZGVzdGluYXRpb24g
Kz0gMzI7CisgICAgfQorCisgICAgc291cmNlICs9IHBpeGVsU2l6ZTsKKyAgICBwaXhlbHNQZXJS
b3cgPSB0YWlsUGl4ZWxzOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdC
QThUb1Vuc2lnbmVkU2hvcnQ1NjUoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21w
b25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9u
ZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6
ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKyAgICB1aW50OF90KiBkc3Qg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbik7CisKKyAgICB1aW50OHg4
X3QgaW1tZWRpYXRlMHhmOCA9IHZkdXBfbl91OCgweEY4KTsKKyAgICB1aW50OHg4X3QgaW1tZWRp
YXRlMHgxYyA9IHZkdXBfbl91OCgweDFDKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKKyAgICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2
bGQ0X3U4KHNvdXJjZSArIGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFu
ZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4ZjgpOworICAgICAgICB1aW50OHg4X3QgY29t
cG9uZW50R0xlZnQgPSB2c2hyX25fdTgoUkdCQTgudmFsWzFdLCA1KTsKKyAgICAgICAgdWludDh4
OF90IGNvbXBvbmVudEdSaWdodCA9IHZzaGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1t
ZWRpYXRlMHgxYyksIDMpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZzaHJfbl91
OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhmOCksIDMpOworCisgICAgICAgIHVp
bnQ4eDh4Ml90IFJHQjU2NTsKKyAgICAgICAgUkdCNTY1LnZhbFswXSA9IHZvcnJfdTgoY29tcG9u
ZW50R1JpZ2h0LCBjb21wb25lbnRCKTsKKyAgICAgICAgUkdCNTY1LnZhbFsxXSA9IHZvcnJfdTgo
Y29tcG9uZW50UiwgY29tcG9uZW50R0xlZnQpOworICAgICAgICB2c3QyX3U4KGRzdCwgUkdCNTY1
KTsKKyAgICAgICAgZHN0ICs9IDE2OworICAgIH0KKworICAgIHNvdXJjZSArPSBjb21wb25lbnRz
U2l6ZTsKKyAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZSAvIDQ7CisgICAgcGl4ZWxz
UGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OworfQorCit9IC8vIG5hbWVzcGFjZSBTSU1ECisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1Rl
eHR1cmVDYWNoZUNWLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0
dXJlQ2FjaGVDVi5oCmluZGV4IGM5ZmY0MTlkNDNiZTQ1ZjQwNDQwMzA0MGFkZDhjNGQwNDQwMmJh
MmYuLjQ2M2QwNjFkMjUzOWZmMjI2NzRjNWI4MDc5ZmQxZGVjMGNhNmYyZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YuaApA
QCAtNDEsMTIgKzQxLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9fQ1ZPcGVuR0xFU1RleHR1cmVDYWNo
ZSAqQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZVJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwog
CiBjbGFzcyBUZXh0dXJlQ2FjaGVDViA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUZXh0dXJlQ2Fj
aGVDVj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZUNhY2hlQ1Y+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZUNhY2hlQ1Y+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwogCiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICB1c2lu
ZyBUZXh0dXJlQ2FjaGVUeXBlID0gQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZVJlZjsKQEAgLTU2LDEz
ICs1NiwxMyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgVGV4dHVyZVR5cGUgPSBDVk9wZW5HTFRleHR1
cmVSZWY7CiAjZW5kaWYKIAotICAgIFRleHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4dDNEJiwg
UmV0YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYpOworICAgIFRleHR1cmVDYWNoZUNWKEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMJiwgUmV0YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYpOwogCiAg
ICAgUmV0YWluUHRyPFRleHR1cmVUeXBlPiB0ZXh0dXJlRnJvbUltYWdlKENWUGl4ZWxCdWZmZXJS
ZWYsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0QmIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsg
fQogCiBwcml2YXRlOgotICAgIFJlZjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAg
IFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gbV9jb250ZXh0OwogICAgIFJldGFpblB0cjxU
ZXh0dXJlQ2FjaGVUeXBlPiBtX2NhY2hlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQppbmRleCBmNTJmZTNkYThl
OWJlZjY3ZGJjNDk2MDVmY2E3OWNlNDY5NDM0YzM2Li40OWNiNjVlN2UwZDE2ZjA2NmMxNjBkNTIx
N2M5NzRiNjI3NGU5YTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtMjgsMjAgKzI4LDIwIEBACiAKICNpZiBI
QVZFKENPUkVfVklERU8pCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAKICNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0
TGluay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJl
Q2FjaGVDVj4gVGV4dHVyZUNhY2hlQ1Y6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4
dCkKK3N0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4gVGV4dHVyZUNhY2hlQ1Y6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKIHsKICAgICBUZXh0dXJlQ2FjaGVU
eXBlIGNhY2hlID0gbnVsbHB0cjsKICNpZiBVU0UoT1BFTkdMX0VTKQotICAgIENWRUFHTENvbnRl
eHQgZWFnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDVkVBR0xDb250ZXh0Pihjb250ZXh0LnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgQ1ZFQUdMQ29udGV4dCBlYWdsQ29udGV4dCA9
IHN0YXRpY19jYXN0PENWRUFHTENvbnRleHQ+KGNvbnRleHQucGxhdGZvcm1HcmFwaGljc0NvbnRl
eHRHTCgpKTsKICAgICBDVlJldHVybiBlcnJvciA9IENWT3BlbkdMRVNUZXh0dXJlQ2FjaGVDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgZWFnbENvbnRleHQsIG51bGxwdHIsICZj
YWNoZSk7CiAjZWxpZiBVU0UoT1BFTkdMKQotICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9
IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KGNvbnRleHQucGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCgpKTsKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xD
b250ZXh0T2JqPihjb250ZXh0LnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgQ1ZS
ZXR1cm4gZXJyb3IgPSBDVk9wZW5HTFRleHR1cmVDYWNoZUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBudWxscHRyLCBjZ2xDb250ZXh0LCBDR0xHZXRQaXhlbEZvcm1hdChjZ2xDb250ZXh0KSwg
bnVsbHB0ciwgJmNhY2hlKTsKICNlbGlmIFVTRShBTkdMRSkKICAgICAvLyBGSVhNRTogZmlndXJl
IG91dCBob3cgdG8gZG8gdGhpcyBpbnRlZ3JhdGluZyB2aWEgQU5HTEUuCkBAIC01NSw3ICs1NSw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4gVGV4dHVyZUNhY2hlQ1Y6OmNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4CiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VGV4dHVy
ZUNhY2hlQ1Y+KGNvbnRleHQsIFdURk1vdmUoc3Ryb25nQ2FjaGUpKTsKIH0KIAotVGV4dHVyZUNh
Y2hlQ1Y6OlRleHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0LCBSZXRhaW5Q
dHI8VGV4dHVyZUNhY2hlVHlwZT4mJiBjYWNoZSkKK1RleHR1cmVDYWNoZUNWOjpUZXh0dXJlQ2Fj
aGVDVihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgUmV0YWluUHRyPFRleHR1cmVD
YWNoZVR5cGU+JiYgY2FjaGUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fY2Fj
aGUoY2FjaGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAKaW5kZXggZGRkOGE4MmY5YTAyYmY5
OTFhNmI4ZGM0ZWZmMGZlMjc0NDM3MmY1MS4uZjk5ZmU4ZTA2ZmY3OGUwM2M2NzYzM2U5ODFiOTYy
NzNmMWNlODMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcApAQCAtMzc2LDkgKzM3Niw5IEBA
IHN0YXRpYyBjb25zdCBWZWN0b3I8R0xmbG9hdD4gWUNiQ3JUb1JHQk1hdHJpeEZvclJhbmdlQW5k
VHJhbnNmZXJGdW5jdGlvbihQaXhlbFJhCiB9CiAjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCiAK
LVZpZGVvVGV4dHVyZUNvcGllckNWOjpWaWRlb1RleHR1cmVDb3BpZXJDVihHcmFwaGljc0NvbnRl
eHQzRCYgY29udGV4dCkKK1ZpZGVvVGV4dHVyZUNvcGllckNWOjpWaWRlb1RleHR1cmVDb3BpZXJD
VihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkKICAgICA6IG1fc2hhcmVkQ29udGV4
dChjb250ZXh0KQotICAgICwgbV9jb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFy
ZWQoY29udGV4dCkpCisgICAgLCBtX2NvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZVNoYXJlZChjb250ZXh0KSkKICAgICAsIG1fZnJhbWVidWZmZXIoY29udGV4dC5jcmVhdGVG
cmFtZWJ1ZmZlcigpKQogewogfQpAQCAtNDA0LDYyICs0MDQsNjIgQEAgc3RhdGljIFN0cmluZ01h
cCYgZW51bVRvU3RyaW5nTWFwKCkKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nTWFw
PiBtYXA7CiAgICAgaWYgKG1hcC5nZXQoKS5lbXB0eSgpKSB7CiAgICAgICAgIFN0cmluZ01hcCBz
dHJpbmdNYXA7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQSkpOwot
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UjgpKTsKLSAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkYpKTsKLSAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIz
MkYpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0M0Q6OlI4VUkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OlI4SSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UjE2VUkpKTsKLSAgICAgICAgbWFwLmdl
dCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkkpKTsKLSAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6
OlIzMlVJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBo
aWNzQ29udGV4dDNEOjpSMzJJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRzgpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZGKSk7Ci0gICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyRikp
OwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHQzRDo6Ukc4VUkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0M0Q6OlJHOEkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSSkpOwotICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkcxNkkpKTsKLSAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJHMzJVSSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHQzRDo6UkczMkkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5H
SUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjgpKTsKLSAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4KSk7Ci0gICAgICAg
IG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHQzRDo6U1JHQjhfQUxQSEE4KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCkpOwotICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBfQTIpKTsKLSAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDE2KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQyNCkpOwotICAgICAgICBt
YXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5UMzJGKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4KSk7Ci0gICAgICAgIG1hcC5nZXQo
KS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVO
Q0lMOCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGlj
c0NvbnRleHQzRDo6UkdCKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9Q
QUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNl
KFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEEpKTsKLSAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihH
cmFwaGljc0NvbnRleHQzRDo6QUxQSEEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCkpOwotICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUikpOwot
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOwotICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNV82XzUpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQpKTsKLSAgICAgICAgbWFwLmdl
dCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzVfNV81XzEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQpKTsKLSAgICAgICAgbWFw
LmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSk7
Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkpOwot
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQz
RDo6SU5UKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpKTsKLSAgICAgICAgbWFw
LmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yNF84KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpKTsKKyAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJH
QikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJ
UihHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBKSk7CisgICAgICAgIG1hcC5nZXQo
KS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0UpKTsK
KyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
R0w6OkFMUEhBKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdy
YXBoaWNzQ29udGV4dEdMOjpSOCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjE2RikpOworICAgICAgICBtYXAuZ2V0KCkuZW1w
bGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjMyRikpOworICAgICAgICBt
YXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjhVSSkp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6UjhJKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdy
YXBoaWNzQ29udGV4dEdMOjpSMTZVSSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJ
TkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjE2SSkpOworICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjMyVUkpKTsKKyAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlIz
MkkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0R0w6OlJHOCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJ
UihHcmFwaGljc0NvbnRleHRHTDo6UkcxNkYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJGKSk7CisgICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSSkpOwor
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRH
TDo6Ukc4SSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHRHTDo6UkcxNlVJKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SSkpOworICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkczMlVJKSk7CisgICAg
ICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpS
RzMySSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGlj
c0NvbnRleHRHTDo6UkdCOCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHRHTDo6U1JHQjgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4KSk7CisgICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9B
TFBIQTgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkE0KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMikpOworICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5U
MTYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNl
KFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkYpKTsK
KyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIMjRfU1RFTkNJTDgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5H
SUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4KSk7CisgICAgICAg
IG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR0Ip
KTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkEpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQSkpOworICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFKSk7Cisg
ICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdM
OjpBTFBIQSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHRHTDo6UkVEKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSKSk7CisgICAgICAgIG1hcC5nZXQo
KS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lM
KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNSkpOworICAg
ICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJ
TkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSkpOwor
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRH
TDo6QllURSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQpKTsKKyAgICAgICAgbWFwLmdl
dCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NI
T1JUKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dEdMOjpTSE9SVCkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UKSk7CisgICAgICAgIG1hcC5nZXQo
KS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpJTlQpKTsKKyAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0XzgpKTsKKyAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6
OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVikpOwogCiAjaWYgVVNFKE9QRU5HTF9FUykK
ICAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR0xfUkVEX0lOVEVHRVIp
KTsKQEAgLTUxNCwxMiArNTE0LDEyIEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRp
YWxpemVDb250ZXh0T2JqZWN0cygpCiAgICAgdmVydGV4U2hhZGVyU291cmNlLmFwcGVuZExpdGVy
YWwoIiAgICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247XG4iKTsKICAgICB2ZXJ0ZXhTaGFkZXJT
b3VyY2UuYXBwZW5kTGl0ZXJhbCgifVxuIik7CiAKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRl
eFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4
dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfU0hBREVSKTsKICAgICBt
X2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlclNvdXJjZS50
b1N0cmluZygpKTsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXJEaXJlY3QodmVydGV4U2hh
ZGVyKTsKIAogICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVy
aXYodmVydGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1
ZSk7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdih2ZXJ0ZXhTaGFkZXIsIEdyYXBoaWNzQ29u
dGV4dEdMOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAg
ICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9Q
bGF0Zm9ybVRleHR1cmUoJXApIC0gVmVydGV4IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0
aGlzKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKQEAg
LTU2MSwxMSArNTYxLDExIEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVD
b250ZXh0T2JqZWN0cygpCiAgICAgZnJhZ21lbnRTaGFkZXJTb3VyY2UuYXBwZW5kTGl0ZXJhbCgi
ICAgIH1cbiIpOwogICAgIGZyYWdtZW50U2hhZGVyU291cmNlLmFwcGVuZExpdGVyYWwoIn1cbiIp
OwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlciA9IG1fY29udGV4dC0+Y3Jl
YXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgIFBsYXRm
b3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFw
aGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSKTsKICAgICBtX2NvbnRleHQtPnNoYWRlclNv
dXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJTb3VyY2UudG9TdHJpbmcoKSk7CiAg
ICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyRGlyZWN0KGZyYWdtZW50U2hhZGVyKTsKIAotICAg
IG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoZnJhZ21lbnRTaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KGZy
YWdtZW50U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7
CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBMT0coV2ViR0wsICJWaWRlb1RleHR1cmVDb3Bp
ZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCVwKSAtIEZyYWdtZW50IHNo
YWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxl
dGVTaGFkZXIodmVydGV4U2hhZGVyKTsKQEAgLTU3OCw3ICs1NzgsNyBAQCBib29sIFZpZGVvVGV4
dHVyZUNvcGllckNWOjppbml0aWFsaXplQ29udGV4dE9iamVjdHMoKQogICAgIG1fY29udGV4dC0+
YXR0YWNoU2hhZGVyKG1fcHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwogICAgIG1fY29udGV4dC0+
bGlua1Byb2dyYW0obV9wcm9ncmFtKTsKIAotICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1f
cHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTLCAmdmFsdWUpOworICAgIG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1fcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTktf
U1RBVFVTLCAmdmFsdWUpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgTE9HKFdlYkdMLCAi
VmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSgl
cCkgLSBQcm9ncmFtIGZhaWxlZCB0byBsaW5rLiIsIHRoaXMpOwogICAgICAgICBtX2NvbnRleHQt
PmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwpAQCAtNjA2LDggKzYwNiw4IEBAIGJvb2wgVmlk
ZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0T2JqZWN0cygpCiAgICAgbV92ZXJ0
ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwogICAgIGZsb2F0IHZlcnRpY2Vz
WzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OwogCi0g
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IG1fdmVydGV4QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKGZsb2F0KSAqIDEyLCB2ZXJ0aWNlcywgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOworICAgIG1fY29u
dGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBzaXplb2Yo
ZmxvYXQpICogMTIsIHZlcnRpY2VzLCBHcmFwaGljc0NvbnRleHRHTDo6U1RBVElDX0RSQVcpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC02MzksMTIgKzYzOSwxMiBAQCBib29sIFZpZGVvVGV4
dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpCiAgICAgICAgICJ9XG4i
X3MKICAgICB9OwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRl
eHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAg
UGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihH
cmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURFUik7CiAgICAgbV9jb250ZXh0LT5zaGFkZXJT
b3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3VyY2UpOwogICAgIG1fY29udGV4dC0+
Y29tcGlsZVNoYWRlckRpcmVjdCh2ZXJ0ZXhTaGFkZXIpOwogCiAgICAgR0MzRGludCBzdGF0dXMg
PSAwOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVydGV4U2hhZGVyLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZzdGF0dXMpOworICAgIG1fY29udGV4dC0+Z2V0U2hh
ZGVyaXYodmVydGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZz
dGF0dXMpOwogICAgIGlmICghc3RhdHVzKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4
dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cyglcCkgLSBWZXJ0ZXggc2hh
ZGVyIGZhaWxlZCB0byBjb21waWxlLiIsIHRoaXMpOwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwpAQCAtNjc4LDExICs2NzgsMTEgQEAgYm9vbCBWaWRlb1Rl
eHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoKQogICAgICAgICAifVxu
Il9zCiAgICAgfTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVT
aGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUik7CiAgICAgbV9jb250ZXh0
LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKICAg
ICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXJEaXJlY3QoZnJhZ21lbnRTaGFkZXIpOwogCi0gICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihmcmFnbWVudFNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTVBJTEVfU1RBVFVTLCAmc3RhdHVzKTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KGZy
YWdtZW50U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6Q09NUElMRV9TVEFUVVMsICZzdGF0dXMp
OwogICAgIGlmICghc3RhdHVzKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNv
cGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cyglcCkgLSBGcmFnbWVudCBzaGFkZXIg
ZmFpbGVkIHRvIGNvbXBpbGUuIiwgdGhpcyk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hh
ZGVyKHZlcnRleFNoYWRlcik7CkBAIC02OTUsNyArNjk1LDcgQEAgYm9vbCBWaWRlb1RleHR1cmVD
b3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMoKQogICAgIG1fY29udGV4dC0+YXR0
YWNoU2hhZGVyKG1feXV2UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwogICAgIG1fY29udGV4dC0+
bGlua1Byb2dyYW0obV95dXZQcm9ncmFtKTsKIAotICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2
KG1feXV2UHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTLCAmc3RhdHVzKTsK
KyAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihtX3l1dlByb2dyYW0sIEdyYXBoaWNzQ29udGV4
dEdMOjpMSU5LX1NUQVRVUywgJnN0YXR1cyk7CiAgICAgaWYgKCFzdGF0dXMpIHsKICAgICAgICAg
TE9HKFdlYkdMLCAiVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVVVkNvbnRleHRPYmpl
Y3RzKCVwKSAtIFByb2dyYW0gZmFpbGVkIHRvIGxpbmsuIiwgdGhpcyk7CiAgICAgICAgIG1fY29u
dGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CkBAIC03MjEsMTAgKzcyMSwxMCBAQCBi
b29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygpCiAg
ICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwogICAgIGZs
b2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwgLTEsIDEsIC0x
LCAtMSB9OwogCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIG1feXV2VmVydGV4QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRh
dGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVy
dGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT5i
aW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIG1feXV2VmVydGV4QnVm
ZmVyKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZ
X0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEFUSUNfRFJBVyk7CiAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3l1
dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24pOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
UG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9p
bnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dEdM
OjpGTE9BVCwgZmFsc2UsIDAsIDApOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03MzUsMTUg
KzczNSwxNSBAQCB2b2lkKiBWaWRlb1RleHR1cmVDb3BpZXJDVjo6YXR0YWNoSU9TdXJmYWNlVG9U
ZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaQogICAgIGF1dG8gZGlzcGxheSA9IG1f
Y29udGV4dC0+cGxhdGZvcm1EaXNwbGF5KCk7CiAgICAgRUdMaW50IGVnbFRleHR1cmVUYXJnZXQg
PSAwOwogCi0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9SRUNU
QU5HTEVfQVJCKQorICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
UkVDVEFOR0xFX0FSQikKICAgICAgICAgZWdsVGV4dHVyZVRhcmdldCA9IEVHTF9URVhUVVJFX1JF
Q1RBTkdMRV9BTkdMRTsKLSAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQpCisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFXzJEKQogICAgICAgICBlZ2xUZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CiAg
ICAgZWxzZSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlVua25vd24gdGV4dHVyZSB0YXJnZXQgJWQu
Iiwgc3RhdGljX2Nhc3Q8aW50Pih0YXJnZXQpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQotICAgIGlmIChlZ2xUZXh0dXJlVGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFR0xJ
T1N1cmZhY2VUZXh0dXJlVGFyZ2V0KSB7CisgICAgaWYgKGVnbFRleHR1cmVUYXJnZXQgIT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQpIHsKICAgICAgICAgTE9H
KFdlYkdMLCAiTWlzbWF0Y2ggaW4gRUdMIHRleHR1cmUgdGFyZ2V0ICVkLiIsIHN0YXRpY19jYXN0
PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTgzMSwx
OSArODMxLDE5IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxhdGZv
cm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIHNpCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZnJhbWVidWZmZXIpOworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7CiAKICAgICAvLyBB
bGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KLSAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsK
LSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3Jt
YXQsIHR5cGUsIG51bGxwdHIpOwotCi0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUy
RChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1
cmUsIGxldmVsKTsKLSAgICBHQzNEZW51bSBzdGF0dXMgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3Rh
dHVzICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG91dHB1
dFRleHR1cmUpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UpOwor
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHRHTDo6
Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJERGlyZWN0KEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwg
b3V0cHV0VGV4dHVyZSwgbGV2ZWwpOworICAgIEdDM0RlbnVtIHN0YXR1cyA9IG1fY29udGV4dC0+
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIpOwor
ICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRF
KSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZl
ciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTg1OCw1MCArODU4LDUwIEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlJ
bWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIHNpCiAgICAgYXV0
byB1dlBsYW5lSGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShzdXJmYWNlLCAxKTsK
IAogI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7CisgICAgR0MzRGVudW0gdmlkZW9UZXh0dXJl
VGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQ7CiAjZWxpZiBVU0UoT1BFTkdM
KQotICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1JFQ1RBTkdMRV9BUkI7CisgICAgR0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQjsKICNlbGlmIFVTRShBTkdM
RSkKLSAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU9TdXJmYWNlVGV4dHVyZVRhcmdldDsKKyAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldDsKICNlbHNlCiAjZXJy
b3IgVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbgogI2VuZGlmCiAgICAgYXV0byB1dlRleHR1cmUg
PSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUxKTsKICAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgdXZUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQt
PnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsK
KyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFS
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElO
RUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFN
UF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFy
Z2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdM
OjpDTEFNUF9UT19FREdFKTsKICNpZiBVU0UoQU5HTEUpCi0gICAgYXV0byB1dkhhbmRsZSA9IGF0
dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgYXV0byB1dkhhbmRsZSA9IGF0dGFjaElP
U3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpS
RywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfQllURSwgc3VyZmFjZSwgMSk7CiAgICAgaWYgKCF1dkhhbmRsZSkgewogICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KICNlbHNlCi0gICAgaWYgKCFtX2NvbnRleHQtPnRleEltYWdlSU9TdXJmYWNlMkQodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6UkcsIHV2UGxhbmVXaWR0aCwgdXZQ
bGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgc3VyZmFjZSwgMSkpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+dGV4SW1hZ2VJ
T1N1cmZhY2UyRCh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRywgdXZQ
bGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6UkcsIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAxKSkgewogICAgICAgICBtX2NvbnRl
eHQtPmRlbGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICNlbmRpZiAvLyBVU0UoQU5HTEUpCiAKICAgICBhdXRvIHlUZXh0dXJlID0gbV9jb250ZXh0
LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFMCk7CiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh2aWRl
b1RleHR1cmVUYXJnZXQsIHlUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
dmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVS
LCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklM
VEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsK
KyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19F
REdFKTsKICNpZiBVU0UoQU5HTEUpCi0gICAgYXV0byB5SGFuZGxlID0gYXR0YWNoSU9TdXJmYWNl
VG9UZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCwgeVBs
YW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IHN1cmZhY2UsIDApOworICAgIGF1dG8geUhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVy
ZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQsIHlQbGFuZVdpZHRo
LCB5UGxhbmVIZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBzdXJmYWNl
LCAwKTsKICAgICBpZiAoIXlIYW5kbGUpIHsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0
dXJlKHlUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVy
ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZWxzZQotICAgIGlmICghbV9jb250
ZXh0LT50ZXhJbWFnZUlPU3VyZmFjZTJEKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRSwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHN1cmZh
Y2UsIDApKSB7CisgICAgaWYgKCFtX2NvbnRleHQtPnRleEltYWdlSU9TdXJmYWNlMkQodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFLCB5UGxhbmVXaWR0aCwg
eVBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFLCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVUZXh0dXJlKHlUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJl
KHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkyMSw3ICs5MjEsNyBAQCBi
b29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5SW1hZ2VUb1BsYXRmb3JtVGV4dHVyZShDVlBp
eGVsQnVmZmVyUmVmIGltYWdlLCBzaQogICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdiht
X2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uLCAxLCBHTF9GQUxTRSwgY29sb3JNYXRyaXguZGF0
YSgpKTsKIAogICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2luZy4KLSAgICBtX2NvbnRleHQtPmRy
YXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgMCwgNik7CisgICAgbV9jb250
ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dEdMOjpUUklBTkdMRVMsIDAsIDYpOwogCiAj
aWYgVVNFKE9QRU5HTF9FUykgfHwgKFVTRShBTkdMRSkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkp
CiAgICAgLy8gZmx1c2goKSBtdXN0IGJlIGNhbGxlZCBoZXJlIGluIG9yZGVyIHRvIHJlLXN5bmNo
cm9uaXplIHRoZSBvdXRwdXQgdGV4dHVyZSdzIGNvbnRlbnRzIGFjcm9zcyB0aGUKQEAgLTEwMTAs
MTkgKzEwMTAsMTkgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVy
ZVRvUGxhdGZvcm1UZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdmkKICAgICAgICAgfQogICAgIH0K
IAotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVyKTsKICAgICAKICAg
ICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVyZS4KLSAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvdXRwdXRUZXh0
dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJ
TFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1Q
X1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOwotCi0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG91dHB1
dFRleHR1cmUsIGxldmVsKTsKLSAgICBHQzNEZW51bSBzdGF0dXMgPSBtX2NvbnRleHQtPmNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKTsKLSAgICBp
ZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewor
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQs
IG91dHB1dFRleHR1cmUpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dEdMOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VE
R0UpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHRHTDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJERGlyZWN0KEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisKKyAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV8yRCwgb3V0cHV0VGV4dHVyZSwgbGV2ZWwpOworICAgIEdDM0RlbnVtIHN0YXR1cyA9IG1fY29u
dGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NP
TVBMRVRFKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxlIHRvIGNyZWF0ZSBmcmFt
ZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTEwMzEsMTIgKzEwMzEsMTIgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJD
Vjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdmkK
ICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgLy8g
QmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlIGZvciB0aGUgdmlkZW8gc291cmNlLgotICAgIG1f
Y29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAg
IG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTApOwog
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodmlkZW9UZXh0dXJlVGFyZ2V0LCB2aWRlb1RleHR1
cmVOYW1lKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
dmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVS
LCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklM
VEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQ
X1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKIAogICAgIC8vIENv
bmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJzLgogICAgIG1fY29udGV4dC0+dW5pZm9ybTFp
KG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7CkBAIC0xMDUyLDkgKzEwNTIsOSBAQCBib29s
IFZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
UGxhdGZvcm0zRE9iamVjdCB2aQogCiAgICAgLy8gRG8gdGhlIGFjdHVhbCBkcmF3aW5nLgogICAg
IG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkF0dHJpYnV0ZUxv
Y2F0aW9uKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
UG9pbnRlcihtX3Bvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGlj
c0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCA2KTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOworICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24s
IDIsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIG1fY29udGV4
dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHRHTDo6VFJJQU5HTEVTLCAwLCA2KTsKIAogI2lm
IFVTRShPUEVOR0xfRVMpCiAgICAgLy8gZmx1c2goKSBtdXN0IGJlIGNhbGxlZCBoZXJlIGluIG9y
ZGVyIHRvIHJlLXN5bmNocm9uaXplIHRoZSBvdXRwdXQgdGV4dHVyZSdzIGNvbnRlbnRzIGFjcm9z
cyB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1Zp
ZGVvVGV4dHVyZUNvcGllckNWLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9WaWRlb1RleHR1cmVDb3BpZXJDVi5oCmluZGV4IDM2YmRhOTFkZDU4ZmRiMzQ4ZjRmMmNiYWIz
ZWViNGFmODkyNWY0ZTEuLjExNWU5ODBjOWU5OTk1M2NkNTg2M2ZjMjk5NjQ0NDZlMTIwMzgxNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4
dHVyZUNvcGllckNWLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
VmlkZW9UZXh0dXJlQ29waWVyQ1YuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgSEFWRShDT1JF
X1ZJREVPKQogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbXBvcnQgPHd0Zi9VbnNhZmVQb2ludGVyLmg+CiAKIHR5
cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIqIENWSW1hZ2VCdWZmZXJSZWY7CkBAIC00Miw3ICs0Miw3
IEBAIGNsYXNzIFRleHR1cmVDYWNoZUNWOwogY2xhc3MgVmlkZW9UZXh0dXJlQ29waWVyQ1Ygewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFZpZGVvVGV4dHVyZUNv
cGllckNWKEdyYXBoaWNzQ29udGV4dDNEJik7CisgICAgVmlkZW9UZXh0dXJlQ29waWVyQ1YoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKICAgICB+VmlkZW9UZXh0dXJlQ29waWVyQ1YoKTsKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYsIHNpemVfdCB3
aWR0aCwgc2l6ZV90IGhlaWdodCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNE
ZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBmbGlwWSk7CiAgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
VGV4dHVyZVR5cGUsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgUGxhdGZvcm0zRE9iamVj
dCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSwgYm9vbCBzd2FwQ29sb3JDaGFubmVscyA9
IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0OyB9CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQoKSB7IHJldHVy
biBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKICAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSwgR0MzRGVudW0gaW5w
dXRUYXJnZXQsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgUGxhdGZvcm0zRE9iamVjdCBv
dXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSwgYm9vbCBzd2FwQ29sb3JDaGFubmVscyk7CkBA
IC04MSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXRhY2hJT1N1cmZhY2VGcm9tVGV4
dHVyZSh2b2lkKiBoYW5kbGUpOwogI2VuZGlmCiAKLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fc2hhcmVkQ29udGV4dDsKLSAgICBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsK
KyAgICBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fc2hhcmVkQ29udGV4dDsKKyAgICBS
ZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fY29udGV4dDsKICNpZiAhVVNFKEFOR0xFKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4gbV90ZXh0dXJlQ2FjaGU7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENv
bnRleHRFR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29u
dGV4dEVHTC5jcHAKaW5kZXggYThhODJkNzA5N2FhNGIzMzJhNTRmOTA3MzRhM2VkOWJjOWVjZTk1
ZS4uM2QzMmY4OGVlMmE1ZDAwYjg0OGVhNGU4MzJkNGYzY2I0N2ExMmUzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAK
QEAgLTIxLDcgKzIxLDcgQEAKIAogI2lmIFVTRShFR0wpCiAKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1EaXNwbGF5LmgiCiAKICNpZiBVU0UoTElCRVBPWFkpCkBAIC00ODcsOCArNDg3
LDggQEAgY2Fpcm9fZGV2aWNlX3QqIEdMQ29udGV4dEVHTDo6Y2Fpcm9EZXZpY2UoKQogfQogI2Vu
ZGlmCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLVBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgR0xDb250ZXh0RUdMOjpwbGF0Zm9ybUNvbnRleHQoKQorI2lmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKQorUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHTENvbnRleHRFR0w6
OnBsYXRmb3JtQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuaAppbmRl
eCAwYzdhODQ4ZTg2MjEyZTU3MTg5YWUxZmU3Mjg5Y2YwNTQ4ZDRhYzY1Li45ZGE2MzIyMDg2MWIz
NjMzNjcwOWYyMWU5NWM0MTc1NmI4ODE3YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5oCkBAIC02OCw4ICs2OCw4IEBAIHBy
aXZhdGU6CiAjZW5kaWYKICAgICBib29sIGlzRUdMQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCkgb3ZlcnJpZGU7CisjaWYg
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRH
TCBwbGF0Zm9ybUNvbnRleHQoKSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgZW51bSBFR0xTdXJm
YWNlVHlwZSB7IFBidWZmZXJTdXJmYWNlLCBXaW5kb3dTdXJmYWNlLCBQaXhtYXBTdXJmYWNlLCBT
dXJmYWNlbGVzcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nbHgvR0xDb250ZXh0R0xYLmNwcAppbmRleCBhZGYzMjE5Y2Q5M2NiNWE4NmJkNmE2ZDY1MGUx
YTAxMDIwMjIyZDVmLi44MTU1NzcxMGIyY2Y0NjNlZWZhZTA2YzczMjM0OTE1MTA3MmI3NTE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0
R0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250
ZXh0R0xYLmNwcApAQCAtNDEzLDggKzQxMyw4IEBAIGNhaXJvX2RldmljZV90KiBHTENvbnRleHRH
TFg6OmNhaXJvRGV2aWNlKCkKICAgICByZXR1cm4gbV9jYWlyb0RldmljZTsKIH0KIAotI2lmIEVO
QUJMRShHUkFQSElDU19DT05URVhUXzNEKQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHTENv
bnRleHRHTFg6OnBsYXRmb3JtQ29udGV4dCgpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIEdMQ29udGV4dEdMWDo6cGxhdGZvcm1Db250
ZXh0KCkKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5oCmluZGV4IGNhMjQw
MjRmNmNhNDJhMmQ4ODI1NmNjOTRiMjQ4ZDBlM2QxOGRhYjguLjRjNzJhODM4YTczZWU0MDc3YzIz
MGMyZjY5NzcyOTc5Njk2ODM4YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAgLTUwLDggKzUwLDggQEAgcHJpdmF0ZToK
ICAgICBjYWlyb19kZXZpY2VfdCogY2Fpcm9EZXZpY2UoKSBvdmVycmlkZTsKICAgICBib29sIGlz
RUdMQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBs
YXRmb3JtQ29udGV4dCgpIG92ZXJyaWRlOworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dM
KQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgb3ZlcnJp
ZGU7CiAjZW5kaWYKIAogICAgIEdMQ29udGV4dEdMWChQbGF0Zm9ybURpc3BsYXkmLCBYVW5pcXVl
R0xYQ29udGV4dCYmLCBHTE5hdGl2ZVdpbmRvd1R5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCmluZGV4IDcxZmRhMGQ5MjRjZDI1NWRi
M2VmMTA3N2Y5ZTEwNzgxNGUyNDNkZjQuLmU1NGRmMjRkMmJmMmFlY2Y5YTliMGIzOGQ3ZDE4ZWNj
NGFmNWQwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9UZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
VGV4dHVyZS5jcHAKQEAgLTM0LDkgKzM0LDkgQEAKIAogI2luY2x1ZGUgIlRleHR1cmUuaCIKIAot
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQ0
LDcgKzQ0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0dXJlOjpUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHVuc2lnbmVk
Pj4gdGlsZVRleHR1cmVJZHMsIEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IG1heFRleHR1cmVTaXplKQorVGV4dHVyZTo6VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dCwgc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjx1bnNpZ25lZD4+IHRpbGVUZXh0
dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0
dXJlU2l6ZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9mb3JtYXQoZm9ybWF0
KQogICAgICwgbV90aWxlcyhJbnRTaXplKG1heFRleHR1cmVTaXplLCBtYXhUZXh0dXJlU2l6ZSks
IEludFNpemUod2lkdGgsIGhlaWdodCksIHRydWUpCkBAIC01NCwyNSArNTQsMjUgQEAgVGV4dHVy
ZTo6VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgc3RkOjp1bmlxdWVfcHRyPFZl
Y3Rvcjx1bnNpZ25lZD4+IHQKIAogVGV4dHVyZTo6flRleHR1cmUoKQogewotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbV90aWxlVGV4dHVyZUlkcy0+c2l6ZSgpOyBpKyspCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGlsZVRleHR1cmVJZHMtPnNpemUoKTsgaSsrKQog
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90aWxlVGV4dHVyZUlkcy0+YXQoaSkp
OwogfQogCi1zdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCB1bnNpZ25lZCBpbnQqIGdsRm9ybWF0LCB1bnNp
Z25lZCBpbnQqIGdsVHlwZSwgYm9vbCogc3dpenpsZSkKK3N0YXRpYyB2b2lkIGNvbnZlcnRGb3Jt
YXQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIFRleHR1cmU6OkZvcm1hdCBmb3Jt
YXQsIHVuc2lnbmVkKiBnbEZvcm1hdCwgdW5zaWduZWQqIGdsVHlwZSwgYm9vbCogc3dpenpsZSkK
IHsKICAgICAqc3dpenpsZSA9IGZhbHNlOwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2Fz
ZSBUZXh0dXJlOjpSR0JBODoKLSAgICAgICAgKmdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkE7Ci0gICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RTsKKyAgICAgICAgKmdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE7CisgICAgICAg
ICpnbFR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBUZXh0dXJlOjpCR1JBODoKICAgICAgICAgaWYgKGNvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IikpIHsK
LSAgICAgICAgICAgICpnbEZvcm1hdCA9IEV4dGVuc2lvbnMzRDo6QkdSQV9FWFQ7Ci0gICAgICAg
ICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CisgICAgICAg
ICAgICAqZ2xGb3JtYXQgPSBFeHRlbnNpb25zR0w6OkJHUkFfRVhUOworICAgICAgICAgICAgKmds
VHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgKmdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAg
ICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CisgICAg
ICAgICAgICAqZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTsKKyAgICAgICAgICAg
ICpnbFR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURTsKICAgICAgICAgICAg
ICpzd2l6emxlID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTgyLDEwICs4
MiwxMCBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCB1bgogICAgIH0KIH0KIAotUmVmUHRyPFRleHR1
cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRm9ybWF0IGZv
cm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9IDA7Ci0gICAg
Y29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUs
ICZtYXhUZXh0dXJlU2l6ZSk7CisgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhUZXh0dXJlU2l6ZSk7CiAgICAgVGlsaW5nRGF0
YSB0aWxpbmcoSW50U2l6ZShtYXhUZXh0dXJlU2l6ZSwgbWF4VGV4dHVyZVNpemUpLCBJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpLCB0cnVlKTsKIAogICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KQEAg
LTExNSw4ICsxMTUsOCBAQCBSZWZQdHI8VGV4dHVyZT4gVGV4dHVyZTo6Y3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBGb3JtYXQgZm9ybWF0LCBpbnQgdwogICAgICAgICB1bnNpZ25l
ZCBpbnQgZ2xUeXBlID0gMDsKICAgICAgICAgYm9vbCBzd2l6emxlOwogICAgICAgICBjb252ZXJ0
Rm9ybWF0KGNvbnRleHQsIGZvcm1hdCwgJmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7Ci0g
ICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCB0ZXh0dXJlSWQpOwotICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBnbEZvcm1hdCwKKyAgICAgICAgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCk7
CisgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIDAsIGdsRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZ2xGb3JtYXQsIGds
VHlwZSk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBUZXh0dXJlOjp1cGRhdGVTdWJSZWN0KHZv
aWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKICAgICBib29sIHN3aXp6bGU7
CiAgICAgY29udmVydEZvcm1hdChtX2NvbnRleHQsIG1fZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5
cGUsICZzd2l6emxlKTsKICAgICBpZiAoc3dpenpsZSkgewotICAgICAgICBBU1NFUlQoZ2xGb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgZ2xUeXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgQVNTRVJUKGdsRm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBICYmIGdsVHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURSk7CiAgICAgICAgIC8vIEZJWE1FOiAgVGhpcyBjb3VsZCB1c2UgUEJPJ3MgdG8gc2F2ZSBk
b2luZyBhbiBleHRyYSBjb3B5IGhlcmUuCiAgICAgfQogICAgIGludCB0ZW1wQnVmZlNpemUgPSAv
LyBUZW1wb3JhcnkgYnVmZmVyIHNpemUgaXMgdGhlIHNtYWxsZXIgb2YgdGhlIG1heCB0ZXh0dXJl
IHNpemUgb3IgdGhlIHVwZGF0ZVJlY3RTYW5pdGl6ZWQKQEAgLTIwMSw4ICsyMDEsOCBAQCB2b2lk
IFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0KQogICAgICAgICAgICAgdGVtcEJ1ZmYuZ2V0KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3Rl
ZC53aWR0aCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0KCksIG1fdGlsZXMudG90YWxT
aXplKCkud2lkdGgoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RpbGVUZXh0dXJlSWRzLT5hdCh0
aWxlKSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgbV90aWxlVGV4dHVyZUlkcy0+YXQo
dGlsZSkpOworICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sCiAgICAgICAgICAgICBkc3RSZWN0LngoKSwK
ICAgICAgICAgICAgIGRzdFJlY3QueSgpLAogICAgICAgICAgICAgdXBkYXRlUmVjdEludGVyc2Vj
dGVkLndpZHRoKCksCkBAIC0yMTIsMTEgKzIxMiwxMSBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1
YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQogCiB2b2lkIFRl
eHR1cmU6OmJpbmRUaWxlKGludCB0aWxlKQogewotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUp
KTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUpKTsKKyAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dEdMOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpOworICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6
OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RPX0VER0UpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuaAppbmRleCA1N2E2
ODMyN2JkY2YyYjVmZDAwZGEzYjk2YWEzZTk0M2QyNTc0NDE5Li40MmMwMmMzODg5OTYwMzIwYzgx
Y2I4ODk5MDhlYzUzYmE5Y2RmMzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9UZXh0dXJlLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiAKIGNsYXNzIEludFJlY3Q7CiAKQEAgLTQ1
LDE1ICs0NSwxNSBAQCBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZT4g
ewogcHVibGljOgogICAgIH5UZXh0dXJlKCk7CiAgICAgZW51bSBGb3JtYXQgeyBSR0JBOCwgQkdS
QTggfTsKLSAgICBzdGF0aWMgUmVmUHRyPFRleHR1cmU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCosIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFRl
eHR1cmU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKICAgICB2b2lkIGJpbmRUaWxlKGludCB0aWxlKTsKICAgICB2b2lkIGxv
YWQodm9pZCogcGl4ZWxzKTsKICAgICB2b2lkIHVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgRm9ybWF0IGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0OyB9CiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3Rp
bGVzOyB9CiBwcml2YXRlOgotICAgIFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBzdGQ6OnVu
aXF1ZV9wdHI8VmVjdG9yPHVuc2lnbmVkPj4gdGlsZVRleHR1cmVJZHMsIEZvcm1hdCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWF4VGV4dHVyZVNpemUpOwotICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBtX2NvbnRleHQ7CisgICAgVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIHN0
ZDo6dW5pcXVlX3B0cjxWZWN0b3I8dW5zaWduZWQ+PiB0aWxlVGV4dHVyZUlkcywgRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6ZSk7CisgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKICAgICBGb3JtYXQgbV9mb3JtYXQ7CiAgICAgVGls
aW5nRGF0YSBtX3RpbGVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8dW5zaWduZWQ+PiBt
X3RpbGVUZXh0dXJlSWRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5k
ZXggMzJhYTg1OTIzMmIzN2IxODFmYTFjYzA1YWIwYjBmMTg3MmUyNmMyZi4uY2M1OTBiODM5MmUx
MmQ3YzUzNWNlNGUzYThhZDNkYTU2ZDA4MGRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtH
U3RyZWFtZXIuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAgc3RhdGljIGJvb2wgZW5zdXJlR3N0R0xD
b250ZXh0KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogI2VuZGlmCiAKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRIYW5kbGUg
PSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBpZiAoIWNvbnRleHRIYW5kbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA4NzFl
NDUwZjE0NzU5MGE0MDQwYWRiNzg0OTExNTE2ZjEzZjAxNjM2Li40Mzc5ZmVjODg4MjEwNjNjZjkx
MmQ5YTc2Yzc1MDhkOWQ4ZjVlMGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMzI5NCw3ICszMjk0LDcgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWMKIH0KIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0Rl
bnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGZsaXBZKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNvcHlWaWRlb1Rl
eHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwg
UGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICBV
TlVTRURfUEFSQU0oY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaAppbmRleCBmZDA0NzU0NzljNzQ4ZTQ0ODI0YWZiZGEwZWMyMWNlYjgzMDli
OWQyLi5lMjM5Zjk2YzRjYzA5ODlhMzkxNmExOWMxMjU5OTQ1NGY2ZWVlMWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC04Niw3ICs4Niw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJpdG1hcFRleHR1cmVHTDsKIGNsYXNzIEdMQ29u
dGV4dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBJbnRTaXplOwogY2xhc3MgSW50
UmVjdDsKIGNsYXNzIFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcjsKQEAgLTIwOCw3ICsyMDgs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgYm9vbCBj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNE
ZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9Q
bGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwg
Ym9vbCkgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50
VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQzRElPUy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZWUxMDMxODZjODA5ZDI2YTExMGQyZWY4YzA4MDY3MDMz
NmMzYjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dDNESU9TLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKE9QRU5HTF9FUykK
LQotI2RlZmluZSBnbEJpbmRGcmFtZWJ1ZmZlckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgotI2RlZmlu
ZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xCaW5kUmVuZGVyYnVmZmVyCi0jZGVmaW5lIGdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMKLSNkZWZpbmUg
Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMKLSNkZWZpbmUgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVuZGVyYnVmZmVycwotI2RlZmluZSBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKLSNkZWZp
bmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECi0jZGVm
aW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQgZ2xHZW5lcmF0ZU1pcG1hcAotI2RlZmluZSBnbEdlbkZy
YW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1lYnVmZmVycwotI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZl
cnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCi0jZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgot
I2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyaXYKLSNkZWZpbmUgZ2xJc0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgot
I2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKLSNkZWZpbmUgZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQotI2RlZmluZSBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUFQUExFCi0KLSNkZWZpbmUgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQVJCIGdsRHJhd0Fy
cmF5c0luc3RhbmNlZEVYVAotI2RlZmluZSBnbERyYXdFbGVtZW50c0luc3RhbmNlZEFSQiBnbERy
YXdFbGVtZW50c0luc3RhbmNlZEVYVAotI2RlZmluZSBnbFZlcnRleEF0dHJpYkRpdmlzb3JBUkIg
Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yRVhUCi0KLSNkZWZpbmUgZ2xCaW5kVmVydGV4QXJyYXkgZ2xC
aW5kVmVydGV4QXJyYXlPRVMKLSNkZWZpbmUgZ2xEZWxldGVWZXJ0ZXhBcnJheXMgZ2xEZWxldGVW
ZXJ0ZXhBcnJheXNPRVMKLSNkZWZpbmUgZ2xHZW5WZXJ0ZXhBcnJheXMgZ2xHZW5WZXJ0ZXhBcnJh
eXNPRVMKLSNkZWZpbmUgZ2xJc1ZlcnRleEFycmF5IGdsSXNWZXJ0ZXhBcnJheU9FUwotCi0jZGVm
aW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAotI2RlZmlu
ZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUwotI2RlZmlu
ZSBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCAgR0xfREVQVEhfQVRUQUNITUVOVAotI2RlZmluZSBH
TF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FQUExFCi0jZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQotI2Rl
ZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQgR0xfRlJBTUVCVUZGRVIKLSNkZWZpbmUgR0xfTUFYX1NB
TVBMRVNfRVhUIEdMX01BWF9TQU1QTEVTX0FQUExFCi0jZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZG
RVJfRVhUIEdMX1JFQURfRlJBTUVCVUZGRVJfQVBQTEUKLSNkZWZpbmUgR0xfUkVOREVSQlVGRkVS
X0VYVCBHTF9SRU5ERVJCVUZGRVIKLSNpZm5kZWYgR0xfUkdCOAotI2RlZmluZSBHTF9SR0I4IEdM
X1JHQgotI2VuZGlmCi0jaWZuZGVmIEdMX1JHQkE4Ci0jZGVmaW5lIEdMX1JHQkE4IEdMX1JHQkEK
LSNlbmRpZgotI2RlZmluZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhUIEdMX1NURU5DSUxfQVRU
QUNITUVOVAotI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYgR0xfVU5TSUdORURf
QllURQotCi0jZW5kaWYgLy8gVVNFKE9QRU5HTF9FUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xFU0lPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ZWUxMDMxODZjODA5ZDI2YTExMGQyZWY4YzA4MDY3
MDMzNmMzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9pb3MvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoT1BFTkdMX0VTKQorCisjZGVmaW5lIGdsQmluZEZyYW1lYnVmZmVyRVhU
IGdsQmluZEZyYW1lYnVmZmVyCisjZGVmaW5lIGdsQmluZFJlbmRlcmJ1ZmZlckVYVCBnbEJpbmRS
ZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUIGdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCBnbERlbGV0
ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQgZ2xEZWxldGVS
ZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQgZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcgorI2RlZmluZSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQKKyNkZWZpbmUgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBnbEdlbmVy
YXRlTWlwbWFwCisjZGVmaW5lIGdsR2VuRnJhbWVidWZmZXJzRVhUIGdsR2VuRnJhbWVidWZmZXJz
CisjZGVmaW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCBnbEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZp
bmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCBnbEdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisjZGVmaW5lIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgorI2RlZmluZSBnbElzRnJhbWVi
dWZmZXJFWFQgZ2xJc0ZyYW1lYnVmZmVyCisjZGVmaW5lIGdsSXNSZW5kZXJidWZmZXJFWFQgZ2xJ
c1JlbmRlcmJ1ZmZlcgorI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQgZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhU
IGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQVBQTEUKKworI2RlZmluZSBnbERyYXdB
cnJheXNJbnN0YW5jZWRBUkIgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkRVhUCisjZGVmaW5lIGdsRHJh
d0VsZW1lbnRzSW5zdGFuY2VkQVJCIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkRVhUCisjZGVmaW5l
IGdsVmVydGV4QXR0cmliRGl2aXNvckFSQiBnbFZlcnRleEF0dHJpYkRpdmlzb3JFWFQKKworI2Rl
ZmluZSBnbEJpbmRWZXJ0ZXhBcnJheSBnbEJpbmRWZXJ0ZXhBcnJheU9FUworI2RlZmluZSBnbERl
bGV0ZVZlcnRleEFycmF5cyBnbERlbGV0ZVZlcnRleEFycmF5c09FUworI2RlZmluZSBnbEdlblZl
cnRleEFycmF5cyBnbEdlblZlcnRleEFycmF5c09FUworI2RlZmluZSBnbElzVmVydGV4QXJyYXkg
Z2xJc1ZlcnRleEFycmF5T0VTCisKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdM
X0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUICBHTF9E
RVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhUIEdMX0RSQVdf
RlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFN
RUJVRkZFUgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQgR0xfTUFYX1NBTVBMRVNfQVBQTEUK
KyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQgR0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBM
RQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfRVhUIEdMX1JFTkRFUkJVRkZFUgorI2lmbmRlZiBH
TF9SR0I4CisjZGVmaW5lIEdMX1JHQjggR0xfUkdCCisjZW5kaWYKKyNpZm5kZWYgR0xfUkdCQTgK
KyNkZWZpbmUgR0xfUkdCQTggR0xfUkdCQQorI2VuZGlmCisjZGVmaW5lIEdMX1NURU5DSUxfQVRU
QUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lO
VF84XzhfOF84X1JFViBHTF9VTlNJR05FRF9CWVRFCisKKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5jcHAKaW5kZXgg
YWEzZGVhMGE5Mjg1MmVmOWYzOGNkZTY0NmI2MDgwMWFkMmZmNzhhZC4uZDg3ZDMyZmQ2MzczZThi
Yjc4YTU5MjU1YTY0NzYyNmYzYmMzNGVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0MzREFOR0xFTGF5ZXIuY3BwCkBAIC0xNzQsMTkgKzE3NCwxOSBAQCBib29sIEdDM0RBTkdM
RUxheWVyOjpBTkdMRUNvbnRleHQ6Om1ha2VDb250ZXh0Q3VycmVudCgpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR0MzREFOR0xFTGF5ZXI6OkFOR0xF
Q29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0wgR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9jb250ZXh0OwogfQogCi1HQzNEQU5HTEVMYXllcjo6R0MzREFOR0xF
TGF5ZXIoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0
aW5hdGlvbiBkZXN0aW5hdGlvbikKK0dDM0RBTkdMRUxheWVyOjpHQzNEQU5HTEVMYXllcihHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRl
c3RpbmF0aW9uIGRlc3RpbmF0aW9uKQogICAgIDogR0MzRExheWVyKGNvbnRleHQpCiB7CiAgICAg
c3dpdGNoIChkZXN0aW5hdGlvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3Rp
bmF0aW9uOjpPZmZzY3JlZW46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVz
dGluYXRpb246Ok9mZnNjcmVlbjoKICAgICAgICAgbV9hbmdsZUNvbnRleHQgPSBBTkdMRUNvbnRl
eHQ6OmNyZWF0ZUNvbnRleHQoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTIwMyw3ICsyMDMsNyBAQCBib29sIEdDM0RBTkdMRUxheWVyOjptYWtlQ29udGV4dEN1cnJlbnQo
KQogCiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR0MzREFOR0xFTGF5ZXI6OnBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIEdDM0RBTkdMRUxh
eWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2FuZ2xlQ29udGV4
dCk7CiAgICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05p
Y29zaWFHQzNEQU5HTEVMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmgKaW5kZXggZWM0N2VhZGYyZTkx
NjUwYTJlZWJkZjY2N2I4NWRiYzMwMDczNGEzYi4uMjExZjFlNTdiZTg0N2VkNDBiNmNlYjdhOGZh
ZTNkNzhlNGQ1NWFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxh
eWVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpZiBVU0UoTklDT1NJQSkgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQogCiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUg
Ik5pY29zaWFHQzNETGF5ZXIuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAKQEAgLTYxLDggKzYxLDgg
QEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5BTkdMRUNvbnRleHQoKTsKIAogICAgICAgICBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNE
KQotICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0OworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorICAgICAgICBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAKICAgICBw
cml2YXRlOgpAQCAtNzMsMTEgKzczLDExIEBAIHB1YmxpYzoKICAgICAgICAgRUdMU3VyZmFjZSBt
X3N1cmZhY2UgeyBudWxscHRyIH07CiAgICAgfTsKIAotICAgIEdDM0RBTkdMRUxheWVyKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkRlc3Rp
bmF0aW9uKTsKKyAgICBHQzNEQU5HTEVMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7CiAg
ICAgdmlydHVhbCB+R0MzREFOR0xFTGF5ZXIoKTsKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJy
ZW50KCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBTkdMRUNvbnRleHQ+IG1fYW5nbGVDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0MzRExheWVyLmNwcAppbmRleCAxNmExNDUzYzJiOWNjMWQxNjEyZWQzYTFlNGM2M2I2
YTFkZWM1MDRkLi40YzRjNDI2OTYxMjcxYzdiN2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0MzRExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcApAQCAtNDcsMjEgKzQ3LDIxIEBA
IG5hbWVzcGFjZSBOaWNvc2lhIHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUdDM0RM
YXllcjo6R0MzRExheWVyKEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0KQorR0MzRExheWVyOjpH
QzNETGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCiAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNvbnRlbnRMYXllcjo6
Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0
b3J5KCp0aGlzKSkpCiB7CiB9CiAKLUdDM0RMYXllcjo6R0MzRExheWVyKEdyYXBoaWNzQ29udGV4
dDNEJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24p
CitHQzNETGF5ZXI6OkdDM0RMYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQogICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2NvbnRlbnRMYXllcihOaWNvc2lhOjpDb250ZW50
TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3Jl
YXRlRmFjdG9yeSgqdGhpcykpKQogewogICAgIHN3aXRjaCAoZGVzdGluYXRpb24pIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CiAgICAgICAg
IG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0
V2luZG93OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpE
aXJlY3RseVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBHQzNETGF5ZXI6Om1ha2VD
b250ZXh0Q3VycmVudCgpCiAgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHQzNETGF5ZXI6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIEdDM0RMYXllcjo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9nbENvbnRleHQpOwogICAgIHJl
dHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0MzRExheWVyLmgKaW5kZXggZTg1NzIxNzdkYWZjYWFjYWIzZWEyMzA5ZDQ4NGJjMzkwNDI3
OGFlMy4uMjNlNGQ4YzdiZmE2ODU3OWFhZjYzYjYwYTZlNzYzZDY5NmYwMTU0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDM0RMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgVVNF
KE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRl
ICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CiAKQEAgLTQzLDE5ICs0MywxOSBAQCBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBHQzNE
TGF5ZXIgOiBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR0MzRExh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEJik7Ci0gICAgR0MzRExheWVyKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0
aW9uKTsKKyAgICBleHBsaWNpdCBHQzNETGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmKTsKKyAgICBHQzNETGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wm
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24pOwogCiAgICAg
dmlydHVhbCB+R0MzRExheWVyKCk7CiAKICAgICBDb250ZW50TGF5ZXImIGNvbnRlbnRMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyOyB9CiAgICAgdmlydHVhbCBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CiAKICAgICB2b2lkIHN3YXBCdWZmZXJzSWZO
ZWVkZWQoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRCYgbV9jb250ZXh0OworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBt
X2NvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdMQ29udGV4dD4gbV9nbENv
bnRleHQ7CiAKICAgICBSZWY8Q29udGVudExheWVyPiBtX2NvbnRlbnRMYXllcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYzBjNmU0
ODdkMjI2NDcwN2Q2YWU3YjkyZjA3ZWEwZTljMWNiM2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BF
TkdMX0VTKSkpCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLQotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNs
dWRlIDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KLSNlbGlmIFVTRShPUEVOR0wpCi0jaW5jbHVkZSA8
T3BlbkdML2dsLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcpCi0gICAgOiBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24oY29udGV4dCwgdXNlSW5kZXhlZEdldFN0cmluZykKLXsKLX0KLQotRXh0
ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3BlbkdMKCkgPSBkZWZhdWx0OwotCi0KLXZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBz
cmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9u
ZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZp
bHRlcikKLXsKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICBVTlVT
RURfUEFSQU0oc3JjWDApOwotICAgIFVOVVNFRF9QQVJBTShzcmNZMCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNyY1gxKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTEpOwotICAgIFVOVVNFRF9QQVJBTShk
c3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKLSAgICBVTlVTRURfUEFSQU0oZHN0WDEp
OwotICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7Ci0gICAgVU5VU0VEX1BBUkFNKG1hc2spOwotICAg
IFVOVVNFRF9QQVJBTShmaWx0ZXIpOwotICAgIDo6Z2xSZXNvbHZlTXVsdGlzYW1wbGVGcmFtZWJ1
ZmZlckFQUExFKCk7Ci0jZWxzZQotICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoc3JjWDAsIHNy
Y1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0
ZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2Ft
cGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQpCi17Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUVYVCh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zM0RPcGVuR0w6OmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IEdMdWludCBhcnJheSA9IDA7Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8
IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCi0gICAgaWYgKGlzVmVydGV4QXJy
YXlPYmplY3RTdXBwb3J0ZWQoKSkKLSAgICAgICAgZ2xHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5
KTsKLSNlbGlmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQ
TEVfdmVydGV4X2FycmF5X29iamVjdAotICAgIGdsR2VuVmVydGV4QXJyYXlzQVBQTEUoMSwgJmFy
cmF5KTsKLSNlbmRpZgotICAgIHJldHVybiBhcnJheTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0g
ICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikgfHwgKFBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLSAgICBpZiAoaXNWZXJ0ZXhBcnJheU9i
amVjdFN1cHBvcnRlZCgpKQotICAgICAgICBnbERlbGV0ZVZlcnRleEFycmF5cygxLCAmYXJyYXkp
OwotI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBM
RV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXNBUFBMRSgxLCAm
YXJyYXkpOwotI2VuZGlmCi19Ci0KLUdDM0Rib29sZWFuIEV4dGVuc2lvbnMzRE9wZW5HTDo6aXNW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9S
TShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCi0gICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RT
dXBwb3J0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheShhcnJheSk7Ci0jZWxp
ZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRl
eF9hcnJheV9vYmplY3QKLSAgICByZXR1cm4gZ2xJc1ZlcnRleEFycmF5QVBQTEUoYXJyYXkpOwot
I2VuZGlmCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5H
TDo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdJTikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLSAgICBpZiAo
aXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQotICAgICAgICBnbEJpbmRWZXJ0ZXhBcnJh
eShhcnJheSk7Ci0jZWxpZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYm
IEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBnbEJpbmRWZXJ0ZXhBcnJheUFQUExF
KGFycmF5KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFycmF5KTsKLSNlbmRpZgotfQotCi12
b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5n
JikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9F
WFRfZGVidWdfbWFya2VyIGluIHN1cHBvcnRzKCkuCi0gICAgcmV0dXJuOwotfQotCi12b2lkIEV4
dGVuc2lvbnMzRE9wZW5HTDo6cHVzaEdyb3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVn
X21hcmtlciBpbiBzdXBwb3J0cygpLgotICAgIHJldHVybjsKLX0KLQotdm9pZCBFeHRlbnNpb25z
M0RPcGVuR0w6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0
cygpLgotICAgIHJldHVybjsKLX0KLQotYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRz
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2Ui
LiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhlcgotICAgIC8vIGV4dGVuc2lvbnMuIElu
IHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZl
cl9tdWx0aXNhbXBsZS9HTF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZS4KLSAgICBpZiAo
bmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0g
ICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25z
LmNvbnRhaW5zKCJHTF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotI2Vsc2UKLSAg
ICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIik7Ci0jZW5kaWYKLQotICAgIGlmIChuYW1lID09ICJHTF9BTkdM
RV9pbnN0YW5jZWRfYXJyYXlzIikgewotICAgICAgICByZXR1cm4gKG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfQVJCX2luc3RhbmNlZF9hcnJheXMiKSB8fCBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9pbnN0YW5jZWRfYXJyYXlzIikpCi0gICAgICAgICAg
ICAmJiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfZHJhd19pbnN0YW5j
ZWQiKSB8fCBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9kcmF3X2luc3Rh
bmNlZCIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3NSR0IiKQotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
Y29udGFpbnMoIkdMX0VYVF9zUkdCIik7Ci0jZWxzZQotICAgICAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVyZV9zUkdCIikgJiYgKG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX3NSR0IiKSB8fCBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl9mcmFtZWJ1ZmZlcl9zUkdCIikpOwot
I2VuZGlmCi0KLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX2ZyYWdfZGVwdGgiKQotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgICAgICByZXR1cm4gbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhZ19kZXB0aCIpOwotI2VuZGlm
Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4K
LSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IG9yIEdMX09FU190ZXh0dXJlX2Zs
b2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydAotICAgIC8vIEdMX09FU190ZXh0dXJlX2hh
bGZfZmxvYXQsIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciBhbmQgR0xfT0VTX3RleHR1cmVf
aGFsZl9mbG9hdF9saW5lYXIgYXMgYXZhaWxhYmxlLgotICAgIGlmIChuYW1lID09ICJHTF9PRVNf
dGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIgfHwg
bmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiB8fCBuYW1lID09ICJHTF9PRVNf
dGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX2Zsb2F0IikgfHwgbV9hdmFpbGFibGVF
eHRlbnNpb25zLmNvbnRhaW5zKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotCi0gICAgLy8gR0xf
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKSB7Ci0jaWYgKFBMQVRGT1JNKEdUSykpCi0gICAgICAgIHJldHVybiBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7
Ci0jZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVF
eHRlbnNpb25zLmNvbnRhaW5zKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwotI2Vsc2UK
LSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVf
dmVydGV4X2FycmF5X29iamVjdCIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVza3RvcCBH
TCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCi0gICAg
aWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgVU5TSUdORURfSU5U
IGluZGljZXMKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChuYW1lID09ICJHTF9FWFRfc2hhZGVy
X3RleHR1cmVfbG9kIikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwotICAgIAotICAgIGlmIChuYW1lID09
ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQotICAgICAgICByZXR1cm4gbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290
cm9waWMiKTsKLQotICAgIGlmIChuYW1lID09ICJHTF9FWFRfZHJhd19idWZmZXJzIikgewotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMobmFtZSk7Ci0jZWxpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykK
LSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2Ry
YXdfYnVmZmVycyIpOwotI2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBzdXBwb3J0
IGZvciBvdGhlciBwbGF0Zm9ybXMuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAg
IH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKElPU19GQU1JTFlfU0lN
VUxBVE9SKQotICAgIGlmIChuYW1lID09ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKQot
ICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9PRVNfcGFj
a2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQotICAgIGlmIChuYW1lID09ICJHTF9PRVNfY29tcHJlc3Nl
ZF9FVEMxX1JHQjhfdGV4dHVyZSIKLSAgICAgICAgfHwgbmFtZSA9PSAiR0xfQU5HTEVfY29tcHJl
c3NlZF90ZXh0dXJlX2V0YyIpIHsKLSAgICAgICAgLy8gSW1wbGljaXRseSBlbmFibGVkIHdpdGgg
RVMgMy4wIGNvbnRleHRzLgotICAgICAgICByZXR1cm4gbV9jb250ZXh0LT5tX2lzRm9yV2ViR0wy
OwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucyhuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRyYXdCdWZmZXJzRVhU
KEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVmcykKLXsKLSAgICAvLyAgRklYTUU6IGlt
cGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9ybXMuCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIDo6Z2xEcmF3QnVmZmVyc0FSQihuLCBidWZzKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAg
ICA6OmdsRHJhd0J1ZmZlcnMobiwgYnVmcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShuKTsK
LSAgICBVTlVTRURfUEFSQU0oYnVmcyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIDo6Z2xEcmF3QXJy
YXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSNlbGlmIFBMQVRG
T1JNKENPQ09BKQotICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2VkQVJCKG1vZGUsIGZpcnN0LCBj
b3VudCwgcHJpbWNvdW50KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG1vZGUpOwotICAgIFVO
VVNFRF9QQVJBTShmaXJzdCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSAgICBVTlVTRURf
UEFSQU0ocHJpbWNvdW50KTsKLSNlbmRpZgotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAg
ICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJl
dF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50
KTsKLSNlbGlmIFBMQVRGT1JNKENPQ09BKQotICAgIDo6Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWRB
UkIobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0obW9kZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0odHlw
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByaW1jb3Vu
dCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnZlcnRleEF0dHJpYkRp
dmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9STShHVEspCi0gICAgOjpnbFZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotI2VsaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgOjpnbFZlcnRleEF0dHJpYkRpdmlzb3JBUkIoaW5kZXgsIGRpdmlzb3IpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShkaXZpc29yKTsKLSNlbmRp
ZgotfQotCi1TdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAg
ICBBU1NFUlQoIW1fdXNlSW5kZXhlZEdldFN0cmluZyk7Ci0gICAgcmV0dXJuIFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7
Ci19Ci0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjppc1ZlcnRl
eEFycmF5T2JqZWN0U3VwcG9ydGVkKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzdXBwb3J0
c1ZlcnRleEFycmF5T2JqZWN0ID0gc3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
Iik7Ci0gICAgcmV0dXJuIHN1cHBvcnRzVmVydGV4QXJyYXlPYmplY3Q7Ci19Ci0jZW5kaWYKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfM0QpICYmIChVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xf
RVMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDUyNTA4YTUzMWRhYTIwZDhhZDlkOTkxZmJhOTQ4NWJjOTk0M2VjYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEV4dGVuc2lvbnMzRE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24g
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIC8vIFRoaXMgY2xh
c3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1w
bGVtZW50YXRpb25zLgotICAgIEV4dGVuc2lvbnMzRE9wZW5HTChHcmFwaGljc0NvbnRleHQzRCos
IGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZyk7Ci0gICAgdmlydHVhbCB+RXh0ZW5zaW9uczNET3Bl
bkdMKCk7Ci0KLSAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KLSAgICB2b2lkIGJsaXRGcmFt
ZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBs
b25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBs
b25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJpZGU7Ci0KLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICBHQzNEYm9vbGVh
biBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQg
YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQg
aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBw
dXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwb3BH
cm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdD
M0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0FycmF5
c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9u
ZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVy
cmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpIG92ZXJyaWRl
OwotCi1wcml2YXRlOgotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExB
VEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQotICAgIGJvb2wgaXNWZXJ0ZXhBcnJheU9i
amVjdFN1cHBvcnRlZCgpOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiMTNlZjU4Zjc0NTRiNWZmZTI1ZjkwMzY2YzFjNDRlZjFkMjk3NWI2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVT
RShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5oIgotCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0KLSNpZiBVU0UoT1BF
TkdMX0VTKQotI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgotI2luY2x1ZGUgPE9wZW5H
TEVTL0VTMy9nbC5oPgotI2Vsc2UKLSNkZWZpbmUgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xf
VkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECi0jaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jaW5jbHVk
ZSA8T3BlbkdML2dsMy5oPgotI3VuZGVmIEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJ
T05fSEVBREVSU19JTkNMVURFRAotI2VuZGlmCi0KLSNlbHNlCi0KLSNpZiBVU0UoTElCRVBPWFkp
Ci0jaW5jbHVkZSAiRXBveHlTaGltcy5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRl
ICJPcGVuR0xFU1NoaW1zLmgiCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8R0xF
UzIvZ2wyZXh0Lmg+Ci0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLSNlbmRpZgotCi0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24o
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZykKLSAg
ICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQotICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lzTlZJRElBKGZhbHNlKQotICAgICwgbV9pc0FNRChmYWxz
ZSkKLSAgICAsIG1faXNJbnRlbChmYWxzZSkKLSAgICAsIG1faXNJbWFnaW5hdGlvbihmYWxzZSkK
LSAgICAsIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24oZmFsc2UpCi0gICAgLCBt
X3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZShmYWxzZSkKLSAgICAsIG1fdXNl
SW5kZXhlZEdldFN0cmluZyh1c2VJbmRleGVkR2V0U3RyaW5nKQotewotICAgIG1fdmVuZG9yID0g
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVO
RE9SKSkpOwotICAgIG1fcmVuZGVyZXIgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oOjpnbEdldFN0cmluZyhHTF9SRU5ERVJFUikpKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+
IHZlbmRvckNvbXBvbmVudHMgPSBtX3ZlbmRvci5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNw
bGl0KCcgJyk7Ci0gICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoIm52aWRpYSIpKQot
ICAgICAgICBtX2lzTlZJRElBID0gdHJ1ZTsKLSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250
YWlucygiYXRpIikgfHwgdmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiYW1kIikpCi0gICAgICAg
IG1faXNBTUQgPSB0cnVlOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbnRl
bCIpKQotICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRz
LmNvbnRhaW5zKCJpbWFnaW5hdGlvbiIpKQotICAgICAgICBtX2lzSW1hZ2luYXRpb24gPSB0cnVl
OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChtX2lzQU1EIHx8IG1faXNJbnRlbCkKLSAg
ICAgICAgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbiA9IHRydWU7Ci0KLSAgICAv
LyBJbnRlbCBIRCAzMDAwIGRldmljZXMgaGF2ZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHRleHR1cmVz
LiA8cmRhcjovL3Byb2JsZW0vMTY2NDkxNDA+Ci0gICAgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhp
bXVtVGV4dHVyZVNpemUgPSBtX3JlbmRlcmVyLnN0YXJ0c1dpdGgoIkludGVsIEhEIEdyYXBoaWNz
IDMwMDAiKTsKLSNlbmRpZgotfQotCi1FeHRlbnNpb25zM0RPcGVuR0xDb21tb246On5FeHRlbnNp
b25zM0RPcGVuR0xDb21tb24oKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFtX2luaXRp
YWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKLSAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4
dGVuc2lvbnMoKTsKLQotICAgIC8vIFdlIGV4cGxpY2l0bHkgZG8gbm90IHN1cHBvcnQgdGhpcyBl
eHRlbnNpb24gdW50aWwKLSAgICAvLyB3ZSBmaXggdGhlIGZvbGxvd2luZyBidWc6Ci0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTczNAotICAgIGlmIChu
YW1lID09ICJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Ci19Ci0KLXZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikg
ewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxy
ZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5t
X2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBj
b21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChuYW1lID09ICJH
TF9FWFRfZHJhd19idWZmZXJzIikgewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdM
RSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNv
bXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJj
ZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYg
KCFBTkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzKSB7Ci0gICAgICAgICAgICBBTkdMRVJl
c291cmNlcy5FWFRfZHJhd19idWZmZXJzID0gMTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJkFOR0xFUmVzb3Vy
Y2VzLk1heERyYXdCdWZmZXJzKTsKLSAgICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VY
VF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFO
R0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYg
Y29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJblJlc291
cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAgICAgICBp
ZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpIHsKLSAgICAgICAgICAg
IEFOR0xFUmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAxOwotICAgICAgICAgICAg
Y29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhUX2ZyYWdfZGVwdGgiKSB7Ci0gICAgICAgIC8vIEVuYWJs
ZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQotICAgICAgICBBTkdM
RVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAg
IFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNl
cygpOwotICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKSB7Ci0gICAg
ICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCA9IDE7Ci0gICAgICAgICAgICBj
b21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
IikgewotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1f
Y29tcGlsZXI7Ci0gICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXM7Ci0gICAgfQotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKLX0K
LQotaW50IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLX0KLQotU3Ry
aW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFO
R0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAg
IGludCBHTHNoYWRlclR5cGU7Ci0gICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7Ci0KLSAg
ICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0K
LSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OlNI
QURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKLQotICAgIGlmIChHTHNoYWRlclR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFE
RVJfVFlQRV9WRVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQ
RV9GUkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxpZCBzaGFk
ZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5tX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBpZiAocmVzdWx0ID09IG1fY29udGV4
dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVl
OwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7Ci0gICAgdWludDY0X3QgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX0NMQU1QX0lO
RElSRUNUX0FSUkFZX0JPVU5EUyB8IFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfSU5JVF9P
VVRQVVRfVkFSSUFCTEVTIHwgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUyB8IFNIX0xJ
TUlUX0VYUFJFU1NJT05fQ09NUExFWElUWSB8IFNIX0xJTUlUX0NBTExfU1RBQ0tfREVQVEggfCBT
SF9JTklUSUFMSVpFX1VOSU5JVElBTElaRURfTE9DQUxTOwotCi0gICAgaWYgKG1fcmVxdWlyZXNC
dWlsdEluRnVuY3Rpb25FbXVsYXRpb24pCi0gICAgICAgIGV4dHJhQ29tcGlsZU9wdGlvbnMgfD0g
U0hfRU1VTEFURV9BQlNfSU5UX0ZVTkNUSU9OOwotCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxBTkdM
RVNoYWRlclN5bWJvbFR5cGUsIHNoOjpTaGFkZXJWYXJpYWJsZT4+IHN5bWJvbHM7Ci0gICAgYm9v
bCBpc1ZhbGlkID0gY29tcGlsZXIuY29tcGlsZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRm
OCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5m
b0xvZywgc3ltYm9scywgZXh0cmFDb21waWxlT3B0aW9ucyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBz
aGFkZXJJbmZvTG9nOwotICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgZm9yIChj
b25zdCBzdGQ6OnBhaXI8QU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBzaDo6U2hhZGVyVmFyaWFibGU+
JiBwYWlyIDogc3ltYm9scykgewotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSA9IHBh
aXIuc2Vjb25kLm5hbWU7Ci0gICAgICAgIGVudHJ5LnN5bWJvbE1hcChwYWlyLmZpcnN0KS5zZXQo
U3RyaW5nKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSksIHBhaXIuc2Vjb25kKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIHJldHVybiB0
cmFuc2xhdGVkU2hhZGVyU291cmNlOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKQotewotI2lmIChQTEFURk9STShDT0NP
QSkgJiYgVVNFKE9QRU5HTCkpIHx8IChQTEFURk9STShHVEspICYmICFVU0UoT1BFTkdMX0VTKSkK
LSAgICBpZiAobV91c2VJbmRleGVkR2V0U3RyaW5nKSB7Ci0gICAgICAgIEdMaW50IG51bUV4dGVu
c2lvbnMgPSAwOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTlVNX0VYVEVOU0lPTlMsICZu
dW1FeHRlbnNpb25zKTsKLSAgICAgICAgZm9yIChHTGludCBpID0gMDsgaSA8IG51bUV4dGVuc2lv
bnM7ICsraSkKLSAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoZ2xHZXRTdHJp
bmdpKEdMX0VYVEVOU0lPTlMsIGkpKTsKLQotICAgICAgICBpZiAoIW1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1cmVfc3RvcmFnZSJfcykpIHsKLSAgICAgICAgICAg
IEdMaW50IG1ham9yVmVyc2lvbjsKLSAgICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUFKT1Jf
VkVSU0lPTiwgJm1ham9yVmVyc2lvbik7Ci0gICAgICAgICAgICBHTGludCBtaW5vclZlcnNpb247
Ci0gICAgICAgICAgICBnbEdldEludGVnZXJ2KEdMX01JTk9SX1ZFUlNJT04sICZtaW5vclZlcnNp
b24pOwotICAgICAgICAgICAgaWYgKG1ham9yVmVyc2lvbiA+IDQgfHwgKG1ham9yVmVyc2lvbiA9
PSA0ICYmIG1pbm9yVmVyc2lvbiA+PSAyKSkKLSAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuYWRkKCJHTF9BUkJfdGV4dHVyZV9zdG9yYWdlIl9zKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotI2VuZGlmCi0gICAgewotICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9
IGdldEV4dGVuc2lvbnMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBleHRlbnNpb24gOiBleHRlbnNp
b25zU3RyaW5nLnNwbGl0KCcgJykpCi0gICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
YWRkKGV4dGVuc2lvbik7Ci0gICAgfQotICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNp
b25zID0gdHJ1ZTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OnJlYWRuUGl4
ZWxzRVhUKGludCwgaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEc2l6ZWksIHZvaWQgKikKLXsKLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b246OmdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQsIGludCwgR0MzRHNpemVpLCBmbG9hdCAqKQot
ewotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0blVuaWZvcm1pdkVYVChH
QzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGludCAqKQotewotICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShP
UEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDcyMTc5MDc3MjdjYWVlYTI3ZWY2
OGEwNjljYzA1MzEwODIwZDM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5zaW9u
czNEIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKTsKLQotICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRo
b2RzLgotICAgIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbmFi
bGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIGludCBnZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzQVJCKCkgb3ZlcnJpZGU7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFy
cmF5T0VTKCkgb3ZlcnJpZGUgPSAwOwotICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGUgPSAwOwotICAgIEdDM0Rib29sZWFuIGlzVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGUgPSAwOwotICAgIHZvaWQgYmluZFZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKLQotICAgIHZvaWQgZHJh
d0J1ZmZlcnNFWFQoR0MzRHNpemVpLCBjb25zdCBHQzNEZW51bSopIG92ZXJyaWRlID0gMDsKLQot
ICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVj
dCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFWFQgUm9idXN0bmVzcyAtIHVzZXMgZ2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQigpCi0gICAgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0blVuaWZv
cm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXpl
LCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGlzTlZJRElBKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV9pc05WSURJQTsgfQotICAgIGJvb2wgaXNBTUQoKSBvdmVycmlkZSB7IHJldHVy
biBtX2lzQU1EOyB9Ci0gICAgYm9vbCBpc0ludGVsKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0lu
dGVsOyB9Ci0gICAgYm9vbCBpc0ltYWdpbmF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0lt
YWdpbmF0aW9uOyB9Ci0gICAgU3RyaW5nIHZlbmRvcigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fdmVu
ZG9yOyB9Ci0KLSAgICBib29sIHJlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbjsgfQotICAg
IGJvb2wgcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemU7IH0KLQotcHJvdGVj
dGVkOgotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKLSAgICBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqLCBib29sIHVzZUluZGV4ZWRHZXRT
dHJpbmcpOwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7Ci0gICAgYm9vbCBt
X2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9h
dmFpbGFibGVFeHRlbnNpb25zOwotCi0gICAgLy8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhp
Y3NDb250ZXh0M0QKLSAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotCi0gICAgYm9v
bCBtX2lzTlZJRElBOwotICAgIGJvb2wgbV9pc0FNRDsKLSAgICBib29sIG1faXNJbnRlbDsKLSAg
ICBib29sIG1faXNJbWFnaW5hdGlvbjsKLSAgICBib29sIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rp
b25FbXVsYXRpb247Ci0gICAgYm9vbCBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJl
U2l6ZTsKLQotICAgIGJvb2wgbV91c2VJbmRleGVkR2V0U3RyaW5nIHsgZmFsc2UgfTsKLQotICAg
IFN0cmluZyBtX3ZlbmRvcjsKLSAgICBTdHJpbmcgbV9yZW5kZXJlcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxNDk0MWY2NDFlMTUxZjM4YmM2ZWE1NjljYjhkYWYyMThjMTZk
OTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJF
eHRlbnNpb25zM0RPcGVuR0xFUy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0Qp
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxzZQot
I2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQotICAgIDogRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uKGNvbnRleHQsIHVzZUluZGV4ZWRHZXRTdHJpbmcpCi0gICAgLCBtX2NvbnRl
eHRSZXNldFN0YXR1cyhHTF9OT19FUlJPUikKLSAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJh
eU9iamVjdChmYWxzZSkKLSAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1Rl
eHR1cmUoZmFsc2UpCi0gICAgLCBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJheXMoZmFsc2Up
Ci0gICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQotICAgICwg
bV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQotICAgICwgbV9nbEJpbmRW
ZXJ0ZXhBcnJheU9FUygwKQotICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQotICAg
ICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQotICAgICwgbV9nbElzVmVydGV4QXJyYXlPRVMo
MCkKLSAgICAsIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKDApCi0gICAgLCBtX2dsUmVh
ZG5QaXhlbHNFWFQoMCkKLSAgICAsIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKDApCi0gICAgLCBtX2ds
R2V0blVuaWZvcm1pdkVYVCgwKQotICAgICwgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShu
dWxscHRyKQotICAgICwgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShudWxscHRyKQotICAg
ICwgbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG51bGxwdHIpCi17Ci19Ci0KLUV4dGVu
c2lvbnMzRE9wZW5HTEVTOjp+RXh0ZW5zaW9uczNET3BlbkdMRVMoKSA9IGRlZmF1bHQ7Ci0KLWJv
b2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5IGlmIHRoZSBleHRlbnNpb24gaXMgbm90
IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVycy4KLSAgICBib29sIGVuYWJsZWQgPSBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmlzRW5hYmxlZChuYW1lKTsKLSAgICBpZiAoIWVuYWJsZWQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZvciBHTF9FWFRfcm9idXN0bmVzcywgY2hlY2sg
dGhhdCB0aGUgY29udGV4dCBzdXBwb3J0cyByb2J1c3QgYWNjZXNzLgotICAgIGlmIChuYW1lID09
ICJHTF9FWFRfcm9idXN0bmVzcyIpIHsKLSAgICAgICAgR0xpbnQgcm9idXN0QWNjZXNzID0gR0xf
RkFMU0U7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpDT05U
RVhUX1JPQlVTVF9BQ0NFU1MsICZyb2J1c3RBY2Nlc3MpOwotICAgICAgICByZXR1cm4gcm9idXN0
QWNjZXNzID09IEdMX1RSVUU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
RXh0ZW5zaW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUco
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQg
bG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVk
IGxvbmcgc2FtcGxlcykKLXsKLSAgICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlz
YW1wbGVJTUcpCi0gICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1H
KHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7
Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIGlmIChtX2dsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HKQotICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmJsaXRG
cmFtZWJ1ZmZlcihsb25nIC8qIHNyY1gwICovLCBsb25nIC8qIHNyY1kwICovLCBsb25nIC8qIHNy
Y1gxICovLCBsb25nIC8qIHNyY1kxICovLCBsb25nIC8qIGRzdFgwICovLCBsb25nIC8qIGRzdFkw
ICovLCBsb25nIC8qIGRzdFgxICovLCBsb25nIC8qIGRzdFkxICovLCB1bnNpZ25lZCBsb25nIC8q
IG1hc2sgKi8sIHVuc2lnbmVkIGxvbmcgLyogZmlsdGVyICovKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUlNRykKLSAgICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRh
cmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGVsc2UK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xF
Uzo6aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpwdXNoR3JvdXBNYXJrZXJF
WFQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6
OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7Ci0gICAgICAgIEdMdWlu
dCBhcnJheSA9IDA7Ci0gICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsK
LSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIHJldHVybiAwOwotfQotCi12b2lk
IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhB
cnJheXNPRVMpCi0gICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsK
LSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotfQotCi1HQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aXNW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQotICAgICAgICByZXR1cm4g
bV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotCi0gICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9i
amVjdCBhcnJheSkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQotICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5
T0VTKGFycmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVT
OjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgLyogbiAqLywgY29uc3QgR0MzRGVudW0qIC8qIGJ1
ZnMgKi8pCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGUgc3VwcG9ydC4KLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi1pbnQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGNhbGwgZ2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQiwgYnV0IGluc3RlYWQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1
c0VYVC4KLSAgICAvLyBUaGUgcmV0dXJuIGNvZGVzIGZyb20gdGhlIHR3byBleHRlbnNpb25zIGFy
ZSBpZGVudGljYWwgYW5kIHRoZWlyIHB1cnBvc2UgaXMgdGhlIHNhbWUsIHNvIGl0Ci0gICAgLy8g
bWF5IGJlIGJlc3QgdG8gcmVuYW1lIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSB0byBnZXRH
cmFwaGljc1Jlc2V0U3RhdHVzKCkuCi0gICAgaWYgKG1fY29udGV4dFJlc2V0U3RhdHVzICE9IEdM
X05PX0VSUk9SKQotICAgICAgICByZXR1cm4gbV9jb250ZXh0UmVzZXRTdGF0dXM7Ci0gICAgaWYg
KG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGludCByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRH
cmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7Ci0gICAgICAgIGlmIChyZWFzb25Gb3JSZXNldCAhPSBH
TF9OT19FUlJPUikKLSAgICAgICAgICAgIG1fY29udGV4dFJlc2V0U3RhdHVzID0gcmVhc29uRm9y
UmVzZXQ7Ci0gICAgICAgIHJldHVybiByZWFzb25Gb3JSZXNldDsKLSAgICB9Ci0KLSAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlYWRuUGl4ZWxzRVhU
KGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKQot
ewotICAgIGlmIChtX2dsUmVhZG5QaXhlbHNFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1
c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAgICAgLy8g
YWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGlu
ZyBwaXhlbHMuCi0gICAgICAgIDo6Z2xGbHVzaCgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiBu
b24tQmxhY2tCZXJyeSBwbGF0Zm9ybXMgdXNlIHRoaXMsIHRoZXkgd2lsbCBuZWVkIHRvIGltcGxl
bWVudAotICAgICAgICAvLyB0aGVpciBhbnRpLWFsaWFzaW5nIGNvZGUgaGVyZS4KLSAgICAgICAg
bV9nbFJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYnVm
U2l6ZSwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNp
b25zM0RPcGVuR0xFUzo6Z2V0blVuaWZvcm1mdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKQotewotICAgIGlmIChtX2ds
R2V0blVuaWZvcm1mdkVYVCkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgICAgICBtX2dsR2V0blVuaWZvcm1mdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVm
U2l6ZSwgcGFyYW1zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBs
b2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKQotewotICAgIGlmIChtX2ds
R2V0blVuaWZvcm1pdkVYVCkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgICAgICBtX2dsR2V0blVuaWZvcm1pdkVYVChwcm9ncmFtLCBsb2NhdGlvbiwgYnVm
U2l6ZSwgcGFyYW1zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBp
ZiAoIW1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fZ2xE
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwot
fQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlmICghbV9nbERyYXdFbGVtZW50c0lu
c3RhbmNlZEFOR0xFKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2Vk
QU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwotfQotCi12b2lkIEV4dGVuc2lv
bnMzRE9wZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWlu
dCBkaXZpc29yKQotewotICAgIGlmICghbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSkgewot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNv
cik7Ci19Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKG5hbWUpKSB7Ci0gICAgICAgIGlmICghbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0
ICYmIG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgewotICAgICAgICAgICAg
bV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVY
QVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7
Ci0gICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRl
eEFycmF5c09FUyIpKTsKLSAgICAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIikpOwotICAgICAgICAgICAgbV9nbElz
VmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BS
T0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7Ci0gICAgICAgICAg
ICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOwotICAgICAgICB9IGVsc2Ug
aWYgKCFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlICYmIG5hbWUgPT0g
IkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSB7Ci0gICAgICAgICAgICBt
X2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKLSAgICAgICAg
ICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9j
YXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOwotICAgICAg
ICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoIW1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUICYmIG5hbWUg
PT0gIkdMX0VYVF9yb2J1c3RuZXNzIikgewotICAgICAgICAgICAgbV9nbEdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRV
U0VYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQi
KSk7Ci0gICAgICAgICAgICBtX2dsUmVhZG5QaXhlbHNFWFQgPSByZWludGVycHJldF9jYXN0PFBG
TkdMUkVBRE5QSVhFTFNFWFRQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xSZWFkblBpeGVsc0VY
VCIpKTsKLSAgICAgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUID0gcmVpbnRlcnByZXRfY2Fz
dDxQRk5HTEdFVE5VTklGT1JNRlZFWFRQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZXRuVW5p
Zm9ybWZ2RVhUIikpOwotICAgICAgICAgICAgbV9nbEdldG5Vbmlmb3JtaXZFWFQgPSByZWludGVy
cHJldF9jYXN0PFBGTkdMR0VUTlVOSUZPUk1JVkVYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJn
bEdldG5Vbmlmb3JtaXZFWFQiKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fc3VwcG9ydHNBTkdM
RWluc3RhbmNlZEFycmF5cyAmJiBuYW1lID09ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikg
ewotICAgICAgICAgICAgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DPihlZ2xHZXRQcm9jQWRkcmVz
cygiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiKSk7Ci0gICAgICAgICAgICBtX2dsRHJhd0Fy
cmF5c0luc3RhbmNlZEFOR0xFID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTERSQVdBUlJBWVNJTlNU
QU5DRURBTkdMRVBST0MgPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
QU5HTEUiKSk7Ci0gICAgICAgICAgICBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DID4oZWds
R2V0UHJvY0FkZHJlc3MoImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiKSk7Ci0gICAgICAg
ICAgICBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJheXMgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogaW1wbGVtZW50IHRoZSBzdXBwb3J0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpnZXRFeHRlbnNpb25zKCkKLXsK
LSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRT
dHJpbmcoR0xfRVhURU5TSU9OUykpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCi0KLSNlbmRpZiAvLyBVU0UoT1BF
TkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDc3MmZjNmRlMzdiOTgxNjlmY2IzZDVkYmZjZWRkYTFmNjE2NDQ2Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCIKLQotI2lmIFVTRShPUEVO
R0xfRVMpCi0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbHNl
Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZW5k
aWYKLQotI2lmbmRlZiBHTF9FWFRfcm9idXN0bmVzcwotLyogcmV1c2UgR0xfTk9fRVJST1IgKi8K
LSNkZWZpbmUgR0xfR1VJTFRZX0NPTlRFWFRfUkVTRVRfRVhUIDB4ODI1MwotI2RlZmluZSBHTF9J
Tk5PQ0VOVF9DT05URVhUX1JFU0VUX0VYVCAweDgyNTQKLSNkZWZpbmUgR0xfVU5LTk9XTl9DT05U
RVhUX1JFU0VUX0VYVCAweDgyNTUKLSNkZWZpbmUgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VY
VCAweDkwRjMKLSNkZWZpbmUgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VYVCAweDgy
NTYKLSNkZWZpbmUgR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCAweDgyNTIKLSNkZWZpbmUg
R0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VYVCAweDgyNjEKLSNlbmRpZgotCi0jaWZuZGVmIEdM
X0VYVF9yb2J1c3RuZXNzCi0jZGVmaW5lIEdMX0VYVF9yb2J1c3RuZXNzIDEKLSNpZmRlZiBHTF9H
TEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIEdDM0RlbnVtIEdMX0FQSUVOVFJZIGdsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0VYVCh2b2lkKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bFJlYWRuUGl4ZWxzRVhUKEdMaW50IHgsIEdMaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVm
U2l6ZSwgdm9pZCAqZGF0YSk7Ci1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRuVW5p
Zm9ybWZ2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNp
emUsIGZsb2F0ICpwYXJhbXMpOwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0blVu
aWZvcm1pdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZT
aXplLCBHTGludCAqcGFyYW1zKTsKLSNlbmRpZgotdHlwZWRlZiBHQzNEZW51bSAoR0xfQVBJRU5U
UllQIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0MpICh2b2lkKTsKLXR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBRE5QSVhFTFNFWFRQUk9DKSAoR0xpbnQgeCwgR0xp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKTsKLXR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUTlVOSUZPUk1GVkVYVFBST0MpIChHTHVpbnQgcHJv
Z3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKTsK
LXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUTlVOSUZPUk1JVkVYVFBST0MpIChH
THVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBHTGludCAq
cGFyYW1zKTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV4dGVuc2lv
bnMzRE9wZW5HTEVTIDogcHVibGljIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB7Ci1wdWJsaWM6
Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFw
aGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCi0gICAgRXh0ZW5zaW9uczNET3BlbkdMRVMo
R3JhcGhpY3NDb250ZXh0M0QqLCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcpOwotICAgIHZpcnR1
YWwgfkV4dGVuc2lvbnMzRE9wZW5HTEVTKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZm
ZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgaW50IHRl
eHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLQotICAgIC8vIEV4dGVu
c2lvbjNEIG1ldGhvZHMKLSAgICBib29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25n
IHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBs
b25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpIG92ZXJyaWRlOwotCi0gICAgUGxhdGZv
cm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVs
ZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgR0MzRGJv
b2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBH
QzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKLQotICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gcmVz
ZXQKLSAgICBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIG92ZXJyaWRlOwotCi0gICAg
Ly8gRVhUIFJvYnVzdG5lc3MgLSBldGMKLSAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsK
LSAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBn
ZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wg
c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGdl
dEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKLQotICAgIEdDM0RlbnVtIG1fY29udGV4dFJlc2V0U3Rh
dHVzOwotCi0gICAgYm9vbCBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgYm9v
bCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlOwotICAgIGJvb2wgbV9z
dXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzOwotCi0gICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRV
UkUyRE1VTFRJU0FNUExFSU1HUFJPQyBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBs
ZUlNRzsKLSAgICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MgbV9n
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRzsKLSAgICBQRk5HTEJJTkRWRVJURVhB
UlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUzsKLSAgICBQRk5HTERFTEVURVZFUlRF
WEFSUkFZU09FU1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUzsKLSAgICBQRk5HTEdFTlZF
UlRFWEFSUkFZU09FU1BST0MgbV9nbEdlblZlcnRleEFycmF5c09FUzsKLSAgICBQRk5HTElTVkVS
VEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5T0VTOwotICAgIFBGTkdMR0VUR1JBUEhJ
Q1NSRVNFVFNUQVRVU0VYVFBST0MgbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQ7Ci0gICAg
UEZOR0xSRUFETlBJWEVMU0VYVFBST0MgbV9nbFJlYWRuUGl4ZWxzRVhUOwotICAgIFBGTkdMR0VU
TlVOSUZPUk1GVkVYVFBST0MgbV9nbEdldG5Vbmlmb3JtZnZFWFQ7Ci0gICAgUEZOR0xHRVROVU5J
Rk9STUlWRVhUUFJPQyBtX2dsR2V0blVuaWZvcm1pdkVYVDsKLSAgICBQRk5HTFZFUlRFWEFUVFJJ
QkRJVklTT1JBTkdMRVBST0MgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRTsKLSAgICBQRk5H
TERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdM
RTsKLSAgICBQRk5HTERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQyBtX2dsRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iOGNiM2Q2OGQ3ODk3ODI3NGNhMjlkMjJhMmY5NDg5YjI4NGYyMjE2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTC5jcHAKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9Q
RU5HTF9FUykpKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgi
CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgor
I2VsaWYgVVNFKE9QRU5HTCkKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVT
SU9TLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zR0xPcGVu
R0w6OkV4dGVuc2lvbnNHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwg
Ym9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDogRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
KGNvbnRleHQsIHVzZUluZGV4ZWRHZXRTdHJpbmcpCit7Cit9CisKK0V4dGVuc2lvbnNHTE9wZW5H
TDo6fkV4dGVuc2lvbnNHTE9wZW5HTCgpID0gZGVmYXVsdDsKKworCit2b2lkIEV4dGVuc2lvbnNH
TE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3Jj
WDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcg
ZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCit7CisjaWYg
UExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgVU5VU0VEX1BBUkFNKHNyY1gw
KTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTApOworICAgIFVOVVNFRF9QQVJBTShzcmNYMSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WDApOworICAgIFVO
VVNFRF9QQVJBTShkc3RZMCk7CisgICAgVU5VU0VEX1BBUkFNKGRzdFgxKTsKKyAgICBVTlVTRURf
UEFSQU0oZHN0WTEpOworICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKKyAgICBVTlVTRURfUEFSQU0o
ZmlsdGVyKTsKKyAgICA6OmdsUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOwor
I2Vsc2UKKyAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKKyNlbmRpZgor
fQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVk
IGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KQoreworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQodGFy
Z2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRm
b3JtM0RPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCit7
CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgYXJyYXkg
PSAwOworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09D
T0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9y
dGVkKCkpCisgICAgICAgIGdsR2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CisjZWxpZiBkZWZp
bmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJh
eV9vYmplY3QKKyAgICBnbEdlblZlcnRleEFycmF5c0FQUExFKDEsICZhcnJheSk7CisjZW5kaWYK
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkZWxldGVW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkg
JiYgVVNFKE9QRU5HTF9FUykpCisgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQo
KSkKKyAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKKyNlbGlmIGRlZmlu
ZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5
X29iamVjdAorICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzQVBQTEUoMSwgJmFycmF5KTsKKyNlbmRp
ZgorfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVT
RShPUEVOR0xfRVMpKQorICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCisg
ICAgICAgIHJldHVybiBnbElzVmVydGV4QXJyYXkoYXJyYXkpOworI2VsaWYgZGVmaW5lZChHTF9B
UFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0
CisgICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheUFQUExFKGFycmF5KTsKKyNlbmRpZgorICAgIHJl
dHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmJpbmRWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQ
TEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCisgICAgaWYgKGlzVmVydGV4QXJyYXlP
YmplY3RTdXBwb3J0ZWQoKSkKKyAgICAgICAgZ2xCaW5kVmVydGV4QXJyYXkoYXJyYXkpOworI2Vs
aWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0
ZXhfYXJyYXlfb2JqZWN0CisgICAgZ2xCaW5kVmVydGV4QXJyYXlBUFBMRShhcnJheSk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShhcnJheSk7CisjZW5kaWYKK30KKwordm9pZCBFeHRlbnNpb25z
R0xPcGVuR0w6Omluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8g
RklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtl
ciBpbiBzdXBwb3J0cygpLgorICAgIHJldHVybjsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVu
R0w6OnB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3Vw
cG9ydHMoKS4KKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpwb3BH
cm91cE1hcmtlckVYVCh2b2lkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5j
dGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KKyAgICByZXR1
cm47Cit9CisKK2Jvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQg
R0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1w
bGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdM
X0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUv
R0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCisgICAgaWYgKG5hbWUgPT0gIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCIpOworICAgIGlmIChuYW1lID09
ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xf
QVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBt
X2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNh
bXBsZSIpOworI2VuZGlmCisKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfaW5zdGFuY2VkX2Fy
cmF5cyIpIHsKKyAgICAgICAgcmV0dXJuIChtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
IkdMX0FSQl9pbnN0YW5jZWRfYXJyYXlzIikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9FWFRfaW5zdGFuY2VkX2FycmF5cyIpKQorICAgICAgICAgICAgJiYgKG1fYXZhaWxh
YmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2RyYXdfaW5zdGFuY2VkIikgfHwgbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZHJhd19pbnN0YW5jZWQiKSk7CisgICAg
fQorCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9zUkdCIikKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9F
WFRfc1JHQiIpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5j
b250YWlucygiR0xfRVhUX3RleHR1cmVfc1JHQiIpICYmIChtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
Y29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9zUkdCIikgfHwgbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9BUkJfZnJhbWVidWZmZXJfc1JHQiIpKTsKKyNlbmRpZgorCisgICAg
aWYgKG5hbWUgPT0gIkdMX0VYVF9mcmFnX2RlcHRoIikKKyNpZiBQTEFURk9STShNQUMpCisgICAg
ICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyNlbmRpZgorCisgICAgLy8gRGVz
a3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgR0xfT0VTX3JnYjhfcmdiYTguCisgICAgaWYgKG5hbWUg
PT0gIkdMX09FU19yZ2I4X3JnYmE4IikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJ
ZiBHTF9BUkJfdGV4dHVyZV9mbG9hdCBvciBHTF9PRVNfdGV4dHVyZV9mbG9hdCBpcyBhdmFpbGFi
bGUgdGhlbiB3ZSByZXBvcnQKKyAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0LCBHTF9P
RVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgYW5kIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGlu
ZWFyIGFzIGF2YWlsYWJsZS4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQi
IHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdF9saW5lYXIiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpIHx8IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfT0VTX3RleHR1cmVfZmxvYXQiKTsKKworICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJy
YXlfb2JqZWN0CisgICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikg
eworI2lmIChQTEFURk9STShHVEspKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9BUkJfdmVydGV4X2FycmF5X29iamVjdCIpOworI2VsaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyNlbHNlCisgICAgICAgIHJldHVy
biBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FQUExFX3ZlcnRleF9hcnJheV9v
YmplY3QiKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBv
cnRzIHRoZSBzdGFuZGFyZCBkZXJpdmF0aXZlIGZ1bmN0aW9ucworICAgIGlmIChuYW1lID09ICJH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIFVOU0lHTkVEX0lOVCBpbmRpY2VzCisgICAg
aWYgKG5hbWUgPT0gIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIp
CisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9z
aGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisKKyAg
ICBpZiAobmFtZSA9PSAiR0xfRVhUX2RyYXdfYnVmZmVycyIpIHsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5h
bWUpOworI2VsaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspCisgICAgICAgIHJldHVy
biBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl9kcmF3X2J1ZmZlcnMiKTsK
KyNlbHNlCisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3RoZXIgcGxh
dGZvcm1zLgorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShJT1NfRkFNSUxZX1NJTVVMQVRPUikKKyAgICBp
ZiAobmFtZSA9PSAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIikKKyAgICAgICAgcmV0dXJu
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsIik7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3Rl
eHR1cmUiCisgICAgICAgIHx8IG5hbWUgPT0gIkdMX0FOR0xFX2NvbXByZXNzZWRfdGV4dHVyZV9l
dGMiKSB7CisgICAgICAgIC8vIEltcGxpY2l0bHkgZW5hYmxlZCB3aXRoIEVTIDMuMCBjb250ZXh0
cy4KKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+bV9pc0ZvcldlYkdMMjsKKyAgICB9CisjZW5k
aWYKKworICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Cit9
CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgbiwg
Y29uc3QgR0MzRGVudW0qIGJ1ZnMpCit7CisgICAgLy8gIEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9y
dCBmb3Igb3RoZXIgcGxhdGZvcm1zLgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICA6OmdsRHJhd0J1
ZmZlcnNBUkIobiwgYnVmcyk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgOjpnbERyYXdCdWZm
ZXJzKG4sIGJ1ZnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obik7CisgICAgVU5VU0VEX1BB
UkFNKGJ1ZnMpOworI2VuZGlmCit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJy
YXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICA6OmdsRHJhd0FycmF5c0luc3RhbmNlZCht
b2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAg
ICA6OmdsRHJhd0FycmF5c0luc3RhbmNlZEFSQihtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3Vu
dCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKKyAgICBVTlVTRURfUEFSQU0oZmly
c3QpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHByaW1jb3Vu
dCk7CisjZW5kaWYKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxv
bmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgOjpnbERyYXdFbGVt
ZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQq
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CisjZWxpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQVJCKG1vZGUsIGNvdW50
LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90Pihv
ZmZzZXQpKSwgcHJpbWNvdW50KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG1vZGUpOworICAg
IFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNF
RF9QQVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShwcmltY291bnQpOworI2VuZGlmCit9
CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50
IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIDo6Z2xWZXJ0ZXhBdHRyaWJEaXZpc29y
KGluZGV4LCBkaXZpc29yKTsKKyNlbGlmIFBMQVRGT1JNKENPQ09BKQorICAgIDo6Z2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQVJCKGluZGV4LCBkaXZpc29yKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oZGl2aXNvcik7CisjZW5kaWYKK30KKworU3RyaW5n
IEV4dGVuc2lvbnNHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgQVNTRVJUKCFtX3Vz
ZUluZGV4ZWRHZXRTdHJpbmcpOworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCisjaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9Q
RU5HTF9FUykpCitib29sIEV4dGVuc2lvbnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9iamVjdFN1
cHBvcnRlZCgpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc3VwcG9ydHNWZXJ0ZXhBcnJheU9i
amVjdCA9IHN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgIHJldHVy
biBzdXBwb3J0c1ZlcnRleEFycmF5T2JqZWN0OworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAoVVNF
KE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uc0dMT3BlbkdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYzZTljOTQwZDI0ZDQ0MzhkYjE4MGE2ZTZlYTM1
ZDc0ZjZlN2Y3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuaApAQCAtMCwwICsxLDY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lv
bnNHTE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24geworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVk
cyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgaW1wbGVtZW50
YXRpb25zLgorICAgIEV4dGVuc2lvbnNHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZyk7CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dMT3Bl
bkdMKCk7CisKKyAgICAvLyBFeHRlbnNpb25zR0wgbWV0aG9kcy4KKyAgICB2b2lkIGJsaXRGcmFt
ZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBs
b25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBs
b25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJpZGU7CisKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNEYm9vbGVh
biBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQg
aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBw
dXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBwb3BH
cm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdD
M0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhd0FycmF5
c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9u
ZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVy
cmlkZTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RG
OjpTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpIG92ZXJyaWRl
OworCitwcml2YXRlOgorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAoUExB
VEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAgIGJvb2wgaXNWZXJ0ZXhBcnJheU9i
amVjdFN1cHBvcnRlZCgpOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uc0dMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmNDk1YWNl
OGVkZWU5NjYyYzlmNGNjNjM1NzI0OGFkODMyMWZmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uLmNwcApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAoVVNFKE9Q
RU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uLmgiCisKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2lmIFVTRShP
UEVOR0xfRVMpCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+CisjaW5jbHVkZSA8T3Bl
bkdMRVMvRVMzL2dsLmg+CisjZWxzZQorI2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9H
TF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNpbmNs
dWRlIDxPcGVuR0wvZ2wzLmg+CisjdW5kZWYgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVS
U0lPTl9IRUFERVJTX0lOQ0xVREVECisjZW5kaWYKKworI2Vsc2UKKworI2lmIFVTRShMSUJFUE9Y
WSkKKyNpbmNsdWRlICJFcG94eVNoaW1zLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1
ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxH
TEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OkV4dGVuc2lvbnNHTE9wZW5HTENvbW1v
bihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3Ry
aW5nKQorICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faXNOVklESUEoZmFsc2UpCisgICAgLCBtX2lz
QU1EKGZhbHNlKQorICAgICwgbV9pc0ludGVsKGZhbHNlKQorICAgICwgbV9pc0ltYWdpbmF0aW9u
KGZhbHNlKQorICAgICwgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbihmYWxzZSkK
KyAgICAsIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKGZhbHNlKQorICAg
ICwgbV91c2VJbmRleGVkR2V0U3RyaW5nKHVzZUluZGV4ZWRHZXRTdHJpbmcpCit7CisgICAgbV92
ZW5kb3IgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhHTF9WRU5ET1IpKSk7CisgICAgbV9yZW5kZXJlciA9IFN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1JFTkRFUkVSKSkpOworCisgICAgVmVjdG9y
PFN0cmluZz4gdmVuZG9yQ29tcG9uZW50cyA9IG1fdmVuZG9yLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkuc3BsaXQoJyAnKTsKKyAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygibnZp
ZGlhIikpCisgICAgICAgIG1faXNOVklESUEgPSB0cnVlOworICAgIGlmICh2ZW5kb3JDb21wb25l
bnRzLmNvbnRhaW5zKCJhdGkiKSB8fCB2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJhbWQiKSkK
KyAgICAgICAgbV9pc0FNRCA9IHRydWU7CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFp
bnMoImludGVsIikpCisgICAgICAgIG1faXNJbnRlbCA9IHRydWU7CisgICAgaWYgKHZlbmRvckNv
bXBvbmVudHMuY29udGFpbnMoImltYWdpbmF0aW9uIikpCisgICAgICAgIG1faXNJbWFnaW5hdGlv
biA9IHRydWU7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKG1faXNBTUQgfHwgbV9pc0lu
dGVsKQorICAgICAgICBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uID0gdHJ1ZTsK
KworICAgIC8vIEludGVsIEhEIDMwMDAgZGV2aWNlcyBoYXZlIHByb2JsZW1zIHdpdGggbGFyZ2Ug
dGV4dHVyZXMuIDxyZGFyOi8vcHJvYmxlbS8xNjY0OTE0MD4KKyAgICBtX3JlcXVpcmVzUmVzdHJp
Y3RlZE1heGltdW1UZXh0dXJlU2l6ZSA9IG1fcmVuZGVyZXIuc3RhcnRzV2l0aCgiSW50ZWwgSEQg
R3JhcGhpY3MgMzAwMCIpOworI2VuZGlmCit9CisKK0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6
fkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbigpID0gZGVmYXVsdDsKKworYm9vbCBFeHRlbnNpb25z
R0xPcGVuR0xDb21tb246OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
IW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKQorICAgICAgICBpbml0aWFsaXplQXZh
aWxhYmxlRXh0ZW5zaW9ucygpOworCisgICAgLy8gV2UgZXhwbGljaXRseSBkbyBub3Qgc3VwcG9y
dCB0aGlzIGV4dGVuc2lvbiB1bnRpbAorICAgIC8vIHdlIGZpeCB0aGUgZm9sbG93aW5nIGJ1ZzoK
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NzM0Cisg
ICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lvbihuYW1lKTsK
K30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKSB7CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5h
YmxlZCBhbHJlYWR5KQorICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2Nv
bnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFOR0xFUmVzb3Vy
Y2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgeworICAgICAgICAgICAgQU5HTEVSZXNvdXJj
ZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKKyAgICAgICAgICAgIGNvbXBpbGVyLnNl
dFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG5h
bWUgPT0gIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKSB7CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0
IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQorICAgICAgICBBTkdMRVdlYktpdEJy
aWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJ
blJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOworICAg
ICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMpIHsKKyAgICAgICAgICAg
IEFOR0xFUmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPSAxOworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmQU5H
TEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOworICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVz
b3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobmFtZSA9
PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHsKKyAgICAgICAgLy8gRW5hYmxlIHN1cHBv
cnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpCisgICAgICAgIEFOR0xFV2ViS2l0
QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKyAgICAgICAgU2hCdWls
dEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Cisg
ICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkgeworICAg
ICAgICAgICAgQU5HTEVSZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA9IDE7CisgICAg
ICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChuYW1lID09ICJHTF9FWFRfZnJhZ19kZXB0aCIpIHsKKyAgICAgICAg
Ly8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpCisgICAg
ICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsK
KyAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0
UmVzb3VyY2VzKCk7CisgICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGgp
IHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoID0gMTsKKyAgICAg
ICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjppc0VuYWJsZWQoY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKSB7CisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29u
dGV4dC0+bV9jb21waWxlcjsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygp
Lk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlczsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRzKG5h
bWUpOworfQorCitpbnQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SOwor
fQorCitTdHJpbmcgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRl
cik7CisgICAgaW50IEdMc2hhZGVyVHlwZTsKKyAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlw
ZTsKKworICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21w
aWxlcjsKKworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRl
eHRHTDo6U0hBREVSX1RZUEUsICZHTHNoYWRlclR5cGUpOworCisgICAgaWYgKEdMc2hhZGVyVHlw
ZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlw
ZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNI
QURFUl9UWVBFX0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICIiOyAvLyBJbnZh
bGlkIHNoYWRlciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBt
X2NvbnRleHQtPm1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1
bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJu
ICIiOworCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlNoYWRlclNvdXJjZUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZTsKKyAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKKyAgICB1aW50NjRfdCBleHRyYUNvbXBpbGVP
cHRpb25zID0gU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTIHwgU0hfVU5GT0xEX1NIT1JU
X0NJUkNVSVQgfCBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMgfCBTSF9FTkZPUkNFX1BBQ0tJTkdf
UkVTVFJJQ1RJT05TIHwgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZIHwgU0hfTElNSVRf
Q0FMTF9TVEFDS19ERVBUSCB8IFNIX0lOSVRJQUxJWkVfVU5JTklUSUFMSVpFRF9MT0NBTFM7CisK
KyAgICBpZiAobV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbikKKyAgICAgICAgZXh0
cmFDb21waWxlT3B0aW9ucyB8PSBTSF9FTVVMQVRFX0FCU19JTlRfRlVOQ1RJT047CisKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgc2g6OlNoYWRlclZhcmlhYmxl
Pj4gc3ltYm9sczsKKyAgICBib29sIGlzVmFsaWQgPSBjb21waWxlci5jb21waWxlU2hhZGVyU291
cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nLCBzeW1ib2xzLCBleHRyYUNvbXBpbGVPcHRpb25zKTsK
KworICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7CisgICAgZW50cnkuaXNWYWxpZCA9IGlz
VmFsaWQ7CisKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxBTkdMRVNoYWRlclN5bWJvbFR5cGUs
IHNoOjpTaGFkZXJWYXJpYWJsZT4mIHBhaXIgOiBzeW1ib2xzKSB7CisgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lID0gcGFpci5zZWNvbmQubmFtZTsKKyAgICAgICAgZW50cnkuc3ltYm9s
TWFwKHBhaXIuZmlyc3QpLnNldChTdHJpbmcobmFtZS5jX3N0cigpLCBuYW1lLmxlbmd0aCgpKSwg
cGFpci5zZWNvbmQpOworICAgIH0KKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJu
ICIiOworCisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7
CisjaWYgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMKSkgfHwgKFBMQVRGT1JNKEdUSykg
JiYgIVVTRShPUEVOR0xfRVMpKQorICAgIGlmIChtX3VzZUluZGV4ZWRHZXRTdHJpbmcpIHsKKyAg
ICAgICAgR0xpbnQgbnVtRXh0ZW5zaW9ucyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihH
TF9OVU1fRVhURU5TSU9OUywgJm51bUV4dGVuc2lvbnMpOworICAgICAgICBmb3IgKEdMaW50IGkg
PSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsgKytpKQorICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRl
bnNpb25zLmFkZChnbEdldFN0cmluZ2koR0xfRVhURU5TSU9OUywgaSkpOworCisgICAgICAgIGlm
ICghbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9zdG9yYWdl
Il9zKSkgeworICAgICAgICAgICAgR0xpbnQgbWFqb3JWZXJzaW9uOworICAgICAgICAgICAgZ2xH
ZXRJbnRlZ2VydihHTF9NQUpPUl9WRVJTSU9OLCAmbWFqb3JWZXJzaW9uKTsKKyAgICAgICAgICAg
IEdMaW50IG1pbm9yVmVyc2lvbjsKKyAgICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUlOT1Jf
VkVSU0lPTiwgJm1pbm9yVmVyc2lvbik7CisgICAgICAgICAgICBpZiAobWFqb3JWZXJzaW9uID4g
NCB8fCAobWFqb3JWZXJzaW9uID09IDQgJiYgbWlub3JWZXJzaW9uID49IDIpKQorICAgICAgICAg
ICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoIkdMX0FSQl90ZXh0dXJlX3N0b3JhZ2Ui
X3MpOworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIFN0cmlu
ZyBleHRlbnNpb25zU3RyaW5nID0gZ2V0RXh0ZW5zaW9ucygpOworICAgICAgICBmb3IgKGF1dG8m
IGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoJyAnKSkKKyAgICAgICAgICAgIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsKKyAgICB9CisgICAgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTENvbW1vbjo6cmVhZG5QaXhlbHNFWFQoaW50LCBpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVp
LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgdm9pZCAqKQoreworICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0blVuaWZvcm1mdkVYVChHQzNEdWludCwgaW50LCBH
QzNEc2l6ZWksIGZsb2F0ICopCit7CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
OjpnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50LCBpbnQsIEdDM0RzaXplaSwgaW50ICopCit7Cisg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDA2YjE1YjFhNzEwOTQwNjc4NWNj
ZGRiZWE3OWQ2MjgzNWZiM2M5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaApAQCAtMCww
ICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJFeHRlbnNpb25zR0wuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uKCk7CisKKyAg
ICAvLyBFeHRlbnNpb25zR0wgbWV0aG9kcy4KKyAgICBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOworICAgIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKKyAgICBib29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBp
bnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIG92ZXJyaWRlOworCisgICAgUGxhdGZvcm0z
RE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlID0gMDsKKyAgICB2b2lkIGRl
bGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0gMDsKKyAgICBH
QzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlID0g
MDsKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZSA9IDA7CisKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVu
dW0qKSBvdmVycmlkZSA9IDA7CisKKyAgICBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJj
ZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworCisgICAgLy8gRVhUIFJvYnVzdG5l
c3MgLSB1c2VzIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQorICAgIHZvaWQgcmVhZG5QaXhl
bHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRh
dGEpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0blVuaWZvcm1mdkVYVChHQzNEdWludCBwcm9ncmFt
LCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1zKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpIG92ZXJyaWRlOworCisgICAgYm9v
bCBpc05WSURJQSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNOVklESUE7IH0KKyAgICBib29sIGlz
QU1EKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0FNRDsgfQorICAgIGJvb2wgaXNJbnRlbCgpIG92
ZXJyaWRlIHsgcmV0dXJuIG1faXNJbnRlbDsgfQorICAgIGJvb2wgaXNJbWFnaW5hdGlvbigpIG92
ZXJyaWRlIHsgcmV0dXJuIG1faXNJbWFnaW5hdGlvbjsgfQorICAgIFN0cmluZyB2ZW5kb3IoKSBv
dmVycmlkZSB7IHJldHVybiBtX3ZlbmRvcjsgfQorCisgICAgYm9vbCByZXF1aXJlc0J1aWx0SW5G
dW5jdGlvbkVtdWxhdGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNCdWlsdEluRnVu
Y3Rpb25FbXVsYXRpb247IH0KKyAgICBib29sIHJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0
dXJlU2l6ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRl
eHR1cmVTaXplOyB9CisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM7CisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKiwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKTsKKworICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcg
Z2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxh
YmxlRXh0ZW5zaW9ucygpOworICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lv
bnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKKworICAgIC8v
IFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMCisgICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKworICAgIGJvb2wgbV9pc05WSURJQTsKKyAg
ICBib29sIG1faXNBTUQ7CisgICAgYm9vbCBtX2lzSW50ZWw7CisgICAgYm9vbCBtX2lzSW1hZ2lu
YXRpb247CisgICAgYm9vbCBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uOworICAg
IGJvb2wgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemU7CisKKyAgICBib29s
IG1fdXNlSW5kZXhlZEdldFN0cmluZyB7IGZhbHNlIH07CisKKyAgICBTdHJpbmcgbV92ZW5kb3I7
CisgICAgU3RyaW5nIG1fcmVuZGVyZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uc0dMT3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjFkMGQxOTdlYzQ5MDdi
OGEyYzEzNzQxZjhjZjAyYWIyNDdhZDlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcApAQCAt
MCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJFeHRlbnNpb25zR0xPcGVuR0xFUy5o
IgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaWYgVVNF
KExJQkVQT1hZKQorI2luY2x1ZGUgIkVwb3h5RUdMLmgiCisjZWxzZQorI2luY2x1ZGUgPEVHTC9l
Z2wuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnNHTE9wZW5H
TEVTOjpFeHRlbnNpb25zR0xPcGVuR0xFUyhHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4
dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDogRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uKGNvbnRleHQsIHVzZUluZGV4ZWRHZXRTdHJpbmcpCisgICAgLCBtX2NvbnRleHRSZXNldFN0
YXR1cyhHTF9OT19FUlJPUikKKyAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChm
YWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFs
c2UpCisgICAgLCBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJheXMoZmFsc2UpCisgICAgLCBt
X2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJh
eU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbEdl
blZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbElzVmVydGV4QXJyYXlPRVMoMCkKKyAgICAs
IG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKDApCisgICAgLCBtX2dsUmVhZG5QaXhlbHNF
WFQoMCkKKyAgICAsIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKDApCisgICAgLCBtX2dsR2V0blVuaWZv
cm1pdkVYVCgwKQorICAgICwgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShudWxscHRyKQor
ICAgICwgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShudWxscHRyKQorICAgICwgbV9nbERy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG51bGxwdHIpCit7Cit9CisKK0V4dGVuc2lvbnNHTE9w
ZW5HTEVTOjp+RXh0ZW5zaW9uc0dMT3BlbkdMRVMoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgRXh0ZW5z
aW9uc0dMT3BlbkdMRVM6OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8g
UmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5IGlmIHRoZSBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRl
ZCBieSB0aGUgZHJpdmVycy4KKyAgICBib29sIGVuYWJsZWQgPSBFeHRlbnNpb25zR0xPcGVuR0xD
b21tb246OmlzRW5hYmxlZChuYW1lKTsKKyAgICBpZiAoIWVuYWJsZWQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIEZvciBHTF9FWFRfcm9idXN0bmVzcywgY2hlY2sgdGhhdCB0aGUg
Y29udGV4dCBzdXBwb3J0cyByb2J1c3QgYWNjZXNzLgorICAgIGlmIChuYW1lID09ICJHTF9FWFRf
cm9idXN0bmVzcyIpIHsKKyAgICAgICAgR0xpbnQgcm9idXN0QWNjZXNzID0gR0xfRkFMU0U7Cisg
ICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpDT05URVhUX1JPQlVT
VF9BQ0NFU1MsICZyb2J1c3RBY2Nlc3MpOworICAgICAgICByZXR1cm4gcm9idXN0QWNjZXNzID09
IEdMX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0
YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
KQoreworICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykKKyAg
ICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBzYW1wbGVzKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVJTUcpCisgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUco
dGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgZWxz
ZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6YmxpdEZyYW1lYnVmZmVyKGxv
bmcgLyogc3JjWDAgKi8sIGxvbmcgLyogc3JjWTAgKi8sIGxvbmcgLyogc3JjWDEgKi8sIGxvbmcg
Lyogc3JjWTEgKi8sIGxvbmcgLyogZHN0WDAgKi8sIGxvbmcgLyogZHN0WTAgKi8sIGxvbmcgLyog
ZHN0WDEgKi8sIGxvbmcgLyogZHN0WTEgKi8sIHVuc2lnbmVkIGxvbmcgLyogbWFzayAqLywgdW5z
aWduZWQgbG9uZyAvKiBmaWx0ZXIgKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQoreworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQor
ICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppbnNlcnRFdmVu
dE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJp
bmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Y3JlYXRlVmVydGV4
QXJyYXlPRVMoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMpIHsKKyAgICAgICAgR0x1aW50IGFycmF5ID0gMDsK
KyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOworICAgICAgICByZXR1
cm4gYXJyYXk7CisgICAgfQorCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7
CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAg
ICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VT
KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMpCisgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhB
cnJheU9FUyhhcnJheSk7CisKKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQor
eworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xCaW5k
VmVydGV4QXJyYXlPRVMpCisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdCdWZmZXJz
RVhUKEdDM0RzaXplaSAvKiBuICovLCBjb25zdCBHQzNEZW51bSogLyogYnVmcyAqLykKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IHRoZSBzdXBwb3J0LgorICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK2ludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgY2FsbCBnZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCLCBidXQgaW5zdGVhZCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhULgorICAgIC8v
IFRoZSByZXR1cm4gY29kZXMgZnJvbSB0aGUgdHdvIGV4dGVuc2lvbnMgYXJlIGlkZW50aWNhbCBh
bmQgdGhlaXIgcHVycG9zZSBpcyB0aGUgc2FtZSwgc28gaXQKKyAgICAvLyBtYXkgYmUgYmVzdCB0
byByZW5hbWUgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIHRvIGdldEdyYXBoaWNzUmVzZXRT
dGF0dXMoKS4KKyAgICBpZiAobV9jb250ZXh0UmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpCisg
ICAgICAgIHJldHVybiBtX2NvbnRleHRSZXNldFN0YXR1czsKKyAgICBpZiAobV9nbEdldEdyYXBo
aWNzUmVzZXRTdGF0dXNFWFQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICAgICAgaW50IHJlYXNvbkZvclJlc2V0ID0gbV9nbEdldEdyYXBoaWNzUmVzZXRT
dGF0dXNFWFQoKTsKKyAgICAgICAgaWYgKHJlYXNvbkZvclJlc2V0ICE9IEdMX05PX0VSUk9SKQor
ICAgICAgICAgICAgbV9jb250ZXh0UmVzZXRTdGF0dXMgPSByZWFzb25Gb3JSZXNldDsKKyAgICAg
ICAgcmV0dXJuIHJlYXNvbkZvclJlc2V0OworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpCit7CisgICAgaWYgKG1f
Z2xSZWFkblBpeGVsc0VYVCkgeworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVu
IHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgICAgICAvLyBhbGwgcHJldmlvdXMg
cmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KKyAg
ICAgICAgOjpnbEZsdXNoKCk7CisKKyAgICAgICAgLy8gRklYTUU6IElmIG5vbi1CbGFja0JlcnJ5
IHBsYXRmb3JtcyB1c2UgdGhpcywgdGhleSB3aWxsIG5lZWQgdG8gaW1wbGVtZW50CisgICAgICAg
IC8vIHRoZWlyIGFudGktYWxpYXNpbmcgY29kZSBoZXJlLgorICAgICAgICBtX2dsUmVhZG5QaXhl
bHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBidWZTaXplLCBkYXRhKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVT
OjpnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpCit7CisgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWZ2
RVhUKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAg
IG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OmdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpCit7CisgICAgaWYgKG1fZ2xHZXRuVW5pZm9ybWl2
RVhUKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAg
IG1fZ2xHZXRuVW5pZm9ybWl2RVhUKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghbV9nbERyYXdB
cnJheXNJbnN0YW5jZWRBTkdMRSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9nbERyYXdBcnJheXNJbnN0
YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXpl
aSBwcmltY291bnQpCit7CisgICAgaWYgKCFtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUp
IHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBj
b3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJf
dD4ob2Zmc2V0KSksIHByaW1jb3VudCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7
CisgICAgaWYgKCFtX2dsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKSB7CisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBtX2dsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKK30KKworYm9v
bCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIGlmIChtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkpIHsK
KyAgICAgICAgaWYgKCFtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgJiYgbmFtZSA9PSAi
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSB7CisgICAgICAgICAgICBtX2dsQmluZFZlcnRl
eEFycmF5T0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0M+
KGVnbEdldFByb2NBZGRyZXNzKCJnbEJpbmRWZXJ0ZXhBcnJheU9FUyIpKTsKKyAgICAgICAgICAg
IG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOVkVSVEVY
QVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2VuVmVydGV4QXJyYXlzT0VTIikp
OworICAgICAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xE
ZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7CisgICAgICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheU9F
UyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJheU9FUyIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNP
RVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fc3VwcG9y
dHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgJiYgbmFtZSA9PSAiR0xfSU1HX211bHRp
c2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpIHsKKyAgICAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRE11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVG
RkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9nbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRU5E
RVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUciKSk7CisgICAgICAgICAgICBtX3N1cHBv
cnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmICghbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQgJiYgbmFtZSA9PSAiR0xfRVhUX3Jv
YnVzdG5lc3MiKSB7CisgICAgICAgICAgICBtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVTRVhUUFJPQz4oZWds
R2V0UHJvY0FkZHJlc3MoImdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCIpKTsKKyAgICAgICAg
ICAgIG1fZ2xSZWFkblBpeGVsc0VYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRUFETlBJWEVM
U0VYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFJlYWRuUGl4ZWxzRVhUIikpOworICAgICAg
ICAgICAgbV9nbEdldG5Vbmlmb3JtZnZFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUTlVO
SUZPUk1GVkVYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdldG5Vbmlmb3JtZnZFWFQiKSk7
CisgICAgICAgICAgICBtX2dsR2V0blVuaWZvcm1pdkVYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xHRVROVU5JRk9STUlWRVhUUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2V0blVuaWZvcm1p
dkVYVCIpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJy
YXlzICYmIG5hbWUgPT0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKSB7CisgICAgICAgICAg
ICBtX2dsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFZF
UlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRSIpKTsKKyAgICAgICAgICAgIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
QU5HTEUgPSByZWludGVycHJldF9jYXN0PFBGTkdMRFJBV0FSUkFZU0lOU1RBTkNFREFOR0xFUFJP
QyA+KGVnbEdldFByb2NBZGRyZXNzKCJnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIpKTsKKyAg
ICAgICAgICAgIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MgPihlZ2xHZXRQcm9jQWRkcmVz
cygiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9y
dHNBTkdMRWluc3RhbmNlZEFycmF5cyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9
PSAiR0xfRVhUX2RyYXdfYnVmZmVycyIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgdGhlIHN1cHBvcnQuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJp
bmcgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRF
TlNJT05TKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKworI2VuZGlmIC8vIFVTRShPUEVOR0xfRVMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
c0dMT3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkMWM2YzBhODA2YzMxOWFiNjE5NjU4
ZmQwNmY0ZWU1NDRiZWI0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaApAQCAtMCwwICsxLDEy
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRXh0
ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgiCisKKyNpZiBVU0UoT1BFTkdMX0VTKQorCisjaWYgVVNF
KExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxzZQorI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2VuZGlmCisKKyNpZm5kZWYgR0xf
RVhUX3JvYnVzdG5lc3MKKy8qIHJldXNlIEdMX05PX0VSUk9SICovCisjZGVmaW5lIEdMX0dVSUxU
WV9DT05URVhUX1JFU0VUX0VYVCAweDgyNTMKKyNkZWZpbmUgR0xfSU5OT0NFTlRfQ09OVEVYVF9S
RVNFVF9FWFQgMHg4MjU0CisjZGVmaW5lIEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVF9FWFQgMHg4
MjU1CisjZGVmaW5lIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQgMHg5MEYzCisjZGVmaW5l
IEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQgMHg4MjU2CisjZGVmaW5lIEdMX0xP
U0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQgMHg4MjUyCisjZGVmaW5lIEdMX05PX1JFU0VUX05PVElG
SUNBVElPTl9FWFQgMHg4MjYxCisjZW5kaWYKKworI2lmbmRlZiBHTF9FWFRfcm9idXN0bmVzcwor
I2RlZmluZSBHTF9FWFRfcm9idXN0bmVzcyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwor
R0xfQVBJQ0FMTCBHQzNEZW51bSBHTF9BUElFTlRSWSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNF
WFQodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZWFkblBpeGVsc0VYVChH
TGludCB4LCBHTGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0blVuaWZvcm1mdkVYVChHTHVpbnQg
cHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldG5Vbmlmb3JtaXZFWFQoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cyk7CisjZW5kaWYKK3R5cGVkZWYgR0MzRGVudW0gKEdMX0FQSUVOVFJZUCBQRk5HTEdFVEdSQVBI
SUNTUkVTRVRTVEFUVVNFWFRQUk9DKSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTFJFQUROUElYRUxTRVhUUFJPQykgKEdMaW50IHgsIEdMaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBH
QzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEdFVE5VTklGT1JNRlZFWFRQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTEdFVE5VTklGT1JNSVZFWFRQUk9DKSAoR0x1aW50IHByb2dyYW0sIEdM
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUyA6IHB1
YmxpYyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24geworcHVibGljOgorICAgIC8vIFRoaXMgY2xh
c3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wgaW1wbGVtZW50YXRpb25zLgorICAgIEV4dGVuc2lvbnNHTE9wZW5HTEVTKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKiwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKTsKKyAgICB2aXJ0dWFsIH5F
eHRlbnNpb25zR0xPcGVuR0xFUygpOworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4
dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
YXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUsIGlu
dCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKworICAgIC8vIEV4dGVuc2lvbjNEIG1l
dGhvZHMKKyAgICBib29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBs
b25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkx
LCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2
b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpIG92ZXJyaWRlOworCisgICAgUGxhdGZvcm0zRE9iamVj
dCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdC
dWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsKKworICAgIHZv
aWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBk
aXZpc29yKSBvdmVycmlkZTsKKworICAgIC8vIEVYVCBSb2J1c3RuZXNzIC0gcmVzZXQKKyAgICBp
bnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIG92ZXJyaWRlOworCisgICAgLy8gRVhUIFJv
YnVzdG5lc3MgLSBldGMKKyAgICB2b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsKKyAgICB2b2lk
IGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRuVW5pZm9y
bWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUs
IGludCAqcGFyYW1zKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgc3VwcG9ydHNF
eHRlbnNpb24oY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGdldEV4dGVuc2lv
bnMoKSBvdmVycmlkZTsKKworICAgIEdDM0RlbnVtIG1fY29udGV4dFJlc2V0U3RhdHVzOworCisg
ICAgYm9vbCBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3Q7CisgICAgYm9vbCBtX3N1cHBv
cnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlOworICAgIGJvb2wgbV9zdXBwb3J0c0FO
R0xFaW5zdGFuY2VkQXJyYXlzOworCisgICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJ
U0FNUExFSU1HUFJPQyBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKKyAg
ICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BS
T0MgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUzsKKyAgICBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09F
U1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUzsKKyAgICBQRk5HTEdFTlZFUlRFWEFSUkFZ
U09FU1BST0MgbV9nbEdlblZlcnRleEFycmF5c09FUzsKKyAgICBQRk5HTElTVkVSVEVYQVJSQVlP
RVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5T0VTOworICAgIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNU
QVRVU0VYVFBST0MgbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQ7CisgICAgUEZOR0xSRUFE
TlBJWEVMU0VYVFBST0MgbV9nbFJlYWRuUGl4ZWxzRVhUOworICAgIFBGTkdMR0VUTlVOSUZPUk1G
VkVYVFBST0MgbV9nbEdldG5Vbmlmb3JtZnZFWFQ7CisgICAgUEZOR0xHRVROVU5JRk9STUlWRVhU
UFJPQyBtX2dsR2V0blVuaWZvcm1pdkVYVDsKKyAgICBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JB
TkdMRVBST0MgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRTsKKyAgICBQRk5HTERSQVdBUlJB
WVNJTlNUQU5DRURBTkdMRVBST0MgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRTsKKyAgICBQ
Rk5HTERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQyBtX2dsRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
T1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNDdlMjQ3MzNhMTZlMGZlMjAwYWUzNDM5YWM3ZmNiODAz
NmNhYWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIChVU0UoT1BFTkdMKSB8fCAoUExB
VEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKSkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNESU9TLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgotI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgi
Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+Ci0v
LyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgotI2RlZmluZSBHTF9SR0JBMzJGX0FSQiAgICAgICAg
ICAgICAgICAgICAgICAweDg4MTQKLSNkZWZpbmUgR0xfUkdCMzJGX0FSQiAgICAgICAgICAgICAg
ICAgICAgICAgMHg4ODE1Ci0jZWxpZiBVU0UoT1BFTkdMKQotI2RlZmluZSBHTF9ET19OT1RfV0FS
Tl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQKLSNpbmNsdWRlIDxPcGVuR0wv
Z2wuaD4KLSNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+Ci0jdW5kZWYgR0xfRE9fTk9UX1dBUk5fSUZf
TVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLSNpZiBQTEFURk9STShNQUMpCi1zdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBp
eGVscyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKLXsKLSAg
ICAvLyBXZSBjYW4gYXNzdW1lIHRoaXMgZG9lc24ndCBvdmVyZmxvdyBiZWNhdXNlIHRoZSBjYWxs
aW5nIGZ1bmN0aW9ucwotICAgIC8vIHVzZSBjaGVja2VkIGFyaXRobWV0aWMuCi0gICAgaW50IHRv
dGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0
b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHBpeGVsc1tpICsgM10gPSAyNTU7Ci19Ci0jZW5k
aWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJ
Zk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQg
Y2hhciogcGl4ZWxzKQotewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwot
Ci0gICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2ZSBhIGJ1ZyB3aGVyZSBjYWxsaW5nIHJlYWRQaXhl
bHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3cm9uZyB2YWx1ZXMgZm9yIHRoZSBhbHBoYSBjaGFu
bmVsIHdoZW4gdGhlIGFscGhhIGlzIG9mZiBmb3IgdGhlIGNvbnRleHQuCi0gICAgaWYgKCFhdHRy
cy5hbHBoYSAmJiBnZXRFeHRlbnNpb25zKCkuaXNOVklESUEoKSkgewotICAgICAgICA6OmdsUmVh
ZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBw
aXhlbHMpOwotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsK
LSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGg7
Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICAgICAgc3JjLmRhdGEgPSBw
aXhlbHM7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LmhlaWdo
dCA9IGhlaWdodDsKLSAgICAgICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgICAgICBkZXN0LnJv
d0J5dGVzID0gd2lkdGggKiA0OwotICAgICAgICBkZXN0LmRhdGEgPSBwaXhlbHM7Ci0KLSAgICAg
ICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNl
bHNlCi0gICAgICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgICAgIHN0
ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwotI2VuZGlmCi0gICAgfSBlbHNlCi0g
ICAgICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VO
U0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBpZiAoIWF0dHJzLmFscGhhKQotICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3
aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCi17Ci0gICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdM
X0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwotICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsK
LSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JG
b3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKLSAgICBpZiAoYXR0cnMuYWxw
aGEpIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7Ci0gICAgICAg
IGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2ludGVybmFs
Q29sb3JGb3JtYXQgPSBHTF9SR0I4OwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAg
ICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgLy8g
V2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRl
cHRoIGlzIG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0
dHJpYnV0ZXMuCi0KLSAgICAgICAgRXh0ZW5zaW9uczNEJiBleHRlbnNpb25zID0gZ2V0RXh0ZW5z
aW9ucygpOwotICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtu
b3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0VYVF9w
YWNrZWRfZGVwdGhfc3RlbmNpbCIpKQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKLSAgICAgICAgZWxzZQotI2lmIFBMQVRG
T1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0
ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSNlbHNlCi0gICAgICAgICAgICBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKLSNlbmRpZgot
ICAgIH0KLQotICAgIC8vIFJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgaWYgKGF0dHJzLmFu
dGlhbGlhcykgewotICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKLSAgICAgICAgOjpnbEdl
dEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKLSAgICAgICAg
Ly8gVXNpbmcgbW9yZSB0aGFuIDQgc2FtcGxlcyBpcyBzbG93IG9uIHNvbWUgaGFyZHdhcmUgYW5k
IGlzIHVubGlrZWx5IHRvCi0gICAgICAgIC8vIHByb2R1Y2UgYSBzaWduaWZpY2FudGx5IGJldHRl
ciByZXN1bHQuCi0gICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oNCwgbWF4U2Ft
cGxlQ291bnQpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0jaWYgUExB
VEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIDo6Z2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIEdM
X1JHQkE4X09FUywgd2lkdGgsIGhlaWdodCk7Ci0jZWxzZQotICAgICAgICA6OmdsUmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50
LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotI2VuZGlmCi0gICAgICAg
IDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpIHsK
LSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVD
b3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAg
ICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
X0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgICAgICAgICBpZiAoYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRU
QUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIDApOwotICAgICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhU
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KLSAgICAgICAgICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyByZXNpemUgcmVndWxhciBGQk8K
LSAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
ICAgIEFTU0VSVChtX3RleHR1cmUpOwotI2lmIFBMQVRGT1JNKENPQ09BKQotI2lmIFVTRShPUEVO
R0xfRVMpCi0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX3RleHR1
cmUpOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKLSAgICBzZXRS
ZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpOwotI2Vsc2UKLSAgICBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKLSAgICB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3Rv
cmVGcm9tTGF5ZXIoKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FSQiwgbV90ZXh0dXJlLCAwKTsKLSNlbmRpZiAvLyAhVVNFKE9QRU5HTF9FUykpCi0jZWxzZQot
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xG
cmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLQotI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkgewotICAgICAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OwotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAg
ICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
LSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIH0KLSNlbmRp
ZgotI2VuZGlmCi0KLSAgICBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBib29sIG11c3RS
ZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAg
ICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8pCi0gICAgICAgICAgICBtdXN0UmVzdG9yZUZC
TyA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQo
R0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
Ci17Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoIWF0
dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkpIHsKLSAgICAg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
X0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAg
ICBpZiAoYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVO
REVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICB9Ci0KLSAgICBpZiAo
Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCi0gICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVT
VCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdM
X0RJVEhFUiwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGVw
dGgoR0xfREVQVEhfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcg
c2NvcGVkU3RlbmNpbChHTF9TVEVOQ0lMX1RFU1QsIEdMX0ZBTFNFKTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIEdMaW50IGJvdW5kRnJhbWVCdWZmZXI7Ci0g
ICAgOjpnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZib3VuZEZyYW1lQnVm
ZmVyKTsKLSNlbmRpZgotCi0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotI2lmIFBMQVRGT1JNKENPQ09BKSAm
JiBVU0UoT1BFTkdMX0VTKQotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLSAgICA6OmdsRmx1c2go
KTsKLSAgICA6OmdsUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVidWZmZXJBUFBMRSgpOwotICAgIGNv
bnN0IEdMZW51bSBkaXNjYXJkc1tdID0geyBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfREVQVEhf
QVRUQUNITUVOVCB9OwotICAgIDo6Z2xEaXNjYXJkRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFN
RUJVRkZFUl9BUFBMRSwgMiwgZGlzY2FyZHMpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZmZXIpOwotI2Vsc2UKLSAgICBJbnRSZWN0IHJlc29s
dmVSZWN0ID0gcmVjdDsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc29sdmVS
ZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLQot
ICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55
KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCByZXNvbHZlUmVjdC54
KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5tYXhZ
KCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0jZW5kaWYKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBERVBUSF9TVEVOQ0lMOgotICAgICAgICBp
bnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIERFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdM
X0RFUFRIX0NPTVBPTkVOVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0JBNDoKLSAgICBj
YXNlIFJHQjVfQTE6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBSR0I1NjU6Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdC
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLSAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKQotewotICAgIC8vIE5lZWQgdG8gZW11bGF0ZSBNQVhfRlJBR01FTlQvVkVSVEVYX1VO
SUZPUk1fVkVDVE9SUyBhbmQgTUFYX1ZBUllJTkdfVkVDVE9SUwotICAgIC8vIGJlY2F1c2UgZGVz
a3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyByZXR1cm4gdGhlIG51bWJlciBvZiBjb21w
b25lbnRzCi0gICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1cm4gdGhlIG51bWJlciBvZiB2ZWN0b3Jz
IChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4KLSAgICAvLyBUaGVyZWZvcmUsIHRoZSB2
YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgNC4KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0jaWYgVVNFKE9Q
RU5HTCkKLSAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7
Ci0gICAgICAgICp2YWx1ZSAvPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTOgotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRF
WF9VTklGT1JNX0NPTVBPTkVOVFMsIHZhbHVlKTsKLSAgICAgICAgKnZhbHVlIC89IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTUFYX1ZBUllJTkdfVkVDVE9SUzoKLSAgICAgICAgaWYgKGlz
R0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICAgICAgQVNTRVJUKDo6Z2xHZXRFcnJvcigpID09
IEdMX05PX0VSUk9SKTsKLSAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlO
R19WRUNUT1JTLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoOjpnbEdldEVycm9yKCkgPT0gR0xf
SU5WQUxJRF9FTlVNKSB7Ci0gICAgICAgICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9W
QVJZSU5HX0NPTVBPTkVOVFMsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAqdmFsdWUgLz0gNDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIDo6Z2xHZXRJbnRl
Z2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsIHZhbHVlKTsKLSAgICAgICAgICAgICp2YWx1ZSAv
PSA0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBNQVhfVEVY
VFVSRV9TSVpFOgotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1RFWFRVUkVfU0laRSwgdmFs
dWUpOwotICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGlt
dW1UZXh0dXJlU2l6ZSgpKQotICAgICAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oNDA5NiwgKnZh
bHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpF
OgotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSwgdmFs
dWUpOwotICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJlcXVpcmVzUmVzdHJpY3RlZE1heGlt
dW1UZXh0dXJlU2l6ZSgpKQotICAgICAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oMTAyNCwgKnZh
bHVlKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFNvbWUgb2xk
ZXIgaGFyZHdhcmUgYWR2ZXJ0aXNlcyBhIGxhcmdlciBtYXhpbXVtIHRoYW4gdGhleQotICAgIC8v
IGNhbiBhY3R1YWxseSBoYW5kbGUuIFJhdGhlciB0aGFuIGRldGVjdGluZyBzdWNoIGRldmljZXMs
IHNpbXBseQotICAgIC8vIGNsYW1wIHRoZSBtYXhpbXVtIHRvIDgxOTIsIHdoaWNoIGlzIGJpZyBl
bm91Z2ggZm9yIGEgNUsgZGlzcGxheS4KLSAgICBjYXNlIE1BWF9SRU5ERVJCVUZGRVJfU0laRToK
LSAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9SRU5ERVJCVUZGRVJfU0laRSwgdmFsdWUpOwot
ICAgICAgICAqdmFsdWUgPSBzdGQ6Om1pbig4MTkyLCAqdmFsdWUpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE1BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFY
X1ZJRVdQT1JUX0RJTVMsIHZhbHVlKTsKLSAgICAgICAgdmFsdWVbMF0gPSBzdGQ6Om1pbig4MTky
LCB2YWx1ZVswXSk7Ci0gICAgICAgIHZhbHVlWzFdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMV0p
OwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihwbmFtZSwgdmFsdWUpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVt
IHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5cGUpOwotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgQVNT
RVJUKHByZWNpc2lvbik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN3aXRj
aCAocHJlY2lzaW9uVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19JTlQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0lOVDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpISUdIX0lOVDoKLSAgICAgICAgLy8gVGhlc2UgdmFsdWVzIGFyZSBmb3Ig
YSAzMi1iaXQgdHdvcy1jb21wbGVtZW50IGludGVnZXIgZm9ybWF0LgotICAgICAgICByYW5nZVsw
XSA9IDMxOwotICAgICAgICByYW5nZVsxXSA9IDMwOwotICAgICAgICBwcmVjaXNpb25bMF0gPSAw
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUg
Zm9yIGFuIElFRUUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBmb3JtYXQuCi0gICAg
ICAgIHJhbmdlWzBdID0gMTI3OwotICAgICAgICByYW5nZVsxXSA9IDEyNzsKLSAgICAgICAgcHJl
Y2lzaW9uWzBdID0gMjM7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25z
dCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0MzRGVudW0gb3BlbkdMRm9ybWF0ID0gZm9ybWF0Owot
ICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Ci0jaWYg
VVNFKE9QRU5HTCkKLSAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewotICAgICAgICBpZiAoZm9y
bWF0ID09IEdMX1JHQkEpCi0gICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JH
QkEzMkZfQVJCOwotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfUkdCKQotICAgICAgICAg
ICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IzMkZfQVJCOwotICAgIH0gZWxzZSBpZiAo
dHlwZSA9PSBIQUxGX0ZMT0FUX09FUykgewotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEp
Ci0gICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX1JHQkExNkZfQVJCOwotICAg
ICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfUkdCKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJu
YWxGb3JtYXQgPSBHTF9SR0IxNkZfQVJCOwotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xf
TFVNSU5BTkNFKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9MVU1JTkFO
Q0UxNkZfQVJCOwotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfQUxQSEEpCi0gICAgICAg
ICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX0FMUEhBMTZGX0FSQjsKLSAgICAgICAgZWxz
ZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKLSAgICAgICAgICAgIG9wZW5HTElu
dGVybmFsRm9ybWF0ID0gR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0FSQjsKLSAgICAgICAgdHlwZSA9
IEdMX0hBTEZfRkxPQVRfQVJCOwotICAgIH0KLQotICAgIEFTU0VSVChmb3JtYXQgIT0gRXh0ZW5z
aW9uczNEOjpTUkdCOF9BTFBIQThfRVhUKTsKLSAgICBpZiAoZm9ybWF0ID09IEV4dGVuc2lvbnMz
RDo6U1JHQl9BTFBIQV9FWFQpCi0gICAgICAgIG9wZW5HTEZvcm1hdCA9IEdMX1JHQkE7Ci0gICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQpCi0gICAgICAgIG9wZW5H
TEZvcm1hdCA9IEdMX1JHQjsKLSNlbmRpZgotCi0gICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkg
ewotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wg
dGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVk
Ci0gICAgICAgIC8vIHRvIGFkYXB0IHRoZW0uCi0gICAgICAgIHN3aXRjaCAob3BlbkdMSW50ZXJu
YWxGb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAgICAgICAgICAgIC8vIFRoZSBmb3Jt
YXQgaXMgYSBzaW1wbGUgY29tcG9uZW50IGNvbnRhaW5pbmcgYW4gYWxwaGEgdmFsdWUuIEl0IG5l
ZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEgR0xfUkVEIHBsYW5lLgotICAgICAgICAgICAgLy8gV2Ug
Y2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdMX1JFRCAoYm90aCBuZWVkIHRvIGJlIEdMX0FMUEhBIGlu
IFdlYkdMKSBhbmQgaW5zdHJ1Y3QgdGhlIHRleHR1cmUgdG8gc3dpenpsZQotICAgICAgICAgICAg
Ly8gdGhlIHJlZCBjb21wb25lbnQgdmFsdWVzIHdpdGggdGhlIGFscGhhIGNvbXBvbmVudCB2YWx1
ZXMuCi0gICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IG9wZW5HTEZvcm1hdCA9IFJF
RDsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfQSwg
UkVEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgaGFzIDIgY29tcG9uZW50cywgYW4gYWxwaGEgb25l
IGFuZCBhIGx1bWluYW5jZSBvbmUgKHNhbWUgdmFsdWUgZm9yIHJlZCwgZ3JlZW4gYW5kIGJsdWUp
LgotICAgICAgICAgICAgLy8gSXQgbmVlZHMgdG8gYmUgYmFja2VkIHdpdGggYSBHTF9SRyBwbGFu
ZSwgdXNpbmcgdGhlIHJlZCBjb21wb25lbnQgZm9yIHRoZSBjb2xvcnMgYW5kIHRoZSBncmVlbiBj
b21wb25lbnQKLSAgICAgICAgICAgIC8vIGZvciBhbHBoYS4gV2UgY2hhbmdlIHRoZSBmb3JtYXRz
IHRvIEdMX1JHIGFuZCBzd2l6emxlIHRoZSBjb21wb25lbnRzLgotICAgICAgICAgICAgb3BlbkdM
SW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xGb3JtYXQgPSBSRzsKLSAgICAgICAgICAgIHRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfUiwgUkVEKTsKLSAgICAgICAgICAgIHRleFBh
cmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfRywgUkVEKTsKLSAgICAgICAgICAgIHRl
eFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfQiwgUkVEKTsKLSAgICAgICAgICAg
IHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfQSwgR1JFRU4pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgb3BlbkdM
SW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgb3BlbkdMRm9ybWF0LCB0eXBl
LCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9F
UykKLSAgICA6OmdsRGVwdGhSYW5nZWYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKLSNlbHNlCi0gICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpG
YXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0Mz
RGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9S
TShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsQ2xlYXJEZXB0aGYoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGRlcHRoKSk7Ci0jZWxzZQotICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKLSNl
bmRpZgotfQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLUV4dGVuc2lvbnMzRCYgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25zKQotI2lmIFBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBt
YWtlVW5pcXVlPEV4dGVuc2lvbnMzRE9wZW5HTD4odGhpcywgZmFsc2UpOwotI2Vsc2UKLSAgICAg
ICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zM0RPcGVuR0w+KHRoaXMsIGlz
R0xFUzJDb21wbGlhbnQoKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZXh0ZW5zaW9uczsKLX0K
LSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKLXsKLSAgICBhdXRvIGF0dHJzID0gY29u
dGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNo
IGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0gICAgLy8gYWxsIHBy
ZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhl
bHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZsdXNoKCk7Ci0gICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgOjpnbEZsdXNoKCk7Ci0g
ICAgfQotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgZGF0YSk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLQotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBpZiAoIWF0dHJzLmFscGhhICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBKSAmJiAobV9z
dGF0ZS5ib3VuZEZCTyA9PSBtX2ZibyB8fCAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykpKQotICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJv
bVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkp
OwotI2VuZGlmCi19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNE
KSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJmMDYxYTBhMGI5ZjI1OTUzMTc4NGQyNjY4MjM1NGYw
ZmVlNTFlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjA4NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNE
KSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RJT1MuaCIKLSNlbmRpZgotCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiBVU0Uo
T1BFTkdMX0VTKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCi0jZWxzZQotI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiQU5HTEVXZWJL
aXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlRl
bXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVndWxhckV4cHJlc3Npb24uaD4KLSNp
bmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgotI2luY2x1
ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2ltcG9ydCA8
T3BlbkdMRVMvRVMyL2dsZXh0Lmg+Ci0jaW1wb3J0IDxPcGVuR0xFUy9FUzMvZ2wuaD4KLS8vIEZy
b20gPE9wZW5HTEVTL2dsZXh0Lmg+Ci0jZGVmaW5lIEdMX1JHQkEzMkZfQVJCICAgICAgICAgICAg
ICAgICAgICAgIDB4ODgxNAotI2RlZmluZSBHTF9SR0IzMkZfQVJCICAgICAgICAgICAgICAgICAg
ICAgICAweDg4MTUKLSNlbHNlCi0jZGVmaW5lIEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZF
UlNJT05fSEVBREVSU19JTkNMVURFRAotI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgotI2luY2x1ZGUg
PE9wZW5HTC9nbDMuaD4KLSNpbmNsdWRlIDxPcGVuR0wvZ2wzZXh0Lmg+Ci0jdW5kZWYgR0xfRE9f
Tk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECi0jZW5kaWYKLQot
I2Vsc2UKLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJFcG94eVNoaW1zLmgiCi0jZWxp
ZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKLSNlbGlmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5k
aWYKLQotI2VuZGlmCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgVGhyZWFkU3Bl
Y2lmaWM8U2hhZGVyTmFtZUhhc2gqPiYgZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCkK
LXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0gICAgc3RhdGljIFRocmVh
ZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4qIHNoYXJlZE5hbWVIYXNoOwotICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIHNoYXJlZE5hbWVIYXNoID0gbmV3IFRocmVh
ZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj47Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gKnNoYXJl
ZE5hbWVIYXNoOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIoU2hhZGVyTmFtZUhhc2gqIHNoYWRlck5hbWVIYXNoKQotewotICAgICpnZXRDdXJyZW50TmFt
ZUhhc2hNYXBGb3JTaGFkZXIoKSA9IHNoYWRlck5hbWVIYXNoOwotfQotCi0vLyBIYXNoIGZ1bmN0
aW9uIHVzZWQgYnkgdGhlIEFOR0xFIHRyYW5zbGF0b3IvY29tcGlsZXIgdG8gZG8KLS8vIHN5bWJv
bCBuYW1lIG1hbmdsaW5nLiBTaW5jZSB0aGlzIGlzIGEgc3RhdGljIG1ldGhvZCwgYmVmb3JlCi0v
LyBjYWxsaW5nIGNvbXBpbGVTaGFkZXIgd2Ugc2V0IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
cgotLy8gdG8gcG9pbnQgdG8gdGhlIG1hcCBrZXB0IGJ5IHRoZSBjdXJyZW50IGluc3RhbmNlIG9m
IEdyYXBoaWNzQ29udGV4dDNELgotCi1zdGF0aWMgdWludDY0X3QgbmFtZUhhc2hGb3JTaGFkZXIo
Y29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5nIG5hbWVBc0NTdHJpbmcgPSBDU3RyaW5nKG5h
bWUpOwotCi0gICAgLy8gTG9vayB1cCBuYW1lIGluIG91ciBsb2NhbCBtYXAuCi0gICAgU2hhZGVy
TmFtZUhhc2gqJiBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIgPSAqZ2V0Q3VycmVudE5hbWVI
YXNoTWFwRm9yU2hhZGVyKCk7Ci0gICAgU2hhZGVyTmFtZUhhc2g6Oml0ZXJhdG9yIGZpbmRSZXN1
bHQgPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmZpbmQobmFtZUFzQ1N0cmluZyk7Ci0g
ICAgaWYgKGZpbmRSZXN1bHQgIT0gY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlOwotCi0gICAgdW5zaWduZWQgaGFzaFZh
bHVlID0gbmFtZUFzQ1N0cmluZy5oYXNoKCk7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSAzMi1iaXQg
aGFzaCBmcm9tIENTdHJpbmc6Omhhc2ggaW50byBhIDY0LWJpdCByZXN1bHQKLSAgICAvLyBieSBz
aGlmdGluZyB0aGVuIGFkZGluZyB0aGUgc2l6ZSBvZiBvdXIgdGFibGUuIE92ZXJmbG93IHdvdWxk
Ci0gICAgLy8gb25seSBiZSBhIHByb2JsZW0gaWYgd2UncmUgYWxyZWFkeSBoYXNoaW5nIHRvIHRo
ZSBzYW1lIHZhbHVlIChhbmQKLSAgICAvLyB3ZSdyZSBob3BpbmcgdGhhdCBvdmVyIHRoZSBsaWZl
dGltZSBvZiB0aGUgY29udGV4dCB3ZQotICAgIC8vIGRvbid0IGhhdmUgdGhhdCBtYW55IHN5bWJv
bHMpLgotCi0gICAgdWludDY0X3QgcmVzdWx0ID0gaGFzaFZhbHVlOwotICAgIHJlc3VsdCA9IChy
ZXN1bHQgPDwgMzIpICsgKGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+c2l6ZSgpICsgMSk7
Ci0KLSAgICBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPnNldChuYW1lQXNDU3RyaW5nLCBy
ZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbikKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIEV4
dGVuc2lvbnMzRCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoYXR0cnMu
c3RlbmNpbCkgewotICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0
ZW5jaWxFeHRlbnNpb24pKSB7Ci0gICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRo
IGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KLSAgICAgICAgICAgIGF0dHJzLmRlcHRoID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgICAg
IHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLmFudGlh
bGlhcyAmJiAhbV9pc0ZvcldlYkdMMikgewotICAgICAgICBpZiAoIWV4dGVuc2lvbnMuc3VwcG9y
dHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpIHsKLSAgICAgICAgICAgIGF0
dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMo
YXR0cnMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5h
YmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLSAgICB9Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdl
QnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+
IHJvd0J5dGVzID0gQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRXaWR0aCkg
KiA0OwotICAgIGlmIChyb3dCeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSBy
b3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKLSAgICBpZiAodG90YWxCeXRlc0NoZWNrZWQuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSB0b3Rh
bEJ5dGVzQ2hlY2tlZC51bnNhZmVHZXQoKTsKLQotICAgIGF1dG8gcGl4ZWxzID0gbWFrZVVuaXF1
ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHRvdGFsQnl0ZXMpOwotICAgIGlmICghcGl4ZWxzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMuZ2V0KCksIHRv
dGFsQnl0ZXMpOwotCi0gICAgaWYgKCFjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRB
bHBoYSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkg
ewotICAgICAgICAgICAgLy8gUHJlbXVsdGlwbHkgYWxwaGEuCi0gICAgICAgICAgICBwaXhlbHNb
aSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1
NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSAr
IDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDJdID0g
c3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZSht
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXItPmludGVybmFsU2l6
ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBV
U0UoT1BFTkdMX0VTKQotICAgIHByZXNlbnRSZW5kZXJidWZmZXIoKTsKLSNlbmRpZgotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1h
Z2VCdWZmZXIqKQotewotICAgIC8vIE5vdCBuZWVkZWQgYXQgdGhlIG1vbWVudCwgc28gcmV0dXJu
IHRoYXQgbm90aGluZyB3YXMgZG9uZS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxJ
bWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpCi17Ci0gICAgLy8gUmVhZGluZyBwcmVtdWx0aXBsaWVkIGFscGhhIHdvdWxkIGludm9s
dmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMKLSAgICAvLyBsb3NzeS4KLSAgICBpZiAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBwaXhl
bHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRP
dmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSA0ICogQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJm
bG93PihtX2N1cnJlbnRXaWR0aCkgKiBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3Vy
cmVudEhlaWdodCk7Ci0gICAgaWYgKHRvdGFsQnl0ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLSAgICBpbnQgdG90YWxCeXRlcyA9IHRvdGFsQnl0
ZXNDaGVja2VkLnVuc2FmZUdldCgpOwotCi0gICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxz
LCB0b3RhbEJ5dGVzKTsKLQotICAgIC8vIENvbnZlcnQgdG8gUkdCQS4KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tp
XSwgcGl4ZWxzW2kgKyAyXSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21w
b3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
I2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGlu
ZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFy
eU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotI2VuZGlm
Ci0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCi0gICAgICAgIHJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAg
ICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotCi0gICAg
aWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsK
LSAgICBlbHNlCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICA6Omds
QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1fc3RhdGUuYm91bmRUYXJnZXQoR0xfVEVYVFVSRTApID09IEdMX1RFWFRVUkVfMkQg
PyBtX3N0YXRlLmJvdW5kVGV4dHVyZShHTF9URVhUVVJFMCkgOiAwKTsKLSAgICA6OmdsQWN0aXZl
VGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0KTsKLSAgICBpZiAobV9zdGF0ZS5ib3Vu
ZEZCTyAhPSBtX2ZibykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOwotICAgIDo6Z2xGbHVzaCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNp
Z25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaXplKQotewotICAgIGlmIChwaXhlbHNTaXpl
IDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8g
PSBmYWxzZTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKLSAgICAg
ICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAg
ICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1f
c3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0g
dHJ1ZTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGludCBw
YWNrQWxpZ25tZW50ID0gNDsKLSAgICBib29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZh
bHNlOwotICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1l
bnQpOwotICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkgewotICAgICAgICA6OmdsUGl4ZWxTdG9y
ZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOwotICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1l
bnQgPSB0cnVlOwotICAgIH0KLQotICAgIHJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNl
c3NhcnkoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgcGl4ZWxzKTsKLQot
ICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCi0gICAgICAgIDo6Z2xQaXhlbFN0b3Jl
aShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7Ci0KLSAgICBpZiAobXVzdFJlc3Rv
cmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCFwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh3aWR0aCA9
PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBoZWlnaHQgPj0gMCk7Ci0gICAgaWYg
KHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYXJrQ29u
dGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7Ci0gICAgbV9jdXJy
ZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdmFs
aWRhdGVBdHRyaWJ1dGVzKCk7Ci0KLSAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNj
aXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0gICAgCi0gICAgYm9vbCBt
dXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVGQk9zKEludFNpemUod2lkdGgsIGhlaWdodCkpOwotCi0g
ICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNv
bG9yW10gPSB7MCwgMCwgMCwgMH0sIGNsZWFyRGVwdGggPSAwOwotICAgIEdMaW50IGNsZWFyU3Rl
bmNpbCA9IDA7Ci0gICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUs
IEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVu
Y2lsTWFzayA9IDB4ZmZmZmZmZmYsIHN0ZW5jaWxNYXNrQmFjayA9IDB4ZmZmZmZmZmY7Ci0gICAg
R0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRG
bG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNv
bG9yKDAsIDAsIDAsIDApOwotICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ss
IGNvbG9yTWFzayk7Ci0gICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFKTsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0g
ICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xF
QVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
RGVwdGgoMSk7Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZk
ZXB0aE1hc2spOwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVh
ck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5j
aWwpIHsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZj
bGVhclN0ZW5jaWwpOwotICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6Omds
R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQq
Pigmc3RlbmNpbE1hc2spKTsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFD
S19XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7
Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsK
LSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgMHhmZmZmZmZmZik7Ci0g
ICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQotCi0gICAg
OjpnbENsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBd
LCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKLSAgICA6Omds
Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9y
TWFza1szXSk7Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRo
TWFzayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVh
clN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUo
R0xfQkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVG
Qk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybTNET2Jq
ZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7
Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7
Ci0gICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZl
cnRleFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFw
PFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5lZFZhcnlpbmdzOwotICAgIGZvciAo
Y29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50cnkudmFyeWluZ01hcCkgewotICAg
ICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0ZXhTeW1ib2wua2V5OwotICAgICAg
ICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFibGVzIGZvciBlYWNoIGluZGV4IG9m
IGFuIGFycmF5IHZhcmlhYmxlLgotICAgICAgICAvLyBXZSBvbmx5IHdhbnQgYSBzaW5nbGUgdmFy
aWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KLSAgICAgICAgaWYgKHN5bWJvbE5hbWUuZW5k
c1dpdGgoIl0iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIERvbid0IGNv
dW50IGJ1aWx0IGluIHZhcnlpbmdzLgotICAgICAgICBpZiAoc3ltYm9sTmFtZSA9PSAiZ2xfRnJh
Z0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZhY2luZyIgfHwgc3ltYm9sTmFtZSA9
PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25z
dCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50cnkudmFyeWluZ01hcC5maW5kKHN5
bWJvbE5hbWUpOwotICAgICAgICBpZiAoZnJhZ21lbnRTeW1ib2wgIT0gZnJhZ21lbnRFbnRyeS52
YXJ5aW5nTWFwLmVuZCgpKQotICAgICAgICAgICAgY29tYmluZWRWYXJ5aW5ncy5hZGQoc3ltYm9s
TmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbnVtVmFy
eWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKLSAgICBpZiAoIW51bVZhcnlpbmdzKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJs
ZT4gdmFyaWFibGVzOwotICAgIHZhcmlhYmxlcy5yZXNlcnZlKGNvbWJpbmVkVmFyeWluZ3Muc2l6
ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdTeW1ib2wgOiBjb21iaW5lZFZhcnlp
bmdzLnZhbHVlcygpKQotICAgICAgICB2YXJpYWJsZXMucHVzaF9iYWNrKHZhcnlpbmdTeW1ib2wp
OwotCi0gICAgR0MzRGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IDA7Ci0jaWYgVVNFKE9QRU5HTF9F
UykKLSAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdfVkVDVE9SUywgJm1heFZhcnlpbmdW
ZWN0b3JzKTsKLSNlbHNlCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOwotICAg
IGVsc2UgewotICAgICAgICBHQzNEaW50IG1heFZhcnlpbmdGbG9hdHMgPSAwOwotICAgICAgICA6
OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCAmbWF4VmFyeWluZ0Zsb2F0cyk7
Ci0gICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFyeWluZ0Zsb2F0cyAvIDQ7Ci0gICAg
fQotI2VuZGlmCi0gICAgcmV0dXJuIHNoOjpDaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1p
dHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxh
dGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFk
ZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVy
U291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVy
dGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwot
ICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZy
YWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OkdMZW51bT4g
dmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6
IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1h
cHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5tYXBwZWROYW1lOwotICAgICAgICB2ZXJ0ZXhTeW1ib2xQ
cmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVu
Z3RoKCkpLCBlbnRyeS52YWx1ZS5wcmVjaXNpb24pOwotICAgIH0KLQotICAgIGZvciAoY29uc3Qg
YXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5tYXBwZWROYW1lOwotICAgICAg
ICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmlu
ZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWROYW1lLmxlbmd0aCgpKSk7Ci0gICAg
ICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmVuZCgpICYm
IHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50cnkudmFsdWUucHJlY2lzaW9uKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JbnRTaXpl
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVy
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3N0YXRlLmFjdGl2ZVRleHR1
cmVVbml0ID0gdGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwot
ICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fc2hh
ZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKLSAgICA6OmdsQXR0YWNo
U2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotCi0gICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xO
YW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwotICAgIExP
RyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgOjpnbEJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGZibzsK
LSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxzZQotICAgICAg
ICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJP
IDogbV9mYm8pOwotICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZEZCTykgewotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3Vu
ZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5k
ZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUo
bV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKLSAgICA6OmdsQmlu
ZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBi
bHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJH
QiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVu
dW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRG
dW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdD
M0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0Fs
cGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXpl
LCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVu
dW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0Mz
RHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEp
OwotfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKFdQRSkKLXZvaWQqIEdyYXBo
aWNzQ29udGV4dDNEOjptYXBCdWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIg
b2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsTWFwQnVmZmVyUmFuZ2UodGFy
Z2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0M0Q6OnVubWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbFVubWFwQnVmZmVyKHRhcmdldCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJn
ZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRw
dHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdl
dCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCog
cGFyYW1zKQotewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbEdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5h
bWUsIGJ1ZlNpemUsIHBhcmFtcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwot
ICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1l
KTsKLSAgICBVTlVTRURfUEFSQU0oYnVmU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtcyk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIHNhbXBsZXMsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJl
bnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3Jh
Z2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0
aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4U3RvcmFnZTNEKHRh
cmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwotICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJl
KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQzNEdWludD4mIHVuaWZvcm1JbmRp
Y2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+JiBwYXJhbXMpCi17Ci0gICAgQVNT
RVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgOjpnbEdldEFj
dGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5k
aWNlcy5kYXRhKCksIHBuYW1lLCBwYXJhbXMuZGF0YSgpKTsKLX0KLSNlbmRpZgotCi1HQzNEZW51
bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJn
ZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0Mz
RGNsYW1wZiBhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhckNv
bG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNE
Yml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xl
YXIobWFzayk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xl
YW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNo
aW5nIHdvcmtzLCB3ZQotICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBv
d25lZCBieSB0aGlzIGNvbnRleHQuCi0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3Vy
Y2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICBTaEhhc2hGdW5jdGlvbjY0IHBy
ZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uOwotICAgIEFO
R0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNoRm9yU2hhZGVyOwotCi0gICAgaWYg
KCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9
IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAgc2V0Q3VycmVudE5hbWVIYXNoTWFw
Rm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7Ci0gICAgbV9jb21waWxlci5z
ZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShz
aGFkZXIpOwotCi0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gcHJldmlvdXNIYXNo
RnVuY3Rpb247Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwot
ICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKLQotICAgIGlmICgh
dHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVy
U291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJh
bnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOwotICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVu
Z3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBMT0coV2ViR0ws
ICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIG9yaWdp
bmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gdHJhbnNsYXRlZCBzaGFkZXIgc291
cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLSIsIHRyYW5z
bGF0ZWRTaGFkZXJQdHIpOwotCi0gICAgOjpnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZ0cmFu
c2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxlbmd0aCk7Ci0gICAgCi0gICAgOjpn
bENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICAKLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLSAg
ICAKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVT
dGF0dXMpOwotCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNv
dXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICAvLyBQb3B1bGF0ZSB0aGUg
c2hhZGVyIGxvZwotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAgIGlmIChsZW5ndGgpIHsK
LSAgICAgICAgR0xzaXplaSBzaXplID0gMDsKLSAgICAgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhs
ZW5ndGgpOwotICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNp
emUsIGluZm8uZGF0YSgpKTsKLQotICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0g
PSB7IHNoYWRlciwgMCB9OwotICAgICAgICBlbnRyeS5sb2cgPSBnZXRVbm1hbmdsZWRJbmZvTG9n
KHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotICAgIH0KLQotICAgIGlm
IChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKLSAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZh
bHNlOwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hhZGVyIHRyYW5zbGF0b3IgcHJvZHVj
ZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNvbXBpbGUuIik7Ci0gICAgfQotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRy
eT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQot
ICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0KLSAg
ICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5nID0gZW50cnkuc291cmNlLnV0Zjgo
KTsKLSAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIgPSBzaGFkZXJTb3VyY2VDU3RyaW5n
LmRhdGEoKTsKLSAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3RoID0gc2hhZGVyU291cmNlQ1N0cmlu
Zy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBkaXJlY3Qgc2hhZGVyIHNv
dXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIgc291cmNlIC0tLVxuIiwgc2hhZGVy
U291cmNlUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc2hhZGVyU291
cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKLQotICAgIDo6Z2xDb21waWxlU2hhZGVyKHNo
YWRlcik7Ci0KLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLQotICAgIDo6Z2xHZXRTaGFkZXJpdihz
aGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7Ci0KLSAgICBpZiAoY29tcGls
ZVN0YXR1cyA9PSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOwotICAg
ICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIHN1Y2NlZWRlZC4i
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAg
IExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRpb24gb2Ygc2hhZGVyIGZhaWxlZC4i
KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGF1dG8gYXR0
cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBt
X3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChh
dHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQot
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNv
cHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuYW50
aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAg
ICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1w
bGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
cHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5y
ZW1vdmUocHJvZ3JhbSk7Ci0gICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGlzYWJsZShjYXApOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5k
ZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJh
eXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBj
b3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxH
THZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotICAgIGNoZWNrR1BVU3Rh
dHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXAp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEVuYWJsZShjYXApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWlu
dCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmaW5p
c2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGaW5pc2goKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Ci19Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBp
ZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXpl
KTsKLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJ
VkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBH
THNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0
eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhBdHRy
aWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Ci0gICAg
aWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgU3RyaW5n
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9M
X1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAK
LSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1l
TGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIGF0
dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFt
ZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQot
ICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdDM0RpbnQgc3ltYm9sQ291bnQ7
Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHBy
b2dyYW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAu
ZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dyYW0s
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUywgJnN5bWJvbENvdW50KTsKLSAg
ICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3Vu
dHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdDM0R1aW50IHJhd0luZGV4ID0gKGluZGV4IDwgc3lt
Ym9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5zaXplKCkpID8gc3lt
Ym9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcFtpbmRleF0gOiAtMTsK
LQotICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZv
KTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykK
LXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9y
bVNpemUpOwotCi0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdM
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAg
ICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51
bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4
VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAg
ICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBTdHJp
bmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1C
T0xfVFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCksIG5hbWVMZW5ndGgpKTsKLSAgICAK
LSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZGF0YSgpLCBuYW1l
TGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVu
aWZvcm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUu
dXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAg
Ci0gICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0g
ICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdD
M0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIEdDM0RpbnQgc3ltYm9sQ291
bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5k
KHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KHByb2dy
YW0sIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZzeW1ib2xDb3VudCk7Ci0g
ICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3Jh
bSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291
bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQzNEdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5
bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUoKSkgPyBzeW1i
b2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcFtpbmRleF0gOiAtMTsKLSAg
ICAKLSAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwocHJvZ3JhbSwgcmF3SW5kZXgsIGlu
Zm8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291
bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKLX0KLQotc3RhdGljIFN0
cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChu
YW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgdWludDY0X3QgbnVtYmVy
ID0gbmFtZUhhc2hGb3JTaGFkZXIobmFtZS51dGY4KCkuZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsK
LSAgICByZXR1cm4gbWFrZVN0cmluZygid2ViZ2xfIiwgaGV4KG51bWJlciwgTG93ZXJjYXNlKSk7
Ci19Ci0KLU9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0M0Q6Om1hcHBlZFN5bWJvbElu
U2hhZGVyU291cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBBTkdMRVNoYWRlclN5bWJv
bFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGF1dG8gcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9z
aGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVlLnN5bWJvbE1hcChzeW1ib2xU
eXBlKTsKLSAgICBhdXRvIHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZpbmQobmFtZSk7Ci0gICAg
aWYgKHN5bWJvbEVudHJ5ID09IHN5bWJvbE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIGF1dG8mIG1hcHBlZE5hbWUgPSBzeW1ib2xFbnRyeS0+dmFsdWUubWFw
cGVkTmFtZTsKLSAgICByZXR1cm4gU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFt
ZS5sZW5ndGgoKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6bWFwcGVkU3ltYm9s
TmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1i
b2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0MzRHNpemVpIGNvdW50ID0gMDsK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07Ci0gICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICBmb3IgKEdDM0RzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tpXSwgc3ltYm9sVHlwZSwgbmFtZSk7
Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUu
dmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0
ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2Vk
U2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRl
ck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVl
OwotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG1h
cHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOwotICAgICAg
ICBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVy
cy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAobWFwcGVkTmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5
bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5
IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAg
ICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVy
IHByb2dyYW0uCi0gICAgICAgIGlmICghbmFtZUhhc2hNYXBGb3JTaGFkZXJzKQotICAgICAgICAg
ICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsK
LSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hh
ZGVycy5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBnZW5lcmF0ZWROYW1lID0gZ2VuZXJhdGVIYXNo
ZWROYW1lKG5hbWUpOwotCi0gICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihu
dWxscHRyKTsKLQotICAgICAgICBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLnNldChnZW5l
cmF0ZWROYW1lLCBuYW1lKTsKLQotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkTmFtZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotT3B0aW9uYWw8U3RyaW5nPiBHcmFwaGljc0NvbnRl
eHQzRDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
LSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52
YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzeW1ib2xF
bnRyeSA6IHN5bWJvbE1hcCkgewotICAgICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1
ZS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5
OwotICAgIH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1TdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0Q6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFO
R0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgR0MzRHNpemVpIGNvdW50OwotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXTsKLSAg
ICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLSAgICAK
LSAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgYXV0
byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNb
aV0sIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQotICAgICAg
ICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwotICAgIH0KLQotICAgIC8vIFdlIG1p
Z2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hhZGVycyBhZnRlciBsaW5raW5nLgot
ICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAuZmluZChwcm9ncmFtKTsKLSAgICBp
ZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgpKSB7Ci0gICAgICAgIGF1dG8gbGlu
a2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0g
b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1i
b2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKLSAgICAgICAgICAgIHJl
dHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICAgICAgb3JpZ2luYWxOYW1lID0gb3JpZ2lu
YWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLnNlY29uZCwgc3ltYm9sVHlw
ZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpCi0gICAgICAgICAgICByZXR1cm4g
b3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
Ly8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBi
ZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVkLAotICAgICAgICAvLyBhbmQgYXJl
bid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCi0KLSAg
ICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5m
aW5kKG5hbWUpOwotICAgICAgICBpZiAoY2FjaGVkICE9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1
dGVNYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkLT52YWx1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbmFtZTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjptYXBwZWRT
eW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50LCBjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3Qgc3ltYm9sVHlwZSA9IDA7IHN5bWJv
bFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJfU1lNQk9MX1RZUEVfVkFSWUlORyk7
ICsrc3ltYm9sVHlwZSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFw
ID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nhc3Q8ZW51bSBBTkdMRVNoYWRlclN5
bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3lt
Ym9sRW50cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBzeW1i
b2xFbnRyeS52YWx1ZS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG5hbWU7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9j
YXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9n
cmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKLSAgICBMT0coV2ViR0ws
ICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWlu
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQot
ICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHJl
dHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBib29sIG1vdmVkQW5FcnJv
ciA9IGZhbHNlOwotCi0gICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0
byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKLSAgICAvLyBhIHByb2JsZW0gZHJpdmVyIGhhcyBh
IGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0aGUgZXJyb3IuCi0gICAgLy8gT3Ro
ZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2UgZ290IE5PX0VSUk9SLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAgICAgICBHQzNEZW51bSBlcnJv
ciA9IGdsR2V0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7Ci0gICAg
ICAgIG1vdmVkQW5FcnJvciA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1vdmVkQW5FcnJv
cjsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICBp
ZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBOZWVkIHRvIG1v
dmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNl
Ci0gICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVj
dGVkIGJlaGF2aW9yIG9mIGJvdGgKLSAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3Ig
aXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCi0gICAgICAgIG1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJv
cnMudGFrZUZpcnN0KCk7Ci0gICAgfQotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
cmV0dXJuIDo6Z2xHZXRFcnJvcigpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsSGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQz
RDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFt
ZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFM
U0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzRnJhbWVi
dWZmZXJFWFQoZnJhbWVidWZmZXIpOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQz
RDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dy
YW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOwotfQotCi1HQzNEYm9vbGVhbiBH
cmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJi
dWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxT
RTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNSZW5kZXJi
dWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIGlmICghc2hhZGVy
KQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Ci19Ci0KLUdDM0Rib29sZWFuIEdyYXBo
aWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAg
IGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBHQzNEc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1sy
XSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFk
ZXJzKTsKLQotICAgIGlmIChjb3VudCA9PSAyKQotICAgICAgICBtX2xpbmtlZFNoYWRlck1hcC5z
ZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1swXSwgc2hhZGVyc1sxXSkpOwotCi0g
ICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9y
LCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFs
dWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBBU1NFUlQoc2hh
ZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU2hhZGVyU291cmNlRW50
cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBzdHJpbmc7Ci0KLSAgICBtX3NoYWRlclNv
dXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCBy
ZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xTdGVuY2lsRnVuY1Nl
cGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUo
ZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcChHQzNE
ZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBm
YWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFy
YW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHZhbHVlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKHRhcmdl
dCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlm
b3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9h
dCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0yZnYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxv
YXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0zZihs
b2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9hdCog
YXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0zZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQg
djIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNv
bnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVu
aWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjApCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBH
QzNEaW50KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVs
dGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJp
dihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRGlu
dCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTNpKGxv
Y2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJy
YXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMu
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0zaXYobG9jYXRpb24s
IHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIsIEdDM0Rp
bnQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00aShs
b2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50
KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRpdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBh
IG11bHRpcGxlIG9mIDkuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogYXJy
YXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgs
IHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1
aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNE
ZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZlcnRleEF0
dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5k
ZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIs
IEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVy
dGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBl
LCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRyIG9m
ZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmli
UG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJl
dF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi1QbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGFycmF5ID0gMDsKLSNpZiAoIVVTRShP
UEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9S
TShDT0NPQSkKLSAgICA6OmdsR2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gYXJyYXk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVZlcnRl
eEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmICghVVNFKE9Q
RU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JN
KENPQ09BKQotICAgIDo6Z2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKLSNlbmRpZgot
fQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9y
bTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9G
QUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAoIVVTRShPUEVOR0xf
RVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NP
QSkKLSAgICByZXR1cm4gOjpnbElzVmVydGV4QXJyYXkoYXJyYXkpOwotI2VuZGlmCi0gICAgcmV0
dXJuIEdMX0ZBTFNFOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVmVydGV4QXJy
YXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikp
KSB8fCBQTEFURk9STShDT0NPQSkKLSAgICA6OmdsQmluZFZlcnRleEFycmF5KGFycmF5KTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKGFycmF5KTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRCb29sZWFudihwbmFt
ZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0
ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRG
bG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotfQotICAgIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcjY0dihHQzNEZW51bSBwbmFtZSwgR0Mz
RGludDY0KiB2YWx1ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgICp2YWx1ZSA9IDA7Ci0gICAgLy8gRklYTUUgMTQxMTc4OiBCZWZv
cmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5o
IGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3Bl
bkdMIEVTIDMuMC4KLSAgICAvLyA6OmdsR2V0SW50ZWdlcjY0dihwbmFtZSwgdmFsdWUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAo
YXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCi0gICAgICAgIGF0dGFjaG1l
bnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3
b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFy
Z2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJU
KEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7
Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291
bnRGb3JUeXBlKHBuYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2hhZGVy
UHJvZ3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBBY3RpdmVTaGFkZXJTeW1ib2xDb3Vu
dHMoKSk7Ci0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSBtX3No
YWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pLT52YWx1ZTsKLQotICAgIC8v
IFJldHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVpbGQgYSBmaWx0ZXJlZCBjb3VudCwg
YW5kIGEgbWFwcGluZyBvZgotICAgIC8vIG91ciBpbnRlcm5hbCBhdHRyaWJ1dGVzIGluZGV4ZXMg
dG8gdGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lkZSBPcGVuR0wuCi0gICAgR0MzRGlu
dCBhdHRyaWJ1dGVDb3VudCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBBQ1RJ
VkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7
IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAg
ICAgICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKLSAgICAgICAgaWYg
KGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuYXBw
ZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdW5pZm9ybXMuCi0g
ICAgR0MzRGludCB1bmlmb3JtQ291bnQgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgQUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9
IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0g
ICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGksIGluZm8pOwotICAgICAgICBp
ZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIAotICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRl
eE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgICp2YWx1ZSA9IHN5bWJvbENvdW50cy5j
b3VudEZvclR5cGUocG5hbWUpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
bWFuZ2xlZEluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdLCBHQzNEc2l6ZWkgY291
bnQsIGNvbnN0IFN0cmluZyYgbG9nKQotewotICAgIExPRyhXZWJHTCwgIk9yaWdpbmFsIFNoYWRl
ckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsKLQotICAgIEpTQzo6WWFycjo6UmVn
dWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRl0rIik7
Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKLSAgICAKLSAgICAvLyBBTkdMRSBp
bnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUgc2hhZGVyIHNvdXJjZSB0aGF0Ci0g
ICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBpbGVycy4gVGhlcmUgaXMgbm8gcG9p
bnQgc2hvd2luZwotICAgIC8vIHRoaXMgd2FybmluZyB0byB0aGUgdXNlciBzaW5jZSB0aGV5IGRp
ZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0Ci0gICAgLy8gaXMgY2F1c2luZyBpdC4KLSAgICBzdGF0
aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmdsZVdhcm5pbmcgeyAiV0FSTklORzog
MDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScgaXMgbm90IHN1cHBvcnRlZFxuIl9z
IH07Ci0gICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNXaXRoKGFuZ2xlV2FybmluZykgPyBh
bmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwotICAgIGludCBtYXRjaGVkTGVuZ3RoID0g
MDsKLQotICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gcmVnRXhwLm1hdGNoKGxvZywgc3Rh
cnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7Ci0gICAgICAgIGlmIChzdGFydCA9PSAtMSkKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobG9nLnN1YnN0cmlu
ZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7Ci0gICAgICAgIHN0YXJ0RnJvbSA9IHN0
YXJ0ICsgbWF0Y2hlZExlbmd0aDsKLQotICAgICAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWRTeW1i
b2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVuZ3RoKTsKLSAgICAgICAgY29uc3Qg
U3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xOYW1lKHNoYWRlcnMsIGNvdW50LCBt
YW5nbGVkU3ltYm9sKTsKLSAgICAgICAgTE9HKFdlYkdMLCAiRGVtYW5nbGluZzogJXMgdG8gJXMi
LCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBlZFN5bWJvbC51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBwZWRTeW1ib2wpOwotICAgIH0gd2hp
bGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9nLmxlbmd0aCgpKSk7Ci0KLSAgICBw
cm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBsb2cubGVuZ3RoKCkg
LSBzdGFydEZyb20pKTsKLQotICAgIExPRyhXZWJHTCwgIlVubWFuZ2xlZCBTaGFkZXJJbmZvTG9n
OlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1
cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIEFT
U0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IGxl
bmd0aCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5H
VEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0
aCk7Ci0gICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGlu
Zm8uZGF0YSgpKTsKLQotICAgIEdDM0RzaXplaSBjb3VudDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwg
c2hhZGVycyk7Ci0KLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCBjb3Vu
dCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGNvbnN0IGF1dG8m
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0
Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBERUxFVEVfU1RBVFVTOgotICAgIGNhc2UgU0hBREVSX1RZ
UEU6Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRp
Y19jYXN0PGludD4oZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0LT52YWx1ZS5pc1ZhbGlkKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJTkZPX0xPR19MRU5HVEg6Ci0gICAgICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICp2YWx1ZSA9IDA7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgKnZhbHVlID0gZ2V0U2hh
ZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNI
QURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICAqdmFsdWUgPSBnZXRTaGFkZXJTb3VyY2Uoc2hh
ZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsK
LSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAg
Y29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsgCi0KLSAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQt
PnZhbHVlOwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIGVudHJ5Lmxv
ZzsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwg
R0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdM
Y2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbGVu
Z3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJz
WzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFk
ZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGNv
bnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7IAotCi0gICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUuc291cmNlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2Nh
dGlvbiwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1
ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0VW5pZm9ybWl2KHBy
b2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFt
LCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpn
ZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEo
KSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLX0K
LQotR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAgICA6OmdsR2V0VmVydGV4QXR0cmli
UG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2ZmLCBHQzNEaW50IHlvZmYsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25z
dCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSNpZiAhVVNF
KE9QRU5HTF9FUykKLSAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKLSAgICAgICAgdHlw
ZSA9IEdMX0hBTEZfRkxPQVRfQVJCOwotI2VuZGlmCi0KLSAgICBpZiAobV91c2luZ0NvcmVQcm9m
aWxlKSAgewotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdmFsdWVzIHVzZWQgaW4g
V2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29yZSBwcm9maWxlLCBzbyB3
ZSBuZWVkCi0gICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFzIHdlIGRvIGluIEdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKCkuCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAg
IGNhc2UgQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkVEIHRvIGJhY2sg
R0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAgICAgICAgICAgIGZvcm1hdCA9IFJF
RDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKLSAg
ICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBiYWNrIEdMX0xVTUlOQU5DRV9BTFBI
QSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgotICAgICAgICAgICAgZm9ybWF0ID0gUkc7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGgg
UGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRp
ZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgotICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
KTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5k
VGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsK
LSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1h
Z2VTaXplLCBkYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKLSAgICByZXR1cm4gbzsK
LX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZm
ZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAg
ICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKLX0KLQot
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xH
ZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0
eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhf
U0hBREVSKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
VGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IG8gPSAw
OwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVi
dWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGZyYW1lYnVmZmVy
ID09IG1fc3RhdGUuYm91bmRGQk8pIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZWJ1
ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZwotICAgICAgICAvLyBvcGVy
YXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4KLSAgICAgICAgYmluZEZyYW1lYnVmZmVyKEZS
QU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJmZy
YW1lYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwotICAgIGds
RGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVu
ZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJl
XSAoYXV0byYga2V5VmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0
ID09IHRleHR1cmU7Ci0gICAgfSk7Ci0gICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmdGV4dHVyZSk7
Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92ZUFsbCh0ZXh0dXJlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3Ip
Ci17Ci0gICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhl
dGljIGVycm9yIGxpc3QgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXJyb3JzLCBz
byBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAotICAgIC8vIGFueSBlcnJvcnMgZnJvbSBn
bEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KLSAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQot
ewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0g
dHJ1ZTsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykp
Ci0gICAgICAgIGNsaWVudC0+ZGlkQ29tcG9zaXRlKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21w
b3NpdGVkOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmb3JjZUNvbnRleHRMb3N0KCkK
LXsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAg
ICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVjeWNsZUNvbnRleHQoKQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRv
VmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNh
dGlvbigpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRz
KSkKLSAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3QoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1j
b3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUs
IEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0Rz
aXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3Rh
bmNlZChtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BV
U3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYkRpdmlz
b3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAgZ2V0RXh0ZW5zaW9u
cygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotfQotCi0jaWYgVVNFKE9Q
RU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByaW1pdGl2
ZVJlc3RhcnRJbmRleChHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGluZGV4KTsKLX0KLSNlbmRpZgotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wp
IHx8IFVTRShPUEVOR0xfRVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjY4MjFjYTZmZDgzMzgxNWIzYjgz
YWMyZGY3NTM4MDI2MTQ4NjMzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxNCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8z
RCkgJiYgVVNFKE9QRU5HTF9FUykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMu
aCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0KLSNpbmNsdWRlIDxBTkdMRS9TaGFkZXJMYW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsUmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhl
bHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKLQotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdo
ZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0gICAgLy8gYWxsIHByZXZpb3VzIHJl
bmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAg
OjpnbEZsdXNoKCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICA6OmdsRmx1
c2goKTsKLSAgICB9Ci0KLSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1f
c3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykK
LXsKLSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWln
aHQgKiA0OwotICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgICAgICBzdGQ6OnN3YXAocGl4
ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBCR1JBLgotICAgIH0KLX0KLQot
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgY29uc3QgaW50IGhl
aWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMDsKLSAgICBh
dXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0
ZXMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAg
ICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faW50
ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7
Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwg
aXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0
M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLSAgICBib29sIHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5j
aWxCdWZmZXIgPSAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpICYmIGdl
dEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0K
LSAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZh
bHNlOwotICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgIG11c3RS
ZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgbV9mYm8pOwotICAgIH0KLQotICAgIEFTU0VSVChtX3RleHR1cmUpOwotICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZl
clRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRV
UkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICA6OmdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICAgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIH0KLQotICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
MCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCAwKTsKLSNlbmRpZgotCi0gICAgRXh0ZW5zaW9uczNET3BlbkdMRVMm
IGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RPcGVuR0xFUyY+KGdldEV4dGVu
c2lvbnMoKSk7Ci0gICAgaWYgKGV4dGVuc2lvbnMuaXNJbWFnaW5hdGlvbigpICYmIGF0dHJpYnV0
ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OwotICAgICAgICA6
OmdsR2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FNUExFU19JTUcsICZtYXhTYW1wbGVD
b3VudCk7IAotICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBs
ZUNvdW50KTsKLQotICAgICAgICBleHRlbnNpb25zLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlz
YW1wbGVJTUcoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUsIDAsIHNhbXBsZUNvdW50KTsKLQotICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgICAgIC8vIFVzZSBhIDI0
IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgotICAgICAgICAgICAg
aWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKLSAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
Uywgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCkKLSAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQot
ICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICAg
ICAgZXh0ZW5zaW9ucy5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZm
ZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5k
ZXB0aCkgewotICAgICAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5E
RVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25z
LnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNv
dW50LCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAg
ICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQ
VEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
cihHTF9SRU5ERVJCVUZGRVIsIDApOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgICAg
ICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4K
LSAgICAgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0gICAg
ICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgICAgICAg
ICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FU
VEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZF
UiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fc3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
KEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgICAgIDo6
Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5U
MTYsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRF
UkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZS
QU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAvLyBGSVhN
RTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIHJldHVy
biBtdXN0UmVzdG9yZUZCTzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTog
V2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0LgotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xSZW5k
ZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdl
dEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVj
aXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQotewotICAgIEFT
U0VSVChyYW5nZSk7Ci0gICAgQVNTRVJUKHByZWNpc2lvbik7Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHBy
ZWNpc2lvblR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKQotewotICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0
ZXMoKQotewotICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0
ZW5jaWwiKTsKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0K
LSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgIWdldEV4dGVuc2lvbnMoKS5zdXBwb3J0
cygiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpKSB7Ci0gICAgICAgIGF0
dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhS
YW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7Ci19Ci0K
LSNpZiAhUExBVEZPUk0oR1RLKQotRXh0ZW5zaW9uczNEJiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5z
aW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMRVM+KHRoaXMsIGlzR0xFUzJDb21w
bGlhbnQoKSk7Ci0gICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Ci19Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKFdJTikgJiYgVVNFKENBKQotUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVz
LCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24g
ZGVzdGluYXRpb24pCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJl
bnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KLSAgICBp
ZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9
IGZhbHNlOwotICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGlmICghaW5pdGlh
bGl6ZWQpIHsKLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxp
emVPcGVuR0xTaGltcygpOwotI2VuZGlmCi0gICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RX
aW5kb3csIHJlbmRlclN0eWxlKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRv
dyosIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3ND
b250ZXh0M0QqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHQzREJhc2UoYXR0
cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCi0gICAgLCBtX2NvbXBpbGVyKGlz
R0xFUzJDb21wbGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDogU0hfR0xTTF9DT01QQVRJQklMSVRZ
X09VVFBVVCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZT4odGhpcywgZGVzdGluYXRpb24pKQotewotICAgIEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29u
dGV4dCwgIXNoYXJlZENvbnRleHQpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIAot
ICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCi0KLSAg
ICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgewotICAgICAgICAv
LyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgotICAgICAgICA6OmdsR2VuVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBtX3RleHR1cmUpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAg
ICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICAgICAgCi0gICAgICAgIC8vIENyZWF0
ZSBhbiBGQk8uCi0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICAK
LSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwotICAgICAgICBpZiAoIWF0dHJpYnV0
ZXMuYW50aWFsaWFzICYmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkp
Ci0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgICAgICAKLSAgICAgICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgotICAg
ICAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgICAgIDo6Z2xHZW5GcmFt
ZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgICAgICBt
X3N0YXRlLmJvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAgICAgIDo6Z2xHZW5S
ZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAg
ICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlv
bi4KLSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7Ci0gICAgU2hJbml0QnVp
bHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotICAgIAotICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhW
ZXJ0ZXhBdHRyaWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZF
Q1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZB
TkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5N
YXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKLSAgICAKLSAgICAvLyBBbHdheXMgc2V0IHRvIDEg
Zm9yIE9wZW5HTCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0g
ICAgCi0gICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwotICAgIGdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIEFOR0xFUmVzb3Vy
Y2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVj
aXNpb24pOwotICAgIAotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKLSAgICAKLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9Q
Uk9HUkFNX1BPSU5UX1NJWkUpOwotICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKLSNl
bmRpZgotICAgIAotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotfQotCi1HcmFwaGlj
c0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSAgICBhdXRv
IGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMu
YW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0
dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIDo6Z2xEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIDo6
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQot
ICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8Q29udGV4
dExvc3RDYWxsYmFjaz4pCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9y
TWVzc2FnZUNhbGxiYWNrKHN0ZDo6dW5pcXVlX3B0cjxFcnJvck1lc3NhZ2VDYWxsYmFjaz4pCi17
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0g
ICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2hlY2tHUFVTdGF0dXMoKQotewotfQotCi1QbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV90ZXh0dXJlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50
KCkgY29uc3QKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotUGxhdGZvcm1MYXllciogR3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3dlYkdMTGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKTsKLX0KLSNlbmRpZgotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
R1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKE9QRU5HTF9FUykgJiYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
YjMzNjExODBiMWIyYmE2ZTkxMmU0MGRkMjE1M2I0ZmQzNGI0MDU2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmNwcApAQCAtMCwwICsxLDUzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBNb3ppbGxhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKKworI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgorI2luY2x1ZGUgIkZv
cm1hdENvbnZlcnRlci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCisjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJh
eS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK0dyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFGb3JtYXQoR0MzRGVudW0gZGVzdGluYXRpb25Gb3Jt
YXQsIEdDM0RlbnVtIGRlc3RpbmF0aW9uVHlwZSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
QTg7CisgICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0
KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6
CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
TFVNSU5BTkNFOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlI4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6CisgICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgIGRzdEZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjU2NTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICAgICAgc3dpdGNo
IChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAg
ICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2
RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
UkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTUkdCX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNf
dGV4dHVyZV9mbG9hdAorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICAgICAgICAgIGRz
dEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAg
ICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkY7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVN
SU5BTkNFOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlIzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6CisgICAgICAg
ICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBkc3RGb3Jt
YXQ7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgR0MzRGludCB1bnBhY2tBbGlnbm1lbnQpCit7CisgICAgQVNTRVJUKHVucGFja0FsaWdubWVu
dCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVucGFja0FsaWdubWVudCA9PSA0IHx8
IHVucGFja0FsaWdubWVudCA9PSA4KTsKKyAgICBVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPiB6
ZXJvOworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkgeworICAgICAgICB1bnNpZ25l
ZCBzaXplOworICAgICAgICBHQzNEZW51bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgbnVs
bHB0cik7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1Ip
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVu
c2lnbmVkIGNoYXI+KHNpemUpOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtZW1zZXQoemVyby5nZXQo
KSwgMCwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgemVy
by5nZXQoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXB1dGVGb3Jt
YXRBbmRUeXBlUGFyYW1ldGVycyhHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHVuc2ln
bmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsIHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCkKK3sK
KyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFO
Q0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CisgICAgICAgICpjb21wb25lbnRz
UGVyUGl4ZWwgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgKmNvbXBvbmVudHNQ
ZXJQaXhlbCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAz
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQ
aXhlbCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXpl
b2YoR0MzRHVieXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6QllURToKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RieXRlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hP
UlQ6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdXNob3J0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQ6CisgICAgICAg
ICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEc2hvcnQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgICpjb21w
b25lbnRzUGVyUGl4ZWwgPSAxOworICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2Yo
R0MzRHVzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9JTlRfMTBGXzExRl8xMUZfUkVWOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Cisg
ICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdWludCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAg
KmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOgorICAgICAgICAqYnl0ZXNQZXJDb21wb25l
bnQgPSBzaXplb2YoR0MzRGludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAgICAgICAqYnl0ZXNQZXJD
b21wb25lbnQgPSBzaXplb2YoR0MzRGZsb2F0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgICAgICAqYnl0
ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGhhbGZmbG9hdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JF
VjoKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0RmbG9hdCkgKyBzaXpl
b2YoR0MzRHVpbnQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChHQzNE
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0mIGZvcm1hdCwgR0MzRGVudW0mIHR5cGUpCit7
CisjZGVmaW5lIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoaW50ZXJuYWxGb3JtYXRNYWNybywg
Zm9ybWF0TWFjcm8sIHR5cGVNYWNybykgY2FzZSBpbnRlcm5hbEZvcm1hdE1hY3JvOiBcCisgICAg
ICAgIGZvcm1hdCA9IGZvcm1hdE1hY3JvOyBcCisgICAgICAgIHR5cGUgPSBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dHlwZU1hY3JvOyBcCisgICAgICAgIGJyZWFrOworCisgICAgc3dpdGNoIChp
bnRlcm5hbEZvcm1hdCkgeworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlJHQiAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAg
ICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6TFVNSU5BTkNFX0FMUEhBICAgLCBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhB
LCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRSAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OkxVTUlOQU5DRSAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpBTFBI
QSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQSAgICAgICAgICAsIFVOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UjggICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkVEICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4X1NOT1JNICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRCAgICAgICAgICAgICwgQllURSAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpSMTZGICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQg
ICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjMyRiAgICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6UkVEICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OlI4VUkgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VS
ICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSOEkgICAgICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UjE2VUkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBV
TlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkkgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSSAg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVE
X0lOVCAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6UjMySSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkVEX0lOVEVHRVIgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHOCAgICAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAgICwgVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSRzhfU05PUk0gICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRyAgICAg
ICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkcxNkYgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkcgICAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlJHMzJGICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAgICAg
ICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSSAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6Ukc4
SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBCWVRF
ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKKyAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SSAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFNIT1JUICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UkczMlVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6Ukdf
SU5URUdFUiAgICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgSU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0I4ICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAg
ICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6U1JHQjggICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjU2NSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwg
VU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4X1NOT1JNICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0IgICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjExRl9H
MTFGX0IxMEYgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJR05F
RF9JTlRfMTBGXzExRl8xMUZfUkVWICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjlfRTUgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfSU5UXzVfOV85XzlfUkVWICAgICAgKTsKKyAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkYgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6UkdCMzJGICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAg
ICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhVSSAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpSR0I4SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAg
ICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZVSSAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAg
ICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjE2SSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwgU0hP
UlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMlVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JfSU5URUdFUiAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Cisg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJJICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBJTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkE4ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTggICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQThfU05PUk0gICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAg
ICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjVfQTEgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNV81XzVfMSAg
ICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBNCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAs
IFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTIgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICAp
OworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEx
NkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgSEFMRl9G
TE9BVCAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSSAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkE4SSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFf
SU5URUdFUiAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0lOVF8yXzEwXzEw
XzEwX1JFViAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTE2VUkgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VS
ICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkkgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBMzJJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAsIElO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUkgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOwor
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVDE2ICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgVU5TSUdORURf
U0hPUlQgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7CisgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5U
MjQgLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5ULCBVTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NP
TVBPTkVOVCwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAsIFVOU0lHTkVEX0lOVF8yNF84ICAgICAg
ICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6REVQVEgyNF9TVEVOQ0lMOCAgLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCAg
LCBVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4ICwgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX1NURU5DSUwgICwgRkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVW
KTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQg
ICAgICAgICAgICAgICAsIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQgICAgICAgICAgICAsIFVOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUICAgICAgICAgLCBFeHRlbnNpb25zR0w6OlNS
R0JfQUxQSEFfRVhUICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjdW5kZWYgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dDM0RlbnVtIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBhbGlnbm1lbnQsIHVuc2lnbmVkKiBpbWFnZVNpemVJbkJ5dGVzLCB1bnNpZ25lZCogcGFk
ZGluZ0luQnl0ZXMpCit7CisgICAgQVNTRVJUKGltYWdlU2l6ZUluQnl0ZXMpOworICAgIEFTU0VS
VChhbGlnbm1lbnQgPT0gMSB8fCBhbGlnbm1lbnQgPT0gMiB8fCBhbGlnbm1lbnQgPT0gNCB8fCBh
bGlnbm1lbnQgPT0gOCk7CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgdW5zaWduZWQg
Ynl0ZXNQZXJDb21wb25lbnQ7CisgICAgdW5zaWduZWQgY29tcG9uZW50c1BlclBpeGVsOworICAg
IGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwgJmNvbXBv
bmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU07CisgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7
CisgICAgICAgICppbWFnZVNpemVJbkJ5dGVzID0gMDsKKyAgICAgICAgaWYgKHBhZGRpbmdJbkJ5
dGVzKQorICAgICAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gMDsKKyAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKKyAgICB9CisgICAgQ2hlY2tlZDx1aW50MzJfdCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRWYWx1ZSA9IGJ5dGVzUGVyQ29tcG9uZW50ICogY29tcG9u
ZW50c1BlclBpeGVsOworICAgIGNoZWNrZWRWYWx1ZSAqPSAgd2lkdGg7CisgICAgaWYgKGNoZWNr
ZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRTsKKyAgICB1bnNpZ25lZCB2YWxpZFJvd1NpemUgPSBjaGVja2VkVmFs
dWUudW5zYWZlR2V0KCk7CisgICAgdW5zaWduZWQgcGFkZGluZyA9IDA7CisgICAgdW5zaWduZWQg
cmVzaWR1YWwgPSB2YWxpZFJvd1NpemUgJSBhbGlnbm1lbnQ7CisgICAgaWYgKHJlc2lkdWFsKSB7
CisgICAgICAgIHBhZGRpbmcgPSBhbGlnbm1lbnQgLSByZXNpZHVhbDsKKyAgICAgICAgY2hlY2tl
ZFZhbHVlICs9IHBhZGRpbmc7CisgICAgfQorICAgIC8vIExhc3Qgcm93IG5lZWRzIG5vIHBhZGRp
bmcuCisgICAgY2hlY2tlZFZhbHVlICo9IChoZWlnaHQgLSAxKTsKKyAgICBjaGVja2VkVmFsdWUg
Kz0gdmFsaWRSb3dTaXplOworICAgIGlmIChjaGVja2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUU7CisgICAgKmlt
YWdlU2l6ZUluQnl0ZXMgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisgICAgaWYgKHBhZGRp
bmdJbkJ5dGVzKQorICAgICAgICAqcGFkZGluZ0luQnl0ZXMgPSBwYWRkaW5nOworICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBET01Tb3Vy
Y2UgaW1hZ2VIdG1sRG9tU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAgbV9pbWFnZSA9IGltYWdlOworICAgIG1faW1h
Z2VIdG1sRG9tU291cmNlID0gaW1hZ2VIdG1sRG9tU291cmNlOworICAgIG1fZXh0cmFjdFN1Y2Nl
ZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVtdWx0aXBseUFscGhhLCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhY2tJbWFnZURh
dGEoSW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJj
ZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNl
VW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgaWYgKCFpbWFn
ZSB8fCAhcGl4ZWxzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBwYWNr
ZWRTaXplOworICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQg
PT0gMSkuCisgICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lk
dGgsIGhlaWdodCwgMSwgJnBhY2tlZFNpemUsIG51bGxwdHIpICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpOT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRhdGEucmVzaXplKHBhY2tl
ZFNpemUpOworCisgICAgaWYgKCFwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHBpeGVscyksIHNvdXJjZUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc291cmNlVW5wYWNr
QWxpZ25tZW50LCBmb3JtYXQsIHR5cGUsIGFscGhhT3AsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIgPSBp
bWFnZS0+aW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdygqaW1hZ2Up
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpl
eHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhLCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgVmVjdG9yPHVp
bnQ4X3Q+JiBkYXRhKQoreworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOworICAgIGludCBoZWlnaHQg
PSBpbWFnZURhdGEtPmhlaWdodCgpOworCisgICAgdW5zaWduZWQgcGFja2VkU2l6ZTsKKyAgICAv
LyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgorICAgIGlm
IChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEs
ICZwYWNrZWRTaXplLCBudWxscHRyKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1IpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAg
IGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLCBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTgsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwg
cHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhT3A6OkRvUHJlbXVsdGlwbHkgOiBBbHBoYU9wOjpEb05v
dGhpbmcsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpleHRyYWN0
VGV4dHVyZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCB1bnBhY2tBbGlnbm1lbnQsIGJvb2wgZmxpcFks
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpCit7CisgICAgLy8gQXNzdW1lcyBmb3JtYXQsIHR5cGUsIGV0Yy4gaGF2ZSBhbHJl
YWR5IGJlZW4gdmFsaWRhdGVkLgorICAgIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGdl
dERhdGFGb3JtYXQoZm9ybWF0LCB0eXBlKTsKKworICAgIC8vIFJlc2l6ZSB0aGUgb3V0cHV0IGJ1
ZmZlci4KKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50
OworICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwg
JmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSBjb21wb25lbnRzUGVyUGl4ZWwg
KiBieXRlc1BlckNvbXBvbmVudDsKKyAgICBkYXRhLnJlc2l6ZSh3aWR0aCAqIGhlaWdodCAqIGJ5
dGVzUGVyUGl4ZWwpOworCisgICAgaWYgKCFwYWNrUGl4ZWxzKHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tB
bGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1By
ZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0YS5kYXRhKCksIGZsaXBZKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdW5zaWduZWQgVGV4ZWxCeXRlc0ZvckZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpBODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OkFSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JB
NTU1MToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2RjoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjg6CisgICAgICAgIHJldHVybiAzOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OkFCR1I4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkJHUkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTMyRjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RjoKKyAgICAgICAgcmV0dXJuIDQ7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOgorICAgICAg
ICByZXR1cm4gNjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMy
RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGOgorICAg
ICAgICByZXR1cm4gODsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0IzMkY6CisgICAgICAgIHJldHVybiAxMjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBMzJGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsIERhdGFGb3JtYXQgc291cmNl
RGF0YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291
cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5zaWduZWQg
ZGVzdGluYXRpb25UeXBlLCBBbHBoYU9wIGFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwg
Ym9vbCBmbGlwWSkKK3sKKyAgICBpbnQgdmFsaWRTcmMgPSB3aWR0aCAqIFRleGVsQnl0ZXNGb3JG
b3JtYXQoc291cmNlRGF0YUZvcm1hdCk7CisgICAgaW50IHJlbWFpbmRlciA9IHNvdXJjZVVucGFj
a0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFja0FsaWdubWVudCkgOiAwOworICAg
IGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRTcmMgKyBzb3VyY2VVbnBhY2tBbGln
bm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHBhY2tpbmcgcGl4ZWxzIHRvIFdlYkdMIDIgZm9ybWF0cworICAgIHN3aXRjaCAoZGVzdGluYXRp
b25Gb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRUQ6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Ukc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09N
UE9ORU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBEYXRhRm9ybWF0IGRzdERhdGFGb3JtYXQgPSBnZXREYXRhRm9y
bWF0KGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5cGUpOworICAgIGludCBkc3RTdHJp
ZGUgPSB3aWR0aCAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoZHN0RGF0YUZvcm1hdCk7CisgICAgaWYg
KGZsaXBZKSB7CisgICAgICAgIGRlc3RpbmF0aW9uRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihkZXN0aW5hdGlvbkRhdGEpICsgZHN0U3RyaWRlKihoZWlnaHQgLSAxKTsKKyAgICAgICAgZHN0
U3RyaWRlID0gLWRzdFN0cmlkZTsKKyAgICB9CisgICAgaWYgKCFoYXNBbHBoYShzb3VyY2VEYXRh
Rm9ybWF0KSB8fCAhaGFzQ29sb3Ioc291cmNlRGF0YUZvcm1hdCkgfHwgIWhhc0NvbG9yKGRzdERh
dGFGb3JtYXQpKQorICAgICAgICBhbHBoYU9wID0gQWxwaGFPcDo6RG9Ob3RoaW5nOworCisgICAg
aWYgKHNvdXJjZURhdGFGb3JtYXQgPT0gZHN0RGF0YUZvcm1hdCAmJiBhbHBoYU9wID09IEFscGhh
T3A6OkRvTm90aGluZykgeworICAgICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBzb3VyY2VEYXRh
OworICAgICAgICBjb25zdCB1aW50OF90KiBwdHJFbmQgPSBzb3VyY2VEYXRhICsgc3JjU3RyaWRl
ICogaGVpZ2h0OworICAgICAgICB1bnNpZ25lZCByb3dTaXplID0gKGRzdFN0cmlkZSA+IDApID8g
ZHN0U3RyaWRlOiAtZHN0U3RyaWRlOworICAgICAgICB1aW50OF90KiBkc3QgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IHB0ckVu
ZCkgeworICAgICAgICAgICAgbWVtY3B5KGRzdCwgcHRyLCByb3dTaXplKTsKKyAgICAgICAgICAg
IHB0ciArPSBzcmNTdHJpZGU7CisgICAgICAgICAgICBkc3QgKz0gZHN0U3RyaWRlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEZvcm1hdENvbnZlcnRlciBj
b252ZXJ0ZXIod2lkdGgsIGhlaWdodCwgc291cmNlRGF0YSwgZGVzdGluYXRpb25EYXRhLCBzcmNT
dHJpZGUsIGRzdFN0cmlkZSk7CisgICAgY29udmVydGVyLmNvbnZlcnQoc291cmNlRGF0YUZvcm1h
dCwgZHN0RGF0YUZvcm1hdCwgYWxwaGFPcCk7CisgICAgaWYgKCFjb252ZXJ0ZXIuc3VjY2Vzcygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiAhKFBM
QVRGT1JNKENPQ09BKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKQoreworfQorI2Vu
ZGlmCisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKK3sKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg4OGQ2MWU4M2RmOTk3MDM0
MGU5N2EyMWZiZjAxYmNjOWExZjYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0w
LDAgKzEsNzQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1
ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIK
KyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisKKyNp
ZiBVU0UoQ0EpCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjZW5kaWYKKworLy8gRklY
TUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGF2b2lkIHRoZSBuYW1lIGNvbmZsaWN0aW9uIGZvciBO
T19FUlJPUi4KKyNpZiBQTEFURk9STShXSU4pCisjdW5kZWYgTk9fRVJST1IKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKy8vIFRoaXMgZGVmaW5lIGlzIGZyb20gdGhlIFgxMSBoZWFkZXJzLCBidXQgaXQn
cyB1c2VkIGJlbG93LCBzbyB3ZSBtdXN0IHVuZGVmaW5lIGl0LgorI3VuZGVmIFZFUlNJT04KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRl
IDxPcGVuR0xFUy9FUzIvZ2wuaD4KKyNpZmRlZiBfX09CSkNfXworI2ltcG9ydCA8T3BlbkdMRVMv
RUFHTC5oPgorI2VuZGlmIC8vIF9fT0JKQ19fCisjZW5kaWYgLy8gVVNFKE9QRU5HTF9FUykKK09C
SkNfQ0xBU1MgQ0FMYXllcjsKK09CSkNfQ0xBU1MgV2ViR0xMYXllcjsKK3R5cGVkZWYgc3RydWN0
IF9fSU9TdXJmYWNlKiBJT1N1cmZhY2VSZWY7CisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCisK
KyNpZiBVU0UoTklDT1NJQSkKK25hbWVzcGFjZSBOaWNvc2lhIHsKK2NsYXNzIEdDM0RMYXllcjsK
K30KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBFeHRlbnNpb25zR0w7Cisj
aWYgVVNFKEFOR0xFKQorY2xhc3MgRXh0ZW5zaW9uc0dMQU5HTEU7CisjZWxpZiAhUExBVEZPUk0o
Q09DT0EpICYmIFVTRShPUEVOR0xfRVMpCitjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUzsKKyNl
bGlmIFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCitj
bGFzcyBFeHRlbnNpb25zR0xPcGVuR0w7CisjZW5kaWYKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFz
cyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
CitjbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI7CisjZW5kaWYKKwordHlwZWRl
ZiBXVEY6Okhhc2hNYXA8Q1N0cmluZywgdWludDY0X3Q+IFNoYWRlck5hbWVIYXNoOworCitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMIHsKK3B1YmxpYzoKKyAgICBjbGFz
cyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wb3NpdGUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBmb3JjZUNvbnRleHRMb3N0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNs
ZUNvbnRleHQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFu
Z2VkTm90aWZpY2F0aW9uKCkgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLCBI
b3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKTsKKyAgICB2
aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpOworCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgc3RhdGljIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gY3JlYXRlU2hhcmVkKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiBzaGFyZWRDb250ZXh0KTsKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3RleHR1cmU7IH0KKyAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdl
dCgpKTsgfQorI2lmIFVTRShBTkdMRSkKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlz
cGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlPYmo7IH0KKyAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29uc3Qg
eyByZXR1cm4gbV9jb25maWdPYmo7IH0KKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisjZWxzZQorICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92
ZXJyaWRlOworI2VuZGlmCisKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
dm9pZCBhZGRDbGllbnQoQ2xpZW50JiBjbGllbnQpIHsgbV9jbGllbnRzLmFkZCgmY2xpZW50KTsg
fQorICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50cy5yZW1v
dmUoJmNsaWVudCk7IH0KKworICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9t
IG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgorICAgIHZvaWQgcHJlcGFyZVRleHR1cmUo
KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBpeGVs
cz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKKworICAgIC8vIEdldCBh
biBhdHRyaWJ1dGUgbG9jYXRpb24gd2l0aG91dCBjaGVja2luZyB0aGUgbmFtZSAtPiBtYW5nbGVk
bmFtZSBtYXBwaW5nLgorICAgIGludCBnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICAvLyBDb21waWxlIGEg
c2hhZGVyIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBBTkdMRS4KKyAgICB2b2lkIGNvbXBpbGVTaGFk
ZXJEaXJlY3QoUGxhdGZvcm0zRE9iamVjdCk7CisKKyAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2Uy
RCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KKyAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KKyAgICAvLyBCeSBk
ZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCisgICAg
Ym9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludCBhbGlnbm1lbnQgPSA0KTsKKworICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0
OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycyBmb3IgdGV4dHVyZSB1cGxv
YWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgorICAgIC8vCisKKyAgICAvLyBDb21wdXRlcyB0aGUg
Y29tcG9uZW50cyBwZXIgcGl4ZWwgYW5kIGJ5dGVzIHBlciBjb21wb25lbnQKKyAgICAvLyBmb3Ig
dGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBpZgor
ICAgIC8vIGVpdGhlciB3YXMgYW4gaW52YWxpZCBlbnVtLgorICAgIHN0YXRpYyBib29sIGNvbXB1
dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQzNEZW51bSBmb3JtYXQsCisgICAgICAgIEdDM0Rl
bnVtIHR5cGUsCisgICAgICAgIHVuc2lnbmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsCisgICAgICAg
IHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCk7CisKKyAgICAvLyBDb21wdXRlcyB0aGUgaW1h
Z2Ugc2l6ZSBpbiBieXRlcy4gSWYgcGFkZGluZ0luQnl0ZXMgaXMgbm90IG51bGwsIHBhZGRpbmcK
KyAgICAvLyBpcyBhbHNvIGNhbGN1bGF0ZWQgaW4gcmV0dXJuLiBSZXR1cm5zIE5PX0VSUk9SIGlm
IHN1Y2NlZWQsIG90aGVyd2lzZQorICAgIC8vIHJldHVybiB0aGUgc3VnZ2VzdGVkIEdMIGVycm9y
IGluZGljYXRpbmcgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlOgorICAgIC8vICAgSU5WQUxJRF9W
QUxVRSBpZiB3aWR0aC9oZWlnaHQgaXMgbmVnYXRpdmUgb3Igb3ZlcmZsb3cgaGFwcGVucy4KKyAg
ICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBpcyBpbGxlZ2FsLgorICAgIHN0YXRp
YyBHQzNEZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQzNEZW51bSBmb3JtYXQsCisgICAg
ICAgIEdDM0RlbnVtIHR5cGUsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwKKyAgICAgICAgR0Mz
RHNpemVpIGhlaWdodCwKKyAgICAgICAgR0MzRGludCBhbGlnbm1lbnQsCisgICAgICAgIHVuc2ln
bmVkKiBpbWFnZVNpemVJbkJ5dGVzLAorICAgICAgICB1bnNpZ25lZCogcGFkZGluZ0luQnl0ZXMp
OworCisgICAgc3RhdGljIGJvb2wgcG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3Jt
YXQoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtJiBmb3JtYXQsIEdDM0RlbnVtJiB0
eXBlKTsKKworICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VE
YXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCisgICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0
YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKKyAgICAvLyBhbmQgb2Jl
eWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQor
ICAgIC8vIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKElt
YWdlRGF0YSosCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0gdHlw
ZSwKKyAgICAgICAgYm9vbCBmbGlwWSwKKyAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAor
ICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRleHR1cmUKKyAgICAvLyBkYXRhLCBh
cHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgcGFyYW1ldGVycy4KKyAgICAv
LyBJZiB0aGUgZGF0YSBpcyBub3QgdGlnaHRseSBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBwYXNz
ZWQKKyAgICAvLyB1bnBhY2tBbGlnbm1lbnQsIHRoZSBvdXRwdXQgZGF0YSB3aWxsIGJlIHRpZ2h0
bHkgcGFja2VkLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBpZiBh
bnkgZXJyb3Igb2NjdXJyZWQuCisgICAgc3RhdGljIGJvb2wgZXh0cmFjdFRleHR1cmVEYXRhKHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwKKyAgICAgICAgdW5zaWduZWQgdW5wYWNrQWxpZ25tZW50LAorICAgICAg
ICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsCisgICAgICAgIGNvbnN0IHZvaWQq
IHBpeGVscywKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCisgICAgLy8KKworICAgIHZv
aWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKSBvdmVycmlkZTsKKyAgICB2b2lkIGF0
dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKKyAgICB2
b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZFRleHR1cmUoR0Mz
RGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJsZW5k
Q29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwg
R0MzRGNsYW1wZiBhbHBoYSkgb3ZlcnJpZGU7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0Rl
bnVtIG1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0Rl
bnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkgb3ZlcnJpZGU7CisgICAgdm9pZCBibGVu
ZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rvcikgb3ZlcnJpZGU7CisgICAg
dm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwg
R0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKSBvdmVycmlkZTsKKworICAgIHZv
aWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51
bSB1c2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
R0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRy
IG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRlOwor
CisgICAgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9m
ZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZpZWxkIGFjY2Vzcykgb3ZlcnJpZGU7
CisgICAgR0MzRGJvb2xlYW4gdW5tYXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlkZTsK
KyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVt
IHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZz
ZXQsIEdDM0RzaXplaXB0cikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGdldEludGVybmFsZm9ybWF0
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpIG92ZXJyaWRlOworICAgIHZv
aWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNp
emVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworCisgICAgdm9pZCB0ZXhTdG9yYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICB2b2lkIHRleFN0
b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBk
ZXB0aCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdD
M0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4mIHBhcmFtcykgb3ZlcnJpZGU7CisKKyAgICBH
QzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzaykgb3ZlcnJpZGU7CisgICAgdm9pZCBj
bGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJs
dWUsIEdDM0RjbGFtcGYgYWxwaGEpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJEZXB0aChHQzNE
Y2xhbXBmIGRlcHRoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50IHMp
IG92ZXJyaWRlOworICAgIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xl
YW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKSBvdmVycmlkZTsK
KyAgICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpIG92ZXJyaWRlOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRlOworICAgIHZvaWQgY29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpIG92ZXJyaWRlOworICAgIHZvaWQgY29weVRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBt
b2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2Jq
ZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0g
bW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApIG92ZXJyaWRlOworICAg
IHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZmluaXNoKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaCgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QpIG92ZXJyaWRlOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QsIEdDM0RpbnQgbGV2ZWwpIG92ZXJyaWRlOworICAgIHZvaWQgZnJvbnRGYWNlKEdDM0Rl
bnVtIG1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFy
Z2V0KSBvdmVycmlkZTsKKworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBvdmVycmlkZTsKKyAgICBi
b29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgb3ZlcnJpZGU7
CisgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRl
cnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXpl
aSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpIG92ZXJyaWRlOworICAgIEdDM0Rp
bnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
KSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJvb2xlYW52KEdDM0RlbnVtIHBuYW1lLCBHQzNEYm9v
bGVhbiogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0QnVmZmVyUGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwor
ICAgIEdDM0RlbnVtIGdldEVycm9yKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRGbG9hdHYoR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworICAg
IHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFs
dWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyNpZiAhVVNF
KEFOR0xFKQorICAgIHZvaWQgZ2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKKyNlbmRp
ZiAvLyAhVVNFKEFOR0xFKQorICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0VW5tYW5nbGVkSW5mb0xvZyhQbGF0Zm9y
bTNET2JqZWN0WzJdLCBHQzNEc2l6ZWksIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZ2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9i
amVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICBTdHJp
bmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lk
IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBw
cmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKSBvdmVycmlk
ZTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OworICAgIFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0VW5pZm9ybWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFs
dWUpIG92ZXJyaWRlOworICAgIEdDM0RpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRWZXJ0ZXhB
dHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUp
IG92ZXJyaWRlOworICAgIHZvaWQgZ2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgR0MzRHNpemVpcHRy
IGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpIG92
ZXJyaWRlOworCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkg
b3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7
CisgICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKKyAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CisgICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7CisgICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CisgICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwor
ICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBsaW5rUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHBpeGVsU3RvcmVpKEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSBvdmVycmlkZTsKKyAgICB2b2lkIHBvbHlnb25P
ZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKSBvdmVycmlkZTsKKworICAg
IHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRh
dGEpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKworICAg
IHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52
ZXJ0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzaGFk
ZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpIG92ZXJyaWRl
OworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKSBvdmVycmlkZTsKKyAgICB2
b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykgb3Zl
cnJpZGU7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdD
M0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFz
cykgb3ZlcnJpZGU7CisKKyAgICBib29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpIG92ZXJyaWRlOworICAgIHZvaWQgdGV4UGFyYW1ldGVy
ZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pIG92ZXJy
aWRlOworICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50IHBhcmFtKSBvdmVycmlkZTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IHVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCkgb3ZlcnJpZGU7CisgICAg
dm9pZCB1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZs
b2F0KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50IHgpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9y
bTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkgb3ZlcnJpZGU7
CisgICAgdm9pZCB1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3Qg
R0MzRGZsb2F0KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0yaShHQzNEaW50IGxvY2F0
aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMml2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7
CisgICAgdm9pZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtM2Z2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSBvdmVycmlkZTsKKyAg
ICB2b2lkIHVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRGludCB6KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZv
cm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9h
dCB6LCBHQzNEZmxvYXQgdykgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtNGZ2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSBvdmVycmlkZTsKKyAgICB2
b2lkIHVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RGludCB6LCBHQzNEaW50IHcpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybTRpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRlOworICAgIHZv
aWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lk
IHVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgdmFsaWRh
dGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworI2lmICFVU0UoQU5HTEUpCisg
ICAgYm9vbCBjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRl
ciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3Q7CisgICAgYm9vbCBwcmVj
aXNpb25zTWF0Y2goUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIsIFBsYXRmb3JtM0RPYmpl
Y3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0OworI2VuZGlmCisKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHkpIG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1
aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykgb3ZlcnJpZGU7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeikgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQg
aW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRl
eEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0Rm
bG9hdCB6LCBHQzNEZmxvYXQgdykgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYo
R0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0Mz
RGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0Mz
RGludHB0ciBvZmZzZXQpIG92ZXJyaWRlOworCisgICAgdm9pZCB2aWV3cG9ydChHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsK
KworICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgdm9pZCBk
cmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3RWxl
bWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZp
c29yKSBvdmVycmlkZTsKKworICAgIC8vIFZlcnRleEFycmF5T2plY3QgY2FsbHMKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxl
dGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNEYm9vbGVh
biBpc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmlu
ZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworCisgICAgdm9pZCBwYWlu
dFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYp
OworCisgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICB2b2lkIG1hcmtMYXllckNv
bXBvc2l0ZWQoKTsKKyAgICBib29sIGxheWVyQ29tcG9zaXRlZCgpIGNvbnN0OworICAgIHZvaWQg
Zm9yY2VDb250ZXh0TG9zdCgpOworICAgIHZvaWQgcmVjeWNsZUNvbnRleHQoKTsKKworICAgIHZv
aWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIHZvaWQgc2ltdWxh
dGVDb250ZXh0Q2hhbmdlZCgpOworCisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyhJbWFnZUJ1ZmZlciopOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgYm9vbCBwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9D
YW52YXMoSW1hZ2VCdWZmZXIqKTsKKworI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIp
CisgICAgdm9pZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQpIG92ZXJyaWRlOworI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIHRleEltYWdlSU9TdXJmYWNlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIElPU3Vy
ZmFjZVJlZiwgR0MzRHVpbnQgcGxhbmUpOworCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICB2b2lk
IHByZXNlbnRSZW5kZXJidWZmZXIoKTsKKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNF
KEFOR0xFKQorICAgIHZvaWQgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSk7
CisgICAgdm9pZCB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIo
KTsKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQorICAgIHZvaWQg
dXBkYXRlQ0dMQ29udGV4dCgpOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvLyBQTEFURk9STShD
T0NPQSkKKworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCk7CisKKyAgICBHcmFw
aGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbjsgfQor
CisgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVyIGNyZWF0aW9uIGFuZCBkZWxldGlvbgorICAgIFBs
YXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm0zRE9i
amVjdCBjcmVhdGVGcmFtZWJ1ZmZlcigpIG92ZXJyaWRlOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
Y3JlYXRlUHJvZ3JhbSgpIG92ZXJyaWRlOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUmVu
ZGVyYnVmZmVyKCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIo
R0MzRGVudW0pIG92ZXJyaWRlOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVGV4dHVyZSgp
IG92ZXJyaWRlOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworCisgICAgLy8g
U3ludGhlc2l6ZXMgYW4gT3BlbkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBh
CisgICAgLy8gbGF0ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBpcyB1c2VkIHRvIGVtdWxhdGUg
T3BlbkdMIEVTCisgICAgLy8gMi4wIGJlaGF2aW9yIG9uIHRoZSBkZXNrdG9wIGFuZCB0byBlbmZv
cmNlIGFkZGl0aW9uYWwgZXJyb3IKKyAgICAvLyBjaGVja2luZyBtYW5kYXRlZCBieSBXZWJHTC4K
KyAgICAvLworICAgIC8vIFBlciB0aGUgYmVoYXZpb3Igb2YgZ2xHZXRFcnJvciwgdGhpcyBzdG9y
ZXMgYXQgbW9zdCBvbmUKKyAgICAvLyBpbnN0YW5jZSBvZiBhbnkgZ2l2ZW4gZXJyb3IsIGFuZCBy
ZXR1cm5zIHRoZW0gZnJvbSBjYWxscyB0bworICAgIC8vIGdldEVycm9yIGluIHRoZSBvcmRlciB0
aGV5IHdlcmUgYWRkZWQuCisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJv
cik7CisKKyAgICAvLyBSZWFkIHJlYWwgT3BlbkdMIGVycm9ycywgYW5kIG1vdmUgdGhlbSB0byB0
aGUgc3ludGhldGljCisgICAgLy8gZXJyb3IgbGlzdC4gUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qg
b25lIGVycm9yIGlzIG1vdmVkLgorICAgIGJvb2wgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7CisKKyAgICAvLyBTdXBwb3J0IGZvciBleHRlbnNpb25zLiBSZXR1cm5zIGEgbm9uLW51
bGwgb2JqZWN0LCB0aG91Z2ggbm90CisgICAgLy8gYWxsIG1ldGhvZHMgaXQgY29udGFpbnMgbWF5
IG5lY2Vzc2FyaWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKKyAgICAvLyBjdXJyZW50IGhhcmR3YXJl
LiBNdXN0IGNhbGwgRXh0ZW5zaW9uc0dMOjpzdXBwb3J0cygpIHRvCisgICAgLy8gZGV0ZXJtaW5l
IHRoaXMuCisgICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkgb3ZlcnJpZGU7CisKKyAg
ICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3Q7CisKKyAgICAvLyBQ
YWNrcyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIHdoaWNoIGlzIHBhc3NlZCBpbiB8
cGl4ZWxzfCBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yCisgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBn
aXZlbiBmb3JtYXQgYW5kIHR5cGUsIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgQWxwaGFPcCBm
bGFncy4KKyAgICAvLyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgorICAgIHN0YXRpYyBib29s
IHBhY2tJbWFnZURhdGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCwgRGF0YUZvcm1hdCBzb3VyY2VG
b3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIHNvdXJjZVVu
cGFja0FsaWdubWVudCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKworICAgIGNsYXNzIEltYWdl
RXh0cmFjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEltYWdlRXh0cmFjdG9yKEltYWdlKiwg
RE9NU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGUpOworCisgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGlt
cGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHRvIGRlYWxsb2NhdGUgb3IgcmVsZWFzZSByZXNv
dXJjZXMKKyAgICAgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZSBpZiBuZWVkZWQuCisg
ICAgICAgIH5JbWFnZUV4dHJhY3RvcigpOworCisgICAgICAgIGJvb2wgZXh0cmFjdFN1Y2NlZWRl
ZCgpIHsgcmV0dXJuIG1fZXh0cmFjdFN1Y2NlZWRlZDsgfQorICAgICAgICBjb25zdCB2b2lkKiBp
bWFnZVBpeGVsRGF0YSgpIHsgcmV0dXJuIG1faW1hZ2VQaXhlbERhdGE7IH0KKyAgICAgICAgdW5z
aWduZWQgaW1hZ2VXaWR0aCgpIHsgcmV0dXJuIG1faW1hZ2VXaWR0aDsgfQorICAgICAgICB1bnNp
Z25lZCBpbWFnZUhlaWdodCgpIHsgcmV0dXJuIG1faW1hZ2VIZWlnaHQ7IH0KKyAgICAgICAgRGF0
YUZvcm1hdCBpbWFnZVNvdXJjZUZvcm1hdCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VGb3JtYXQ7
IH0KKyAgICAgICAgQWxwaGFPcCBpbWFnZUFscGhhT3AoKSB7IHJldHVybiBtX2FscGhhT3A7IH0K
KyAgICAgICAgdW5zaWduZWQgaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBt
X2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OyB9CisgICAgICAgIERPTVNvdXJjZSBpbWFnZUh0
bWxEb21Tb3VyY2UoKSB7IHJldHVybiBtX2ltYWdlSHRtbERvbVNvdXJjZTsgfQorICAgIHByaXZh
dGU6CisgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0
aW9uIG9mIHRoaXMgbWV0aG9kLgorICAgICAgICAvLyBFeHRyYWN0cyB0aGUgaW1hZ2UgYW5kIGtl
ZXBzIHRyYWNrIG9mIGl0cyBzdGF0dXMsIHN1Y2ggYXMgd2lkdGgsIGhlaWdodCwgU291cmNlIEFs
aWdubWVudCwgZm9ybWF0IGFuZCBBbHBoYU9wIGV0YywKKyAgICAgICAgLy8gbmVlZHMgdG8gbG9j
ayB0aGUgcmVzb3VyY2VzIG9yIHJlbGV2YW50IGRhdGEgaWYgbmVlZGVkIGFuZCByZXR1cm5zIHRy
dWUgdXBvbiBzdWNjZXNzCisgICAgICAgIGJvb2wgZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7CisKKyNpZiBVU0UoQ0FJ
Uk8pCisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1faW1hZ2VTdXJmYWNlOworI2Vs
aWYgVVNFKENHKQorICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9jZ0ltYWdlOworICAg
ICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9kZWNvZGVkSW1hZ2U7CisgICAgICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IG1fcGl4ZWxEYXRhOworICAgICAgICBVbmlxdWVBcnJheTx1aW50OF90
PiBtX2Zvcm1hbGl6ZWRSR0JBOERhdGE7CisjZW5kaWYKKyAgICAgICAgSW1hZ2UqIG1faW1hZ2U7
CisgICAgICAgIERPTVNvdXJjZSBtX2ltYWdlSHRtbERvbVNvdXJjZTsKKyAgICAgICAgYm9vbCBt
X2V4dHJhY3RTdWNjZWVkZWQ7CisgICAgICAgIGNvbnN0IHZvaWQqIG1faW1hZ2VQaXhlbERhdGE7
CisgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VXaWR0aDsKKyAgICAgICAgdW5zaWduZWQgbV9pbWFn
ZUhlaWdodDsKKyAgICAgICAgRGF0YUZvcm1hdCBtX2ltYWdlU291cmNlRm9ybWF0OworICAgICAg
ICBBbHBoYU9wIG1fYWxwaGFPcDsKKyAgICAgICAgdW5zaWduZWQgbV9pbWFnZVNvdXJjZVVucGFj
a0FsaWdubWVudDsKKyAgICB9OworCisgICAgdm9pZCBzZXRGYWlsTmV4dEdQVVN0YXR1c0NoZWNr
KCkgeyBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSB0cnVlOyB9CisKKyAgICBHQzNEZW51bSBhY3Rp
dmVUZXh0dXJlVW5pdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQ7
IH0KKyAgICBHQzNEZW51bSBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCk7IH0KKyAgICBHQzNEZW51bSBjdXJyZW50Qm91bmRU
YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1cnJlbnRCb3VuZFRhcmdldCgpOyB9Cisg
ICAgdW5zaWduZWQgdGV4dHVyZVNlZWQoR0MzRHVpbnQgdGV4dHVyZSkgeyByZXR1cm4gbV9zdGF0
ZS50ZXh0dXJlU2VlZENvdW50LmNvdW50KHRleHR1cmUpOyB9CisKKyNpZiBQTEFURk9STShNQUMp
CisgICAgdXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKKyAgICB2b2lkIHNjcmVl
bkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RX
aW5kb3cqLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0ID0gbnVsbHB0cik7CisKKyAgICAvLyBIZWxwZXIg
Zm9yIHBhY2tJbWFnZURhdGEvZXh0cmFjdEltYWdlRGF0YS9leHRyYWN0VGV4dHVyZURhdGEgd2hp
Y2ggaW1wbGVtZW50IHBhY2tpbmcgb2YgcGl4ZWwKKyAgICAvLyBkYXRhIGludG8gdGhlIHNwZWNp
ZmllZCBPcGVuR0wgZGVzdGluYXRpb24gZm9ybWF0IGFuZCB0eXBlLgorICAgIC8vIEEgc291cmNl
VW5wYWNrQWxpZ25tZW50IG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIHNvdXJjZQorICAgIC8v
IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQuIE5vbi16ZXJvIHZhbHVlcyBtYXkgdGFrZSBhIHNsb3cg
cGF0aC4KKyAgICAvLyBEZXN0aW5hdGlvbiBkYXRhIHdpbGwgaGF2ZSBubyBnYXBzIGJldHdlZW4g
cm93cy4KKyAgICBzdGF0aWMgYm9vbCBwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURh
dGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0aW5h
dGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBBbHBoYU9wLCB2b2lkKiBkZXN0
aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpOworCisgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhl
IHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAorICAgIC8vIGlu
IHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNv
dWxkIG9yCisgICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxp
dGllcyBvZiB0aGUgT3BlbkdMCisgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgdm9pZCB2YWxp
ZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24p
OworICAgIHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisgICAgCisgICAgLy8gRGlkIHRoZSBt
b3N0IHJlY2VudCBkcmF3aW5nIG9wZXJhdGlvbiBsZWF2ZSB0aGUgR1BVIGluIGFuIGFjY2VwdGFi
bGUgc3RhdGU/CisgICAgdm9pZCBjaGVja0dQVVN0YXR1cygpOworCisgICAgLy8gUmVhZCByZW5k
ZXJpbmcgcmVzdWx0cyBpbnRvIGEgcGl4ZWwgYXJyYXkgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMg
dGhlCisgICAgLy8gYmFja2J1ZmZlci4KKyAgICB2b2lkIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHVu
c2lnbmVkIGNoYXIqIHBpeGVscywgaW50IHBpeGVsc1NpemUpOworICAgIHZvaWQgcmVhZFBpeGVs
c0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKTsKKworI2lmIFVTRShPUEVOR0xfRVMpCisg
ICAgdm9pZCBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCk7CisjZW5kaWYKKworICAgIGJvb2wgcmVzaGFwZUZCT3MoY29u
c3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShj
b25zdCBJbnRSZWN0JiA9IEludFJlY3QoKSk7CisgICAgdm9pZCBhdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3
aWR0aCwgaW50IGhlaWdodCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIGFsbG93
T2ZmbGluZVJlbmRlcmVycygpIGNvbnN0OworI2VuZGlmCisKKyAgICBpbnQgbV9jdXJyZW50V2lk
dGggeyAwIH07CisgICAgaW50IG1fY3VycmVudEhlaWdodCB7IDAgfTsKKworI2lmIFBMQVRGT1JN
KENPQ09BKQorICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3dlYkdMTGF5ZXI7CisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmogeyBudWxscHRyIH07CisjaWYgVVNF
KEFOR0xFKQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0xEaXNwbGF5IG1fZGlzcGxheU9i
aiB7IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIG1fY29u
ZmlnT2JqIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIFVTRShBTkdMRSkKKyNlbmRpZiAvLyBQTEFU
Rk9STShDT0NPQSkKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENBKQorICAgIFJlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IG1fd2ViR0xMYXllcjsKKyNlbmRpZgorCisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBTaGFkZXJTeW1ib2xNYXA7CisKKyAgICBz
dHJ1Y3QgU2hhZGVyU291cmNlRW50cnkgeworICAgICAgICBHQzNEZW51bSB0eXBlOworICAgICAg
ICBTdHJpbmcgc291cmNlOworICAgICAgICBTdHJpbmcgdHJhbnNsYXRlZFNvdXJjZTsKKyAgICAg
ICAgU3RyaW5nIGxvZzsKKyAgICAgICAgYm9vbCBpc1ZhbGlkOworICAgICAgICBTaGFkZXJTeW1i
b2xNYXAgYXR0cmlidXRlTWFwOworICAgICAgICBTaGFkZXJTeW1ib2xNYXAgdW5pZm9ybU1hcDsK
KyAgICAgICAgU2hhZGVyU3ltYm9sTWFwIHZhcnlpbmdNYXA7CisgICAgICAgIFNoYWRlclNvdXJj
ZUVudHJ5KCkKKyAgICAgICAgICAgIDogdHlwZShWRVJURVhfU0hBREVSKQorICAgICAgICAgICAg
LCBpc1ZhbGlkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwKGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5
bWJvbFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzeW1ib2xUeXBlID09IFNI
QURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgfHwgc3ltYm9sVHlwZSA9PSBTSEFERVJfU1lNQk9M
X1RZUEVfVU5JRk9STSB8fCBzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5H
KTsKKyAgICAgICAgICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRS
SUJVVEUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU1hcDsKKyAgICAgICAgICAg
IGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9WQVJZSU5HKQorICAgICAgICAg
ICAgICAgIHJldHVybiB2YXJ5aW5nTWFwOworICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm1NYXA7
CisgICAgICAgIH0KKyAgICB9OworCisjaWYgIVVTRShBTkdMRSkKKyAgICAvLyBGSVhNRTogU2hh
ZGVycyBhcmUgbmV2ZXIgcmVtb3ZlZCBmcm9tIHRoaXMgbWFwLCBldmVuIGlmIHRoZXkgYW5kIHRo
ZWlyIHByb2dyYW0gYXJlIGRlbGV0ZWQuCisgICAgLy8gVGhpcyBpcyBiYWQsIGFuZCBpdCBhbHNv
IHJlbGllcyBvbiB0aGUgZmFjdCB3ZSBuZXZlciByZXVzZSBQbGF0Zm9ybTNET2JqZWN0IG51bWJl
cnMuCisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVu
dHJ5PiBTaGFkZXJTb3VyY2VNYXA7CisgICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291cmNl
TWFwOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIHN0ZDo6cGFpcjxQ
bGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0Pj4gTGlua2VkU2hhZGVyTWFwOworICAg
IExpbmtlZFNoYWRlck1hcCBtX2xpbmtlZFNoYWRlck1hcDsKKworICAgIHN0cnVjdCBBY3RpdmVT
aGFkZXJTeW1ib2xDb3VudHMgeworICAgICAgICBWZWN0b3I8R0MzRGludD4gZmlsdGVyZWRUb0Fj
dHVhbEF0dHJpYnV0ZUluZGV4TWFwOworICAgICAgICBWZWN0b3I8R0MzRGludD4gZmlsdGVyZWRU
b0FjdHVhbFVuaWZvcm1JbmRleE1hcDsKKworICAgICAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3Vu
dHMoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBHQzNEaW50IGNvdW50Rm9yVHlw
ZShHQzNEZW51bSBhY3RpdmVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoYWN0
aXZlVHlwZSA9PSBBQ1RJVkVfQVRUUklCVVRFUyB8fCBhY3RpdmVUeXBlID09IEFDVElWRV9VTklG
T1JNUyk7CisgICAgICAgICAgICBpZiAoYWN0aXZlVHlwZSA9PSBBQ1RJVkVfQVRUUklCVVRFUykK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFw
LnNpemUoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5k
ZXhNYXAuc2l6ZSgpOworICAgICAgICB9CisgICAgfTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzPiBTaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXA7CisgICAgU2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwIG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBIYXNoZWRTeW1ib2xNYXA7CisgICAgSGFzaGVkU3ltYm9sTWFwIG1fcG9zc2libHlVbnVzZWRB
dHRyaWJ1dGVNYXA7CisKKyAgICBTdHJpbmcgbWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyAgICBTdHJpbmcgbWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0s
IHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBTdHJpbmcgb3JpZ2luYWxT
eW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIE9wdGlvbmFsPFN0cmluZz4gbWFwcGVkU3ltYm9s
SW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3lt
Ym9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBPcHRpb25hbDxTdHJpbmc+IG9yaWdp
bmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkZXJOYW1lSGFzaD4gbmFtZUhhc2hNYXBGb3JTaGFkZXJzOworI2VuZGlmIC8vICFV
U0UoQU5HTEUpCisKKyNpZiBVU0UoQU5HTEUpCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnNH
TEFOR0xFOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xBTkdMRT4gbV9leHRlbnNp
b25zOworI2VsaWYgIVBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgIGZyaWVu
ZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUzsKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9u
c0dMT3BlbkdMQ29tbW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zR0xPcGVuR0xF
Uz4gbV9leHRlbnNpb25zOworI2VsaWYgVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAm
JiBVU0UoT1BFTkdMX0VTKSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMOwor
ICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb247CisgICAgc3RkOjp1bmlx
dWVfcHRyPEV4dGVuc2lvbnNHTE9wZW5HTD4gbV9leHRlbnNpb25zOworI2VuZGlmCisKKyAgICBH
cmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JD
cmVhdGlvbiB7IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpEZWZhdWx0IH07Cisg
ICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4+IG1fdmVydGV4QXJyYXk7CisKKyNpZiAhVVNFKEFOR0xF
KQorICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7CisjZW5kaWYKKworICAgIEdDM0R1
aW50IG1fdGV4dHVyZSB7IDAgfTsKKyAgICBHQzNEdWludCBtX2ZibyB7IDAgfTsKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgR0MzRHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZSB7
IDAgfTsKKyAgICBHQzNEdWludCBtX2ludGVybWVkaWF0ZVRleHR1cmUgeyAwIH07CisjZW5kaWYK
KworICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXIgeyAwIH07CisgICAgR0MzRHVpbnQgbV9zdGVu
Y2lsQnVmZmVyIHsgMCB9OworICAgIEdDM0R1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyIHsgMCB9
OworCisgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZCB7IGZhbHNlIH07CisgICAgR0MzRHVpbnQg
bV9pbnRlcm5hbENvbG9yRm9ybWF0IHsgMCB9OworCisjaWYgVVNFKEFOR0xFKSAmJiBQTEFURk9S
TShDT0NPQSkKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMU3VyZmFjZSBtX3BidWZmZXI7
CisjZW5kaWYKKworICAgIHN0cnVjdCBHcmFwaGljc0NvbnRleHRHTFN0YXRlIHsKKyAgICAgICAg
R0MzRHVpbnQgYm91bmRGQk8geyAwIH07CisgICAgICAgIEdDM0RlbnVtIGFjdGl2ZVRleHR1cmVV
bml0IHsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwIH07CisKKyAgICAgICAgdXNpbmcgQm91
bmRUZXh0dXJlTWFwID0gSGFzaE1hcDxHQzNEZW51bSwKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxH
QzNEdWludCwgR0MzRGVudW0+LAorICAgICAgICAgICAgV1RGOjpJbnRIYXNoPEdDM0RlbnVtPiwg
CisgICAgICAgICAgICBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50
PiwKKyAgICAgICAgICAgIFdURjo6UGFpckhhc2hUcmFpdHM8V1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxHQzNEdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8R0MzRHVpbnQ+PgorICAgICAgICA+OworICAgICAgICBCb3VuZFRleHR1cmVNYXAgYm91bmRU
ZXh0dXJlTWFwOworICAgICAgICBHQzNEdWludCBjdXJyZW50Qm91bmRUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gYm91bmRUZXh0dXJlKGFjdGl2ZVRleHR1cmVVbml0KTsgfQorICAgICAgICBHQzNE
dWludCBib3VuZFRleHR1cmUoR0MzRGVudW0gdGV4dHVyZVVuaXQpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRleHR1cmVNYXAuZmluZCh0ZXh0dXJl
VW5pdCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gYm91bmRUZXh0dXJlTWFwLmVuZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZmlyc3Q7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIEdDM0R1aW50IGN1cnJlbnRCb3Vu
ZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGFyZ2V0KGFjdGl2ZVRleHR1cmVVbml0KTsg
fQorICAgICAgICBHQzNEZW51bSBib3VuZFRhcmdldChHQzNEZW51bSB0ZXh0dXJlVW5pdCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1h
cC5maW5kKHRleHR1cmVVbml0KTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRl
eHR1cmVNYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5z
ZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
c2V0Qm91bmRUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmVVbml0LCBHQzNEdWludCB0ZXh0dXJlLCBH
QzNEZW51bSB0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvdW5kVGV4dHVyZU1hcC5z
ZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFrZV9wYWlyKHRleHR1cmUsIHRhcmdldCkpOworICAgICAg
ICB9CisKKyAgICAgICAgdXNpbmcgVGV4dHVyZVNlZWRDb3VudCA9IEhhc2hDb3VudGVkU2V0PEdD
M0R1aW50LCBXVEY6OkludEhhc2g8R0MzRHVpbnQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPEdDM0R1aW50Pj47CisgICAgICAgIFRleHR1cmVTZWVkQ291bnQgdGV4dHVyZVNl
ZWRDb3VudDsKKyAgICB9OworCisgICAgR3JhcGhpY3NDb250ZXh0R0xTdGF0ZSBtX3N0YXRlOwor
CisgICAgLy8gRm9yIG11bHRpc2FtcGxpbmcKKyAgICBHQzNEdWludCBtX211bHRpc2FtcGxlRkJP
IHsgMCB9OworICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgeyAw
IH07CisgICAgR0MzRHVpbnQgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyIHsgMCB9OworCisgICAg
Ly8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgorICAgIExpc3RIYXNoU2V0
PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKworI2lmIFVTRShOSUNPU0lBKSAmJiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgZnJpZW5kIGNsYXNzIE5pY29zaWE6OkdDM0RMYXllcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0MzRExheWVyPiBtX25pY29zaWFMYXllcjsKKyNl
bGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyR0MzRFBs
YXRmb3JtTGF5ZXI+IG1fdGV4bWFwTGF5ZXI7CisjZWxpZiAhUExBVEZPUk0oQ09DT0EpCisgICAg
ZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlPiBtX3ByaXZhdGU7CisjZW5k
aWYKKworICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOworCisgICAgYm9vbCBtX2lzRm9y
V2ViR0wyIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNpbmdDb3JlUHJvZmlsZSB7IGZhbHNlIH07
CisKKyAgICB1bnNpZ25lZCBtX3N0YXR1c0NoZWNrQ291bnQgeyAwIH07CisgICAgYm9vbCBtX2Zh
aWxOZXh0U3RhdHVzQ2hlY2sgeyBmYWxzZSB9OworCisjaWYgVVNFKENBSVJPKQorICAgIFBsYXRm
b3JtM0RPYmplY3QgbV92YW8geyAwIH07CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKSAm
JiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKKyAgICBib29sIG1faGFzU3dpdGNoZWRUb0hp
Z2hQZXJmb3JtYW5jZUdQVSB7IGZhbHNlIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJh
c2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJiMDg2ZDBjNTFmY2QxNWI4NTk3ZTJiYzAzOTA5OGRhMWYxMjk4
NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcApAQCAtMCwwICsxLDUxNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisj
aWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdMKSB8fCAoUExBVEZP
Uk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKSkKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oIgorI2VuZGlmCisjaW5j
bHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlRl
bXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUv
QWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VsaWYgVVNFKE9QRU5HTF9FUykKKyNpbXBv
cnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KKyNk
ZWZpbmUgR0xfUkdCQTMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5l
IEdMX1JHQjMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2VsaWYgVVNFKE9Q
RU5HTCkKKyNkZWZpbmUgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJT
X0lOQ0xVREVECisjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjaW5jbHVkZSA8T3BlbkdML2dsMy5o
PgorI3VuZGVmIEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNM
VURFRAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQor
c3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit7CisgICAgLy8gV2UgY2FuIGFzc3VtZSB0aGlz
IGRvZXNuJ3Qgb3ZlcmZsb3cgYmVjYXVzZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMKKyAgICAvLyB1
c2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWln
aHQgKiA0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAg
ICAgICBwaXhlbHNbaSArIDNdID0gMjU1OworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3sK
KyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIC8vIE5WSURJQSBk
cml2ZXJzIGhhdmUgYSBidWcgd2hlcmUgY2FsbGluZyByZWFkUGl4ZWxzIGluIEJHUkEgY2FuIHJl
dHVybiB0aGUgd3JvbmcgdmFsdWVzIGZvciB0aGUgYWxwaGEgY2hhbm5lbCB3aGVuIHRoZSBhbHBo
YSBpcyBvZmYgZm9yIHRoZSBjb250ZXh0LgorICAgIGlmICghYXR0cnMuYWxwaGEgJiYgZ2V0RXh0
ZW5zaW9ucygpLmlzTlZJRElBKCkpIHsKKyAgICAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyNpZiBVU0Uo
QUNDRUxFUkFURSkKKyAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7CisgICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQ7CisgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoOworICAgICAgICBzcmMucm93
Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgICAgIHNyYy5kYXRhID0gcGl4ZWxzOworCisgICAgICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICAgICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7CisgICAg
ICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICog
NDsKKyAgICAgICAgZGVzdC5kYXRhID0gcGl4ZWxzOworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwg
Y2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRd
ID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4
OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisjZWxzZQorICAgICAgICBpbnQg
dG90YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ld
LCBwaXhlbHNbaSArIDJdKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgICA6OmdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84Xzhf
OF9SRVYsIHBpeGVscyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFhdHRycy5hbHBo
YSkKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgcGl4
ZWxzKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZUF0dHJpYnV0ZXMoKQoreworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJHTF9FWFRfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwiKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVz
aGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAg
Y29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgR0x1aW50IGNvbG9yRm9ybWF0
LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7CisgICAgaWYgKGF0dHJzLmFscGhhKSB7
CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBjb2xv
ckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQor
ICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSB7CisgICAgICAgIC8vIFdlIGRv
bid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBp
cyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVB
dHRyaWJ1dGVzLgorCisgICAgICAgIEV4dGVuc2lvbnNHTCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVu
c2lvbnMoKTsKKyAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3ZSBr
bm93IHdlIGhhdmUgaXQuCisgICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9FWFRf
cGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIGVsc2UKKyNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhT
dGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisjZWxzZQorICAgICAgICAgICAg
aW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisjZW5kaWYK
KyAgICB9CisKKyAgICAvLyBSZXNpemUgbXVsdGlzYW1wbGUgRkJPLgorICAgIGlmIChhdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIDo6Z2xH
ZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAg
IC8vIFVzaW5nIG1vcmUgdGhhbiA0IHNhbXBsZXMgaXMgc2xvdyBvbiBzb21lIGhhcmR3YXJlIGFu
ZCBpcyB1bmxpa2VseSB0bworICAgICAgICAvLyBwcm9kdWNlIGEgc2lnbmlmaWNhbnRseSBiZXR0
ZXIgcmVzdWx0LgorICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNh
bXBsZUNvdW50KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworI2lmIFBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAgICAgICA6OmdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBH
TF9SR0JBOF9PRVMsIHdpZHRoLCBoZWlnaHQpOworI2Vsc2UKKyAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3Vu
dCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorICAgICAg
ICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSB7
CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxl
Q291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVO
VF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChH
TF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0
YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VY
VCkgeworICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJP
CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsK
KyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0UoT1BF
TkdMX0VTKQorICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0
dXJlKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdM
X0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fdGV4dHVyZSk7CisgICAgc2V0
UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0KTsKKyNlbHNlCisgICAgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgdXBkYXRlRnJhbWVidWZmZXJUZXh0dXJlQmFja2luZ1N0
b3JlRnJvbUxheWVyKCk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BUkIsIG1fdGV4dHVyZSwgMCk7CisjZW5kaWYgLy8gIVVTRShPUEVOR0xfRVMpKQorI2Vsc2UK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICA6Omds
RnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwor
ICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgICAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAg
ICAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7
CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICB9CisjZW5k
aWYKKyNlbmRpZgorCisgICAgYXR0YWNoRGVwdGhBbmRTdGVuY2lsQnVmZmVySWZOZWVkZWQoaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgYm9vbCBtdXN0
UmVzdG9yZUZCTyA9IHRydWU7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisg
ICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJvKQorICAgICAgICAgICAgbXVzdFJlc3RvcmVG
Qk8gPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklm
TmVlZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAg
aWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpKSB7
CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOworICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgIDo6Z2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRU
QUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQs
IEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpn
bEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgfQorCisg
ICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAvLyBGSVhNRTogY2xlYW51
cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihH
TF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNj
b3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0
aW5nIHNjb3BlZERlcHRoKEdMX0RFUFRIX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBUZW1wb3JhcnlP
cGVuR0xTZXR0aW5nIHNjb3BlZFN0ZW5jaWwoR0xfU1RFTkNJTF9URVNULCBHTF9GQUxTRSk7CisK
KyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICBHTGludCBib3VuZEZy
YW1lQnVmZmVyOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAm
Ym91bmRGcmFtZUJ1ZmZlcik7CisjZW5kaWYKKworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7Cisg
ICAgOjpnbEZsdXNoKCk7CisgICAgOjpnbFJlc29sdmVNdWx0aXNhbXBsZUZyYW1lYnVmZmVyQVBQ
TEUoKTsKKyAgICBjb25zdCBHTGVudW0gZGlzY2FyZHNbXSA9IHsgR0xfQ09MT1JfQVRUQUNITUVO
VDAsIEdMX0RFUFRIX0FUVEFDSE1FTlQgfTsKKyAgICA6OmdsRGlzY2FyZEZyYW1lYnVmZmVyRVhU
KEdMX1JFQURfRlJBTUVCVUZGRVJfQVBQTEUsIDIsIGRpc2NhcmRzKTsKKyAgICA6OmdsQmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1lQnVmZmVyKTsKKyNlbHNlCisgICAg
SW50UmVjdCByZXNvbHZlUmVjdCA9IHJlY3Q7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXNvbHZlUmVjdCA9IEludFJlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCk7CisKKyAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHJlc29sdmVSZWN0LngoKSwg
cmVzb2x2ZVJlY3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1heFkoKSwg
cmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVz
b2x2ZVJlY3QubWF4WSgpLCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworI2VuZGlm
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFVT
RShPUEVOR0wpCisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgREVQVEhf
U1RFTkNJTDoKKyAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VY
VDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBERVBUSF9DT01QT05FTlQxNjoKKyAgICAgICAg
aW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUkdCQTQ6CisgICAgY2FzZSBSR0I1X0ExOgorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9
IEdMX1JHQkE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkdCNTY1OgorICAgICAgICBpbnRl
cm5hbGZvcm1hdCA9IEdMX1JHQjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAg
OjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICAvLyBOZWVkIHRvIGVtdWxh
dGUgTUFYX0ZSQUdNRU5UL1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgYW5kIE1BWF9WQVJZSU5HX1ZF
Q1RPUlMKKyAgICAvLyBiZWNhdXNlIGRlc2t0b3AgR0wncyBjb3JyZXNwb25kaW5nIHF1ZXJpZXMg
cmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cworICAgIC8vIHdoZXJlYXMgR0xFUzIgcmV0
dXJuIHRoZSBudW1iZXIgb2YgdmVjdG9ycyAoZWFjaCB2ZWN0b3IgaGFzIDQgY29tcG9uZW50cyku
CisgICAgLy8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVk
cyB0byBiZSBkaXZpZGVkIGJ5IDQuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgc3dp
dGNoIChwbmFtZSkgeworI2lmIFVTRShPUEVOR0wpCisgICAgY2FzZSBNQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTOgorICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX0ZSQUdNRU5UX1VO
SUZPUk1fQ09NUE9ORU5UUywgdmFsdWUpOworICAgICAgICAqdmFsdWUgLz0gNDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgOjpn
bEdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7Cisg
ICAgICAgICp2YWx1ZSAvPSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1BWF9WQVJZSU5H
X1ZFQ1RPUlM6CisgICAgICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCg6OmdsR2V0RXJyb3IoKSA9PSBHTF9OT19FUlJPUik7CisgICAgICAgICAgICA6Omds
R2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywgdmFsdWUpOworICAgICAgICAgICAg
aWYgKDo6Z2xHZXRFcnJvcigpID09IEdMX0lOVkFMSURfRU5VTSkgeworICAgICAgICAgICAgICAg
IDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19DT01QT05FTlRTLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgKnZhbHVlIC89IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCB2YWx1
ZSk7CisgICAgICAgICAgICAqdmFsdWUgLz0gNDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyNlbmRpZgorICAgIGNhc2UgTUFYX1RFWFRVUkVfU0laRToKKyAgICAgICAgOjpnbEdldEludGVn
ZXJ2KE1BWF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMo
KS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKKyAgICAgICAgICAgICp2
YWx1ZSA9IHN0ZDo6bWluKDQwOTYsICp2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMo
KS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKKyAgICAgICAgICAgICp2
YWx1ZSA9IHN0ZDo6bWluKDEwMjQsICp2YWx1ZSk7CisgICAgICAgIGJyZWFrOworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICAvLyBTb21lIG9sZGVyIGhhcmR3YXJlIGFkdmVydGlzZXMgYSBsYXJnZXIg
bWF4aW11bSB0aGFuIHRoZXkKKyAgICAvLyBjYW4gYWN0dWFsbHkgaGFuZGxlLiBSYXRoZXIgdGhh
biBkZXRlY3Rpbmcgc3VjaCBkZXZpY2VzLCBzaW1wbHkKKyAgICAvLyBjbGFtcCB0aGUgbWF4aW11
bSB0byA4MTkyLCB3aGljaCBpcyBiaWcgZW5vdWdoIGZvciBhIDVLIGRpc3BsYXkuCisgICAgY2Fz
ZSBNQVhfUkVOREVSQlVGRkVSX1NJWkU6CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfUkVO
REVSQlVGRkVSX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oODE5Miwg
KnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNQVhfVklFV1BPUlRfRElNUzoKKyAg
ICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9WSUVXUE9SVF9ESU1TLCB2YWx1ZSk7CisgICAgICAg
IHZhbHVlWzBdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMF0pOworICAgICAgICB2YWx1ZVsxXSA9
IHN0ZDo6bWluKDgxOTIsIHZhbHVlWzFdKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBk
ZWZhdWx0OgorICAgICAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1h
dChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiBy
YW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQoreworICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBl
KTsKKyAgICBBU1NFUlQocmFuZ2UpOworICAgIEFTU0VSVChwcmVjaXNpb24pOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9JTlQ6Cisg
ICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGEgMzItYml0IHR3b3MtY29tcGxlbWVudCBp
bnRlZ2VyIGZvcm1hdC4KKyAgICAgICAgcmFuZ2VbMF0gPSAzMTsKKyAgICAgICAgcmFuZ2VbMV0g
PSAzMDsKKyAgICAgICAgcHJlY2lzaW9uWzBdID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TE9XX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6Ok1FRElVTV9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0ZMT0FU
OgorICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGZvciBhbiBJRUVFIHNpbmdsZS1wcmVjaXNp
b24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LgorICAgICAgICByYW5nZVswXSA9IDEyNzsKKyAgICAg
ICAgcmFuZ2VbMV0gPSAxMjc7CisgICAgICAgIHByZWNpc2lvblswXSA9IDIzOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQorewor
ICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIEdDM0RlbnVtIG9wZW5HTEZvcm1hdCA9IGZvcm1hdDsKKyAgICBHQzNEZW51bSBvcGVuR0xJ
bnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OworI2lmIFVTRShPUEVOR0wpCisgICAgaWYg
KHR5cGUgPT0gR0xfRkxPQVQpIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9SR0JBKQorICAg
ICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBMzJGX0FSQjsKKyAgICAgICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKKyAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9y
bWF0ID0gR0xfUkdCMzJGX0FSQjsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9P
RVMpIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9SR0JBKQorICAgICAgICAgICAgb3BlbkdM
SW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBMTZGX0FSQjsKKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0
ID09IEdMX1JHQikKKyAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMTZG
X0FSQjsKKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRSkKKyAgICAgICAg
ICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5BTkNFMTZGX0FSQjsKKyAgICAgICAg
ZWxzZSBpZiAoZm9ybWF0ID09IEdMX0FMUEhBKQorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxG
b3JtYXQgPSBHTF9BTFBIQTE2Rl9BUkI7CisgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9M
VU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX0xV
TUlOQU5DRV9BTFBIQTE2Rl9BUkI7CisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsK
KyAgICB9CisKKyAgICBBU1NFUlQoZm9ybWF0ICE9IEV4dGVuc2lvbnNHTDo6U1JHQjhfQUxQSEE4
X0VYVCk7CisgICAgaWYgKGZvcm1hdCA9PSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUKQor
ICAgICAgICBvcGVuR0xGb3JtYXQgPSBHTF9SR0JBOworICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBF
eHRlbnNpb25zR0w6OlNSR0JfRVhUKQorICAgICAgICBvcGVuR0xGb3JtYXQgPSBHTF9SR0I7Cisj
ZW5kaWYKKworICAgIGlmIChtX3VzaW5nQ29yZVByb2ZpbGUpIHsKKyAgICAgICAgLy8gVGhlcmUg
YXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQg
d2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFw
dCB0aGVtLgorICAgICAgICBzd2l0Y2ggKG9wZW5HTEludGVybmFsRm9ybWF0KSB7CisgICAgICAg
IGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBUaGUgZm9ybWF0IGlzIGEgc2ltcGxlIGNvbXBv
bmVudCBjb250YWluaW5nIGFuIGFscGhhIHZhbHVlLiBJdCBuZWVkcyB0byBiZSBiYWNrZWQgd2l0
aCBhIEdMX1JFRCBwbGFuZS4KKyAgICAgICAgICAgIC8vIFdlIGNoYW5nZSB0aGUgZm9ybWF0cyB0
byBHTF9SRUQgKGJvdGggbmVlZCB0byBiZSBHTF9BTFBIQSBpbiBXZWJHTCkgYW5kIGluc3RydWN0
IHRoZSB0ZXh0dXJlIHRvIHN3aXp6bGUKKyAgICAgICAgICAgIC8vIHRoZSByZWQgY29tcG9uZW50
IHZhbHVlcyB3aXRoIHRoZSBhbHBoYSBjb21wb25lbnQgdmFsdWVzLgorICAgICAgICAgICAgb3Bl
bkdMSW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xGb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICB0ZXhQ
YXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0EsIFJFRCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBUaGUg
Zm9ybWF0IGhhcyAyIGNvbXBvbmVudHMsIGFuIGFscGhhIG9uZSBhbmQgYSBsdW1pbmFuY2Ugb25l
IChzYW1lIHZhbHVlIGZvciByZWQsIGdyZWVuIGFuZCBibHVlKS4KKyAgICAgICAgICAgIC8vIEl0
IG5lZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEgR0xfUkcgcGxhbmUsIHVzaW5nIHRoZSByZWQgY29t
cG9uZW50IGZvciB0aGUgY29sb3JzIGFuZCB0aGUgZ3JlZW4gY29tcG9uZW50CisgICAgICAgICAg
ICAvLyBmb3IgYWxwaGEuIFdlIGNoYW5nZSB0aGUgZm9ybWF0cyB0byBHTF9SRyBhbmQgc3dpenps
ZSB0aGUgY29tcG9uZW50cy4KKyAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gb3Bl
bkdMRm9ybWF0ID0gUkc7CisgICAgICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVS
RV9TV0laWkxFX1IsIFJFRCk7CisgICAgICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVY
VFVSRV9TV0laWkxFX0csIFJFRCk7CisgICAgICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwg
VEVYVFVSRV9TV0laWkxFX0IsIFJFRCk7CisgICAgICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdl
dCwgVEVYVFVSRV9TV0laWkxFX0EsIEdSRUVOKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0
ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIsIG9wZW5HTEZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShH
QzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgOjpnbERl
cHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6
RmFyKSk7CisjZWxzZQorICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyNlbmRpZgor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYg
ZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIFVTRShPUEVOR0xfRVMpCisgICAgOjpnbENsZWFyRGVwdGhmKHN0YXRpY19jYXN0PGZsb2F0
PihkZXB0aCkpOworI2Vsc2UKKyAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7CisjZW5kaWYKK30K
KworI2lmICFQTEFURk9STShHVEspCitFeHRlbnNpb25zR0wmIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgbV9leHRlbnNpb25zID0gbWFr
ZVVuaXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIGZhbHNlKTsKKyNlbHNlCisgICAgICAg
IG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMPih0aGlzLCBpc0dM
RVMyQ29tcGxpYW50KCkpOworI2VuZGlmCisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9Cisj
ZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgYXV0byBhdHRycyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xG
bHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFs
bCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcg
cGl4ZWxzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVzaCgpOworICAg
IGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIDo6Z2xGbHVzaCgp
OworICAgIH0KKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGRhdGEpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZC
TyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgaWYgKCFhdHRycy5hbHBoYSAmJiAoZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6QkdSQSkgJiYg
KG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8gfHwgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRl
LmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5l
bEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRh
dGEpKTsKKyNlbmRpZgorfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9F
UykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODUyZThhMGZlYjMzYzdiNWU5MmMxODdmNDJiMjZkNGI0ZDc4MDEzZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTAsMCArMSwyMDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdMKSB8
fCBVU0UoT1BFTkdMX0VTKSkKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oIgorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0o
Q09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMRVMu
aCIKKyNlbHNlCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCisjZW5kaWYKKyNpbmNs
dWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIgorI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhw
cmVzc2lvbi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5o
PgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNp
ZmljLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2lmIFVTRShPUEVOR0xf
RVMpCisjaW1wb3J0IDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KKyNpbXBvcnQgPE9wZW5HTEVTL0VT
My9nbC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4KKyNkZWZpbmUgR0xfUkdCQTMyRl9B
UkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRl9BUkIgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2Vsc2UKKyNkZWZpbmUgR0xfRE9fTk9UX1dBUk5f
SUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECisjaW5jbHVkZSA8T3BlbkdML2ds
Lmg+CisjaW5jbHVkZSA8T3BlbkdML2dsMy5oPgorI2luY2x1ZGUgPE9wZW5HTC9nbDNleHQuaD4K
KyN1bmRlZiBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVE
RUQKKyNlbmRpZgorCisjZWxzZQorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgIkVwb3h5
U2hpbXMuaCIKKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5o
IgorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiT3BlbkdM
U2hpbXMuaCIKKyNlbmRpZgorCisjZW5kaWYKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+JiBnZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAg
ICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiogc2hhcmVkTmFtZUhhc2g7
CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgc2hhcmVkTmFtZUhh
c2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPjsKKyAgICB9KTsKKworICAg
IHJldHVybiAqc2hhcmVkTmFtZUhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIHNldEN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlcihTaGFkZXJOYW1lSGFzaCogc2hhZGVyTmFtZUhhc2gpCit7CisgICAg
KmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpID0gc2hhZGVyTmFtZUhhc2g7Cit9CisK
Ky8vIEhhc2ggZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5HTEUgdHJhbnNsYXRvci9jb21waWxlciB0
byBkbworLy8gc3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgbWV0
aG9kLCBiZWZvcmUKKy8vIGNhbGxpbmcgY29tcGlsZVNoYWRlciB3ZSBzZXQgY3VycmVudE5hbWVI
YXNoTWFwRm9yU2hhZGVyCisvLyB0byBwb2ludCB0byB0aGUgbWFwIGtlcHQgYnkgdGhlIGN1cnJl
bnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCisKK3N0YXRpYyB1aW50NjRf
dCBuYW1lSGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBuYW1lLCBzaXplX3QgbGVuZ3RoKQorewor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTdHJpbmcgbmFtZUFz
Q1N0cmluZyA9IENTdHJpbmcobmFtZSk7CisKKyAgICAvLyBMb29rIHVwIG5hbWUgaW4gb3VyIGxv
Y2FsIG1hcC4KKyAgICBTaGFkZXJOYW1lSGFzaComIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRl
ciA9ICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKTsKKyAgICBTaGFkZXJOYW1lSGFz
aDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+Zmlu
ZChuYW1lQXNDU3RyaW5nKTsKKyAgICBpZiAoZmluZFJlc3VsdCAhPSBjdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXItPmVuZCgpKQorICAgICAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7CisK
KyAgICB1bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXNDU3RyaW5nLmhhc2goKTsKKworICAgIC8v
IENvbnZlcnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0cmluZzo6aGFzaCBpbnRvIGEgNjQtYml0
IHJlc3VsdAorICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4gYWRkaW5nIHRoZSBzaXplIG9mIG91ciB0
YWJsZS4gT3ZlcmZsb3cgd291bGQKKyAgICAvLyBvbmx5IGJlIGEgcHJvYmxlbSBpZiB3ZSdyZSBh
bHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUgKGFuZAorICAgIC8vIHdlJ3JlIGhvcGlu
ZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0IHdlCisgICAgLy8gZG9uJ3Qg
aGF2ZSB0aGF0IG1hbnkgc3ltYm9scykuCisKKyAgICB1aW50NjRfdCByZXN1bHQgPSBoYXNoVmFs
dWU7CisgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikgKyAoY3VycmVudE5hbWVIYXNoTWFwRm9y
U2hhZGVyLT5zaXplKCkgKyAxKTsKKworICAgIGN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlci0+
c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hh
ciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQoreworICAgIGF1dG8gYXR0cnMgPSBjb250
ZXh0QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dMJiBleHRlbnNpb25zID0gZ2V0RXh0
ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlmIChleHRlbnNp
b25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwor
ICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgorICAgICAgICAg
ICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGF0dHJz
LnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwor
ICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFtX2lzRm9yV2ViR0wyKSB7CisgICAg
ICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAg
ICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0
aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKQorewor
ICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gcm93Qnl0ZXMgPSBDaGVja2VkPGludCwg
UmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIDQ7CisgICAgaWYgKHJvd0J5dGVzLmhh
c092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2hlY2tlZDxpbnQsIFJlY29y
ZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0
OworICAgIGlmICh0b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHRvdGFsQnl0ZXNDaGVja2VkLnVuc2FmZUdldCgp
OworCisgICAgYXV0byBwaXhlbHMgPSBtYWtlVW5pcXVlQXJyYXk8dW5zaWduZWQgY2hhcj4odG90
YWxCeXRlcyk7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybjsKKworICAgIHJlYWRS
ZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxCeXRlcyk7CisKKyAgICBpZiAoIWNv
bnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhKSB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7CisgICAgICAgICAgICAvLyBQcmVtdWx0
aXBseSBhbHBoYS4KKyAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1pbigyNTUsIHBp
eGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tp
ICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSArIDNdIC8gMjU1
KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsg
Ml0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHBhaW50
VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0
KCkpOworCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgcHJlc2Vu
dFJlbmRlcmJ1ZmZlcigpOworI2VuZGlmCit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCit7CisgICAg
Ly8gTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50LCBzbyByZXR1cm4gdGhhdCBub3RoaW5nIHdhcyBk
b25lLgorICAgIHJldHVybiBmYWxzZTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcworICAgIC8vIGxvc3N5LgorICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLnByZW11bHRpcGxpZWRBbHBoYSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0
YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0b3Rh
bEJ5dGVzQ2hlY2tlZCA9IDQgKiBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVu
dFdpZHRoKSAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50SGVpZ2h0KTsK
KyAgICBpZiAodG90YWxCeXRlc0NoZWNrZWQuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gaW1hZ2VEYXRhOworICAgIGludCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5z
YWZlR2V0KCk7CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFsQnl0ZXMp
OworCisgICAgLy8gQ29udmVydCB0byBSR0JBLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90
YWxCeXRlczsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSAr
IDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisjaWYgIVVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3Bl
ZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CisgICAgVGVtcG9yYXJ5T3BlbkdM
U2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7CisjZW5kaWYKKworICAg
IGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykKKyAgICAgICAgcmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeSgpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
ICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIHN0ZDo6
c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZsdXNoKCk7CisKKyAgICBpZiAobV9z
dGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOworICAgIGVs
c2UKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKKyAgICByZXR1cm47CisjZW5kaWYKKworICAgIDo6Z2xBY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhUVVJFMCkgPT0gR0xfVEVYVFVSRV8yRCA/IG1fc3Rh
dGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUwKSA6IDApOworICAgIDo6Z2xBY3RpdmVUZXh0dXJl
KG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQpOworICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9
IG1fZmJvKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7CisgICAgOjpnbEZsdXNoKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2ln
bmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUpCit7CisgICAgaWYgKHBpeGVsc1NpemUg
PCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IGZhbHNlOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykgeworICAgICAg
ICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAg
ICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9z
dGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0
cnVlOworICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMaW50IHBh
Y2tBbGlnbm1lbnQgPSA0OworICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFs
c2U7CisgICAgOjpnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVu
dCk7CisgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0KSB7CisgICAgICAgIDo6Z2xQaXhlbFN0b3Jl
aShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7CisgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVu
dCA9IHRydWU7CisgICAgfQorCisgICAgcmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vz
c2FyeSgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBwaXhlbHMpOworCisg
ICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVp
KEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0UmVzdG9y
ZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIXBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHdp
ZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVCh3aWR0aCA+PSAwICYmIGhlaWdodCA+PSAwKTsKKyAg
ICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBt
X2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2Nv
cGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBUZW1wb3JhcnlPcGVu
R0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKKyAgICAKKyAgICBi
b29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7
CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBHTGZsb2F0IGNs
ZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7CisgICAgR0xpbnQgY2xl
YXJTdGVuY2lsID0gMDsKKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50
IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZiwgc3RlbmNpbE1hc2tCYWNrID0gMHhmZmZmZmZmZjsK
KyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpn
bEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRF
TUFTSywgY29sb3JNYXNrKTsKKyAgICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdM
X1RSVUUsIEdMX1RSVUUpOworCisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
CisKKyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBU
SF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJEZXB0aCgxKTsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dS
SVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7Cisg
ICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAo
YXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVB
Ul9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoMCk7Cisg
ICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRf
Y2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xf
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2ls
TWFza0JhY2spKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4
ZmZmZmZmZmYpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCAweGZm
ZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAg
ICB9CisKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKKworICAgIDo6Z2xDbGVhckNvbG9yKGNs
ZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10p
OworICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFz
a1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6
Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsK
KyAgICAgICAgOjpnbENsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBzdGVuY2lsTWFza0JhY2spOworICAgIH0KKworICAg
IGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOworCisgICAgOjpn
bEZsdXNoKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrVmFyeWlu
Z3NQYWNraW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0
IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5j
b250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29u
dGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0
byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIp
LT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6U2hhZGVyVmFyaWFibGU+IGNvbWJp
bmVkVmFyeWluZ3M7CisgICAgZm9yIChjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhF
bnRyeS52YXJ5aW5nTWFwKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3ltYm9sTmFtZSA9IHZl
cnRleFN5bWJvbC5rZXk7CisgICAgICAgIC8vIFRoZSB2YXJ5aW5nIG1hcCBpbmNsdWRlcyB2YXJp
YWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFyaWFibGUuCisgICAgICAgIC8vIFdl
IG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXByZXNlbnQgdGhlIGFycmF5LgorICAg
ICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4gdmFyeWluZ3MuCisgICAgICAgIGlm
IChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5bWJvbE5hbWUgPT0gImdsX0Zyb250
RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENvb3JkIikKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50U3ltYm9sID0gZnJhZ21lbnRF
bnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7CisgICAgICAgIGlmIChmcmFnbWVudFN5
bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5kKCkpCisgICAgICAgICAgICBjb21i
aW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVudFN5bWJvbC0+dmFsdWUpOworICAg
IH0KKworICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpOwor
ICAgIGlmICghbnVtVmFyeWluZ3MpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3RkOjp2
ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7CisgICAgdmFyaWFibGVzLnJlc2Vy
dmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOworICAgIGZvciAoY29uc3QgYXV0byYgdmFyeWlu
Z1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkpCisgICAgICAgIHZhcmlhYmxlcy5w
dXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7CisKKyAgICBHQzNEaW50IG1heFZhcnlpbmdWZWN0b3Jz
ID0gMDsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xHZXRJbnRlZ2VydihNQVhfVkFSWUlO
R19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOworI2Vsc2UKKyAgICBpZiAobV9pc0Zvcldl
YkdMMikKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMsICZt
YXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZWxzZSB7CisgICAgICAgIEdDM0RpbnQgbWF4VmFyeWlu
Z0Zsb2F0cyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9B
VFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKKyAgICAgICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtYXhW
YXJ5aW5nRmxvYXRzIC8gNDsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gc2g6OkNoZWNrVmFy
aWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5nVmVjdG9ycywgdmFyaWFibGVzKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBsYXRm
b3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVy
KSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhT
aGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRT
aGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRy
eSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAg
IEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXA7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4RW50cnkudW5pZm9ybU1hcCkgewor
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLm1hcHBl
ZE5hbWU7CisgICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5hZGQoU3RyaW5nKG1hcHBl
ZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSksIGVudHJ5LnZhbHVlLnByZWNpc2lv
bik7CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGZyYWdtZW50RW50cnku
dW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFtZSA9IGVu
dHJ5LnZhbHVlLm1hcHBlZE5hbWU7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9
IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCks
IG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0
ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBlbnRy
eS52YWx1ZS5wcmVjaXNpb24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0ludFNpemUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZSht
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJl
OworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJU
KHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9zaGFkZXJQcm9ncmFt
U3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOworICAgIDo6Z2xBdHRhY2hTaGFkZXIocHJv
Z3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0
dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUo
cHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9HKFdl
YkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIsIG5hbWUudXRm
OCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6OmdsQmluZEF0dHJp
YkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVp
bnQgZmJvOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZibyA9IGJ1ZmZlcjsKKyAgICBlbHNl
CisgICAgICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyA/IG1fbXVsdGlz
YW1wbGVGQk8gOiBtX2Zibyk7CisgICAgaWYgKGZibyAhPSBtX3N0YXRlLmJvdW5kRkJPKSB7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOworICAgICAgICBtX3N0
YXRlLmJvdW5kRkJPID0gZmJvOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
cmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKworCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3N0
YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0
YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNE
Y2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0
aW9uKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEJsZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxw
aGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3Rvciwg
ZGZhY3Rvcik7Cit9ICAgICAgIAorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0g
c3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRz
dEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShH
QzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUs
IDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVm
ZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIg
b2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwg
c2l6ZSwgZGF0YSk7Cit9CisKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV1BFKQor
dm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVs
ZCBhY2Nlc3MpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xN
YXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworfQorCitHQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0gdGFy
Z2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsVW5tYXBC
dWZmZXIodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weUJ1
ZmZlclN1YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0gd3JpdGVUYXJnZXQsIEdD
M0RpbnRwdHIgcmVhZE9mZnNldCwgR0MzRGludHB0ciB3cml0ZU9mZnNldCwgR0MzRHNpemVpcHRy
IHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENvcHlCdWZmZXJT
dWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwg
c2l6ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9y
bWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJhbXMpCit7CisjaWYgVVNFKE9Q
RU5HTF9FUykKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0SW50ZXJuYWxm
b3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGludGVy
bmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUpOworICAgIFVOVVNFRF9QQVJBTShi
dWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsKKyNlbmRpZgorfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwg
c2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6
ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhT
dG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhTdG9yYWdlM0QodGFyZ2V0
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUlu
ZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4mIHBhcmFtcykKK3sKKyAgICBB
U1NFUlQocHJvZ3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICA6OmdsR2V0
QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1J
bmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBhcmFtcy5kYXRhKCkpOworfQorI2VuZGlmCisKK0dDM0Rl
bnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0Rl
bnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0Mz
RGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xDbGVhcihtYXNrKTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiBy
ZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBo
YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hh
ZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFR1cm4gb24gbmFtZSBt
YXBwaW5nLiBEdWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhhc2hpbmcgd29ya3MsIHdlCisgICAg
Ly8gcG9pbnQgYSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFwIG93bmVkIGJ5IHRoaXMgY29udGV4
dC4KKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBtX2NvbXBpbGVyLmdl
dFJlc291cmNlcygpOworICAgIFNoSGFzaEZ1bmN0aW9uNjQgcHJldmlvdXNIYXNoRnVuY3Rpb24g
PSBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb247CisgICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1
bmN0aW9uID0gbmFtZUhhc2hGb3JTaGFkZXI7CisKKyAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hh
ZGVycykKKyAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1ZTxTaGFkZXJO
YW1lSGFzaD4oKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobmFtZUhhc2hN
YXBGb3JTaGFkZXJzLmdldCgpKTsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJl
c291cmNlcyk7CisKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5z
aW9ucy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7CisKKyAgICBBTkdM
RVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBwcmV2aW91c0hhc2hGdW5jdGlvbjsKKyAgICBtX2Nv
bXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgc2V0Q3VycmVudE5hbWVI
YXNoTWFwRm9yU2hhZGVyKG51bGxwdHIpOworCisgICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291
cmNlLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBDU3RyaW5nJiB0cmFu
c2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOworICAg
IGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmlu
Zy5kYXRhKCk7CisgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hh
ZGVyQ1N0cmluZy5sZW5ndGgoKTsKKworICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiBvcmlnaW5h
bCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAt
LS1cbiIsIGdldFNoYWRlclNvdXJjZShzaGFkZXIpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhX
ZWJHTCwgIi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVu
ZCB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tIiwgdHJhbnNsYXRlZFNoYWRlclB0cik7CisK
KyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0
cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKKyAgICAKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFk
ZXIpOworICAgIAorICAgIGludCBjb21waWxlU3RhdHVzOworICAgIAorICAgIDo6Z2xHZXRTaGFk
ZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1cyk7CisKKyAgICBTaGFk
ZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisg
ICAgLy8gUG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKKyAgICBHTGludCBsZW5ndGggPSAwOworICAg
IDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisK
KyAgICBpZiAobGVuZ3RoKSB7CisgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgICAgIFZl
Y3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICAgICAgOjpnbEdldFNoYWRlckluZm9Mb2co
c2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICAgICAgUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKKyAgICAgICAgZW50cnkubG9nID0g
Z2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUp
KTsKKyAgICB9CisKKyAgICBpZiAoY29tcGlsZVN0YXR1cyAhPSBHTF9UUlVFKSB7CisgICAgICAg
IGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRXJyb3I6IHNoYWRl
ciB0cmFuc2xhdG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQgT3BlbkdMIHdvdWxkIG5vdCBjb21w
aWxlLiIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGls
ZVNoYWRlckRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hh
ZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEhhc2hNYXA8UGxhdGZvcm0z
RE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50
cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0
cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29uc3QgY2hhciogc2hhZGVyU291cmNl
UHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7CisgICAgaW50IHNoYWRlclNvdXJjZUxl
bmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7CisKKyAgICBMT0coV2ViR0wsICIt
LS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4lc1xuLS0tIGVuZCBkaXJlY3Qgc2hh
ZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7CisKKyAgICA6OmdsU2hhZGVyU291
cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNoYWRlclNvdXJjZUxlbmd0aCk7CisK
KyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisgICAgaW50IGNvbXBpbGVTdGF0dXM7
CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01QSUxFX1NUQVRVUywgJmNvbXBpbGVT
dGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0gR0xfVFJVRSkgeworICAgICAgICBl
bnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdlYkdMLCAiRGlyZWN0IGNvbXBpbGF0
aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW50cnku
aXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogZGlyZWN0IGNvbXBp
bGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsK
KworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgfQorICAgIDo6
Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUu
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGF1dG8gYXR0cnMgPSBjb250
ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJv
KTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChhdHRycy5hbnRpYWxp
YXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNl
KEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEN1
bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1
bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
RGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0
aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsRGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAucmVtb3ZlKHByb2dyYW0pOworICAgIDo6Z2xEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQzNEZW51bSBj
YXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERpc2FibGUoY2FwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRHJh
d0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldCkpKTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmluaXNoKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEZyb250RmFjZShtb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0g
dGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZW5lcmF0ZU1p
cG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAw
OworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhf
TEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhB
dHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVz
IG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGlu
dCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZUF0dHJp
Yihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAm
dHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5h
bWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZGF0
YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyB1bmlm
b3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7CisgICAgTE9HKFdlYkdMLCAiUHJvZ3Jh
bSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBw
cm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0
ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKKyAgICBpbmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7Cisg
ICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWIo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKK3sKKyAgICBHQzNEaW50IHN5bWJvbENvdW50OworICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CisgICAgICAgIGdldE5vbkJ1
aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZF
X0FUVFJJQlVURVMsICZzeW1ib2xDb3VudCk7CisgICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJv
Z3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgfQorICAgIAorICAgIEFjdGl2
ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKKyAgICBH
QzNEdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFs
QXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFs
QXR0cmlidXRlSW5kZXhNYXBbaW5kZXhdIDogLTE7CisKKyAgICByZXR1cm4gZ2V0QWN0aXZlQXR0
cmliSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFt
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xp
bnQgbWF4VW5pZm9ybVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKKworICAgIFZlY3Rv
cjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBHTF9BQ1RJVkVfVU5JRk9STV9NQVhf
TEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBuYW1lTGVuZ3Ro
ID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgOjpn
bEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxl
bmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7CisgICAgaWYgKCFuYW1lTGVuZ3RoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9y
aWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgU3Ry
aW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAgCisjaWZuZGVmIE5ERUJVRworICAg
IFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7CisgICAgTE9HKFdl
YkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1bmlmb3JtICVkIGZyb20gJyVzJyB0
byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdp
bmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIAorICAgIGluZm8ubmFtZSA9IG9y
aWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBHQzNEaW50IHN5bWJvbENvdW50OworICAgIGF1dG8g
cmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKKyAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Cisg
ICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBHcmFwaGljc0Nv
bnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291bnQpOworICAgICAgICByZXN1bHQg
PSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOworICAgIH0KKyAg
ICAKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5bWJvbENvdW50cyA9IHJlc3VsdC0+
dmFsdWU7CisgICAgR0MzRHVpbnQgcmF3SW5kZXggPSAoaW5kZXggPCBzeW1ib2xDb3VudHMuZmls
dGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRl
cmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDogLTE7CisgICAgCisgICAgcmV0dXJu
IGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0
Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHBy
b2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2Vu
ZXJhdGVIYXNoZWROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHVpbnQ2NF90IG51bWJlciA9IG5hbWVI
YXNoRm9yU2hhZGVyKG5hbWUudXRmOCgpLmRhdGEoKSwgbmFtZS5sZW5ndGgoKSk7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIndlYmdsXyIsIGhleChudW1iZXIsIExvd2VyY2FzZSkpOworfQorCitP
cHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBwZWRTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xU
eXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
Y29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlw
ZSk7CisgICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1hcC5maW5kKG5hbWUpOworICAgIGlm
IChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBwZWROYW1lID0gc3ltYm9sRW50cnktPnZhbHVlLm1hcHBl
ZE5hbWU7CisgICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUu
bGVuZ3RoKCkpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcHBlZFN5
bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUg
c3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDM0RzaXplaSBjb3VudCA9
IDA7CisgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdID0geyB9OworICAgIGdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgZm9yIChHQzNE
c2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gbWFwcGVkTmFtZSA9
IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5h
bWUpOworICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtYXBwZWRO
YW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgLy8gV2UgbWlnaHQgaGF2ZSBkZXRhY2hlZCBvciBk
ZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCisgICAgYXV0byByZXN1bHQgPSBtX2xp
bmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOworICAgIGlmIChyZXN1bHQgIT0gbV9saW5rZWRT
aGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBsaW5rZWRTaGFkZXJzID0gcmVzdWx0LT52
YWx1ZTsKKyAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3Vy
Y2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlm
IChtYXBwZWROYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKKyAg
ICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKGxpbmtlZFNo
YWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG1hcHBlZE5hbWUp
CisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlm
IChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5
IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwK
KyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNo
YWRlciBwcm9ncmFtLgorICAgICAgICBpZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAg
ICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+
KCk7CisgICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihuYW1lSGFzaE1hcEZv
clNoYWRlcnMuZ2V0KCkpOworCisgICAgICAgIGF1dG8gZ2VuZXJhdGVkTmFtZSA9IGdlbmVyYXRl
SGFzaGVkTmFtZShuYW1lKTsKKworICAgICAgICBzZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIobnVsbHB0cik7CisKKyAgICAgICAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcC5zZXQo
Z2VuZXJhdGVkTmFtZSwgbmFtZSk7CisKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE5hbWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK09wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGNvbnN0IGF1dG8mIHN5bWJvbE1hcCA9
IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgIGZvciAoY29uc3QgYXV0
byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9s
RW50cnkudmFsdWUubWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgcmV0dXJuIHN5bWJv
bEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIEdDM0RzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwg
c2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNv
dXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAgICAgICAgaWYgKG9yaWdp
bmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKKyAgICB9
CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMg
YWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQo
cHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewor
ICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQtPnZhbHVlOworICAgICAgICBhdXRv
IG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hh
ZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAgICAgIGlmIChvcmlnaW5hbE5hbWUp
CisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7CisgICAgICAgIG9yaWdp
bmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5z
ZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAob3JpZ2luYWxOYW1lKQorICAg
ICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOworICAgIH0KKworICAgIGlmIChz
eW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1h
eSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhhdmUgYmVlbiBjb21waWxlZCwKKyAg
ICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRvIGJlIHVzZWQgaW4gYW55IHNoYWRl
ciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNhY2hlZCA9IG1fcG9zc2libHlVbnVz
ZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGNhY2hlZCAhPSBtX3Bvc3Np
Ymx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZC0+
dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK1N0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNb
Ml0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoc2l6ZV90
IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRpY19jYXN0PHNpemVfdD4oU0hBREVS
X1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBTaGFkZXJTb3VyY2VNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBTaGFk
ZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN0YXRpY19j
YXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1ib2xUeXBlKSk7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUubWFwcGVkTmFtZS5jX3N0cigpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50cnkua2V5OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCitpbnQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVk
TmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJ
QlVURSwgbmFtZSk7CisgICAgTE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1h
cHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRh
dGEoKSk7CisgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBtYXBwZWRO
YW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0
aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAg
IC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcg
YSBoYW5nIGlmCisgICAgLy8gYSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMg
aXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQg
anVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBnbEdldEVycm9yKCk7
CisgICAgICAgIGlmIChlcnJvciA9PSBOT19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworICAgICAgICBtb3ZlZEFuRXJyb3Ig
PSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBtb3ZlZEFuRXJyb3I7Cit9CisKK0dDM0RlbnVt
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCit7CisgICAgaWYgKCFtX3N5bnRo
ZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJy
ZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgaW4gY2FzZQorICAgICAgICAv
LyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUsIHNpbmNlIHRoZSBleHBlY3RlZCBiZWhhdmlv
ciBvZiBib3RoCisgICAgICAgIC8vIGdsR2V0RXJyb3IgYW5kIGdldEVycm9yIGlzIHRvIG9ubHkg
cmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgorICAgICAgICBtb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKTsKKyAgICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJz
dCgpOworICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6Omds
R2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJp
bmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFt
ZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIGlmICgh
YnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7Cit9
CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
cmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVyKTsKK30KKworR0MzRGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9n
cmFtKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVuZGVy
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVy
YnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7Cit9
CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc1No
YWRlcihzaGFkZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
Cit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgR0MzRHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0g
PSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVy
cyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAgbV9saW5rZWRTaGFkZXJNYXAuc2V0
KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0sIHNoYWRlcnNbMV0pKTsKKworICAg
IDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0MzRGZs
b2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNE
Ym9vbGVhbiBpbnZlcnQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNh
bXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFNj
aXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OworCisgICAgZW50cnkuc291cmNl
ID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBm
dW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNl
LCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5j
LCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2ls
TWFzayhHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xTdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2Us
IG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0Mz
RGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNz
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0
ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdD
M0RmbG9hdCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4
UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0xZihsb2NhdGlv
biwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwg
djEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQorewor
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24s
IHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZs
b2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtMWkobG9j
YXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFp
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYx
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAg
Ly8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5KQoreworICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYz
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRp
b24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGlu
dCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDQuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00aXYobG9j
YXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAxNi4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVc2VQcm9n
cmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0
ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFt
KTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWYWxpZGF0ZVByb2dyYW0o
cHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29u
c3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVy
dGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBh
cnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmli
MmZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwg
R0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0
KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0
cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2
MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgs
IEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0Mz
RHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xWaWV3cG9ydCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIEdMdWludCBhcnJheSA9IDA7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisgICAgOjpn
bEdlblZlcnRleEFycmF5cygxLCAmYXJyYXkpOworI2VuZGlmCisgICAgcmV0dXJuIGFycmF5Owor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0
Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiAoIVVTRShPUEVOR0xfRVMpICYm
IChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKKyAg
ICA6OmdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CisjZW5kaWYKK30KKworR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9i
amVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CisgICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAm
JiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisg
ICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFycmF5KGFycmF5KTsKKyNlbmRpZgorICAgIHJldHVybiBH
TF9GQUxTRTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFy
cmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4p
KSkgfHwgUExBVEZPUk0oQ09DT0EpCisgICAgOjpnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShhcnJheSk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFu
KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0Qm9vbGVh
bnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldEJ1ZmZl
clBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVl
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUs
IHZhbHVlKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHBuYW1lKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAqdmFsdWUgPSAwOwor
ICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBz
d2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhl
IFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCisgICAgLy8gOjpnbEdldEludGVn
ZXI2NHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8g
T3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisgICAgOjpnbEdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZh
bHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbWl2KFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChBQ1RJVkVfQVRUUklC
VVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0gcG5hbWUpOworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGNv
bnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJv
Z3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5l
bmQoKSkgeworICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZhbHVlLmNvdW50Rm9yVHlwZShwbmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xD
b3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkpOworICAgIEFj
dGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gbV9zaGFkZXJQcm9ncmFtU3lt
Ym9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFsdWU7CisKKyAgICAvLyBSZXRyaWV2ZSB0aGUg
YWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmlsdGVyZWQgY291bnQsIGFuZCBhIG1hcHBpbmcg
b2YKKyAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmlidXRlcyBpbmRleGVzIHRvIHRoZSByZWFsIHVu
ZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdMLgorICAgIEdDM0RpbnQgYXR0cmlidXRlQ291
bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX0FUVFJJQlVURVMs
ICZhdHRyaWJ1dGVDb3VudCk7CisgICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgYXR0cmlidXRl
Q291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJbmZvIGluZm87CisgICAgICAgIGdldEFjdGl2
ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7CisgICAgICAgIGlmIChpbmZvLm5hbWUuc3Rh
cnRzV2l0aCgiZ2xfIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzeW1ib2xD
b3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9
CisgICAgCisgICAgLy8gRG8gdGhlIHNhbWUgZm9yIHVuaWZvcm1zLgorICAgIEdDM0RpbnQgdW5p
Zm9ybUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklG
T1JNUywgJnVuaWZvcm1Db3VudCk7CisgICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgdW5pZm9y
bUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAgICBnZXRBY3Rp
dmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5z
dGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuYXBwZW5kKGkp
OworICAgIH0KKyAgICAKKyAgICAqdmFsdWUgPSBzeW1ib2xDb3VudHMuY291bnRGb3JUeXBlKHBu
YW1lKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJ
bmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgR0MzRHNpemVpIGNvdW50LCBjb25z
dCBTdHJpbmcmIGxvZykKK3sKKyAgICBMT0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9n
OlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7CisKKyAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHBy
ZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3ODlhYmNkZWZBQkNERUZdKyIpOworCisgICAg
U3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7CisgICAgCisgICAgLy8gQU5HTEUgaW5zZXJ0cyBh
ICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNoYWRlciBzb3VyY2UgdGhhdAorICAgIC8vIGNh
dXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxlcnMuIFRoZXJlIGlzIG5vIHBvaW50IHNob3dp
bmcKKyAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhlIHVzZXIgc2luY2UgdGhleSBkaWRuJ3Qgd3Jp
dGUgdGhlIGNvZGUgdGhhdAorICAgIC8vIGlzIGNhdXNpbmcgaXQuCisgICAgc3RhdGljIGNvbnN0
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVXYXJuaW5nIHsgIldBUk5JTkc6IDA6MTogZXh0
ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlzIG5vdCBzdXBwb3J0ZWRcbiJfcyB9OworICAg
IGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0aChhbmdsZVdhcm5pbmcpID8gYW5nbGVXYXJu
aW5nLmdldCgpLmxlbmd0aCgpIDogMDsKKyAgICBpbnQgbWF0Y2hlZExlbmd0aCA9IDA7CisKKyAg
ICBkbyB7CisgICAgICAgIGludCBzdGFydCA9IHJlZ0V4cC5tYXRjaChsb2csIHN0YXJ0RnJvbSwg
Jm1hdGNoZWRMZW5ndGgpOworICAgICAgICBpZiAoc3RhcnQgPT0gLTEpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3RhcnRG
cm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOworICAgICAgICBzdGFydEZyb20gPSBzdGFydCArIG1h
dGNoZWRMZW5ndGg7CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBtYW5nbGVkU3ltYm9sID0gbG9n
LnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0aCk7CisgICAgICAgIGNvbnN0IFN0cmluZyYg
bWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFtZShzaGFkZXJzLCBjb3VudCwgbWFuZ2xlZFN5
bWJvbCk7CisgICAgICAgIExPRyhXZWJHTCwgIkRlbWFuZ2xpbmc6ICVzIHRvICVzIiwgbWFuZ2xl
ZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRTeW1ib2wudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVkU3ltYm9sKTsKKyAgICB9IHdoaWxlIChzdGFy
dEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5sZW5ndGgoKSkpOworCisgICAgcHJvY2Vzc2Vk
TG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRG
cm9tKSk7CisKKyAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwg
cHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nl
c3NlZExvZy50b1N0cmluZygpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NF
UlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsZW5n
dGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RI
LCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAK
KworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgp
OworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZv
LmRhdGEoKSk7CisKKyAgICBHQzNEc2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNo
YWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQs
IFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFs
dWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQorewor
ICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBj
b25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAg
CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKKyAgICBjYXNl
IFNIQURFUl9UWVBFOgorICAgICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFs
dWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgorICAgICAgICBp
ZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAqdmFs
dWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+dmFsdWUuaXNW
YWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5GT19MT0dfTEVOR1RIOgorICAgICAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAq
dmFsdWUgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICp2YWx1
ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgKnZhbHVlID0gZ2V0U2hhZGVy
U291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5VTSk7CisgICAgfQorfQorCitTdHJp
bmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZp
bmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29uc3QgU2hhZGVyU291cmNlRW50cnkm
IGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCisgICAgICAg
IHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRT
aGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisKKyAgICBHTHNpemVpIHNpemUgPSAw
OworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICA6OmdsR2V0U2hhZGVySW5m
b0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKKworICAgIFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07CisgICAgcmV0dXJuIGdldFVubWFu
Z2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Cit9CisK
K1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIHJldHVybiByZXN1bHQtPnZhbHVl
LnNvdXJjZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1l
dGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyZnYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VGV4
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2Nh
dGlvbiwgdmFsdWUpOworfQorCitHQzNEaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hB
REVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOworICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5p
Zm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1h
cHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoaW5kZXgsIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK0dDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIEdMdm9pZCogcG9pbnRlciA9IDA7CisgICAgOjpnbEdl
dFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBv
aW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZiwgR0MzRGludCB5
b2ZmLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAgaWYgKHR5cGUgPT0gSEFMRl9GTE9B
VF9PRVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyNlbmRpZgorCisgICAg
aWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9y
bWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBh
IGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLCBhcyB3
ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRCgpLgorICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8gV2Ug
YXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBzbyBkbyBpdCBoZXJlIGFzIHdlbGwu
CisgICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBXZSBhcmUgdXNpbmcgR0xfUkcg
dG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KKyAgICAg
ICAgICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiB3
ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3
aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZS4KKyAg
ICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQqIGRhdGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENvbXBy
ZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUo
KSk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZUJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAw
OworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2xHZW5G
cmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK1Bs
YXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAwOworICAg
IGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQzNEZW51
bSB0eXBlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbENyZWF0
ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDog
R0xfVkVSVEVYX1NIQURFUik7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOworICAgIHJldHVybiBvOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZi
dWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRkJPKSB7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQg
Zm9yIGRyYXdpbmcKKyAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQu
CisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorICAgIGds
RGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVNo
YWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1
dG8mIGtleVZhbHVlKSB7CisgICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0
ZXh0dXJlOworICAgIH0pOworICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAg
IG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9y
KQoreworICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRo
ZXRpYyBlcnJvciBsaXN0IHRvCisgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywg
c28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKKyAgICAvLyBhbnkgZXJyb3JzIGZyb20g
Z2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50aGVzaXppbmcuCisgICAgbW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVy
cm9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFya0NvbnRleHRDaGFu
Z2VkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBtX2xheWVy
Q29tcG9zaXRlZCA9IHRydWU7CisKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3Rv
cihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPmRpZENvbXBvc2l0ZSgpOworfQorCitib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCgpCit7CisgICAgZm9yIChhdXRvKiBjbGllbnQgOiBjb3B5
VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5mb3JjZUNvbnRleHRMb3N0KCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlY3ljbGVDb250ZXh0KCkKK3sK
KyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAg
ICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQoreworICAgIGZvciAo
YXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+
ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7
CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNv
dW50LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5j
ZWQobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAgICBjaGVja0dQVVN0
YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJE
aXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQoreworICAgIGdldEV4dGVu
c2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKK30KKworI2lmIFVT
RShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7Cit9Cisj
ZW5kaWYKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChV
U0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGRiNjc4ZGFiNjU2YjE1ZWJkYThkOTkzM2MxMTVl
NmQzMThkNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCkBAIC0wLDAgKzEsNDEz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFp
bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoT1BF
TkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TE9wZW5HTEVTLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
dm9pZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGF1dG8gYXR0
cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
ZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAor
ICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3Jl
IHJlYWRpbmcgcGl4ZWxzLgorICAgIDo6Z2xGbHVzaCgpOworICAgIGlmIChhdHRyaWJ1dGVzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAg
ICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgICAgICA6OmdsRmx1c2goKTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBpeGVscyh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgaWYgKGF0dHJp
YnV0ZXMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNBbmRD
b252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgIGlu
dCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgIGlmIChpc0dMRVMyQ29tcGxp
YW50KCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQp
CisgICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsgLy8gQ29u
dmVydCB0byBCR1JBLgorICAgIH0KK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBjb25zdCBpbnQgd2lkdGgg
PSBzaXplLndpZHRoKCk7CisgICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Cisg
ICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMDsKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKKyAgICAgICAgbV9p
bnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9S
R0JBOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JH
QjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorCisgICAgLy8gV2UgZG9u
J3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlz
IG5vdC4KKyAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0cmli
dXRlcy4KKyAgICBib29sIHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIgPSAoYXR0cmli
dXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpICYmIGdldEV4dGVuc2lvbnMoKS5zdXBw
b3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICAvLyBSZXNpemUgcmVn
dWxhciBGQk8uCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX3N0
YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IH0KKworICAgIEFTU0VSVChtX3RleHR1cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdM
X1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwg
MCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRv
clRleHR1cmUpIHsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29t
cG9zaXRvclRleHR1cmUpOworICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApOworICAgIH0KKworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2lu
dGVybWVkaWF0ZVRleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdM
X1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKKyNlbmRpZgorCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMRVMmIGV4dGVuc2lvbnMgPSBzdGF0
aWNfY2FzdDxFeHRlbnNpb25zR0xPcGVuR0xFUyY+KGdldEV4dGVuc2lvbnMoKSk7CisgICAgaWYg
KGV4dGVuc2lvbnMuaXNJbWFnaW5hdGlvbigpICYmIGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Cisg
ICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoRXh0
ZW5zaW9uc0dMOjpNQVhfU0FNUExFU19JTUcsICZtYXhTYW1wbGVDb3VudCk7IAorICAgICAgICBH
TGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsKKworICAgICAg
ICBleHRlbnNpb25zLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcoR0xfRlJBTUVC
VUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDAs
IHNhbXBsZUNvdW50KTsKKworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJp
YnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIg
d2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgorICAgICAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWRE
ZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
cihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZG
RVIsIHNhbXBsZUNvdW50LCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgICAg
ICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FU
VEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7
CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZF
UiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5yZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwg
R0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRU
QUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAg
ICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhC
dWZmZXIpOworICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBHTF9ERVBUSF9DT01Q
T05FTlQxNiwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xf
UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIs
IDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICAvLyBVc2UgYSAyNCBiaXQg
ZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KKyAgICAgICAgICAgIGlmIChz
dXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdM
X1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRF
UkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAg
ICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVS
QlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAg
ICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwg
bV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9y
YWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgOjpn
bEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAvLyBGSVhNRTogY2xlYW51cAorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JikKK3sKKyAgICAvLyBGSVhNRTogV2UgZG9uJ3Qgc3Vw
cG9ydCBhbnRpYWxpYXNpbmcgeWV0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xSZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdl
dEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51
bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQorewor
ICAgIEFTU0VSVChyYW5nZSk7CisgICAgQVNTRVJUKHByZWNpc2lvbik7CisKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KHNoYWRlclR5
cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKQoreworICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgIWdldEV4
dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVy
ZSIpKSB7CisgICAgICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIHNl
dENvbnRleHRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgIH0KK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBm
IHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlcHRoUmFuZ2Vm
KHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJE
ZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7Cit9CisKKyNpZiAhUExBVEZPUk0oR1RLKQorRXh0ZW5z
aW9uc0dMJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAg
aWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0
ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMsIGlzR0xFUzJDb21wbGlhbnQoKSk7CisgICAgcmV0dXJu
ICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENB
KQorUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2lu
ZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVz
dGluYXRpb24pCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRs
eSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KKyAgICBpZiAo
ZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZh
bHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIGlmICghaW5pdGlhbGl6
ZWQpIHsKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICAgICAgc3VjY2VzcyA9IGluaXRpYWxpemVP
cGVuR0xTaGltcygpOworI2VuZGlmCisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMsIGhv
c3RXaW5kb3csIHJlbmRlclN0eWxlKSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmli
dXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBk
ZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCisgICAg
OiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzLCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4
dCkKKyAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNvbXBsaWFudCgpID8gU0hfRVNTTF9PVVRQVVQg
OiBTSF9HTFNMX0NPTVBBVElCSUxJVFlfT1VUUFVUKQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlPih0aGlzLCBkZXN0aW5hdGlvbikpCit7
CisgICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgCisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Cisg
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5h
dGlvbjo6T2Zmc2NyZWVuKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVy
IGludG8uCisgICAgICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9D
TEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OworICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIGFuIEZCTy4KKyAgICAgICAgOjpnbEdlbkZy
YW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIAorICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0g
bV9mYm87CisgICAgICAgIGlmICghYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkKKyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIAorICAgICAgICAvLyBD
cmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlh
cykgeworICAgICAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2Ft
cGxlRkJPOworICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0
dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAgIFNoQnVpbHRJblJlc291cmNlcyBB
TkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNl
cyk7CisgICAgCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9W
RVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVD
VE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
JkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywg
JkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworICAgIAorICAgIC8vIEFs
d2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3VyY2VzLk1heERyYXdC
dWZmZXJzID0gMTsKKyAgICAKKyAgICBHQzNEaW50IHJhbmdlWzJdLCBwcmVjaXNpb247CisgICAg
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFHTUVO
VF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpISUdIX0ZMT0FULCByYW5nZSwgJnBy
ZWNpc2lvbik7CisgICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gKHJh
bmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7CisgICAgCisgICAgbV9jb21waWxlci5z
ZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIAorI2lmICFVU0UoT1BFTkdMX0VTKQor
ICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CisgICAgOjpnbEVu
YWJsZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCisgICAgCisgICAgOjpnbENsZWFyQ29sb3Io
MCwgMCwgMCwgMCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0woKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEZWxl
dGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAg
ICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAg
ICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmbV9mYm8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
ZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6dW5pcXVlX3B0cjxDb250ZXh0TG9zdENhbGxiYWNr
PikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2V0RXJyb3JNZXNzYWdl
Q2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPikKK3sKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAg
ICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3By
aXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKQor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRmb3JtQ29udGV4dCgpOworfQorCitQbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3RleHR1cmU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworI2lmIFVTRShPUEVOR0xfRVMpCisg
ICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitQ
bGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1MYXllcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fd2ViR0xMYXllci0+cGxhdGZvcm1MYXllcigpOworfQorI2Vu
ZGlmCisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0Uo
T1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWIwMjdjYTc0OGRiNWM4
MjA0MzFiN2Y5NDgxODFiOTk5ZDBiMzlhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuY3BwCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1Nf
Q09OVFJPTCkKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKworI2lmIFBMQVRGT1JN
KE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpCisjaW5jbHVkZSAiU3dpdGNoaW5n
R1BVQ2xpZW50LmgiCisjaW5jbHVkZSA8T3BlbkdML09wZW5HTC5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKworZW51
bSB7CisgICAga0FHQ09wZW4sCisgICAga0FHQ0Nsb3NlCit9OworCitzdGF0aWMgaW9fY29ubmVj
dF90IGF0dGFjaFRvQXBwbGVHcmFwaGljc0NvbnRyb2woKQoreworICAgIG1hY2hfcG9ydF90IG1h
c3RlclBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAKKyAgICBpZiAoSU9NYXN0ZXJQb3J0KE1B
Q0hfUE9SVF9OVUxMLCAmbWFzdGVyUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICByZXR1
cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGNsYXNzVG9NYXRj
aCA9IElPU2VydmljZU1hdGNoaW5nKCJBcHBsZUdyYXBoaWNzQ29udHJvbCIpOworICAgIGlmICgh
Y2xhc3NUb01hdGNoKQorICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAg
a2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OworICAgIGlvX2l0ZXJhdG9yX3QgaXRlcmF0b3I7Cisg
ICAgaWYgKChrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlR2V0TWF0Y2hpbmdTZXJ2aWNlcyhtYXN0ZXJQ
b3J0LCBjbGFzc1RvTWF0Y2gsICZpdGVyYXRvcikpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAg
cmV0dXJuIE1BQ0hfUE9SVF9OVUxMOworICAgIAorICAgIGlvX3NlcnZpY2VfdCBzZXJ2aWNlT2Jq
ZWN0ID0gSU9JdGVyYXRvck5leHQoaXRlcmF0b3IpOworICAgIElPT2JqZWN0UmVsZWFzZShpdGVy
YXRvcik7CisgICAgaWYgKCFzZXJ2aWNlT2JqZWN0KQorICAgICAgICByZXR1cm4gTUFDSF9QT1JU
X05VTEw7CisgICAgCisgICAgaW9fY29ubmVjdF90IGRhdGFQb3J0OworICAgIElPT2JqZWN0UmV0
YWluKHNlcnZpY2VPYmplY3QpOworICAgIGtlcm5SZXN1bHQgPSBJT1NlcnZpY2VPcGVuKHNlcnZp
Y2VPYmplY3QsIG1hY2hfdGFza19zZWxmKCksIDAsICZkYXRhUG9ydCk7CisgICAgSU9PYmplY3RS
ZWxlYXNlKHNlcnZpY2VPYmplY3QpOworICAgIAorICAgIHJldHVybiAoa2VyblJlc3VsdCA9PSBL
RVJOX1NVQ0NFU1MpID8gZGF0YVBvcnQgOiBNQUNIX1BPUlRfTlVMTDsKK30KKworc3RhdGljIGJv
b2wgaGFzTXV4Q2FwYWJpbGl0eSgpCit7CisgICAgaW9fY29ubmVjdF90IGRhdGFQb3J0ID0gYXR0
YWNoVG9BcHBsZUdyYXBoaWNzQ29udHJvbCgpOworICAgIAorICAgIGlmIChkYXRhUG9ydCA9PSBN
QUNIX1BPUlRfTlVMTCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGJvb2wgcmVz
dWx0OworICAgIGlmIChJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0aG9kKGRhdGFQb3J0LCBrQUdDT3Bl
biwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cikgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAg
ICAgIElPQ29ubmVjdENhbGxTY2FsYXJNZXRob2QoZGF0YVBvcnQsIGtBR0NDbG9zZSwgbnVsbHB0
ciwgMCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfSBl
bHNlCisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIAorICAgIElPU2VydmljZUNsb3NlKGRh
dGFQb3J0KTsKKyAgICAKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIC8vIFRoaXMgaXMgZGV0
ZWN0aW5nIE1hYyBoYXJkd2FyZSB3aXRoIGFuIEludGVsIGc1NzUgR1BVLCB3aGljaAorICAgICAg
ICAvLyB3ZSBkb24ndCB3YW50IHRvIG1ha2UgYXZhaWxhYmxlIHRvIG11eGluZy4KKyAgICAgICAg
Ly8gQmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBBcHBsZSdzIE9wZW5HTCB0ZWFtLCBzdWNoIGRl
dmljZXMKKyAgICAgICAgLy8gaGF2ZSBmb3VyIG9yIGZld2VyIHByb2Nlc3NvcnMuCisgICAgICAg
IC8vIDxyZGFyOi8vcHJvYmxlbS8zMDA2MDM3OD4KKyAgICAgICAgaW50IG5hbWVzWzJdID0geyBD
VExfSFcsIEhXX05DUFUgfTsKKyAgICAgICAgaW50IGNwdUNvdW50OworICAgICAgICBzaXplX3Qg
Y3B1Q291bnRMZW5ndGggPSBzaXplb2YoY3B1Q291bnQpOworICAgICAgICBzeXNjdGwobmFtZXMs
IDIsICZjcHVDb3VudCwgJmNwdUNvdW50TGVuZ3RoLCBudWxscHRyLCAwKTsKKyAgICAgICAgcmVz
dWx0ID0gY3B1Q291bnQgPiA0OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citib29sIGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKQoreworICAgIHN0YXRpYyBib29sIGNhbk11
eCA9IGhhc011eENhcGFiaWxpdHkoKTsKKyAgICByZXR1cm4gY2FuTXV4OworfQorI2VuZGlmIC8v
IEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXI+IHNfbWFuYWdlcjsKKyAgICByZXR1cm4gc19tYW5hZ2VyOworfQorCisjaWYgUExBVEZPUk0o
TUFDKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNv
bmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBm
bGFncywgdm9pZCopCit7CisgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkIik7CisgICAgaWYgKGZsYWdzICYga0NHRGlz
cGxheVNldE1vZGVGbGFnKQorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6
OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250ZXh0cygpOworfQorI2VuZGlmCisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjp1cGRhdGVBbGxDb250ZXh0cygpCit7Cisj
aWYgUExBVEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNvbnRleHQgOiBtX2NvbnRleHRzKSB7CisgICAgICAgIGNvbnRleHQtPnVw
ZGF0ZUNHTENvbnRleHQoKTsKKyAgICAgICAgY29udGV4dC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbigpOworICAgIH0KKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oTUFDKQor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNjcmVlbkRpZENoYW5nZShQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIGNvbnN0IEhvc3RXaW5kb3cqIHdpbmRvdykKK3sKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHRBbmRXaW5kb3cgOiBtX2NvbnRleHRXaW5kb3dNYXAp
IHsKKyAgICAgICAgaWYgKGNvbnRleHRBbmRXaW5kb3cudmFsdWUgPT0gd2luZG93KSB7CisgICAg
ICAgICAgICBjb250ZXh0QW5kV2luZG93LmtleS0+c2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCk7
CisgICAgICAgICAgICBMT0coV2ViR0wsICJDaGFuZ2luZyBjb250ZXh0ICglcCkgdG8gZGlzcGxh
eSAoJWQpLiIsIGNvbnRleHRBbmRXaW5kb3cua2V5LCBkaXNwbGF5SUQpOworICAgICAgICB9Cisg
ICAgfQorfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjph
ZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0LCBIb3N0V2luZG93KiB3
aW5kb3cpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghY29udGV4dCkKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhRU5BQkxFKFdFQlBST0NFU1NfV0lO
RE9XU0VSVkVSX0JMT0NLSU5HKQorICAgIGlmICghbV9jb250ZXh0cy5zaXplKCkpCisgICAgICAg
IENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29u
ZmlndXJlZCwgbnVsbHB0cik7CisjZW5kaWYKKworICAgIEFTU0VSVCghbV9jb250ZXh0cy5jb250
YWlucyhjb250ZXh0KSk7CisgICAgbV9jb250ZXh0cy5hcHBlbmQoY29udGV4dCk7CisgICAgbV9j
b250ZXh0V2luZG93TWFwLnNldChjb250ZXh0LCB3aW5kb3cpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCogY29udGV4dCkKK3sKKyAgICBpZiAoIW1fY29udGV4dHMuY29udGFpbnMoY29udGV4dCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHRzLnJlbW92ZUZpcnN0KGNvbnRleHQpOwor
ICAgIG1fY29udGV4dFdpbmRvd01hcC5yZW1vdmUoY29udGV4dCk7CisgICAgcmVtb3ZlQ29udGV4
dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShjb250ZXh0KTsKKyAgICAKKyNpZiBQTEFURk9STShN
QUMpICYmICFFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCisgICAgaWYg
KCFtX2NvbnRleHRzLnNpemUoKSkKKyAgICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0
aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29uZmlndXJlZCwgbnVsbHB0cik7CisjZW5kaWYKK30K
KworSG9zdFdpbmRvdyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpob3N0V2luZG93
Rm9yQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9jb250ZXh0V2luZG93TWFwLmNvbnRhaW5zKGNvbnRleHQpKTsKKyAgICByZXR1
cm4gbV9jb250ZXh0V2luZG93TWFwLmdldChjb250ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGNvbnRleHQp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCht
X2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKTsKKyAgICBBU1NFUlQoIW1fY29udGV4dHNSZXF1
aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29udGFpbnMoY29udGV4dCkpOworICAgIAorICAgIExPRyhX
ZWJHTCwgIlRoaXMgY29udGV4dCAoJXApIHJlcXVpcmVzIHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQ
VS4iLCBjb250ZXh0KTsKKyAgICBtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLmFk
ZChjb250ZXh0KTsKKyAgICAKKyAgICB1cGRhdGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4dFJlcXVp
cmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3sK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9jb250ZXh0
c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5jb250YWlucyhjb250ZXh0KSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIExPRyhXZWJHTCwgIlRoaXMgY29udGV4dCAoJXApIG5vIGxvbmdlciBy
ZXF1aXJlcyB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIiwgY29udGV4dCk7CisgICAgbV9jb250
ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5yZW1vdmUoY29udGV4dCk7CisgICAgCisgICAg
dXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXI6OnVwZGF0ZUhpZ2hQZXJmb3JtYW5jZVN0YXRlKCkKK3sKKyNpZiBQTEFU
Rk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQorICAgIGlmICghaGFzTG93
QW5kSGlnaFBvd2VyR1BVcygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fY29u
dGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uuc2l6ZSgpKSB7CisgICAgICAgIAorICAgICAg
ICBpZiAobV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuaXNBY3RpdmUoKSkgeworICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiQ2FuY2VsIHBlbmRpbmcgdGltZXIgZm9yIHR1cm5pbmcgb2Zm
IGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOworICAgICAgICAgICAgbV9kaXNhYmxlSGlnaFBlcmZv
cm1hbmNlR1BVVGltZXIuc3RvcCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3JlcXVl
c3RpbmdIaWdoUGVyZm9ybWFuY2UpIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIlJlcXVlc3Qg
dGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOworICAgICAgICAgICAgbV9yZXF1ZXN0aW5nSGln
aFBlcmZvcm1hbmNlID0gdHJ1ZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBTd2l0
Y2hpbmdHUFVDbGllbnQ6OnNpbmdsZXRvbigpLnJlcXVlc3RIaWdoUGVyZm9ybWFuY2VHUFUoKTsK
KyNlbmRpZgorICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBEb24ndCBpbW1l
ZGlhdGVseSB0dXJuIG9mZiB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIFRoZSB1c2VyIG1pZ2h0
IGJlCisgICAgICAgIC8vIHN3YXBwaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGFicyBvciB3
aW5kb3dzLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQorICAgICAgICAvLyBjaHVybiBpZiB3
ZSBjYW4gYXZvaWQgaXQuCisgICAgICAgIGlmICghbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BV
VGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgTE9HKFdlYkdMLCAiU2V0IGEgdGltZXIg
dG8gcmVsZWFzZSB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIik7CisgICAgICAgICAgICAvLyBG
SVhNRTogRXhwb3NlIHRoaXMgdmFsdWUgYXMgYSBTZXR0aW5nLCB3aGljaCB3b3VsZCByZXF1aXJl
IHRoaXMgY2xhc3MKKyAgICAgICAgICAgIC8vIHRvIHJlZmVyZW5jZSBhIGZyYW1lLCBwYWdlIG9y
IGRvY3VtZW50LgorICAgICAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgdGltZVRvS2VlcEhp
Z2hQZXJmb3JtYW5jZUdQVUFsaXZlIHsgMTBfcyB9OworICAgICAgICAgICAgbV9kaXNhYmxlSGln
aFBlcmZvcm1hbmNlR1BVVGltZXIuc3RhcnRPbmVTaG90KHRpbWVUb0tlZXBIaWdoUGVyZm9ybWFu
Y2VHUFVBbGl2ZSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZp
cmVkKCkKK3sKKyAgICBpZiAobV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5zaXpl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVxdWVzdGluZ0hpZ2hQZXJmb3JtYW5jZSA9
IGZhbHNlOworI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkp
CisgICAgU3dpdGNoaW5nR1BVQ2xpZW50OjpzaW5nbGV0b24oKS5yZWxlYXNlSGlnaFBlcmZvcm1h
bmNlR1BVKCk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXI6OnJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChoYXNUb29NYW55Q29u
dGV4dHMoKSkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIgcmVjeWNsZWQgY29udGV4dCAoJXApLiIsIG1fY29udGV4dHNbMF0pOworICAgICAgICBt
X2NvbnRleHRzWzBdLT5yZWN5Y2xlQ29udGV4dCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMz
OWE3MzBkZDMwYWIwYzdiMThkM2RmOWJjNWRiY2U2MzQ2ODYzYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTE1hbmFnZXIuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgorI2luY2x1ZGUgPE9wZW5HTC9DR0xU
eXBlcy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgdW5zaWduZWQg
TWF4Q29udGV4dHMgPSAxNjsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CitjbGFz
cyBIb3N0V2luZG93OworCit1c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OworCisj
aWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9MKQorV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNM
b3dBbmRIaWdoUG93ZXJHUFVzKCk7CisjZW5kaWYKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyIHsKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xNYW5hZ2VyJiBzaGFyZWRNYW5hZ2VyKCk7CisgICAgCisgICAgdm9pZCBhZGRDb250ZXh0
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgSG9zdFdpbmRvdyopOworICAgIHZvaWQgcmVtb3Zl
Q29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOworCisgICAgSG9zdFdpbmRvdyogaG9z
dFdpbmRvd0ZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIGFkZENvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9y
bWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICAKKyAgICB2b2lkIHJlY3ljbGVD
b250ZXh0SWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGhhc1Rvb01hbnlDb250ZXh0cygpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dHMuc2l6ZSgpID49IE1heENvbnRleHRzOyB9CisgICAgCisgICAg
dm9pZCB1cGRhdGVBbGxDb250ZXh0cygpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQg
c2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlELCBjb25zdCBIb3N0V2luZG93Kik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0Rp
cmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKik7CisjZW5k
aWYKKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyKCkK
KyAgICAgICAgOiBtX2Rpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lcigqdGhpcywgJkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6ZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVy
RmlyZWQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3Rh
dGUoKTsKKyAgICB2b2lkIGRpc2FibGVIaWdoUGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKCk7CisK
KyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRzOworICAgIEhh
c2hNYXA8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBIb3N0V2luZG93Kj4gbV9jb250ZXh0V2lu
ZG93TWFwOworICAgIEhhc2hTZXQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqPiBtX2NvbnRleHRz
UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlOworICAgIAorICAgIFRpbWVyIG1fZGlzYWJsZUhpZ2hQ
ZXJmb3JtYW5jZUdQVVRpbWVyOworICAgIGJvb2wgbV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNl
IHsgZmFsc2UgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMUHJpdmF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y4MmFiMTRkNDhlNmQ3ZDQ0ZTZjMmE2ZDEyMGUx
OWU4NTk0ZDMzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVw
b3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgor
I2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZShHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5h
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uKSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246Ok9mZnNjcmVlbjoKKyAgICAgICAgbV9nbENvbnRl
eHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5k
b3c6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMUHJpdmF0ZSgpID0gZGVmYXVsdDsKKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0
ID8gbV9nbENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpIDogZmFsc2U7Cit9CisKK1BsYXRm
b3JtR3JhcGhpY3NDb250ZXh0R0wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlOjpwbGF0
Zm9ybUNvbnRleHQoKQoreworICAgIHJldHVybiBtX2dsQ29udGV4dCA/IG1fZ2xDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSA6IEdMQ29udGV4dDo6Y3VycmVudCgpLT5wbGF0Zm9ybUNvbnRleHQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2
YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDdhZmY0Njc2MTJkMTA1Y2M2M2U2MzI2OWIzMmZjZGQ4YzJlMWE3
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuaApAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQml0bWFwVGV4dHVyZUdMOworCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTFByaXZhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7CisgICAgfkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMUHJpdmF0ZSgpOworICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKTsKKworcHJpdmF0
ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKK307CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1w
b3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAppbmRleCBiY2Q3MjQ2OGUwNWM3MjRi
MzBmZTVlZjRkMWMyMzliYjdhNTdmNGU5Li42ODFiOThhMGY5OTNjZTM3MjhiOTgzMjNkNTA2MGQw
ZjI4YmI0NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCkBAIC0yNiw3
ICsyNiw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCisjaWYgRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkK
ICNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgiCiAKICNpZiBVU0UoTElCRVBPWFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVt
cG9yYXJ5T3BlbkdMU2V0dGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaAppbmRleCAzYjg1NDMxMjk2YzM4MWFkNGI1
ZDE0YWVlZTE2MmM5ODJlNTA1ZTYyLi5mMzk0M2E5NjlmOWYzZWE1YTRlNmVmYTNiNmM2ZTY4NmYw
ZGRiNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgKQEAgLTI4LDcgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogCi0jaWYgRU5BQkxFKEdSQVBISUNT
X0NPTlRFWFRfM0QpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKKyNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMp
KQogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAK
aW5kZXggNjQyYmYwZTk2MDEwOWJkMzQ3NjM3YzhkYzBmZmY0Mzg4NDRkNjFkMC4uODI2ZDJkYTVi
ZGVlYjY3OTVmZDA3ZjE1MTQyNDE4MGM4YWI1ZDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAK
QEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAotI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUg
IkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNs
dWRlICJOYXRpdmVJbWFnZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dDNEVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0
dXJlTWFwcGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyZTA2NGUyMDBh
ZGEzN2U0MzNiNWNiNjQ0NGRiMzEzYzVhZTU5NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLQotI2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcuaD4KLQotI2lmIFVTRShBTkdMRSkK
LSNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKLS8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBB
TkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZvciBub3cuCi0jZGVmaW5lIEdM
X0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4
dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7Ci0jaW5jbHVkZSA8QU5HTEUvZWds
Lmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0X2Fu
Z2xlLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5oPgotI2luY2x1ZGUgPEFO
R0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50
cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4K
LSNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLSNpZiBkZWZpbmVkKEFib3ZlKQotI3Vu
ZGVmIEFib3ZlCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93KQotI3VuZGVmIEJlbG93Ci0jZW5k
aWYKLSNpZiBkZWZpbmVkKE5vbmUpCi0jdW5kZWYgTm9uZQotI2VuZGlmCi0jZWxpZiBVU0UoTElC
RVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlmICFVU0UoT1BFTkdMX0VTKQotI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLSNpbmNsdWRl
ICJFeHRlbnNpb25zM0RBTkdMRS5oIgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlICJF
eHRlbnNpb25zM0RPcGVuR0xFUy5oIgotI2Vsc2UKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVu
R0wuaCIKLSNlbmRpZgotCi0jaWYgVVNFKE5JQ09TSUEpCi0jaWYgVVNFKEFOR0xFKQotI2luY2x1
ZGUgIk5pY29zaWFHQzNEQU5HTEVMYXllci5oIgotI2Vsc2UKLSNpbmNsdWRlICJOaWNvc2lhR0Mz
RExheWVyLmgiCi0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRp
YyBjb25zdCBzaXplX3QgTWF4QWN0aXZlQ29udGV4dHMgPSAxNjsKLXN0YXRpYyBEZXF1ZTxHcmFw
aGljc0NvbnRleHQzRCosIE1heEFjdGl2ZUNvbnRleHRzPiYgYWN0aXZlQ29udGV4dHMoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTxHcmFwaGljc0NvbnRleHQzRCosIE1heEFj
dGl2ZUNvbnRleHRzPj4gc19hY3RpdmVDb250ZXh0czsKLSAgICByZXR1cm4gc19hY3RpdmVDb250
ZXh0czsKLX0KLQotUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24p
Ci17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0
IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KLSAgICBpZiAoZGVzdGluYXRp
b24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotI2lmICFV
U0UoT1BFTkdMX0VTKSAmJiAhVVNFKExJQkVQT1hZKSAmJiAhVVNFKEFOR0xFKQotICAgICAgICBz
dWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7Ci0jZW5kaWYKLSAgICAgICAgaW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byYgY29udGV4dHMgPSBhY3RpdmVDb250ZXh0cygpOwotICAgIGlm
IChjb250ZXh0cy5zaXplKCkgPj0gTWF4QWN0aXZlQ29udGV4dHMpCi0gICAgICAgIGNvbnRleHRz
LmZpcnN0KCktPnJlY3ljbGVDb250ZXh0KCk7Ci0KLSAgICAvLyBDYWxsaW5nIHJlY3ljbGVDb250
ZXh0KCkgYWJvdmUgc2hvdWxkIGhhdmUgbGVhZCB0byB0aGUgZ3JhcGhpY3MgY29udGV4dCBiZWlu
ZwotICAgIC8vIGRlc3Ryb3llZCBhbmQgdGh1cyByZW1vdmVkIGZyb20gdGhlIGFjdGl2ZSBjb250
ZXh0cyBsaXN0LgotICAgIGlmIChjb250ZXh0cy5zaXplKCkgPj0gTWF4QWN0aXZlQ29udGV4dHMp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBHcmFwaGljc0Nv
bnRleHQzRCBvYmplY3QgZmlyc3QgaW4gb3JkZXIgdG8gZXN0YWJsaXN0IGEgY3VycmVudCBjb250
ZXh0IG9uIHRoaXMgdGhyZWFkLgotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFw
aGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBkZXN0aW5hdGlvbikpOwotCi0j
aWYgVVNFKExJQkVQT1hZKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIC8vIEJhaWwgaWYgR0xFUzMg
d2FzIHJlcXVlc3RlZCBidXQgY2Fubm90IGJlIHByb3ZpZGVkLgotICAgIGlmIChhdHRyaWJ1dGVz
LmlzV2ViR0wyICYmICFlcG94eV9pc19kZXNrdG9wX2dsKCkgJiYgZXBveHlfZ2xfdmVyc2lvbigp
IDwgMzApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi0KLSAgICBjb250ZXh0cy5h
cHBlbmQoY29udGV4dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLSNpZiBVU0Uo
QU5HTEUpCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQz
RDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRDb250
ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0M0RCYXNlKGF0dHJpYnV0ZXMsIGRlc3RpbmF0aW9u
LCBzaGFyZWRDb250ZXh0KQotewotICAgIEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNo
YXJlZENvbnRleHQpOwotI2lmIFVTRShOSUNPU0lBKQotICAgIG1fbmljb3NpYUxheWVyID0gV1RG
OjptYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RBTkdMRUxheWVyPigqdGhpcywgZGVzdGluYXRpb24p
OwotI2Vsc2UKLSAgICBtX3RleG1hcExheWVyID0gV1RGOjptYWtlVW5pcXVlPFRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKLSNlbmRpZgotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0gICAgYXR0
cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBk
dXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6
T2Zmc2NyZWVuKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8u
Ci0gICAgICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICAgICAgZ2w6OkJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX3RleHR1cmUpOwotICAgICAg
ICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6VGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQU5HTEUsIDApOwotCi0gICAgICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0gICAgICAgIGds
OjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAg
ICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fY29tcG9z
aXRvclRleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RB
TkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBn
bDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9N
SU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgICAgIGdsOjpHZW5U
ZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOwot
ICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
TkdMRSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBDcmVhdGUgYSBt
dWx0aXNhbXBsZSBGQk8uCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAg
ICAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAg
ICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxl
RkJPKTsKLSAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwot
ICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMu
ZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJv
OwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkK
LSAgICAgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aEJ1ZmZlcik7
Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIGds
OjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAg
ICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGdsOjpDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotfQot
I2Vsc2UKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNE
OjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0M0QqIHNoYXJlZENvbnRl
eHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHQzREJhc2UoYXR0cmlidXRlcywgZGVzdGluYXRpb24s
IHNoYXJlZENvbnRleHQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hh
cmVkQ29udGV4dCk7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtl
VW5pcXVlPE5pY29zaWE6OkdDM0RMYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKLSNlbHNlCi0g
ICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxh
eWVyPigqdGhpcywgZGVzdGluYXRpb24pOwotI2VuZGlmCi0KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJpYnV0ZXMgPSBjb250
ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRp
b24uCi0KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgewot
ICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgotICAgICAgICA6Omds
R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLQotICAgICAgICAvLyBDcmVh
dGUgYW4gRkJPLgotICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7Ci0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKLQotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0KLSAg
ICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKLSNlbmRpZgotCi0gICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2Ft
cGxlIEZCTy4KLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgICAg
ICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwot
ICAgICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAg
ICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkK
LSAgICAgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBCaW5k
IGNhbnZhcyBGQk8uCi0gICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8g
PSBtX2ZibzsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
ZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVm
ZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICAg
ICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAg
ICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsRW5hYmxl
KEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotCi0gICAgaWYgKEdMQ29udGV4dDo6Y3Vy
cmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0gICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9
IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5H
TCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBp
bGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41
MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NP
UkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUg
T3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KLSAg
ICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25l
bnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBp
cwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRl
eHQzRCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZv
ciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDM0RpbnQgY3VycmVudFZBTyA9IDA7Ci0gICAgICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVJSQVlfQklORElORywgJmN1
cnJlbnRWQU8pOwotICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsKLSAgICAgICAgICAgIG1fdmFv
ID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKLSAgICAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheShtX3Zh
byk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGb3IgbG93ZXIgdmVyc2lv
bnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRlciBjb21waWxl
ci4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09NUEFU
SUJJTElUWV9PVVRQVVQpOwotCi0gICAgICAgIC8vIEdMX1BPSU5UX1NQUklURSBpcyBuZWVkZWQg
aW4gbG93ZXIgdmVyc2lvbnMuCi0gICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsK
LSAgICB9Ci0jZWxzZQotICAgIC8vIEFkanVzdCB0aGUgc2hhZGVyIHNwZWNpZmljYXRpb24gZGVw
ZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1ZXN0
ZWQuCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBh
dHRyaWJ1dGVzLmlzV2ViR0wyID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKLSNl
bmRpZgotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCi0gICAgU2hCdWlsdEluUmVzb3Vy
Y2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVS
ZXNvdXJjZXMpOwotCi0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VO
SUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMp
OwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNv
dXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lz
aW9uOwotICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RlJB
R01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVj
aXNpb24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5n
ZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxlci5zZXRSZXNv
dXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7
Ci19Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX3Rl
eHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0g
ICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5k
aWYKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBp
ZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZl
cnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
Z2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewotI2lmIFVTRShP
UEVOR0xfRVMpCi0gICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLQotICAgICAgICBpZiAobV9zdGVu
Y2lsQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5j
aWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKLSAg
ICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgfQotICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX2lu
dGVybWVkaWF0ZVRleHR1cmUpOwotI2VuZGlmCi0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgaWYgKG1f
dmFvKQotICAgICAgICBkZWxldGVWZXJ0ZXhBcnJheShtX3Zhbyk7Ci0jZW5kaWYKLQotICAgIGF1
dG8qIGFjdGl2ZUNvbnRleHQgPSBhY3RpdmVDb250ZXh0cygpLnRha2VMYXN0KFt0aGlzXShhdXRv
KiBpdCkgewotICAgICAgICByZXR1cm4gaXQgPT0gdGhpczsKLSAgICB9KTsKLSAgICBBU1NFUlRf
VU5VU0VEKGFjdGl2ZUNvbnRleHQsICEhYWN0aXZlQ29udGV4dCk7Ci19Ci0jZWxzZQotR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9j
b21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAg
ICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRkJPKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKSB7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgaWYgKG1fZGVwdGhCdWZmZXIp
Ci0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOwot
Ci0gICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fZGVw
dGhTdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0gICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVy
cygxLCAmbV9mYm8pOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICA6OmdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0jZW5kaWYKLQotI2lmIFVT
RShDQUlSTykKLSAgICBpZiAobV92YW8pCi0gICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1fdmFv
KTsKLSNlbmRpZgotCi0gICAgYXV0byogYWN0aXZlQ29udGV4dCA9IGFjdGl2ZUNvbnRleHRzKCku
dGFrZUxhc3QoW3RoaXNdKGF1dG8qIGl0KSB7Ci0gICAgICAgIHJldHVybiBpdCA9PSB0aGlzOwot
ICAgIH0pOwotICAgIEFTU0VSVF9VTlVTRUQoYWN0aXZlQ29udGV4dCwgISFhY3RpdmVDb250ZXh0
KTsKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1h
a2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmlj
b3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4
bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKCkKLXsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0Ci17Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0
Zm9ybUNvbnRleHQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3Jt
Q29udGV4dCgpOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGV4dHVyZTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0j
aWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0
Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICByZXR1cm4gJm1fbmlj
b3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5
ZXIuZ2V0KCk7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShBTkdMRSkK
LUV4dGVuc2lvbnMzRCYgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAg
IGlmICghbV9leHRlbnNpb25zKSB7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgLy8gZ2xH
ZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24gR0xFUzIuCi0gICAgICAgIG1fZXh0ZW5zaW9u
cyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMRVM+KHRoaXMsICBmYWxzZSk7Ci0jZWxz
ZQotICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIgb24gd2UgdXNlIHRoZSBDb3JlIHByb2ZpbGUs
IGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0cmluZ2kuCi0gICAgICAgIG1fZXh0ZW5zaW9u
cyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMPih0aGlzLCBHTENvbnRleHQ6OmN1cnJl
bnQoKS0+dmVyc2lvbigpID49IDMyMCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuICptX2V4
dGVuc2lvbnM7Ci19Ci0jZW5kaWYKLQotI2lmIChQTEFURk9STShHVEspICYmICFVU0UoQU5HTEUp
KSB8fCBQTEFURk9STShXSU4pCi12b2lkKiBHcmFwaGljc0NvbnRleHQzRDo6bWFwQnVmZmVyUmFu
Z2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0ciwgR0MzRGJpdGZpZWxkKQotewot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
dW5tYXBCdWZmZXIoR0MzRGVudW0pCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGlu
dHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0s
IEdDM0RzaXplaSwgR0MzRGludCopCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51
bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFN0b3JhZ2UyRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBH
QzNEc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UzRChH
QzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0Rz
aXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybXMo
UGxhdGZvcm0zRE9iamVjdCwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0
b3I8R0MzRGludD4mKQotewotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQ
RVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhmYTcyZTBjYWNiM2IzNzA2OTU5NWRkZThkMmE1MGQwMDUxOThiNWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtMCwwICsxLDUyMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQ
cml2YXRlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgiCisj
aW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjaWYgVVNFKEFOR0xFKQorI2RlZmluZSBF
R0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhw
bGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KKyNkZWZpbmUgR0xfQU5HTEVfZXhw
bGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCit0
eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbmNsdWRlIDxBTkdMRS9lZ2wuaD4KKyNpbmNs
dWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHRfYW5nbGUuaD4KKyNp
bmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlf
cG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNf
Z2xlc19leHRfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dC5oPgorI2luY2x1ZGUg
PEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorI2lmIGRlZmluZWQoQWJvdmUpCisjdW5kZWYgQWJvdmUK
KyNlbmRpZgorI2lmIGRlZmluZWQoQmVsb3cpCisjdW5kZWYgQmVsb3cKKyNlbmRpZgorI2lmIGRl
ZmluZWQoTm9uZSkKKyN1bmRlZiBOb25lCisjZW5kaWYKKyNlbGlmIFVTRShMSUJFUE9YWSkKKyNp
bmNsdWRlIDxlcG94eS9nbC5oPgorI2VsaWYgIVVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSAiT3Bl
bkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaWYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkV4dGVuc2lv
bnNHTEFOR0xFLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2Vu
ZGlmCisKKyNpZiBVU0UoTklDT1NJQSkKKyNpZiBVU0UoQU5HTEUpCisjaW5jbHVkZSAiTmljb3Np
YUdDM0RBTkdMRUxheWVyLmgiCisjZWxzZQorI2luY2x1ZGUgIk5pY29zaWFHQzNETGF5ZXIuaCIK
KyNlbmRpZgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHNp
emVfdCBNYXhBY3RpdmVDb250ZXh0cyA9IDE2Oworc3RhdGljIERlcXVlPEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgTWF4QWN0aXZlQ29udGV4dHM+JiBhY3RpdmVDb250ZXh0cygpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgTWF4
QWN0aXZlQ29udGV4dHM+PiBzX2FjdGl2ZUNvbnRleHRzOworICAgIHJldHVybiBzX2FjdGl2ZUNv
bnRleHRzOworfQorCitSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0
aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNu
J3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93
LgorICAgIGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hvc3RXaW5k
b3cpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICBpZiAoIWlu
aXRpYWxpemVkKSB7CisjaWYgIVVTRShPUEVOR0xfRVMpICYmICFVU0UoTElCRVBPWFkpICYmICFV
U0UoQU5HTEUpCisgICAgICAgIHN1Y2Nlc3MgPSBpbml0aWFsaXplT3BlbkdMU2hpbXMoKTsKKyNl
bmRpZgorICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIGlmICghc3VjY2Vz
cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBjb250ZXh0cyA9IGFjdGl2
ZUNvbnRleHRzKCk7CisgICAgaWYgKGNvbnRleHRzLnNpemUoKSA+PSBNYXhBY3RpdmVDb250ZXh0
cykKKyAgICAgICAgY29udGV4dHMuZmlyc3QoKS0+cmVjeWNsZUNvbnRleHQoKTsKKworICAgIC8v
IENhbGxpbmcgcmVjeWNsZUNvbnRleHQoKSBhYm92ZSBzaG91bGQgaGF2ZSBsZWFkIHRvIHRoZSBn
cmFwaGljcyBjb250ZXh0IGJlaW5nCisgICAgLy8gZGVzdHJveWVkIGFuZCB0aHVzIHJlbW92ZWQg
ZnJvbSB0aGUgYWN0aXZlIGNvbnRleHRzIGxpc3QuCisgICAgaWYgKGNvbnRleHRzLnNpemUoKSA+
PSBNYXhBY3RpdmVDb250ZXh0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBD
cmVhdGUgdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG9iamVjdCBmaXJzdCBpbiBvcmRlciB0
byBlc3RhYmxpc3QgYSBjdXJyZW50IGNvbnRleHQgb24gdGhpcyB0aHJlYWQuCisgICAgYXV0byBj
b250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKGF0dHJpYnV0ZXMs
IGhvc3RXaW5kb3csIGRlc3RpbmF0aW9uKSk7CisKKyNpZiBVU0UoTElCRVBPWFkpICYmIFVTRShP
UEVOR0xfRVMpCisgICAgLy8gQmFpbCBpZiBHTEVTMyB3YXMgcmVxdWVzdGVkIGJ1dCBjYW5ub3Qg
YmUgcHJvdmlkZWQuCisgICAgaWYgKGF0dHJpYnV0ZXMuaXNXZWJHTDIgJiYgIWVwb3h5X2lzX2Rl
c2t0b3BfZ2woKSAmJiBlcG94eV9nbF92ZXJzaW9uKCkgPCAzMCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisjZW5kaWYKKworICAgIGNvbnRleHRzLmFwcGVuZChjb250ZXh0LmdldCgpKTsKKyAg
ICByZXR1cm4gY29udGV4dDsKK30KKworI2lmIFVTRShBTkdMRSkKK0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0
ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0
aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRl
eHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzLCBkZXN0aW5hdGlvbiwgc2hh
cmVkQ29udGV4dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNoYXJlZENvbnRleHQsICFzaGFyZWRD
b250ZXh0KTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IFdURjo6bWFr
ZVVuaXF1ZTxOaWNvc2lhOjpHQzNEQU5HTEVMYXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKKyNl
bHNlCisgICAgbV90ZXhtYXBMYXllciA9IFdURjo6bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0Mz
RFBsYXRmb3JtTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7CisjZW5kaWYKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0
ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5n
IHZhbGlkYXRpb24uCisKKyAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNj
cmVlbikgeworICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAg
ICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIGdsOjpCaW5kVGV4
dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2w6
OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAg
ICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RF
WFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FOR0xFLCAwKTsKKworICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgICAgICBnbDo6R2Vu
RnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICAgICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAg
Z2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX2NvbXBvc2l0b3JU
ZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgICAgICBnbDo6R2VuVGV4dHVy
ZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShH
TF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICAg
ICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKworICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUsIDApOworI2VuZGlmCisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbXVsdGlz
YW1wbGUgRkJPLgorICAgICAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAg
ICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAg
ICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KQorICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJp
bmQgY2FudmFzIEZCTy4KKyAgICAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKyNp
ZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAg
ICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbDo6R2Vu
UmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsKKyNlbmRpZgorICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAg
ICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKK30KKyNlbHNl
CitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKiBzaGFyZWRDb250ZXh0KQorICAgIDogR3JhcGhpY3NDb250ZXh0R0woYXR0cmlidXRl
cywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzaGFy
ZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNv
c2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RMYXllcj4oKnRoaXMsIGRlc3RpbmF0
aW9uKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBl
ckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOworI2VuZGlmCisKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworICAgIGF0
dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQg
ZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246
Ok9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRv
LgorICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgICAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICA6Omds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKwor
ICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEs
ICZtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1f
ZmJvKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICAgICAgOjpnbEdlblRl
eHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgICAgICA6OmdsVGV4UGFy
YW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7
CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICA6Omds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSk7CisKKyAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRl
eHR1cmUpOworICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRlcm1l
ZGlhdGVUZXh0dXJlKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Cisg
ICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyNlbmRpZgorCisgICAgICAgIC8vIENy
ZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFz
KSB7CisgICAgICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJP
KTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOworICAgICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fbXVsdGlzYW1w
bGVGQk87CisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0
cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAm
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAg
ICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwpCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxC
dWZmZXIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0
dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhVVNFKE9QRU5H
TF9FUykKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOworCisg
ICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7CisgICAgICAg
IG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7CisKKyAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMu
MiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1
dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIg
dXNlcyBHTFNMIHZlcnNpb24gMS41MC4KKyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKKworICAgICAgICAvLyBGcm9tIHZlcnNp
b24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBW
QU8gZm9yIHJlbmRlcmluZy4KKyAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQg
Ym91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVy
LCBXZWJHTCwgZXRjKS4gVGhpcyBpcworICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRo
ZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdp
bGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCisgICAgICAgIEdDM0Rp
bnQgY3VycmVudFZBTyA9IDA7CisgICAgICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORywgJmN1cnJlbnRWQU8pOworICAgICAgICBpZiAo
IWN1cnJlbnRWQU8pIHsKKyAgICAgICAgICAgIG1fdmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsK
KyAgICAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheShtX3Zhbyk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBGb3IgbG93ZXIgdmVyc2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJp
bGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4KKyAgICAgICAgbV9jb21waWxlciA9
IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09NUEFUSUJJTElUWV9PVVRQVVQpOworCisgICAg
ICAgIC8vIEdMX1BPSU5UX1NQUklURSBpcyBuZWVkZWQgaW4gbG93ZXIgdmVyc2lvbnMuCisgICAg
ICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKKyAgICB9CisjZWxzZQorICAgIC8vIEFk
anVzdCB0aGUgc2hhZGVyIHNwZWNpZmljYXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMg
KGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1ZXN0ZWQuCisgICAgbV9jb21waWxlciA9IEFO
R0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBhdHRyaWJ1dGVzLmlzV2ViR0wyID8gU0hf
V0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKKyNlbmRpZgorCisgICAgLy8gQU5HTEUgaW5p
dGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOworICAg
IHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOworCisgICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xF
UmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlp
bmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wg
RVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOworCisgICAgR0MzRGlu
dCByYW5nZVsyXSwgcHJlY2lzaW9uOworICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIEFOR0xFUmVzb3VyY2Vz
LkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNp
b24pOworCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworCisg
ICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9CisjZW5kaWYKKworI2lmIFVTRShBTkdM
RSkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAg
IGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsOjpEZWxl
dGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5kaWYKKworICAgIGF1dG8g
YXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0
cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2w6OkRlbGV0ZUZyYW1l
YnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworI2lmIFVTRShPUEVOR0xfRVMpCisgICAg
ICAgIGlmIChtX2RlcHRoQnVmZmVyKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJz
KDEsICZtX2RlcHRoQnVmZmVyKTsKKworICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQorICAg
ICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2Vu
ZGlmCisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKKyAgICAgICAgICAgIGdsOjpE
ZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorICAg
IGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1
cmUpOworI2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisgICAgaWYgKG1fdmFvKQorICAgICAgICBk
ZWxldGVWZXJ0ZXhBcnJheShtX3Zhbyk7CisjZW5kaWYKKworICAgIGF1dG8qIGFjdGl2ZUNvbnRl
eHQgPSBhY3RpdmVDb250ZXh0cygpLnRha2VMYXN0KFt0aGlzXShhdXRvKiBpdCkgeworICAgICAg
ICByZXR1cm4gaXQgPT0gdGhpczsKKyAgICB9KTsKKyAgICBBU1NFUlRfVU5VU0VEKGFjdGl2ZUNv
bnRleHQsICEhYWN0aXZlQ29udGV4dCk7Cit9CisjZWxzZQorR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21w
b3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICA6Omds
RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAg
ICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxl
RkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgaWYgKG1fZGVwdGhCdWZmZXIpCisg
ICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhCdWZmZXIpOworCisg
ICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fZGVwdGhT
dGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICA6OmdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisjZW5kaWYKKworI2lmIFVTRShD
QUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1fdmFvKTsK
KyNlbmRpZgorCisgICAgYXV0byogYWN0aXZlQ29udGV4dCA9IGFjdGl2ZUNvbnRleHRzKCkudGFr
ZUxhc3QoW3RoaXNdKGF1dG8qIGl0KSB7CisgICAgICAgIHJldHVybiBpdCA9PSB0aGlzOworICAg
IH0pOworICAgIEFTU0VSVF9VTlVTRUQoYWN0aXZlQ29udGV4dCwgISFhY3RpdmVDb250ZXh0KTsK
K30KKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1f
bmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1f
dGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2VuZGlmCit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVzKCkKK3sKK30KKworUGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCgpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmlj
b3NpYUxheWVyLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFw
TGF5ZXItPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCit9CisKK1BsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fdGV4dHVyZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICByZXR1cm4g
dHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK1BsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNp
ZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIo
KTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXIuZ2V0KCk7CisjZW5kaWYKK30KKwor
I2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShBTkdMRSkKK0V4dGVuc2lvbnNHTCYgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25z
KSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBh
dmFpbGFibGUgb24gR0xFUzIuCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0
ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMsICBmYWxzZSk7CisjZWxzZQorICAgICAgICAvLyBGcm9t
IE9wZW5HTCAzLjIgb24gd2UgdXNlIHRoZSBDb3JlIHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0
IHVzZSBnbEdldFN0cmluZ2kuCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0
ZW5zaW9uc0dMT3BlbkdMPih0aGlzLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49
IDMyMCk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5k
aWYKKworI2lmIChQTEFURk9STShHVEspICYmICFVU0UoQU5HTEUpKSB8fCBQTEFURk9STShXSU4p
Cit2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0s
IEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0ciwgR0MzRGJpdGZpZWxkKQoreworICAgIHJldHVybiBu
dWxscHRyOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBC
dWZmZXIoR0MzRGVudW0pCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGlu
dHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtLCBHQzNEZW51bSwgR0Mz
RGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51bSwgR0MzRHNp
emVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNE
ZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0Mz
RHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgVmVj
dG9yPEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0b3I8R0MzRGludD4mKQoreworfQorI2VuZGlm
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCmluZGV4IDg5OGVlMzQzNTUyYTYzZDAzZDIxNDQy
ZmZhYzlhOTQ4YWQ5NWQzYWQuLjBjMmEwMTk2MDU3YjBhODA4M2Q0MzFkNmFlNmViYmY1MDI3Zjll
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3Bw
CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgiCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCisjaWYgRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShURVhUVVJFX01BUFBFUikgJiYgIVVTRShOSUNP
U0lBKQogCiAjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgiCiAjaW5jbHVkZSAiR0xDb250ZXh0
LmgiCkBAIC0zMCwxNCArMzAsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcihH
cmFwaGljc0NvbnRleHQzRCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9u
IGRlc3RpbmF0aW9uKQorVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpUZXh0dXJlTWFw
cGVyR0MzRFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKICAgICA6IG1f
Y29udGV4dChjb250ZXh0KQogewogICAgIHN3aXRjaCAoZGVzdGluYXRpb24pIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CiAgICAgICAgIG1f
Z2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2lu
ZG93OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJl
Y3RseVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTYxLDcgKzYxLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0MzRFBs
YXRmb3JtTGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCgpCiAgICAgcmV0dXJuIG1fZ2xDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBU
ZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9nbENvbnRleHQpOwogICAg
IHJldHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CkBAIC0xMDQsNyArMTA0LDcg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnBhaW50VG9UZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmUKICAgICAgICAgICAgIG1fY29udGV4dC5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIAogICAgICAgICBtX2NvbnRleHQucmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0Lm1fc3RhdGUuYm91bmRGQk8pOworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpGUkFNRUJVRkZFUiwg
bV9jb250ZXh0Lm1fc3RhdGUuYm91bmRGQk8pOwogCiAgICAgICAgIGlmIChwcmV2aW91c0FjdGl2
ZUNvbnRleHQgJiYgcHJldmlvdXNBY3RpdmVDb250ZXh0ICE9IG1fZ2xDb250ZXh0LmdldCgpKQog
ICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
QEAgLTEyMCw0ICsxMjAsNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dM
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQ
bGF0Zm9ybUxheWVyLmgKaW5kZXggYjhlODFmMTFiMjE4YzA0ZTA2NTQ0MWZiYjY5Y2RhNGY2OWUz
ZjVkZi4uMGNmNjBmNTczZDhiZjZlZTg3MmE5MjQzNmQwZjUyOWY5MDdkOTQ1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaApAQCAtMTksOSArMTksOSBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoTklDT1NJQSkKKyNpZiBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eVByb3ZpZGVyLmgiCkBAIC0zNCwxMSArMzQsMTEgQEAgY2xhc3MgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXll
ciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250
ZXh0M0QmLCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24pOworICAgIFRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyKCk7CiAKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKIAogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QmIG1fY29u
dGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgbV9jb250ZXh0OwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxHTENvbnRleHQ+IG1fZ2xDb250ZXh0OwogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQpAQCAtNTgsNCArNTgsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBV
U0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDYxNjM1ZTUyYTY3
Njk1ODM0MzNlZDBlMzAzMjI5Zjg1YzFlYzA1ZWMuLjZiNDc5MjU3YTYxODlmOTI1MzYzMDc0NjUz
NTU3ODM5Y2FhNGM1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yNiw3ICsyNiw3IEBA
CiAKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJl
UG9vbC5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKICNpbmNsdWRlICJHTENvbnRleHQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRERpcmVjdDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRERpcmVjdDJE
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIzOTZhNDlmOTMxYTE0ODJhYjgy
YmY5MTNlYmZlZWRkYmE2ZDUwZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0M0REaXJlY3QyRC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaWYgRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfM0QpICYmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkNPTVB0ci5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUg
PGQyZDFlZmZlY3RzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQotewotICAgIGlm
ICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKLXsKLSAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkg
fHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3Qy
RC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0R0xEaXJlY3QyRC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JjZmJmMjkxNjc2MjUzYWJmNTU2ZjdkMDMx
Y2E4YjYzZTgzYzlhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcApAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisj
aWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShESVJFQ1QyRCkKKworI2luY2x1
ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8ZDJk
MS5oPgorI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3Io
KSA9IGRlZmF1bHQ7CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFj
dG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNp
emUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoIWlt
YWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAm
JiBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZjFh
MTY0ZDE3MzA1ZWRmMWZlNmVkYmExZDhjOTg0MDMzYzhkNTRhMC4uYmE5NDE4YzUwYzc5ZjAzODk1
ZTM3YmM3YjM3N2ZhYTkzYjU1NzNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cApAQCAtMzAyLDcgKzMwMiw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXIuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dAppbmRleCAxNjcxYWRhYTg1NTE2ZGUzMmMzMzk2Y2U4OWMwYmVhNzAyNDk2ZTBj
Li5mZjUyZDI1MzZmNTY1ZmEyOTViZWI2MjAxMjY4YTBmMzMzMTcwZmYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0
cy50eHQKQEAgLTIzNyw3ICsyMzcsNyBAQCBzZXQoUGx1Z2luUHJvY2Vzc19MSUJSQVJJRVMKICAg
ICBXZWJLaXQKICkKIAotaWYgKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEKQoraWYgKEVOQUJM
RV9HUkFQSElDU19DT05URVhUX0dMKQogICAgICMgRm9yIHBsYXRmb3JtcyB0aGF0IHdhbnQgdG8g
dXNlIHN5c3RlbS1wcm92aWRlZCBPcGVuR0wgKEVTKSAvIEVHTCBoZWFkZXJzLAogICAgICMgdGhl
c2UgaW5jbHVkZSBkaXJlY3RvcmllcywgbGlicmFyaWVzIG9yIGRlZmluaXRpb25zIG5lZWQgdG8g
YmUKICAgICAjIGFkZGVkIGJlZm9yZSB0aGUgQU5HTEUgZGlyZWN0b3JpZXMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dheWxhbmRDb21wb3NpdG9yLmNwcAppbmRleCBjMzU0
MDk5ZmU5NDk4ZmUwNjI5Nzc1NjlkOGU0ZTRlZGNmNjdhMjAwLi41MGYwODZlZGUyZWYzM2VjOGQ5
YTMyOWQyNDQxMGE2N2U3NGI4YTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAKQEAgLTQxLDkgKzQxLDkgQEAKICNpZiBVU0UoT1BF
TkdMX0VTKQogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvRXh0ZW5zaW9uczNET3BlbkdMRVMuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmg+CiAjZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUv
RXh0ZW5zaW9uczNET3BlbkdMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FeHRlbnNpb25zR0xPcGVu
R0wuaD4KICNpbmNsdWRlIDxXZWJDb3JlL09wZW5HTFNoaW1zLmg+CiAjZW5kaWYKIApAQCAtNDI3
LDkgKzQyNyw5IEBAIGJvb2wgV2F5bGFuZENvbXBvc2l0b3I6OmluaXRpYWxpemVFR0woKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBVU0UoT1BFTkdMX0VTKQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFeHRlbnNpb25zM0RPcGVuR0xFUz4gZ2xFeHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRl
bnNpb25zM0RPcGVuR0xFUz4obnVsbHB0ciwgIGZhbHNlKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXh0ZW5zaW9uc0dMT3BlbkdMRVM+IGdsRXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9u
c0dMT3BlbkdMRVM+KG51bGxwdHIsICBmYWxzZSk7CiAjZWxzZQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHRlbnNpb25zM0RPcGVuR0w+IGdsRXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9u
czNET3BlbkdMPihudWxscHRyLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMy
MCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNHTE9wZW5HTD4gZ2xFeHRlbnNpb25z
ID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KG51bGxwdHIsIEdMQ29udGV4dDo6Y3Vy
cmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKICNlbmRpZgogICAgIGlmIChnbEV4dGVuc2lvbnMt
PnN1cHBvcnRzKCJHTF9PRVNfRUdMX2ltYWdlIikgfHwgZ2xFeHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKQogICAgICAgICBnbEltYWdlVGFyZ2V0VGV4dHVy
ZTJEID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEVHTElNQUdFVEFSR0VUVEVYVFVSRTJET0VTUFJP
Qz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRUdMSW1hZ2VUYXJnZXRUZXh0dXJlMkRPRVMiKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BV
TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvSGlnaFBlcmZvcm1hbmNl
R1BVTWFuYWdlci5jcHAKaW5kZXggYzM1OTNhZjM1NDNlM2MwMjVmOTZiYzQzYzE0NDNjNmU0MGY3
MWYzYi4uZGU5Mzk2N2VmZGY5MmIzYzhmN2I4MzQ0YzQ5ZDAwYjY1NmQ5Y2EzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0hpZ2hQZXJmb3JtYW5jZUdQVU1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9IaWdoUGVyZm9ybWFuY2VHUFVN
YW5hZ2VyLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlIDxPcGVuR0wvQ0dMVHlwZXMuaD4KICNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRp
YVBsYXllclByaXZhdGVSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9t
ZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCmluZGV4IDQ3ZmFhZmNjODE2MzQ4YmJm
YzJiNDc1OTRlYzZiZDJjNWM2OWJmNzguLjZiODllZjlmYTBkYWMyOWFjY2JmNDY4YTY3ZDhkYzll
MjkzYjA0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKQEAgLTQ5MSw3ICs0OTEs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29ucwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwg
R0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwg
R0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZS5oCmluZGV4IGZhYTJlYzlhMzIxYjc4NDlkNDY4NjE0ZmNlOGJhOTk3MTFhMWQ3MmQuLjVk
YWVkNjVmMDdiMTdlOGNjMTk2OWE1NDQ2ODJhOGU2ZjZkYTMyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZh
dGVSZW1vdGUuaApAQCAtMTg0LDcgKzE4NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBmaW5h
bDsKIAogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgZmluYWw7CisgICAgYm9vbCBjb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZW51bSwgYm9vbCwgYm9vbCkgZmluYWw7CiAgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIGZpbmFsOwogCiAgICAgdm9pZCBzZXRQcmVsb2Fk
KFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpQcmVsb2FkKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZWQ0MmJkMTk5OGU0YWRlYzhkMjFm
NDVlNjFjYTBlN2RiOTgxZWY5MS4uYTM2MGZlNTY3NGIzMDY1MTk3ZmZlOWVhYTU4NTNmNTU5YjM1
YmU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
QEAgLTE2OCw3ICsxNjgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GdWxs
c2NyZWVuTWFuYWdlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0M0QuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9IVE1MQXR0YWNobWVudEVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxG
b3JtRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEltYWdlRWxlbWVudC5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpp
bmRleCBjMzU4ZWUyYzE0ZTc4YzNiNzI3M2NjNTk3NTExNGMxNTg5ZWZhOWFkLi4yYWE4ZTc2ZTRj
Yjg5YTNmZmZiN2QyZTNmYjJiZDg2YmQxMGY5MWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtNjgsNyArNjgsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dDNELmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXRU
ZXN0UmVzdWx0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2Ev
V2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlBy
b2Nlc3NDb2NvYS5tbQppbmRleCA1MDNiNTE0ZWRhYmE3NmZhYjlkNTJmMGYwYjUyNzdiMDgwNTE5
MWE2Li5hYzA1YzRiODhiZWM5NjJkZjQ5MjAyODA2YWNmZDBiOTRmMTY0OTgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTEx
MCw3ICsxMTAsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbXBvcnQgIldLQWNjZXNzaWJpbGl0
eVdlYlBhZ2VPYmplY3RNYWMuaCIKICNpbXBvcnQgIldlYlN3aXRjaGluZ0dQVUNsaWVudC5oIgot
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1Njcm9sbGJhclRoZW1lTWFjLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9OU1Njcm9sbGVySW1w
U1BJLmg+CiAjZW5kaWYKQEAgLTgwNiw3ICs4MDYsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNjcm9s
bGVyU3R5bGVQcmVmZXJlbmNlQ2hhbmdlZChib29sIHVzZU92ZXJsYXlTY3JvbGxiYXJzKQogCiB2
b2lkIFdlYlByb2Nlc3M6OmRpc3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZChDR0RpcmVjdERpc3Bs
YXlJRCBkaXNwbGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncykKIHsKLSAg
ICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoZGlzcGxh
eUlELCBmbGFncywgbnVsbHB0cik7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2Vy
OjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKGRpc3BsYXlJRCwgZmxhZ3MsIG51bGxwdHIpOwogfQog
ICAgIAogdm9pZCBXZWJQcm9jZXNzOjpkaXNwbGF5V2FzUmVmcmVzaGVkKENHRGlyZWN0RGlzcGxh
eUlEIGRpc3BsYXlJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zRlRXLmNtYWtl
IGIvU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKaW5kZXggYWY4ZmI2ZGFlYmM0NTZmMmM2
NDE4MjA2OGEyYzg0NTVjZDUyZThjOS4uY2FlYjlkN2ZmZDFjODYwZGYwM2Q3MWNiYzQwZjI1ZjI2
MTdmMzQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKQEAgLTI0Niw3ICsyNDYsNyBAQCBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVJfR0wgT04pCiAjU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9J
TlNQRUNUT1J9KQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRf
U0VSVkVSIE9GRikKIAotc2V0KEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIE9OKQorc2V0KEVO
QUJMRV9HUkFQSElDU19DT05URVhUX0dMIE9OKQogc2V0KFVTRV9BTkdMRV9FR0wgT04pCiAKIHNl
dChXVEZfTElCUkFSWV9UWVBFIFNIQVJFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKaW5kZXggYTkxZmMy
ZDA1MDc0ZTNmNmFjZjllYTZjNDFkOWJkM2VlOTQ5OTExMS4uYmE3ZjM1MmEyYWRjZjcxODA1MTFj
ZDBhNDA0YTAxNWMxMzhhZGZkOSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsu
Y21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTI5Niw3ICsyOTYs
NyBAQCBpZiAoRU5BQkxFX09QRU5HTCkKICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRWl0
aGVyIEdMWCBvciBFR0wgaXMgbmVlZGVkIGZvciBFTkFCTEVfT1BFTkdMLiIpCiAgICAgZW5kaWYg
KCkKIAotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhU
XzNEIFRSVUUpCisgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NP
TlRFWFRfR0wgVFJVRSkKIAogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJF
X01BUFBFUl9HTCBUUlVFKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc01hYy5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zTWFjLmNtYWtlCmluZGV4IDI2NGNmZjBkZWRlY2U5
NmUwZDljYmI1MzA3YTAwYjQ0Mzc2YjZiMjYuLjY3MmQ3Nzc3MmUyM2NiMzk0NGEzMjc1ZjZlZmU1
ZjNlMzEwZGQ1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zTWFjLmNtYWtlCisr
KyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zTWFjLmNtYWtlCkBAIC0xMTMsNyArMTEzLDcgQEAgV0VC
S0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1hTTFQgUFJJVkFURSBPTikKIAog
V0VCS0lUX09QVElPTl9FTkQoKQogCi1zZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgT04p
CitzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04pCiBzZXQoRU5BQkxFX1dFQktJVF9M
RUdBQ1kgT04pCiBzZXQoRU5BQkxFX1dFQktJVCBPTikKIApkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0
YXRpb24uY21ha2UKaW5kZXggNTkzNTkxMWRkOWQ1NDhlYmJhYTk2OTE5NDI1MzY1YTk0NWIyNzA2
MS4uYzcwZTA0MWIwZGNjNGZiYWQ2MWIxYzkyZGViOWY0MDVjODEwZTYzYSAxMDA2NDQKLS0tIGEv
U291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlCkBAIC0xMTMsNyArMTEzLDcgQEAgU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9J
TlNQRUNUT1J9KQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1VOSVhfRE9NQUlOX1NPQ0tF
VFMgT04pCiAKICMgUmVuZGVyaW5nIG9wdGlvbnMKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVO
QUJMRV9HUkFQSElDU19DT05URVhUXzNEIE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoRU5B
QkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
Q09PUkRJTkFURURfR1JBUEhJQ1MgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfRUdM
IE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX05JQ09TSUEgVFJVRSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNX
UEUuY21ha2UKaW5kZXggZDM0OWMyYzM3YzBlODg4ZmRiYTY5YmZiNjExMDY3Y2Y0MWQ2MTM5ZC4u
MmZiYmI1ODFjMDJiNmY0ODM0YWU4YWZmYTU1NGRmMGZiMmUzMTFlMSAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUu
Y21ha2UKQEAgLTE5NSw3ICsxOTUsNyBAQCBpZiAoV1RGX0NQVV9BUk0gT1IgV1RGX0NQVV9NSVBT
KQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DQVBTVE9ORSAke0RFVkVMT1BFUl9N
T0RFfSkKIGVuZGlmICgpCiAKLVNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9HUkFQSElD
U19DT05URVhUXzNEIFRSVUUpCitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfR1JBUEhJ
Q1NfQ09OVEVYVF9HTCBUUlVFKQogCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVS
RV9NQVBQRVIgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBF
Ul9HTCBUUlVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5jbWFr
ZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2UKaW5kZXggZDQ3MWQ1OWNlMTY4
MzYxZDU3ZmZkZmUyZjdiYjdjNzI0NTlhMTgwMS4uMDI5YmE0N2ZmODQ3ODBlZDVmMzBjMGQzZTFk
YjM5NGMyOWMzYjA2MCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXaW5DYWlyby5j
bWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCkBAIC0zNiw3ICsz
Niw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBPTikK
IFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9NRURJQV9GT1VOREFUSU9OIE9OKQogU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JF
TU9URV9JTlNQRUNUT1J9KQogCi1zZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfM0QgT04pCitz
ZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04pCiBzZXQoRU5BQkxFX1dFQktJVCBPTikK
IAogc2V0KFVTRV9BTkdMRV9FR0wgT04pCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggYmZmOWJkYjg2Yjc3YzY0OWMyZmU4NjQyYjM4NmJkYTEzYzY5
YTRhZS4uZDc0MmUyNWExMDFiODE3YmRmYmZiOGQwZjFiZTlmMGE3ZmYxM2M5NiAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhpY3NDb250ZXh0R0wKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTc3OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBhbGwgdGhlIEdyYXBo
aWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGljc0NvbnRleHRHTAorICAgICAgICAoaW5jbHVk
ZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19DT05URVhUXzNEKS4KKworICAgICAgICBHcmFw
aGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMgR3JhcGhpY3NDb250ZXh0R0wuCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoc2luY2Ug
aXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uIG9mIHRoZSBB
UEkpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL3dhdGNobGlz
dDoKKwogMjAyMC0wMS0wNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW2lPU10gSXNzdWUgbWFjaCBsb29rdXAgZXh0ZW5zaW9uIHRvIGxhdW5jaCBzZXJ2
aWNlcyBkYWVtb24gZm9yIE1haWwKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NvbmZpZy93YXRjaGxpc3QgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
b25maWcvd2F0Y2hsaXN0CmluZGV4IDQyY2E2MDU4ZThjNDYwYTUwMWRjODg0YTkzMGJlYTY3MTc4
Yzc3YzUuLjIzYTMzNDg4MzNlY2EzMGIxM2E2NzI3ZmMwMjI5Nzc5YjZhMjM5NGIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmlnL3dhdGNobGlzdApAQCAtMTYzLDEw
ICsxNjMsMTEgQEAKICAgICAgICAgIldlYkdMIjogewogICAgICAgICAgICAgImZpbGVuYW1lIjog
ciJTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy8uKldlYkdMLioiCiAgICAgICAgICAgICAgICAg
ICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy8uKldlYkdMLioiCisgICAgICAg
ICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmds
ZSIKICAgICAgICAgICAgICAgICAgICAgICAgIHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdSIKICAgICAgICAgICAgICAgICAgICAgICAgIHIifFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAgICAgICAgICAgICAgICAgICAgIHIifFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFLioiCi0gICAgICAgICAgICAgICAgICAg
ICAgICByInxTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy8uKkdyYXBoaWNzQ29udGV4
dDNELioiCisgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy8uKkdyYXBoaWNzQ29udGV4dEdMLioiCiAgICAgICAgICAgICAgICAgICAgICAg
ICByInxTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRSIsCiAgICAgICAgIH0sCiAgICAgICAgICJGaWx0
ZXJzIjogewpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGQ1NWNjZmM3
M2U1NjFhNjc4YTBkMmFkYmE1MTkxZjczYjcwNjQwM2QuLmUyMmZmOTIyYmJmNTk0NzhmNWM0OWI4
OWQ3YzE4MmFkM2IzMDNmOTAgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNSBAQAorMjAyMC0wMS0wNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CisKKyAgICAgICAgUmVuYW1lIEdyYXBoaWNzQ29udGV4dDNEIHRvIEdyYXBoaWNzQ29udGV4
dEdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU3
NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5h
bWUgYWxsIHRoZSBHcmFwaGljc0NvbnRleHQzRCB0aGluZ3MgdG8gR3JhcGhpY3NDb250ZXh0R0wK
KyAgICAgICAgKGluY2x1ZGVzIEV4dGVuc2lvbnMzRCBhbmQgR1JBUEhJQ1NfQ09OVEVYVF8zRCku
CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RCYXNlIG5vdyBiZWNvbWVzIEdyYXBoaWNzQ29u
dGV4dEdMLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBpcyBub3cgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wgKHNpbmNlIGl0IHJlcHJlc2VudHMKKyAgICAgICAgdGhlIE9wZW5HTCBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgQVBJKS4KKworICAgICAgICAqIFNvdXJjZS9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZToKKyAgICAgICAgKiBTb3Vy
Y2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9u
c01hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNt
YWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlOgorICAgICAgICAq
IFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2U6CisKIDIwMjAtMDEtMDMgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgc2hh
cmVkIHNjaGVtZXMgdG8gdGhlIFdlYktpdC54Y3dvcmtzcGFjZQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwppbmRleCAy
Y2VhZmVkNmRjZTJkMDNlYWUzYTZmMWYxNTU1NTQ3ZmEzMDY0NzZkLi4yMDJjYjNkOTk0MDEwMzI2
YTUyZWJjMmIxYzk0Nzc0MTM5MTJjOTM3IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0No
YW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhpY3NDb250ZXh0R0wKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTc3OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBhbGwgdGhlIEdyYXBo
aWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGljc0NvbnRleHRHTAorICAgICAgICAoaW5jbHVk
ZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19DT05URVhUXzNEKS4KKworICAgICAgICBHcmFw
aGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMgR3JhcGhpY3NDb250ZXh0R0wuCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoc2luY2Ug
aXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uIG9mIHRoZSBB
UEkpLgorCisgICAgICAgICogU3RpdGNoTWFya2VyL3d0Zi9GZWF0dXJlRGVmaW5lcy5oOgorICAg
ICAgICAqIFN0aXRjaE1hcmtlci93dGYvUGxhdGZvcm0uaDoKKwogMjAxOS0xMi0xNiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFN0eWxlQmVuY2ggc3Vi
dGVzdCBmb3IgZHluYW1pYyBtZWRpYSBxdWVyeSBwZXJmb3JtYW5jZQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0ZlYXR1cmVEZWZpbmVzLmggYi9QZXJmb3Jt
YW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaAppbmRleCBhZDRiOTFl
ZTgyNDVmMTc2OTg3ZjM3YmIyNzVhMGRlNjc2NmU0YjVjLi5lMWI2ZmZlMGE4Yjg3MWVmMGFmZjlh
YWZkOWVmOTM0NjZlYTBkMmQyIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1h
cmtlci93dGYvRmVhdHVyZURlZmluZXMuaApAQCAtNjc2LDggKzY3Niw4IEBAIHRoZSBwdWJsaWMg
aU9TIFNESy4gV2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRlIHRoZSBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZyBmaWxlCiAjZGVmaW5lIEVOQUJMRV9XRUJHTCAwCiAjZW5kaWYKIAotI2lmICFkZWZp
bmVkKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEKQotI2RlZmluZSBFTkFCTEVfR1JBUEhJQ1Nf
Q09OVEVYVF8zRCBFTkFCTEVfV0VCR0wKKyNpZiAhZGVmaW5lZChFTkFCTEVfR1JBUEhJQ1NfQ09O
VEVYVF9HTCkKKyNkZWZpbmUgRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgRU5BQkxFX1dFQkdM
CiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfQU5JTUFUSU9OUykKQEAgLTczMCw4
ICs3MzAsOCBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdpbGwgYWxzbyBuZWVkIHRvIHVwZGF0
ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQogI2Vycm9yICJFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykgcmVxdWlyZXMgRU5BQkxFKFRPVUNIX0VWRU5UUykiCiAjZW5kaWYKIAotI2lm
IEVOQUJMRShXRUJHTCkgJiYgIUVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotI2Vycm9yICJF
TkFCTEUoV0VCR0wpIHJlcXVpcmVzIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSIKKyNpZiBF
TkFCTEUoV0VCR0wpICYmICFFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyNlcnJvciAiRU5B
QkxFKFdFQkdMKSByZXF1aXJlcyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkiCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShXRUJHTDIpICYmICFFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUGxhdGZvcm0uaCBiL1BlcmZvcm1hbmNlVGVz
dHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDYwYmU4ZjM0ZjBjNDQxYTIwOTgx
MWY1MGY2Yzk2NDZmZmNmYWQ5MjQuLjIyMmVkNzc5OTE5NTdkMDlmZmY3YWU1N2Q3NzZhMWM2MDRi
YzJjMGMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0
Zm9ybS5oCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5o
CkBAIC05OTAsNyArOTkwLDcgQEAKICNkZWZpbmUgVVNFX1RFWFRVUkVfTUFQUEVSIDEKICNlbmRp
ZgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8z
RCkgJiYgIWRlZmluZWQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMKQorI2lmIFVTRShURVhUVVJFX01B
UFBFUikgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmICFkZWZpbmVkKFVTRV9URVhU
VVJFX01BUFBFUl9HTCkKICNkZWZpbmUgVVNFX1RFWFRVUkVfTUFQUEVSX0dMIDEKICNlbmRpZgog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386856</attachid>
            <date>2020-01-06 09:53:37 -0800</date>
            <delta_ts>2020-01-06 09:53:37 -0800</delta_ts>
            <desc>EWS test</desc>
            <filename>bug-205778-20200107045334.patch</filename>
            <type>text/plain</type>
            <size>1743538</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAyYmVlNWI1ZTk2ZmRhMmYxNTQyYjhm
M2M2MmQyOGZmYjRhZjA5ZTAuLmE1ZGQxNzhlODg1ZjBjYTBhYWZkZTc5YWZmYWNlMWYxYTg3Mjkw
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGlj
c0NvbnRleHRHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA1Nzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNzQ29u
dGV4dEdMCisgICAgICAgIChpbmNsdWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NPTlRF
WFRfM0QpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBHcmFw
aGljc0NvbnRleHRHTC4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMIChzaW5jZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVuR0wg
aW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSSkuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmlu
ZXMuaDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAyMC0wMS0wNSAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRnVydGhlciBzaW1wbGlmeSBTdHJpbmdC
dWlsZGVyIHVzYWdlIGJ5IHN0YW5kYXJkaXppbmcgaGV4IGZvcm1hdGluZyB0byBhIHNpbmdsZSBo
ZXgoKSBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNjYTVmNWE5NDBhY2IyOTViZTk4NjI0ZmFlMjA5
ZDk0YzUzY2JlYmEuLjM2NTE2ZWRiMjVhNmViZTM4ZmRlYTExODliMjc4MzliMDlhYTY4MGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNzIgQEAKKzIwMjAtMDEtMDUgIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFw
aGljc0NvbnRleHRHTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA1Nzc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVuYW1lIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0M0QgdGhpbmdzIHRvIEdyYXBoaWNz
Q29udGV4dEdMCisgICAgICAgIChpbmNsdWRlcyBFeHRlbnNpb25zM0QgYW5kIEdSQVBISUNTX0NP
TlRFWFRfM0QpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEQmFzZSBub3cgYmVjb21lcyBH
cmFwaGljc0NvbnRleHRHTC4KKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QgaXMgbm93IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMIChzaW5jZSBpdCByZXByZXNlbnRzCisgICAgICAgIHRoZSBPcGVu
R0wgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSSkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4u
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1H
VEsuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1QbGF5U3RhdGlvbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAq
IFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9BTkdM
RUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVmVydGV4QXJy
YXlPYmplY3QuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5j
cHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHA6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHA6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xDb250ZXh0R3JvdXAuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmpl
Y3QuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xEZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJz
LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFF1ZXJ5
LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFF1ZXJ5Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFNhbXBsZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHA6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYXJl
ZE9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU3luYy5jcHA6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xTeW5jLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5jcHA6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4
QXJyYXlPYmplY3RCYXNlLmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHA6
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogcGFnZS9D
aHJvbWUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQ6CisgICAgICAg
ICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9XZWJH
TFN0YXRlVHJhY2tlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uc0dMLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dMQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0RCYXNlLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RB
TkdMRS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW06CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRENhaXJvLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRHTENHLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW06IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQz
RENvY29hLm1tLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5t
bToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL0dyYXBoaWNzQ29udGV4dEdMTkVPTi5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0Nv
bnRleHQzRE5FT04uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2Fj
aGVDVi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLm1t
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RleHR1cmUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0
dXJlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRl
eHQzRElPUy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05p
Y29zaWFHQzNEQU5HTEVMYXllci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnNHTE9wZW5HTC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnNHTE9wZW5HTENvbW1vbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zR0xPcGVuR0xFUy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21t
b24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xFUy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNETWFuYWdlci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xQcml2YXRlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUdMLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0NvbnRleHQzRFRleHR1cmVNYXBwZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdM
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xE
aXJlY3QyRC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0M0REaXJlY3QyRC5jcHAuCisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuY3BwOgorCiAyMDIwLTAxLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTI3MjQpOiBVbmFibGUgdG8gdGFw
IG9uIHBsYXkgYnV0dG9uIG9uIGdvb2dsZSB2aWRlbyAnU2VlIHRoZSB0b3Agc2VhcmNoIHRyZW5k
cyBvZiAyMDE5JwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCA1Mjg1NmM4MzQ5OWRhYzczNjNiMzNiYmI4MTEwMjZmZjQ5
MTZhYzMyLi5kMTZhYzQ4YzY5ZGVhYTI2NmNiNTc2OGM2NTAwMjVmOTVmNjIwYmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhpY3NDb250
ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGljc0NvbnRleHRH
TAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19DT05URVhUXzNE
KS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMgR3JhcGhpY3ND
b250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3BlbkdMIGltcGxl
bWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldheWxhbmRDb21wb3NpdG9yOjppbml0aWFsaXplRUdMKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvbWFjL0hpZ2hQZXJmb3JtYW5jZUdQVU1hbmFnZXIuY3BwOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZh
dGVSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAq
IFdlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzOjpkaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWQpOgorCiAyMDIwLTAxLTA2ICBS
b2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBHbG9i
YWxGcmFtZUlEIGZyb20gTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkCmRpZmYgLS1naXQgYS9T
b3VyY2UvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvQ01ha2VMaXN0cy50eHQKaW5kZXggOGJjZWQ2
ODU2OTg3MWE3OGVkOTFjMzFkNTVjMWJiNzQxYzg5MTZmYS4uNjJiMDU2YzdlY2U3NjI2OThjNjI4
NTQzMzcxZWU0YzIwNThhYTZlNiAxMDA2NDQKLS0tIGEvU291cmNlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9DTWFrZUxpc3RzLnR4dApAQCAtMTMsNyArMTMsNyBAQCBlbmRpZiAoKQogCiBh
ZGRfc3ViZGlyZWN0b3J5KEphdmFTY3JpcHRDb3JlKQogCi1pZiAoRU5BQkxFX0dSQVBISUNTX0NP
TlRFWFRfM0QpCitpZiAoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wpCiAgICAgYWRkX3N1YmRp
cmVjdG9yeShUaGlyZFBhcnR5L0FOR0xFKQogZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvRmVhdHVyZURlZmluZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVz
LmgKaW5kZXggNjgyYTFlODk1YTJmNmMwZjJkNTVmYmQwMWI2YWQ1MzAxY2YwMDA2Ni4uOTgwNDU5
M2YxNjc4ODFjMTgzMzRlYWVlZWZmZmM1NGM2NWI0ZDMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5l
cy5oCkBAIC03MjIsOCArNzIyLDggQEAgdGhlIHB1YmxpYyBpT1MgU0RLLiBTZWUgPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzE3OTE2Nz4uICovCiAjZGVmaW5lIEVOQUJMRV9XRUJHTCAwCiAjZW5kaWYK
IAotI2lmICFkZWZpbmVkKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEKQotI2RlZmluZSBFTkFC
TEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBFTkFCTEVfV0VCR0wKKyNpZiAhZGVmaW5lZChFTkFCTEVf
R1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyNkZWZpbmUgRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wg
RU5BQkxFX1dFQkdMCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfQVJDSElWRSkK
QEAgLTc2NCw4ICs3NjQsOCBAQCB0aGUgcHVibGljIGlPUyBTREsuIFNlZSA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTc5MTY3Pi4gKi8KICNlcnJvciAiRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpIHJl
cXVpcmVzIEVOQUJMRShUT1VDSF9FVkVOVFMpIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCR0wp
ICYmICFFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNlcnJvciAiRU5BQkxFKFdFQkdMKSBy
ZXF1aXJlcyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkiCisjaWYgRU5BQkxFKFdFQkdMKSAm
JiAhRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisjZXJyb3IgIkVOQUJMRShXRUJHTCkgcmVx
dWlyZXMgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpIgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
V0VCR0wyKSAmJiAhRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggMGQ2NWIzNjQwNzFlYjEx
NTUxNDZiNDdjYTQ1Y2I3NTQyYjhmNGUxMy4uMjdiMGY0ZmY4OTA4OWQzZmFhOWZkMTgzMzVlM2Y5
NGUzMDViNWI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC0xMTQ4LDcgKzExNDgsNyBAQAogI2VuZGlmCiAj
ZW5kaWYKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfM0QpICYmICFkZWZpbmVkKFVTRV9URVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVIpICYmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAhZGVmaW5lZChVU0Vf
VEVYVFVSRV9NQVBQRVJfR0wpCiAjZGVmaW5lIFVTRV9URVhUVVJFX01BUFBFUl9HTCAxCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA0ZmM4M2NmMmI5ODY5NDJlNjRlMDBjMzkzZWJj
ZmJmZTIyMDJjOWYwLi45NzQ4NzViYjRiM2EyYTIxYjQ4MmNiOTU0MzNlMjdmMjgyMDYyMjg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTQ4OCwxMSArMTQ4OCwxMSBAQCBpZiAoRU5BQkxFX1FV
T1RBKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCkK
K2lmIChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCkKICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCiAgICAgKQog
CiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgQU5HTEVGcmFtZXdvcmspCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQppbmRleCBhYTE2MDNjZTNjMzNlN2RjYzIxY2UyYjhjNTBhYWYyMzg3NjVhYTY3
Li40NjYxOWM2NWQ2YjNjM2Q4MWZmNGMyZTUwMDUyMTZhYTQ5NjJlYzE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKQEAgLTEwMjYsNyArMTAyNiw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuc2lvbnMzRC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uc0dM
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50M0QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBA
IC0xMDU3LDEwICsxMDU3LDggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRE1hbmFnZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEdMLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJDbGllbnQuaApAQCAtMTEyMyw3ICsxMTIxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoQ2FjaGUuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1dpbmRSdWxlLmgKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0V4dGVuc2lvbnMzREFOR0xFLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9F
eHRlbnNpb25zR0xBTkdMRS5oCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgKQEAgLTExNDIsOSArMTE0MCwxMSBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9saWJ3cGUvUGxhdGZvcm1E
aXNwbGF5TGliV1BFLmgKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xFUy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgK
IAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlTWF0aERhdGEuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggMTEyN2JlZDBhODJkOGMyNWU3MDA5
YWQ5Yjc1NzI4NTU2MDI1YzhhMy4uZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2Nm
OTQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC0xMjksNyArMTI5
LDcgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
T1N1cmZhY2VQb29sLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCA1YzBjYTM4YTFkM2IzMmUxNmJi
OGUyODE4YWI3ZDMzNTQwZGM3ZmYzLi5hZTkxYTc2Mzg0NDI0M2IzMTRiMzcwZTRkOGExNzU4NjFk
OGZmMDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtNDYsMTYgKzQ2LDE2IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNv
ZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xD
b250ZXh0RUdMLmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVVdGlsaXRpZXMuY3BwCkBAIC03OCw3ICs3OCw3
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZURpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJE
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQzRERpcmVjdDJE
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGEzMGE1NDVjYzYzNTE0MzFlOTM2OTc4NjJmYTM4
OWIwZjk2OTNlN2MuLmNkOTI1MzE5ZDM5MzQ1YWYwYTkyNjZlN2Y4YzI4NjlkZjYzN2ZkNmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xMzEsMjggKzEzMSwyOCBAQCBlbmRpZiAoKQog
CiBpZiAoVVNFX0FOR0xFX1dFQkdMKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5j
cHAKICAgICApCiBlbHNlICgpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTENvbW1vbi5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKICAgICApCiAKICAgICBpZiAoVVNFX09Q
RU5HTF9FUykKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCi0gICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xP
cGVuR0xFUy5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTEVTLmNwcAogICAgICAgICApCiAgICAgZW5kaWYgKCkKIAogICAgIGlm
IChVU0VfT1BFTkdMKQogICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCi0g
ICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQmFzZS5jcHAKICAgICAgICAgKQogICAgIGVuZGlmICgpCiBlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA3MWYwODA1ZDBmMWM2MGJlMWNiODAwMzMy
ZjQwZGRkNmU3YmYyZDhhLi5jMDNjZTZiNTEzMTgyMWEwMWNjN2Q2NjUzZDE2OTE5MWRiYjc5YTgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjg2LDcgKzI4Niw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0U2l6ZUNHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRHTENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTMwNCw3ICszMDQsNyBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcAogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
M0RDb2NvYS5tbQorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29jb2EubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRl
eHRDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAg
LTM0NiwxMCArMzQ2LDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcAogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVDRy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bVBsYXlTdGF0aW9uLmNtYWtlCmluZGV4IDI2NzhjMzFhZDYyYmRiODI2OTc5ZmJiNzNhM2NlMTM1
ZGQzNDZlNjYuLmNiMWE4YjllZTNlYjZmMDdkNDRkZmRhYWYxN2M4Nzg5NDYzYWZiOTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQpAQCAtMzcsNyArMzcsNiBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFu
aW1hdG9yR2VuZXJpYy5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAgLTQ1LDEwICs0NCwxMSBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9y
bURpc3BsYXlMaWJXUEUuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xFUy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCiAKICAgICBw
bGF0Zm9ybS9saWJ3cGUvUGFzdGVib2FyZExpYldQRS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21h
a2UKaW5kZXggZDFmZDRlYjEyZGQ5NzExMDAxODBlYTgwNTZlZDQ4NjU2OWZjOTA2ZS4uMjUwYTBi
MzVjMDQwMmY2NzlkYWU0OWI0YTIwYzViYTE5ZDY1ZmViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKQEAgLTM3LDE0ICszNywxMyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKIAog
ICAgIHBsYXRmb3JtL2F1ZGlvL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5jcHAKIAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKLQogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFBy
aXZhdGUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNl
dHRpbmcuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVV0aWxp
dGllcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOTI5N2QwNDRlNDQ4Mjc4ZGJlN2M5MTY5YmIzMjZj
OWRmYjcwNDI1Yi4uYWNhZTZmZTM4ZGRlMjZjMjhjZjVkNDQ5MTFmYzVhYzMwYjI1ODY3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTE4NTcsOCArMTg1Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dlb21l
dHJ5VXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmNwcAot
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCkBAIC0xOTQ3LDYgKzE5
NDYsOCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9pc28vSVNPU2NoZW1lVHlwZUJveC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2lzby9JU09UcmFja0VuY3J5cHRpb25Cb3guY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9pc28vSVNPVlRUQ3VlLmNwcAogCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wuY3BwCisKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlTWF0aERhdGEuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJh
bnNmb3JtLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMjRmNWMwNThmYWNiODA2ZTk3
ODk0N2I0MDJhODk3OTI0NTc3ODRmNC4uZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFkNjZlZTcxMjM0
N2MxNjZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yMjYsOCArMjI2LDggQEAgcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5jcHAKIAogLy8gVGhlc2Ug
c291cmNlcyBjYW4ndCBiZSB1bmlmaWVkIHdpdGggb3RoZXJzIGluIGNhc2UgdGhleSBhcmUgbWVy
Z2VkCiAvLyB3aXRoIGZpbGVzIHRoYXQgdXNlIHRoZSBzeXN0ZW0gT3BlbkdMLgotcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwIEBuby11bmlmeQotcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAgQG5vLXVuaWZ5CitwbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAgQG5vLXVuaWZ5CitwbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBAbm8tdW5pZnkK
IHBsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1RlbXBvcmFyeUFOR0xFU2V0dGluZy5jcHAgQG5vLXVu
aWZ5CiAKIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BVlRyYWNrUHJpdmF0ZUFWRk9i
akNJbXBsLm1tIEBuby11bmlmeQpAQCAtMjg1LDcgKzI4NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0Zsb2F0UG9pbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRTaXplQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFkaWVudENHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
M0RDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcApAQCAtMzA1LDcgKzMwNSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9y
bWF0aW9uTWF0cml4Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAK
IAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ29sb3JDb2NvYS5tbQotcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvR3JhcGhpY3NDb250ZXh0M0RDb2NvYS5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQpAQCAtMzc1LDEwICszNzUsMTEgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1N3aXRjaGlu
Z0dQVUNsaWVudC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1dlYktpdE5TSW1hZ2VFeHRyYXMubW0KIAotcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uc0dMT3BlbkdMLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnNHTE9wZW5HTENvbW1vbi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEJhc2UuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xDb21tb24uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1Rl
bXBvcmFyeU9wZW5HTFNldHRpbmcuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09w
ZW5UeXBlQ0cuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IGMyYzI3MDliODc5YTgzODY5Mjg5
ZmUyODcxMzU3Y2RlNjI2YTFhYTQuLjcyMDVlMjBkM2FiNGUzOWZiZWU0YmI5NDMxYWVjYjRiY2Nj
MjhiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC02OSw3ICs2OSw2IEBAIHBsYXRmb3JtL1Vz
ZXJBZ2VudFF1aXJrcy5jcHAKIHBsYXRmb3JtL2dlbmVyaWMvU2Nyb2xsQW5pbWF0b3JHZW5lcmlj
LmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwIEBuby11bmlmeQotcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5LmNwcCBAbm8tdW5pZnkKIAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvWDExLmNwcCBAbm8tdW5pZnkKQEAgLTkyLDYgKzkx
LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3Bw
CiAKIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9ybURpc3BsYXlMaWJXUEUuY3BwCiAK
K3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUu
Y3BwCisKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNw
cAogCiBwbGF0Zm9ybS9ncmFwaGljcy93YXlsYW5kL1BsYXRmb3JtRGlzcGxheVdheWxhbmQuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNXUEUudHh0CmluZGV4IDVhYjIxMTk0ZTdjNDA0ZDRmMjgwMTk4MzlmMzI4ZDY1
NjY2ZjRhZWEuLmI1Yzg5MTUwODg3ODM4MzIwYzVlMzk0ZmI4ZjBiZGRhODQ0M2M4N2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNXUEUudHh0CkBAIC02Miw3ICs2Miw2IEBAIHBhZ2Uvc2Nyb2xsaW5nL2dlbmVyaWMv
U2Nyb2xsaW5nVGhyZWFkR2VuZXJpYy5jcHAKIHBsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAK
IAogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNw
bGF5LmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcApAQCAtNzAs
MTAgKzY5LDExIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0xMaWJXUEUuY3Bw
CiAKIHBsYXRmb3JtL2dyYXBoaWNzL2xpYndwZS9QbGF0Zm9ybURpc3BsYXlMaWJXUEUuY3BwCiAK
LXBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCi1w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwIEBuby11bmlm
eQotcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcCBAbm8t
dW5pZnkKK3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
bW1vbi5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEVTLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
UHJpdmF0ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0
aW5nLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZVZlcnRpY2FsRGF0
YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAyZjkzYjhiNDc0MDNkOGI2YzE2YzRjMGQ4NGFmMGJjZDExOGRjYTczLi5kNGZi
MGQzNjgyYmVjYjVkNDI4MGE3ZmZmMjZiY2I1ZGRhMDk2Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MTMsNyArOTEzLDcg
QEAKIAkJMzEzNTkxMEExRTdEREM3MzAwRjMwNjMwIC8qIFJUQ1NkcFR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMzU5MTA0MUU3RERDNjAwMEYz
MDYzMCAvKiBSVENTZHBUeXBlLmggKi87IH07CiAJCTMxMzU5MTBCMUU3RERDNzMwMEYzMDYzMCAv
KiBSVENTaWduYWxpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEzNTkxMDUxRTdEREM2MDAwRjMwNjMwIC8qIFJUQ1NpZ25hbGluZ1N0YXRl
LmggKi87IH07CiAJCTMxM0JDRTFDMjM1RTNCRTUwMEZDMzlFNSAvKiBFbGVtZW50Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzQkNFMUIy
MzVFM0JEQjAwRkMzOUU1IC8qIEVsZW1lbnRDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzEzREU4NzAyM0E5Njk3MzAwOEZDNDdCIC8q
IEdyYXBoaWNzQ29udGV4dDNEQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEzREU4NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4
dDNEQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTMxM0RFODcwMjNBOTY5NzMwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRleHRHTC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEzREU4NkYyM0E5Njk2
NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dEdMLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzE0MDM3OUIxMjRCRUE3RjAwQUY0MEU0IC8qIFdl
YkNvcmVNb3Rpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTQwMzc5NzEyNEJFQTdGMDBBRjQwRTQgLyogV2ViQ29yZU1vdGlvbk1hbmFn
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkz
MTQwMzc5RDEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDAzNzk5MTI0
QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oICovOyB9OwogCQkz
MTQwQzUyMDFGREYxNTFBMDBEMkE4NzMgLyogT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQw
QzUxRTFGREYxNTFBMDBEMkE4NzMgLyogT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmggKi87IH07CkBAIC05NDcsNiArOTQ3LDcgQEAKIAkJMzE5NTVBODgxNjBEMTk5MjAwODU4MDI1
IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMUU4RDhCQjE2MEJDOTRDMDA0Q0U4RjUgLyogUmVuZGVyU25h
cHNob3R0ZWRQbHVnSW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTggLyogQW5pbWF0aW9uRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOTg0N0ZGMUEx
RDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5oICovOyB9OwogCQkzMTk4NDgwQzFBMUU2
Q0U4MDBBMTMzMTggLyogSlNBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE5ODQ4MDQxQTFFNkI1RDAwQTEzMzE4IC8qIEpTQW5p
bWF0aW9uRXZlbnQuaCAqLzsgfTsKKwkJMzE5QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE5QTcyODcyM0MyNjdFNzAwODUzNTNDIC8qIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxOUFFMDY0MTQyRDZCMjQwMDY1NjNBMSAvKiBTdHlsZUZpbHRlckRh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxOUFF
MDYyMTQyRDZCMjQwMDY1NjNBMSAvKiBTdHlsZUZpbHRlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTlGQkQ1RjE1RDJGNDY0MDA5NjQw
QTYgLyogQ2FjaGVkSW1hZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxOUZCRDVEMTVEMkY0NDQwMDk2NDBBNiAvKiBDYWNoZWRJbWFnZUNs
aWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTMxQTA4OTU2MUU3MzhENTkwMDNCNjYwOSAvKiBKU1dlYkdQVUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFBMDg5MUQxRTczOEQ1OTAwM0I2
NjA5IC8qIEpTV2ViR1BVQnVmZmVyLmggKi87IH07CkBAIC05NjksNyArOTcwLDcgQEAKIAkJMzFB
MDg5ODkxRTczOEQ1QTAwM0I2NjA5IC8qIEpTV2ViR1BVVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFBMDg5NTAxRTczOEQ1OTAwM0I2NjA5
IC8qIEpTV2ViR1BVVGV4dHVyZS5oICovOyB9OwogCQkzMUEwODk4QzFFNzM4RDVBMDAzQjY2MDkg
LyogSlNXZWJHUFVUZXh0dXJlRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzFBMDg5NTMxRTczOEQ1OTAwM0I2NjA5IC8qIEpTV2ViR1BV
VGV4dHVyZURlc2NyaXB0b3IuaCAqLzsgfTsKIAkJMzFBNzk1QzcxODg4QkNCMjAwMzgyRjkwIC8q
IEFOR0xFSW5zdGFuY2VkQXJyYXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMUE3OTVDMjE4ODhCNzI0MDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRB
cnJheXMuaCAqLzsgfTsKLQkJMzFBQjUwMDAxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29u
dGV4dDNESU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMUFCNEZGRjEyMjg3OEEyMDAxQTdEQjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCAqLzsg
fTsKKwkJMzFBQjUwMDAxMjI4NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
RVNJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
QUI0RkZGMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgg
Ki87IH07CiAJCTMxQzBGRjIyMEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFDMEZG
MUMwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmggKi87IH07CiAJCTMx
QzBGRjI1MEU0Q0VCNkUwMDdENkZFNSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjFGMEU0Q0VCNkUw
MDdENkZFNSAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKIAkJMzFDMEZGM0UwRTRD
RUZBQzAwN0Q2RkU1IC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzBGRjNBMEU0Q0VGQUMwMDdENkZFNSAv
KiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmggKi87IH07CkBAIC0xMjE1LDcgKzEyMTYsNyBAQAog
CQk0NEEyOEFBRjEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTI4QUFFMTJERkI4QkYwMEFFOTIz
QiAvKiBNYXRoTUxOYW1lcy5oICovOyB9OwogCQk0NEM5OTE4NjBGM0QxRUJFMDA1ODY2NzAgLyog
U2Nyb2xsYmFyVGhlbWVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0Qzk5MTg1MEYzRDFFQkUwMDU4NjY3MCAvKiBTY3JvbGxiYXJUaGVtZUlPUy5o
ICovOyB9OwogCQk0NEM5OTE5RjBGM0QyMTBFMDA1ODY2NzAgLyogVGhlbWVJT1MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Qzk5MTlEMEYzRDIxMEUw
MDU4NjY3MCAvKiBUaGVtZUlPUy5oICovOyB9OwotCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQg
LyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NERBQjVCMDE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmggKi87IH07CisJCTQ0REFCNUIyMTVBNjIzNTgwMDk3QzFFNCAvKiBF
eHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zR0xP
cGVuR0xDb21tb24uaCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVs
YWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDUxMjUwMjMxNURD
RTM3RDAwMkY4NEUyIC8qIFNwaW5CdXR0b25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTEyNTAyMTE1RENFMzdEMDAyRjg0RTIgLyogU3Bp
bkJ1dHRvbkVsZW1lbnQuaCAqLzsgfTsKIAkJNDUzRUI2MzcxNTlDNTcwNDAwMDAxQkI3IC8qIERh
dGVUaW1lRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NTNFQjYzNTE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTMwOCw3ICsxMzA5
LDcgQEAKIAkJNDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OwogCQk0
OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMzMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFNoYWRlci5oICovOyB9OwogCQk0OUM3QjlFNjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xUZXh0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmggKi87IH07Ci0JCTQ5
QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5RkIxMDQyRDM2NTAwMDlE
NDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
OUQ1REMyQzBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RDVEQzI4MEY0
MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RDVEQzJFMEY0MjNBNzMw
MDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlENURDMkEwRjQyM0E3MzAwOEYyMEZE
IC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlFOTExQzQwRUY4NkQ0NzAwOUQwQ0FGIC8q
IFRyYW5zZm9ybWF0aW9uTWF0cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUU5MTFCNDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRpb25N
YXRyaXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjAxMiw3ICsyMDEzLDYgQEAKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hl
ZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNv
dXJjZVJlcXVlc3RJbml0aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkUwQjkwNjkyMzIxQTY4RDAwNjIyM0IyIC8qIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVFVEMxLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RTBCOTA2NTIzMjFBNjhDMDA2MjIzQjIgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZUVUQzEuaCAqLzsgfTsKIAkJNkUwRTU2OUMxODNCRkZFNjAwRTBFOEQ1IC8qIEZsb2F0Um91bmRl
ZFJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
MEU1NjlBMTgzQkZGRTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRSZWN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkUyMUM2QzAxMTI2MzM4NTAw
QTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjFDNkJGMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGlj
c0NvbnRleHQzRC5jcHAgKi87IH07CiAJCTZFMjQyQjJCMjMzNTk0MDUwMDJDQURENCAvKiBKU1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RTI0MkIyQTIzMzU5M0Q4MDAyQ0FERDQgLyogSlNXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlRVRDMS5oICovOyB9OwogCQk2RTI0MkIyQzIzMzU5NDA5MDAyQ0FERDQgLyog
SlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI0MkIyODIzMzU5M0Q3MDAyQ0FERDQgLyogSlNXZWJHTENv
bXByZXNzZWRUZXh0dXJlRVRDLmggKi87IH07CiAJCTZFM0ZBRDM5MTQ3MzNGNDAwMEU0MjMwNiAv
KiBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTNGQUQzNzE0NzMzRjQwMDBFNDIzMDYgLyogSlNXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQy5oICovOyB9OwpAQCAtMjAyNCwxMiArMjAyNCwxMiBAQAog
CQk2RTQ3RTY2MTEwQjc5NDRCMDBCMTg2QzggLyogV2ViR0xBbnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNDdFNjVGMTBCNzk0NEIwMEIxODZDOCAv
KiBXZWJHTEFueS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTZFNEFCQ0Q1MTM4RUEwQjcwMDcxRDI5MSAvKiBKU0hUTUxVbmtub3duRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU0QUJDRDMx
MzhFQTBCNzAwNzFEMjkxIC8qIEpTSFRNTFVua25vd25FbGVtZW50LmggKi87IH07CiAJCTZFNEU5
MUFGMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTRFOTFBQTEwRjdGQjMxMDBB
Mjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wu
aCAqLzsgfTsKLQkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgw
RThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovOyB9OwotCQk2RTcyRjU0QzIyOURDRDBD
MDBCM0UxNTEgLyogRXh0ZW5zaW9uczNEQU5HTEUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVu
c2lvbnMzREFOR0xFLmNwcCAqLzsgfTsKLQkJNkU3MkY1NEUyMjlEQ0QxMDAwQjNFMTUxIC8qIEdy
YXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4
dDNEQU5HTEUuY3BwICovOyB9OworCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5z
aW9uc0dMT3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMT3BlbkdMLmggKi87
IH07CisJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0wuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQw
MDg3NThGNyAvKiBFeHRlbnNpb25zR0wuaCAqLzsgfTsKKwkJNkU3MkY1NEMyMjlEQ0QwQzAwQjNF
MTUxIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25z
R0xBTkdMRS5jcHAgKi87IH07CisJCTZFNzJGNTRFMjI5RENEMTAwMEIzRTE1MSAvKiBHcmFwaGlj
c0NvbnRleHRHTEFOR0xFLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFMjdGMjQyMjI5OENFNEIwMEYxRjYzMiAvKiBHcmFwaGljc0NvbnRleHRHTEFO
R0xFLmNwcCAqLzsgfTsKIAkJNkU3MkY1NEYyMjlEQ0QxMzAwQjNFMTUxIC8qIFRlbXBvcmFyeUFO
R0xFU2V0dGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTI5MDg2MTIyOURCOTUwMDAwOTg2RTIgLyogVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNw
cCAqLzsgfTsKLQkJNkU3MkY1NTAyMjlEQ0QxNzAwQjNFMTUxIC8qIEV4dGVuc2lvbnMzREFOR0xF
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI3RjI0
NDIyOUM5RjhEMDBGMUY2MzIgLyogRXh0ZW5zaW9uczNEQU5HTEUuaCAqLzsgfTsKKwkJNkU3MkY1
NTAyMjlEQ0QxNzAwQjNFMTUxIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTI3RjI0NDIyOUM5RjhEMDBGMUY2MzIg
LyogRXh0ZW5zaW9uc0dMQU5HTEUuaCAqLzsgfTsKIAkJNkU3MkY1NTEyMjlEQ0QxQTAwQjNFMTUx
IC8qIFRlbXBvcmFyeUFOR0xFU2V0dGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8qIFRlbXBvcmFyeUFO
R0xFU2V0dGluZy5oICovOyB9OwogCQk2RTg0RTlFMTE3NjY4QkYxMDA4MTVCNjggLyogUmFzdGVy
U2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
ODRFOURGMTc2NjhCQUQwMDgxNUI2OCAvKiBSYXN0ZXJTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFOEFDREVEMjMzNDVDQkMwMDI0QUFG
NSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RThBQ0RFQjIzMzQ1Q0FGMDAyNEFBRjUgLyogV2ViR0xD
b21wcmVzc2VkVGV4dHVyZUVUQy5oICovOyB9OwpAQCAtMjIyMSw3ICsyMjIxLDcgQEAKIAkJN0My
RkE2MTIxRUE5NUEzQzAwQTAzMTA4IC8qIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyRkE2MTAxRUE5
NUEzMjAwQTAzMTA4IC8qIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzBEOTg0MUY4MTVBRUMw
MDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRD
b250cm9sbGVyLmggKi87IH07CiAJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0
U2lnbmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QzMwRDk4MTFGODE1QUMxMDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oICovOyB9OwotCQk3QzMz
MEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMzMEEwMTFERjhG
QUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0MzMzBBMDIxREY4RkFDNjAw
RDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8q
IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzMwQTA4MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bv
c2l0aW9uT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzMzBBMDYxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmggKi87
IH07CiAJCTdDM0E5MUU2MUM5NjNCODgwMEQxQTdFMyAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0E5MUU1
MUM5NjNCODgwMEQxQTdFMyAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzNCNzk3MTE5MDg3NTdCMDBC
NDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0I3OTZGMTkwODc1N0IwMEI0N0EyRCAvKiBVc2VyTWVz
c2FnZUhhbmRsZXIuY3BwICovOyB9OwpAQCAtNDI0Myw3ICs0MjQzLDYgQEAKIAkJRDA1Q0VEMkEw
QTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA1Q0VEMjgwQTQwQkIyQzAwQzVBRjM4IC8q
IEZvcm1hdEJsb2NrQ29tbWFuZC5oICovOyB9OwogCQlEMDZDMEQ4RjBDRkQxMTQ2MDA2NUY0M0Yg
LyogUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDA2QzBEOEQwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92ZUZvcm1hdENv
bW1hbmQuaCAqLzsgfTsKIAkJRDA3REVBQkEwQTM2NTU0QTAwQ0EzMEY4IC8qIEluc2VydExpc3RD
b21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
MDdERUFCODBBMzY1NTRBMDBDQTMwRjggLyogSW5zZXJ0TGlzdENvbW1hbmQuaCAqLzsgfTsKLQkJ
RDA4NDNBNEIyMEZFQkUzRDAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDA4NDNBNEEyMEZF
QkUzRDAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwODZGRTk4MDlENTNBQUIwMDVC
Qzc0RCAvKiBVbmxpbmtDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEMDg2RkU5NjA5RDUzQUFCMDA1QkM3NEQgLyogVW5saW5rQ29tbWFuZC5o
ICovOyB9OwogCQlEMDhCMDBFNDIwQTI4MjU5MDAwNEJDMEEgLyogV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFTVEMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQwQTIwRDU0MjA5MkEwQTYwMEUwQzI1OSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQy5o
ICovOyB9OwogCQlEMEEzQTczMTE0MDVBMzk4MDBGQjhFRDMgLyogUmVzb3VyY2VMb2FkZXJPcHRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMEEz
QTczMDE0MDVBMzk4MDBGQjhFRDMgLyogUmVzb3VyY2VMb2FkZXJPcHRpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcwMDQsOCArNzAwMyw4
IEBACiAJCTMxMzU5MTA1MUU3RERDNjAwMEYzMDYzMCAvKiBSVENTaWduYWxpbmdTdGF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENTaWduYWxpbmdTdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTM1OTEwQzFFN0REQ0I2MDBGMzA2MzAgLyogUlRD
QnVuZGxlUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0J1bmRs
ZVBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTNCQ0UxQjIzNUUzQkRC
MDBGQzM5RTUgLyogRWxlbWVudENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRWxlbWVudENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzEz
REU4NkQyM0E5Njk2NjAwOEZDNDdCIC8qIEdyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzREJhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0Ig
LyogR3JhcGhpY3NDb250ZXh0M0RCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dDNEQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTNERTg2RDIzQTk2OTY2MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0R0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTNERTg2RjIzQTk2OTY3MDA4RkM0N0IgLyog
R3JhcGhpY3NDb250ZXh0R0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3Jh
cGhpY3NDb250ZXh0R0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE0MDM3OTcx
MjRCRUE3RjAwQUY0MEU0IC8qIFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVNb3Rpb25NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxNDAzNzk4MTI0QkVBN0YwMEFGNDBFNCAvKiBXZWJDb3JlTW90aW9u
TWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVNb3Rpb25NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTQwMzc5
OTEyNEJFQTdGMDBBRjQwRTQgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGV2aWNlT3JpZW50YXRpb25DbGllbnRJT1MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcwOTAsNiArNzA4OSw3IEBACiAJCTMxOTg0
ODAwMUExRDgxNjcwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gQW5pbWF0aW9uRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMTk4NDgwMzFBMUU2QjVEMDBBMTMzMTggLyogSlNBbmltYXRpb25FdmVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE5ODQ4MDQxQTFFNkI1RDAwQTEzMzE4IC8qIEpT
QW5pbWF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBbmlt
YXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTlBNzI4NzIzQzI2
N0U3MDA4NTM1M0MgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTlBRTA2MTE0MkQ2QjI0MDA2NTYzQTEg
LyogU3R5bGVGaWx0ZXJEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0eWxlRmlsdGVyRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
OUFFMDYyMTQyRDZCMjQwMDY1NjNBMSAvKiBTdHlsZUZpbHRlckRhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVGaWx0ZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxOUJERTRGMUU3QTg1OEEwMEJBMjk2QyAvKiBKU1JUQ0ljZVRyYW5zcG9y
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JUQ0ljZVRyYW5z
cG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTQyLDcgKzcxNDIsNyBA
QAogCQkzMUE3OTVDMzE4ODhCNzI0MDAzODJGOTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFOR0xFSW5zdGFuY2VkQXJyYXlzLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFBNzk1QzQxODg4QkFEMTAwMzgyRjkwIC8qIEpTQU5H
TEVJbnN0YW5jZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNBTkdMRUluc3RhbmNlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxQTc5NUM1MTg4OEJBRDEwMDM4MkY5MCAvKiBKU0FOR0xFSW5zdGFuY2VkQXJyYXlzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQU5HTEVJbnN0YW5jZWRBcnJheXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzFBQjRGRkYxMjI4NzhBMjAwMUE3REIw
IC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dDNESU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxQUI0RkZGMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9T
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMRVNJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzFDMEZGMUIwRTRDRUI2
RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzFDMEZGMUMwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1h
dGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdEFuaW1h
dGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxQzBGRjFEMEU0Q0VC
NkUwMDdENkZFNSAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzY5Niw4ICs3Njk2LDggQEAKIAkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2NjcwIC8qIFRo
ZW1lSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGhlbWVJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RDhEQTk4MTM5NTQ1QkUwMDMz
N0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR01Q
YXRoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RDhEQTlBMTM5
NTQ1Q0QwMDMzN0I3NSAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ0
REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0REFCNUFGMTVBNjIzNTgwMDk3QzFFNCAv
KiBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnNHTE9w
ZW5HTENvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25z
R0xPcGVuR0xDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRFODhFNEMy
MzY5MTI4QTAwOUI0ODQ3IC8qIEhpZ2hsaWdodE1hcC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gSGlnaGxpZ2h0TWFwLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRFODhF
NEQyMzY5MTI4QjAwOUI0ODQ3IC8qIEhpZ2hsaWdodFJhbmdlR3JvdXAuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEhpZ2hsaWdodFJhbmdlR3JvdXAuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NEU4OEU1MDIzNkE1NkFDMDA5QjQ4NDcgLyogSGlnaGxpZ2h0TWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhpZ2hsaWdodE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzg5NCw3ICs3ODk0LDcgQEAKIAkJNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdM
VGV4dHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTFRl
eHR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlDNjEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkdMVGV4dHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlD
NzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXZWJHTFRleHR1cmUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3
QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlDN0I5RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCQThDMTA0
MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0OUQ1REMyNzBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUQ1REMyODBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5MzIsNyArNzkzMiw3IEBA
CiAJCTQ5RUVEMTRCMTA1MTk3MTkwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4
IC8qIEdyYXBoaWNzQ29udGV4dDNEQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5RkZCRjNEMTFDOTNFRTMwMDZBNzExOCAvKiBXZWJHTExheWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkdMTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJHTExheWVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTBEQTJGQzEyOUIyNDE5MDBBQjYxRTEgLyogRm9y
bUFzc29jaWF0ZWRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05MjYwLDE1ICs5MjYwLDE1IEBACiAJCTZFMEI5MDY4MjMyMUE2OEQwMDYyMjNCMiAvKiBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFMEU1Njk5MTgzQkZGRTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRS
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0Um91bmRl
ZFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTBFNTY5QTE4M0JGRkU2
MDBFMEU4RDUgLyogRmxvYXRSb3VuZGVkUmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGbG9hdFJvdW5kZWRSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTZFMjFDNkJGMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBH
cmFwaGljc0NvbnRleHQzRENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2RTIxQzZCRjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTIxQzZDMTExMjYzMzk5
MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHRHTENHLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkUyNDJCMjYyMzM1OTNENzAwMkNBREQ0IC8qIEpTV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUVUQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVFVEMuY3BwOyBwYXRoID0gLi4vLi4vLi4vLi4vLi4vLi4vV2ViS2l0QnVpbGQvRGVidWcv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTI0MkIyODIzMzU5M0Q3MDAyQ0FERDQgLyog
SlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUVUQy5oOyBwYXRoID0gLi4vLi4vLi4vLi4vLi4vLi4vV2ViS2l0QnVpbGQv
RGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUyNDJCMjkyMzM1OTNENzAwMkNBREQ0
IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
SlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5jcHA7IHBhdGggPSAuLi8uLi8uLi8uLi8uLi8u
Li9XZWJLaXRCdWlsZC9EZWJ1Zy9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUVUQzEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTI0MkIy
QTIzMzU5M0Q4MDAyQ0FERDQgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmg7IHBhdGggPSAuLi8uLi8u
Li8uLi8uLi8uLi9XZWJLaXRCdWlsZC9EZWJ1Zy9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUVUQzEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dDNEQU5HTEUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RBTkdM
RS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFMjdGMjQzMjI5QzlGODQwMEYx
RjYzMiAvKiBFeHRlbnNpb25zM0RBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeHRlbnNpb25zM0RBTkdMRS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTZFMjdGMjQ0MjI5QzlGOEQwMEYxRjYzMiAvKiBFeHRlbnNpb25zM0RBTkdMRS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RBTkdMRS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTI3RjI0MjIyOThDRTRCMDBGMUY2MzIgLyogR3Jh
cGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNkUyN0YyNDMyMjlDOUY4NDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFOR0xFLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnNHTEFOR0xFLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMy
IC8qIEV4dGVuc2lvbnNHTEFOR0xFLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4dGVuc2lvbnNHTEFOR0xFLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFMjkw
ODYxMjI5REI5NTAwMDA5ODZFMiAvKiBUZW1wb3JhcnlBTkdMRVNldHRpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcG9yYXJ5QU5HTEVTZXR0aW5nLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkUyOTA4NjMyMjlEQjk3MDAwMDk4NkUyIC8q
IFRlbXBvcmFyeUFOR0xFU2V0dGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZW1wb3JhcnlBTkdMRVNldHRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkUzRkFEMzYxNDczM0Y0MDAwRTQyMzA2IC8qIEpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MjkwLDkg
KzkyOTAsOSBAQAogCQk2RTRBQkNEMzEzOEVBMEI3MDA3MUQyOTEgLyogSlNIVE1MVW5rbm93bkVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MVW5rbm93bkVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU0RTkxQUExMEY3RkIzMTAw
QTI3NzlDIC8qIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RTRFOTFBQjEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xDb250ZXh0QXR0cmlidXRlcy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25z
M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU2N0QyQTQxMjgwRThBNDAwODc1
OEY3IC8qIEV4dGVuc2lvbnNHTE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFeHRlbnNpb25zR0xPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMT3BlbkdMLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnNHTE9wZW5HTC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uc0dMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lv
bnNHTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTg0RTlERTE3NjY4QkFEMDA4
MTVCNjggLyogUmFzdGVyU2hhcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmFzdGVyU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTg0
RTlERjE3NjY4QkFEMDA4MTVCNjggLyogUmFzdGVyU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmFzdGVyU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkU4QUNERTkyMzM0NUNBRjAwMjRBQUY1IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODI3LDcgKzk4MjcsNyBAQAogCQk3QzMwRDk4
MDFGODE1QUMxMDAyNjgzNTYgLyogSlNBYm9ydENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNBYm9ydENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MzMEQ5ODExRjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRTaWduYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBYm9ydFNpZ25hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MjFGODE1QUMyMDAyNjgzNTYgLyogSlNBYm9y
dFNpZ25hbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Fib3J0
U2lnbmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MzMzBBMDExREY4RkFD
NjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBo
aWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0MzMzBBMDMxREY5RTk1QjAwRDMzOTVDIC8qIFBvc2l0aW9uT3B0aW9ucy5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gUG9zaXRpb25PcHRpb25zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Mz
MzBBMDUxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUG9zaXRpb25PcHRpb25zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDYxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9z
aXRpb25PcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUG9zaXRp
b25PcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDY5MSw3ICsxMDY5
MSw3IEBACiAJCTkzMzA5REQ1MDk5RTY0OTEwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15
U3BhbkNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JhcENvbnRl
bnRzSW5EdW1teVNwYW5Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
MzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFyZWRUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzMwOUVBMTA5OUVCNzhDMDA1NkU1ODEgLyogVGltZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5MzMyQUIzRDE2NTE1RDc3MDBEODI3RUMgLyogR3JhcGhpY3NDb250ZXh0M0RORU9O
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETkVP
Ti5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MzMyQUIzRDE2NTE1RDc3MDBEODI3
RUMgLyogR3JhcGhpY3NDb250ZXh0R0xORU9OLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdyYXBoaWNzQ29udGV4dEdMTkVPTi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzMyQUI4NzE2NTNBOTc5MDBEODI3RUMgLyogRkVCbGVuZE5FT04uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVCbGVuZE5FT04uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTMzMkFCODgxNjUzQTk3OTAwRDgyN0VDIC8qIEZFQ29tcG9zaXRlQXJpdGht
ZXRpY05FT04uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRkVDb21wb3NpdGVB
cml0aG1ldGljTkVPTi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMyQUI4OTE2
NTNBOTc5MDBEODI3RUMgLyogRkVHYXVzc2lhbkJsdXJORU9OLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZFR2F1c3NpYW5CbHVyTkVPTi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTA5MzMsNyArMTA5MzMsNyBAQAogCQk5NTIwNzYwMDFGMjY3NUY5MDA3RDJB
QUIgLyogQ2FsbFRyYWNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsVHJhY2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTUyMDc2MDExRjI2NzVGOTAwN0QyQUFCIC8q
IENhbGxUcmFjZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFRyYWNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5NTIwNzYwMjFGMjY3NUY5MDA3RDJBQUIgLyogQ2FsbFRyYWNlclR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxUcmFjZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk5NkFCQTQyMjE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5NkFCQTQyMjE0QkNCODBFMDBENTYyMDQgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NzA1OTk3NTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2xpY3lDaGVja2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzYxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNo
ZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9saWN5Q2hlY2tlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzBCNzI4OTE0NEZGQUM2MDBGMDBBMzcg
LyogRXZlbnRJbnRlcmZhY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV2
ZW50SW50ZXJmYWNlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FdmVudEludGVy
ZmFjZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE0MjM5LDgg
KzE0MjM5LDcgQEAKIAkJRDA3REVBQjgwQTM2NTU0QTAwQ0EzMEY4IC8qIEluc2VydExpc3RDb21t
YW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNlcnRMaXN0Q29tbWFu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDg0MDMzQTIyMUNCRjU0MDAwMDcy
MDUgLyogR1BVQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdQVUJ1ZmZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODQwMzNEMjIxRTE4NjQwMDAwNzIwNSAvKiBX
ZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdQVUJp
bmRHcm91cERlc2NyaXB0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMDg0
M0E0QTIwRkVCRTNEMDBGRTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlEMDg0M0E0QzIwRkVDMTY1MDBGRTg2MEUgLyogR3JhcGhpY3NDb250ZXh0M0RN
YW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwODQzQTRDMjBGRUMxNjUwMEZFODYw
RSAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDA4NUU2NEEyMjM2REVBRTAwQzNFMUUyIC8qIEdQVUJpbmRHcm91cE1ldGFs
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR1BVQmluZEdyb3VwTWV0YWwubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwODZGRTk2MDlENTNBQUIwMDVCQzc0RCAvKiBVbmxpbmtD
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua0NvbW1hbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDA4NkZFOTcwOUQ1M0FBQjAwNUJDNzRE
IC8qIFVubGlua0NvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVW5saW5rQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU5
Myw3ICsxNTU5Miw3IEBACiAJCUZCOTJERjQ5MTVGRUQwODcwMDk5NDQzMyAvKiBDbGlwUGF0aE9w
ZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwUGF0aE9wZXJh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjk2NUI4MTE3QkJCNUY5MDBF
ODM1QjkgLyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDU1NGaWx0ZXJJbWFnZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCOTY1QjgyMTdCQkI2MkMwMEU4MzVCOSAvKiBDU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlckltYWdlVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3
ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCRDZBRjgyMTVFRjIxQTMwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNpY1NoYXBlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCRDZBRjgzMTVFRjIxQTMwMDhCNzExMCAvKiBCYXNpY1No
YXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNpY1NoYXBlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQkQ2QUY4NDE1RUYyMUQ0MDA4QjcxMTAgLyog
QmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE4NDQ2LDcgKzE4NDQ1LDcgQEAKIAkJCQkwRjk3QTY1NzE1NURBODFFMDBGQURENEMgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9ySU9TLm1tICovLAogCQkJCTFBQzJEODlDMUIxRTI5MUYwMEQ1
MkU4NyAvKiBGb250QW50aWFsaWFzaW5nU3RhdGVTYXZlci5oICovLAogCQkJCTM3MjdERkQ0MTQy
QUFFNDUwMEQ0NDlDQiAvKiBGb250Q2FjaGVJT1MubW0gKi8sCi0JCQkJMzFBQjRGRkYxMjI4NzhB
MjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dDNESU9TLmggKi8sCisJCQkJMzFBQjRGRkYxMjI4
NzhBMjAwMUE3REIwIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVNJT1MuaCAqLywKIAkJCQlG
RUQxM0QzRjBDRUE5Mzk0MDBEODk0NjYgLyogSWNvbklPUy5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gaW9zOwpAQCAtMjA5MTYsOSArMjA5MTUsOSBAQAogCQk2RTI3RjI0MTIyOThDRTJFMDBGMUY2
MzIgLyogYW5nbGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAot
CQkJCTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zM0RBTkdMRS5jcHAgKi8s
Ci0JCQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnMzREFOR0xFLmggKi8s
Ci0JCQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4dDNEQU5HTEUu
Y3BwICovLAorCQkJCTZFMjdGMjQzMjI5QzlGODQwMEYxRjYzMiAvKiBFeHRlbnNpb25zR0xBTkdM
RS5jcHAgKi8sCisJCQkJNkUyN0YyNDQyMjlDOUY4RDAwRjFGNjMyIC8qIEV4dGVuc2lvbnNHTEFO
R0xFLmggKi8sCisJCQkJNkUyN0YyNDIyMjk4Q0U0QjAwRjFGNjMyIC8qIEdyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwICovLAogCQkJCTZFMjkwODYxMjI5REI5NTAwMDA5ODZFMiAvKiBUZW1wb3Jh
cnlBTkdMRVNldHRpbmcuY3BwICovLAogCQkJCTZFMjkwODYzMjI5REI5NzAwMDA5ODZFMiAvKiBU
ZW1wb3JhcnlBTkdMRVNldHRpbmcuaCAqLywKIAkJCSk7CkBAIC0yMTcyMyw3ICsyMTcyMiw3IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTkzMzJBQjg2MTY1M0E5
NzkwMEQ4MjdFQyAvKiBmaWx0ZXJzICovLAotCQkJCTkzMzJBQjNEMTY1MTVENzcwMEQ4MjdFQyAv
KiBHcmFwaGljc0NvbnRleHQzRE5FT04uaCAqLywKKwkJCQk5MzMyQUIzRDE2NTE1RDc3MDBEODI3
RUMgLyogR3JhcGhpY3NDb250ZXh0R0xORU9OLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGFybTsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDg4Nyw5ICsyNDg4Niw5IEBACiAJCQkJ
QjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKIAkJCQlCMjc1
MzUyRDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplQ0cuY3BwICovLAogCQkJCUJDNTNDNjBB
MERBNTZDRjEwMDIxRUI1RCAvKiBHcmFkaWVudENHLmNwcCAqLywKLQkJCQk2RTIxQzZDMTExMjYz
Mzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgKi8sCiAJCQkJQjJFRDk3NzAw
QjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLywKIAkJCQk5MzQ5MDdF
MzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKKwkJCQk2RTIxQzZD
MTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgw
RDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNH
LmggKi8sCiAJCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3Bw
ICovLAogCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5j
cHAgKi8sCkBAIC0yNDk5Nyw3ICsyNDk5Niw3IEBACiAJCQkJMkQyOUVDQzQxOTJFQ0M4MzAwOTg0
Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaCAqLywKIAkJCQkzMURDREY0MTFE
QTFDNDU0MDBFQTVCOTMgLyogRXh0ZW5kZWRDb2xvci5jcHAgKi8sCiAJCQkJMzFEQ0RGNDIxREEx
QzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCAqLywKLQkJCQk2RTY3RDJBODEyODBFOEJE
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCisJCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1
OEY3IC8qIEV4dGVuc2lvbnNHTC5oICovLAogCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50LmNwcCAqLywKIAkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludC5oICovLAogCQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50
M0QuY3BwICovLApAQCAtMjUwNTgsMTMgKzI1MDU3LDkgQEAKIAkJCQkyRDJGQzA1NzE0NjBDRDZG
MDAyNjM2MzMgLyogR3JhZGllbnRJbWFnZS5oICovLAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZC
Q0UwRSAvKiBHcmFwaGljc0NvbnRleHQuY3BwICovLAogCQkJCUIyQTAxNTkzMEFGNkNENTMwMDZC
Q0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCAqLywKLQkJCQk2RTIxQzZCRjExMjYzMzg1MDBBN0JF
MDIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3BwICovLAotCQkJCTQ5QzdCOUZCMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oICovLAotCQkJCTdDMzMwQTAxMURGOEZBQzYwMEQz
Mzk1QyAvKiBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCAqLywKLQkJCQkzMTNERTg2RDIz
QTk2OTY2MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0M0RCYXNlLmNwcCAqLywKLQkJCQkzMTNE
RTg2RjIzQTk2OTY3MDA4RkM0N0IgLyogR3JhcGhpY3NDb250ZXh0M0RCYXNlLmggKi8sCi0JCQkJ
RDA4NDNBNEMyMEZFQzE2NTAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAg
Ki8sCi0JCQkJRDA4NDNBNEEyMEZFQkUzRDAwRkU4NjBFIC8qIEdyYXBoaWNzQ29udGV4dDNETWFu
YWdlci5oICovLAorCQkJCTMxM0RFODZEMjNBOTY5NjYwMDhGQzQ3QiAvKiBHcmFwaGljc0NvbnRl
eHRHTC5jcHAgKi8sCisJCQkJMzEzREU4NkYyM0E5Njk2NzAwOEZDNDdCIC8qIEdyYXBoaWNzQ29u
dGV4dEdMLmggKi8sCisJCQkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKIAkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKQEAgLTI1Mjk4LDggKzI1MjkzLDggQEAKIAkJCQkx
QzEyQUMyODFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4
dC5jcHAgKi8sCiAJCQkJMUMxMkFDMjkxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uQ29yZVRleHQuaCAqLywKIAkJCQlCNTMyMEQ2QTEyMkEyNEU5MDAyRDE0NDAgLyog
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tICovLAotCQkJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzEx
OCAvKiBHcmFwaGljc0NvbnRleHQzRENvY29hLm1tICovLAogCQkJCUIyNzdCNDAzMEIyMkYzN0Mw
MDA0QkVDNiAvKiBHcmFwaGljc0NvbnRleHRDb2NvYS5tbSAqLywKKwkJCQk0OUZGQkYxQzExQzg1
NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbSAqLywKIAkJCQlD
REE1OTU5NjIxNDZERjc4MDBBODQxODUgLyogSEVWQ1V0aWxpdGllc0NvY29hLmggKi8sCiAJCQkJ
Q0RBNTk1OTcyMTQ2REY3ODAwQTg0MTg1IC8qIEhFVkNVdGlsaXRpZXNDb2NvYS5tbSAqLywKIAkJ
CQkyRDBCNEFBOTE4REExQ0NEMDA0MzRERTEgLyogSU9TdXJmYWNlLmggKi8sCkBAIC0yODUzMSwx
MiArMjg1MjYsMTYgQEAKIAkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9wZW5nbCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkU2N0QyQTQxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCi0JCQkJNkU2N0QyQTUx
MjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAotCQkJCTQ0REFCNUFG
MTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovLAotCQkJ
CTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCAq
LywKLQkJCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwICovLAotCQkJCTk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAgKi8sCisJCQkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8q
IEV4dGVuc2lvbnNHTE9wZW5HTC5jcHAgKi8sCisJCQkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3
IC8qIEV4dGVuc2lvbnNHTE9wZW5HTC5oICovLAorCQkJCTQ0REFCNUFGMTVBNjIzNTgwMDk3QzFF
NCAvKiBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3BwICovLAorCQkJCTQ0REFCNUIwMTVBNjIz
NTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24uaCAqLywKKwkJCQk2RTIxQzZC
RjExMjYzMzg1MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwICovLAorCQkJ
CTQ5QzdCOUZCMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oICov
LAorCQkJCUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TEJhc2UuY3BwICovLAorCQkJCTk2QUJBNDIyMTRCQ0I4MEUwMEQ1NjIwNCAvKiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvbW1vbi5jcHAgKi8sCisJCQkJRDA4NDNBNEMyMEZFQzE2NTAwRkU4NjBF
IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAgKi8sCisJCQkJMzE5QTcyODcy
M0MyNjdFNzAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5oICovLAog
CQkJCTdBMjlCQTY5MTg3Qjc4MUMwMEYyOUNFQiAvKiBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNw
cCAqLywKIAkJCQk3QTI5QkE2NzE4N0I3MzIyMDBGMjlDRUIgLyogVGVtcG9yYXJ5T3BlbkdMU2V0
dGluZy5oICovLAogCQkJKTsKQEAgLTI5ODQ5LDEwICsyOTg0OCwxMCBAQAogCQkJCTkzRDE5NjMx
MUQ2Q0FCNzYwMEZDN0U0NyAvKiBFeGNlcHRpb25Pci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM3
RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVuZGFibGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9u
czNELmggaW4gSGVhZGVycyAqLywKLQkJCQk2RTcyRjU1MDIyOURDRDE3MDBCM0UxNTEgLyogRXh0
ZW5zaW9uczNEQU5HTEUuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFNjdEMkE3MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ0REFCNUIy
MTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0wuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTZFNzJGNTUwMjI5RENEMTcwMEIzRTE1MSAvKiBFeHRlbnNpb25zR0xB
TkdMRS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4
dGVuc2lvbnNHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDREQUI1QjIxNUE2MjM1ODAw
OTdDMUU0IC8qIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8qIEV4dGVuc2lvblN0eWxlU2hlZXRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QzQzMDRCMTE5MUFDOTA4MDAwRTJCQzAgLyogRVhUU2hhZGVyVGV4dHVy
ZUxPRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzcyODY5NEYxNEY4ODgyNTAwRjQ4NERDIC8qIEVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDA0OCwxMiAr
MzAwNDcsMTIgQEAKIAkJCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRy
aWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDQ4MUYwNDE0NkI1QzZCMDBBQTc4MzQgLyog
R3JhZGllbnRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5RkMxMDQy
RDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKLQkJCQk3
QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkzMTNERTg3MDIzQTk2OTczMDA4RkM0N0IgLyogR3JhcGhpY3ND
b250ZXh0M0RCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMUFCNTAwMDEyMjg3OEEyMDAxQTdE
QjAgLyogR3JhcGhpY3NDb250ZXh0M0RJT1MuaCBpbiBIZWFkZXJzICovLAotCQkJCUQwODQzQTRC
MjBGRUJFM0QwMEZFODYwRSAvKiBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzNDkwN0U0MTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzEzREU4NzAyM0E5Njk3MzAwOEZDNDdCIC8qIEdyYXBoaWNz
Q29udGV4dEdMLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzMzMEEwMjFERjhGQUM2MDBEMzM5NUMg
LyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3
QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxQUI1MDAwMTIyODc4QTIwMDFBN0RCMCAvKiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTEVTSU9TLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTlBNzI4ODIzQzI2N0ZFMDA4NTM1
M0MgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5
MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzU5OCw3ICsz
MzU5Nyw3IEBACiAJCQkJQkUyMzQ4MEMxOEE5ODcwQjAwRTRCNkU4IC8qIERhdGFDdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDQ2M0NGNjgyMjEyRkE2ODAwMUE4NTc3IC8qIERhdGFEZXRlY3Rv
cnNDb3JlU29mdExpbmsubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTE4RjFENTRGNUZCMDBE
RDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkU3
MkY1NEMyMjlEQ0QwQzAwQjNFMTUxIC8qIEV4dGVuc2lvbnMzREFOR0xFLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTZFNzJGNTRDMjI5RENEMEMwMEIzRTE1MSAvKiBFeHRlbnNpb25zR0xBTkdMRS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0
Q29udmVydGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTRCQjBBMTk1NEQ2MTYwMEZBNUMy
RSAvKiBHYW1lcGFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxOEY0RkY2MTk0Q0E0RTYwMDgx
QkFBRSAvKiBHYW1lcGFkQnV0dG9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM2MDYsOCArMzM2
MDUsNyBAQAogCQkJCTUxQTlEOUU5MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTE5MTFENTRGNUZCMDBERDdDNjggLyogR2FtZXBh
ZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNzk2NENGMUY4REI2OUQwMDIxOEVB
MCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uRGF0YUlPUy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTZF
MjFDNkMwMTEyNjMzODUwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk2RTcyRjU0RTIyOURDRDEwMDBCM0UxNTEgLyogR3JhcGhpY3NDb250ZXh0M0RB
TkdMRS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTcyRjU0RTIyOURDRDEwMDBCM0UxNTEgLyog
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzNFNTEwQjE4
REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4
RDA2QjNBMEEyNjVEQ0QwMDVFNzIwMyAvKiBIVE1MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFDOTAwQzMxOTQzQzBGQzAwODYyNUI1IC8qIEhUVFBIZWFkZXJOYW1lcy5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IDY0
MzEyMWI1OWIyY2YyOTJiYTYwZjU4ODAyNDBjZjg3M2MxMThiY2EuLmNjOTNhZGE5NWE1YjNkYWRk
NzY1NTRhOTdmYTBhZWU5NTdlOWU1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFZpZGVvRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9F
bGVtZW50LmNwcApAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgSFRNTFZpZGVvRWxlbWVudDo6cGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zCiAg
ICAgcGxheWVyLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChjb250ZXh0LCBkZXN0UmVjdCk7
CiB9CiAKLWJvb2wgSFRNTFZpZGVvRWxlbWVudDo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGZsaXBZKQorYm9vbCBIVE1MVmlkZW9FbGVtZW50Ojpjb3B5VmlkZW9UZXh0dXJlVG9Q
bGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIFBsYXRmb3Jt
M0RPYmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCiB7CiAgICAgaWYgKCFwbGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAppbmRl
eCBiM2EwNmRkY2Y2YzZhMGE1NGQyZDc3OWMyOTQ3ZjU2MjZmMDRjMDk0Li40Yzg4MjA4NDRmYTRj
N2M5MjVkM2U5YzZjOWRkMDIwYTI0M2I2NDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxWaWRlb0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuaApAQCAtNzQsNyArNzQsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBVc2VkIGJ5IFdl
YkdMIHRvIGRvIEdQVS1HUFUgdGV4dHVyZXMgY29weSBpZiBwb3NzaWJsZS4KICAgICAvLyBTZWUg
bW9yZSBkZXRhaWxzIGF0IE1lZGlhUGxheWVyOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRl
eHR1cmUoKSBkZWZpbmVkIGluIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmguCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKKyAg
ICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOwogCiAgICAgYm9v
bCBzaG91bGREaXNwbGF5UG9zdGVySW1hZ2UoKSBjb25zdCB7IHJldHVybiBkaXNwbGF5TW9kZSgp
ID09IFBvc3RlciB8fCBkaXNwbGF5TW9kZSgpID09IFBvc3RlcldhaXRpbmdGb3JWaWRlbzsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggOWY3OGU4YjJiZWNi
MThiOTg5ZjYyOGRlMTNjMTNlZGE5MGI2YjI5MS4uMDkxYTM2OTkyYTljMzVmMTMwZjg1ZGNjODE4
Zjk1OTdlMjcyZGVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApA
QCAtMTQ3LDcgKzE0Nyw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNj
cmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgaWYgKCFpbWFnZUJp
dG1hcC0+YnVmZmVyKCkpCiAgICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+
IHsgbnVsbHB0ciB9IH07CiAKLSAgICAgICAgYXV0byogZ2MzZCA9IHdlYkdMQ29udGV4dC0+Z3Jh
cGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgYXV0byogZ2MzZCA9IHdlYkdMQ29udGV4dC0+Z3Jh
cGhpY3NDb250ZXh0R0woKTsKICAgICAgICAgZ2MzZC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoaW1hZ2VCaXRtYXAtPmJ1ZmZlcigpKTsKIAogICAgICAgICAvLyBGSVhNRTogVGhlIHRy
YW5zZmVyIGFsZ29yaXRobSByZXF1aXJlcyB0aGF0IHRoZSBjYW52YXMgZWZmZWN0aXZlbHkKQEAg
LTE1NSw5ICsxNTUsOSBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3Jl
ZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAgIC8vIG5lZWQgdG8gZXJh
c2Ugd2hhdCdzIHRoZXJlLgogCiAgICAgICAgIEdDM0RmbG9hdCBjbGVhckNvbG9yWzRdOwotICAg
ICAgICBnYzNkLT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVF
LCBjbGVhckNvbG9yKTsKKyAgICAgICAgZ2MzZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dEdM
OjpDT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7CiAgICAgICAgIGdjM2QtPmNsZWFyQ29s
b3IoMCwgMCwgMCwgMCk7Ci0gICAgICAgIGdjM2QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsKKyAgICAgICAgZ2MzZC0+Y2xl
YXIoR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9C
SVQpOwogICAgICAgICBnYzNkLT5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3Jb
MV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwogCiAgICAgICAgIHJldHVybiB7IFdU
Rk1vdmUoaW1hZ2VCaXRtYXApIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAKaW5kZXggNzQwZDU0YjI1NDc1Y2Y3ODMyNDQ2ZTdh
YjczYWZjYWMyZWYzNTgzYi4uOGQ3NGU0MDk4MjM3NTYwMDE4ZWMwZTM5YTkxZTk2YzcwMWU3OTJh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRB
cnJheXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2Vk
QXJyYXlzLmNwcApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkFOR0xFSW5zdGFuY2VkQXJy
YXlzLmgiCiAKICNpZiBQTEFURk9STShHVEspIHx8IFVTRShBTkdMRSkKLSNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zOCw3ICszOCw3IEBAIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpBTkdM
RUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogICAg
IDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICNpZiBVU0UoQU5HTEUpCi0gICAgY29udGV4
dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xf
QU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0wo
KS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMiKTsKICNlbmRpZgogfQogCkBAIC01MywxMyArNTMsMTMgQEAgYm9vbCBBTkdMRUluc3RhbmNl
ZEFycmF5czo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBjb250ZXh0
LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyIpOworICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdM
KCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAgICAgcmV0dXJuIHRydWU7CiAj
ZW5kaWYKICNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX2luc3RhbmNlZF9h
cnJheXMiKTsKKyAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRl
bnNpb25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAppbmRleCA0
MmJiM2UyOTM1OGE4ZTEwZWQ2ODI5MGYzOTY3ODQ5OTg0ZmQ1MjUxLi40MTBjZWE1ZjRkYmE1ODYx
NDdmODJlZTc4YjVkYmE3OTk5MTk3YTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJF
eHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMTMgKzYxLDEzIEBAIHZvaWQgT0VTVmVydGV4QXJyYXlP
YmplY3Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMqIGFy
cmF5CiAgICAgaWYgKCFhcnJheU9iamVjdC0+aXNEZWZhdWx0T2JqZWN0KCkgJiYgYXJyYXlPYmpl
Y3QgPT0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Jj4obV9jb250ZXh0KS5tX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QpCiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCY+KG1fY29udGV4dCkuc2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChudWxscHRyKTsK
IAotICAgIGFycmF5T2JqZWN0LT5kZWxldGVPYmplY3QobV9jb250ZXh0LmdyYXBoaWNzQ29udGV4
dDNEKCkpOworICAgIGFycmF5T2JqZWN0LT5kZWxldGVPYmplY3QobV9jb250ZXh0LmdyYXBoaWNz
Q29udGV4dEdMKCkpOwogfQogCiBHQzNEYm9vbGVhbiBPRVNWZXJ0ZXhBcnJheU9iamVjdDo6aXNW
ZXJ0ZXhBcnJheU9FUyhXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKiBhcnJheU9iamVjdCkKIHsK
ICAgICByZXR1cm4gYXJyYXlPYmplY3QgJiYgIW1fY29udGV4dC5pc0NvbnRleHRMb3N0KCkgJiYg
YXJyYXlPYmplY3QtPmhhc0V2ZXJCZWVuQm91bmQoKQotICAgICAgICAmJiBtX2NvbnRleHQuZ3Jh
cGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmlzVmVydGV4QXJyYXlPRVMoYXJyYXlP
YmplY3QtPm9iamVjdCgpKTsKKyAgICAgICAgJiYgbV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dEdM
KCktPmdldEV4dGVuc2lvbnMoKS5pc1ZlcnRleEFycmF5T0VTKGFycmF5T2JqZWN0LT5vYmplY3Qo
KSk7CiB9CiAKIHZvaWQgT0VTVmVydGV4QXJyYXlPYmplY3Q6OmJpbmRWZXJ0ZXhBcnJheU9FUyhX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKiBhcnJheU9iamVjdCkKQEAgLTc2LDExICs3NiwxMSBA
QCB2b2lkIE9FU1ZlcnRleEFycmF5T2JqZWN0OjpiaW5kVmVydGV4QXJyYXlPRVMoV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUyogYXJyYXlPYgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXJy
YXlPYmplY3QgJiYgKGFycmF5T2JqZWN0LT5pc0RlbGV0ZWQoKSB8fCAhYXJyYXlPYmplY3QtPnZh
bGlkYXRlKG51bGxwdHIsIGNvbnRleHQoKSkpKSB7Ci0gICAgICAgIG1fY29udGV4dC5ncmFwaGlj
c0NvbnRleHQzRCgpLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8mIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQu
Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGF1dG8mIGV4dGVuc2lv
bnMgPSBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpOwogICAg
IGF1dG8mIGNvbnRleHQgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KG1fY29udGV4
dCk7CiAgICAgaWYgKGFycmF5T2JqZWN0ICYmICFhcnJheU9iamVjdC0+aXNEZWZhdWx0T2JqZWN0
KCkgJiYgYXJyYXlPYmplY3QtPm9iamVjdCgpKSB7CiAgICAgICAgIGV4dGVuc2lvbnMuYmluZFZl
cnRleEFycmF5T0VTKGFycmF5T2JqZWN0LT5vYmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDBiM2Ri
ZmZmZTFiMGRjM2Y1MGIxYWJjMTg1MTE3Y2EzNzZmMWJmY2EuLmU5MjMwODNlMjM0Y2JiOWU4Nzcw
OTIxMWUyNTUxNWNmOTg4YmQzZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNH
TC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdl
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKQEAgLTY3LDcgKzY3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFz
LCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK3N0ZDo6dW5pcXVlX3B0
cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUo
Q2FudmFzQmFzZSYgY2FudmFzLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKIHsKICAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wy
UmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRy
aWJ1dGVzKSk7CiAKQEAgLTc2LDcgKzc2LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXMKICAg
ICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNl
JiBjYW52YXMsIFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiBjb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJp
bmdDb250ZXh0PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2Fu
dmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+JiYgY29udGV4dCwgR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiB7CiAgICAgYXV0byByZW5kZXJpbmdDb250ZXh0
ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0KGNhbnZhcywgV1RGTW92ZShjb250ZXh0KSwgYXR0cmlidXRlcykpOwogCkBA
IC04NSwxMiArODUsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXMKICAgICByZXR1cm4gcmVu
ZGVyaW5nQ29udGV4dDsKIH0KIAotV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVy
aW5nQ29udGV4dChDYW52YXNCYXNlJiBjYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQorV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dChDYW52YXNCYXNlJiBjYW52YXMsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRy
aWJ1dGVzKQogICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShjYW52YXMsIGF0dHJpYnV0
ZXMpCiB7CiB9CiAKLVdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRl
eHQoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgUmVmPEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmli
dXRlcyBhdHRyaWJ1dGVzKQogICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShjYW52YXMs
IFdURk1vdmUoY29udGV4dCksIGF0dHJpYnV0ZXMpCiB7CiAgICAgaW5pdGlhbGl6ZVNoYWRlckV4
dGVuc2lvbnMoKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBjb25zdCBBcnJheUJ1ZmZlclZpZXcmCiB7
CiAgICAgYXV0byBvcHRpb25hbEVsZW1lbnRTaXplID0gYXJyYXlCdWZmZXJWaWV3RWxlbWVudFNp
emUoZGF0YSk7CiAgICAgaWYgKCFvcHRpb25hbEVsZW1lbnRTaXplKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJ1ZmZl
ckRhdGEiLCAiSW52YWxpZCB0eXBlIG9mIEFycmF5IEJ1ZmZlciBWaWV3Iik7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImJ1
ZmZlckRhdGEiLCAiSW52YWxpZCB0eXBlIG9mIEFycmF5IEJ1ZmZlciBWaWV3Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgYXV0byBlbGVtZW50U2l6ZSA9IG9wdGlvbmFsRWxlbWVudFNp
emUudmFsdWUoKTsKQEAgLTE1NywxMyArMTU3LDEzIEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGNvbnN0IEFycmF5QnVmZmVyVmlldyYK
ICAgICAgICAgfHwgY2hlY2tlZEJ5dGVMZW5ndGguaGFzT3ZlcmZsb3dlZCgpCiAgICAgICAgIHx8
IGNoZWNrZWRCeXRlU3JjT2Zmc2V0LnVuc2FmZUdldCgpID4gZGF0YS5ieXRlTGVuZ3RoKCkKICAg
ICAgICAgfHwgY2hlY2tlZEJ5dGVMZW5ndGgudW5zYWZlR2V0KCkgPiBkYXRhLmJ5dGVMZW5ndGgo
KSAtIGNoZWNrZWRCeXRlU3JjT2Zmc2V0LnVuc2FmZUdldCgpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIs
ICJzcmNPZmZzZXQgb3IgbGVuZ3RoIGlzIG91dCBvZiBib3VuZHMiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgInNyY09mZnNldCBvciBsZW5ndGggaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgYXV0byBzbGljZSA9IFVpbnQ4QXJyYXk6OnRyeUNyZWF0ZShkYXRh
LnBvc3NpYmx5U2hhcmVkQnVmZmVyKCksIGRhdGEuYnl0ZU9mZnNldCgpICsgY2hlY2tlZEJ5dGVT
cmNPZmZzZXQudW5zYWZlR2V0KCksIGNoZWNrZWRCeXRlTGVuZ3RoLnVuc2FmZUdldCgpKTsKICAg
ICBpZiAoIXNsaWNlKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZLCAiYnVmZmVyRGF0YSIsICJDb3VsZCBub3QgY3JlYXRlIGludGVy
bWVkaWF0ZSBBcnJheUJ1ZmZlclZpZXciKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6Ok9VVF9PRl9NRU1PUlksICJidWZmZXJEYXRhIiwgIkNvdWxkIG5vdCBj
cmVhdGUgaW50ZXJtZWRpYXRlIEFycmF5QnVmZmVyVmlldyIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEodGFyZ2V0LCBC
dWZmZXJEYXRhU291cmNlKHNsaWNlLmdldCgpKSwgdXNhZ2UpOwpAQCAtMTczLDcgKzE3Myw3IEBA
IHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJn
ZXQsIGxvbmcgbG9uZyBvZmZzZXQsIGNvCiB7CiAgICAgYXV0byBvcHRpb25hbEVsZW1lbnRTaXpl
ID0gYXJyYXlCdWZmZXJWaWV3RWxlbWVudFNpemUoZGF0YSk7CiAgICAgaWYgKCFvcHRpb25hbEVs
ZW1lbnRTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImJ1ZmZlclN1YkRhdGEiLCAiSW52YWxpZCB0eXBlIG9mIEFy
cmF5IEJ1ZmZlciBWaWV3Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImJ1ZmZlclN1YkRhdGEiLCAiSW52YWxpZCB0eXBl
IG9mIEFycmF5IEJ1ZmZlciBWaWV3Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0
byBlbGVtZW50U2l6ZSA9IG9wdGlvbmFsRWxlbWVudFNpemUudmFsdWUoKTsKQEAgLTE4OCwxMyAr
MTg4LDEzIEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNE
ZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIGNvCiAgICAgICAgIHx8IGNoZWNrZWRCeXRl
TGVuZ3RoLmhhc092ZXJmbG93ZWQoKQogICAgICAgICB8fCBjaGVja2VkQnl0ZVNyY09mZnNldC51
bnNhZmVHZXQoKSA+IGRhdGEuYnl0ZUxlbmd0aCgpCiAgICAgICAgIHx8IGNoZWNrZWRCeXRlTGVu
Z3RoLnVuc2FmZUdldCgpID4gZGF0YS5ieXRlTGVuZ3RoKCkgLSBjaGVja2VkQnl0ZVNyY09mZnNl
dC51bnNhZmVHZXQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAic3JjT2Zmc2V0IG9yIGxlbmd0
aCBpcyBvdXQgb2YgYm91bmRzIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJzcmNPZmZzZXQgb3Ig
bGVuZ3RoIGlzIG91dCBvZiBib3VuZHMiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGF1dG8gc2xpY2UgPSBVaW50OEFycmF5Ojp0cnlDcmVhdGUoZGF0YS5wb3NzaWJseVNoYXJlZEJ1
ZmZlcigpLCBkYXRhLmJ5dGVPZmZzZXQoKSArIGNoZWNrZWRCeXRlU3JjT2Zmc2V0LnVuc2FmZUdl
dCgpLCBjaGVja2VkQnl0ZUxlbmd0aC51bnNhZmVHZXQoKSk7CiAgICAgaWYgKCFzbGljZSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9S
WSwgImJ1ZmZlclN1YkRhdGEiLCAiQ291bGQgbm90IGNyZWF0ZSBpbnRlcm1lZGlhdGUgQXJyYXlC
dWZmZXJWaWV3Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpPVVRfT0ZfTUVNT1JZLCAiYnVmZmVyU3ViRGF0YSIsICJDb3VsZCBub3QgY3JlYXRlIGludGVy
bWVkaWF0ZSBBcnJheUJ1ZmZlclZpZXciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjA1LDE5ICsyMDUsMTkgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpjb3B5QnVmZmVy
U3ViRGF0YShHQzNEZW51bSByZWFkVGFyZ2V0LCBHQzNEZW51bSB3cmkKIHsKICAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKChyZWFkVGFy
Z2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiAmJiB3cml0ZVRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAg
IHx8ICh3cml0ZVRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZG
RVIgJiYgcmVhZFRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZG
RVIpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIkVpdGhlciBib3RoIHRhcmdldHMg
bmVlZCB0byBiZSBFTEVNRU5UX0FSUkFZX0JVRkZFUiBvciBuZWl0aGVyIHNob3VsZCBiZSBFTEVN
RU5UX0FSUkFZX0JVRkZFUi4iKTsKKyAgICBpZiAoKHJlYWRUYXJnZXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSICYmIHdyaXRlVGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgfHwgKHdyaXRlVGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiAmJiByZWFkVGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY29w
eUJ1ZmZlclN1YkRhdGEiLCAiRWl0aGVyIGJvdGggdGFyZ2V0cyBuZWVkIHRvIGJlIEVMRU1FTlRf
QVJSQVlfQlVGRkVSIG9yIG5laXRoZXIgc2hvdWxkIGJlIEVMRU1FTlRfQVJSQVlfQlVGRkVSLiIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChyZWFkT2Zmc2V0IDwgMCB8fCB3cml0
ZU9mZnNldCA8IDAgfHwgc2l6ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJvZmZz
ZXQgPCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gcmVhZEJ1ZmZlciA9IHZh
bGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImNvcHlCdWZmZXJTdWJEYXRhIiwgcmVhZFRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICBSZWZQdHI8V2ViR0xCdWZm
ZXI+IHdyaXRlQnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiY29weUJ1ZmZl
clN1YkRhdGEiLCB3cml0ZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsK
KyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IHJlYWRCdWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQ
YXJhbWV0ZXJzKCJjb3B5QnVmZmVyU3ViRGF0YSIsIHJlYWRUYXJnZXQsIEdyYXBoaWNzQ29udGV4
dEdMOjpTVEFUSUNfRFJBVyk7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiB3cml0ZUJ1ZmZlciA9
IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImNvcHlCdWZmZXJTdWJEYXRhIiwgd3JpdGVU
YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEFUSUNfRFJBVyk7CiAgICAgaWYgKCFyZWFkQnVm
ZmVyIHx8ICF3cml0ZUJ1ZmZlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIkludmFsaWQg
cmVhZFRhcmdldCBvciB3cml0ZVRhcmdldCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIklu
dmFsaWQgcmVhZFRhcmdldCBvciB3cml0ZVRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yMjUsMTIgKzIyNSwxMiBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNv
cHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaQogICAgIENo
ZWNrZWQ8R0MzRGludHB0ciwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRXcml0ZU9mZnNldCh3cml0
ZU9mZnNldCk7CiAgICAgQ2hlY2tlZDxHQzNEc2l6ZWlwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVj
a2VkU2l6ZShzaXplKTsKICAgICBpZiAoY2hlY2tlZFJlYWRPZmZzZXQuaGFzT3ZlcmZsb3dlZCgp
IHx8IGNoZWNrZWRXcml0ZU9mZnNldC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFNpemUuaGFz
T3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAiT2Zmc2V0IG9yIHNpemUg
aXMgdG9vIGJpZyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRSwgImNvcHlCdWZmZXJTdWJEYXRhIiwgIk9mZnNldCBvciBzaXplIGlz
IHRvbyBiaWciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghd3JpdGVCdWZm
ZXItPmFzc29jaWF0ZUNvcHlCdWZmZXJTdWJEYXRhKCpyZWFkQnVmZmVyLCBjaGVja2VkUmVhZE9m
ZnNldC51bnNhZmVHZXQoKSwgY2hlY2tlZFdyaXRlT2Zmc2V0LnVuc2FmZUdldCgpLCBjaGVja2Vk
U2l6ZS51bnNhZmVHZXQoKSkpIHsKLSAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5QnVmZmVyU3ViRGF0YSIsICJvZmZz
ZXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY29weUJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0
IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNDgsMjkgKzI0
OCwyOSBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclN1YkRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc3JjQnl0ZQogewogICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1
ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJn
ZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgUmVmUHRyPFdlYkdMQnVm
ZmVyPiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRh
IiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVm
ZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiTm8gV2ViR0xCdWZmZXIgaXMgYm91
bmQgdG8gdGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiTm8gV2ViR0xCdWZm
ZXIgaXMgYm91bmQgdG8gdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAv
LyBGSVhNRTogSW1wbGVtZW50ICJJZiB0YXJnZXQgaXMgVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
UiwgYW5kIGFueSB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0IGlzIGN1cnJlbnRseSBhY3RpdmUs
IGFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZC4iCiAKICAgICBpZiAoIWRz
dERhdGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJOdWxsIGRzdERhdGEiKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFU
SU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJOdWxsIGRzdERhdGEiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGF1dG8gb3B0aW9uYWxFbGVtZW50U2l6ZSA9IGFycmF5QnVmZmVyVmll
d0VsZW1lbnRTaXplKCpkc3REYXRhKTsKICAgICBpZiAoIW9wdGlvbmFsRWxlbWVudFNpemUpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJJbnZhbGlkIHR5cGUgb2YgQXJyYXkgQnVmZmVy
IFZpZXciKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJJbnZhbGlkIHR5cGUgb2YgQXJy
YXkgQnVmZmVyIFZpZXciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhdXRvIGVsZW1l
bnRTaXplID0gb3B0aW9uYWxFbGVtZW50U2l6ZS52YWx1ZSgpOwogICAgIGF1dG8gZHN0RGF0YUxl
bmd0aCA9IGRzdERhdGEtPmJ5dGVMZW5ndGgoKSAvIGVsZW1lbnRTaXplOwogCiAgICAgaWYgKGRz
dE9mZnNldCA+IGRzdERhdGFMZW5ndGgpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJk
c3RPZmZzZXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgZGVzdGluYXRpb24gYnVm
ZmVyLiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwgImRzdE9mZnNldCBpcyBsYXJnZXIg
dGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTI4MCwxNyArMjgwLDE3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzcmNC
eXRlCiAgICAgQ2hlY2tlZDxHQzNEdWludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3B5TGVu
Z3RoKGNvcHlMZW5ndGgpOwogICAgIGF1dG8gY2hlY2tlZERlc3RpbmF0aW9uRW5kID0gY2hlY2tl
ZERzdE9mZnNldCArIGNoZWNrZWRDb3B5TGVuZ3RoOwogICAgIGlmIChjaGVja2VkRGVzdGluYXRp
b25FbmQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiZHN0
T2Zmc2V0ICsgY29weUxlbmd0aCBpcyB0b28gaGlnaCIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJE
YXRhIiwgImRzdE9mZnNldCArIGNvcHlMZW5ndGggaXMgdG9vIGhpZ2giKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChjaGVja2VkRGVzdGluYXRpb25FbmQudW5zYWZlR2V0KCkg
PiBkc3REYXRhTGVuZ3RoKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAiZW5kIG9mIHdy
aXR0ZW4gZGVzdGluYXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJlbmQgb2Ygd3JpdHRlbiBkZXN0aW5hdGlvbiBpcyBwYXN0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKHNyY0J5dGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEJ1ZmZlclN1YkRhdGEiLCAic3Jj
Qnl0ZU9mZnNldCBpcyBsZXNzIHRoYW4gMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRhIiwg
InNyY0J5dGVPZmZzZXQgaXMgbGVzcyB0aGFuIDAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMjk5LDE3ICsyOTksMTcgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRC
dWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNyY0J5dGUKICAgICBDaGVj
a2VkPEdDM0RpbnRwdHIsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRWxlbWVudFNpemUoZWxlbWVu
dFNpemUpOwogICAgIGF1dG8gY2hlY2tlZFNvdXJjZUVuZCA9IGNoZWNrZWRTcmNCeXRlT2Zmc2V0
ICsgY2hlY2tlZENvcHlMZW5ndGhQdHIgKiBjaGVja2VkRWxlbWVudFNpemU7CiAgICAgaWYgKGNo
ZWNrZWRTb3VyY2VFbmQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRTb3VyY2VFbmQudW5zYWZl
R2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRCdWZmZXJTdWJEYXRh
IiwgIlBhcmFtZXRlcnMgd291bGQgcmVhZCBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNvdXJj
ZSBidWZmZXIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVyU3ViRGF0YSIsICJQYXJhbWV0ZXJzIHdvdWxk
IHJlYWQgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBzb3VyY2UgYnVmZmVyIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIEZJWE1FOiBDb2FsZXNjZSBt
dWx0aXBsZSBnZXRCdWZmZXJTdWJEYXRhKCkgY2FsbHMgdG8gdXNlIGEgc2luZ2xlIG1hcCgpIGNh
bGwKLSAgICB2b2lkKiBwdHIgPSBtX2NvbnRleHQtPm1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgY2hl
Y2tlZFNyY0J5dGVPZmZzZXQudW5zYWZlR2V0KCksIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4o
Y2hlY2tlZENvcHlMZW5ndGhQdHIudW5zYWZlR2V0KCkgKiBjaGVja2VkRWxlbWVudFNpemUudW5z
YWZlR2V0KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6TUFQX1JFQURfQklUKTsKKyAgICB2b2lkKiBw
dHIgPSBtX2NvbnRleHQtPm1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgY2hlY2tlZFNyY0J5dGVPZmZz
ZXQudW5zYWZlR2V0KCksIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oY2hlY2tlZENvcHlMZW5n
dGhQdHIudW5zYWZlR2V0KCkgKiBjaGVja2VkRWxlbWVudFNpemUudW5zYWZlR2V0KCkpLCBHcmFw
aGljc0NvbnRleHRHTDo6TUFQX1JFQURfQklUKTsKICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hh
cio+KGRzdERhdGEtPmJhc2VBZGRyZXNzKCkpICsgZHN0RGF0YS0+Ynl0ZU9mZnNldCgpICsgZHN0
T2Zmc2V0ICogZWxlbWVudFNpemUsIHB0ciwgY29weUxlbmd0aCAqIGVsZW1lbnRTaXplKTsKICAg
ICBpZiAoIW1fY29udGV4dC0+dW5tYXBCdWZmZXIodGFyZ2V0KSkKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QnVmZmVy
U3ViRGF0YSIsICJGYWlsZWQgd2hpbGUgdW5tYXBwaW5nIGJ1ZmZlciIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRC
dWZmZXJTdWJEYXRhIiwgIkZhaWxlZCB3aGlsZSB1bm1hcHBpbmcgYnVmZmVyIik7CiAjZW5kaWYK
ICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwogfQpAQCAt
MzI5LDM5ICszMjksMzkgQEAgc3RhdGljIGJvb2wgaXNSZW5kZXJhYmxlSW50ZXJuYWxmb3JtYXQo
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgLy8gT3BlbkdMIEVTIDM6IGludGVybmFs
Zm9ybWF0IG11c3QgYmUgYSBjb2xvci1yZW5kZXJhYmxlLCBkZXB0aC1yZW5kZXJhYmxlLCBvciBz
dGVuY2lsLXJlbmRlcmFibGUgZm9ybWF0LCBhcyBzaG93biBpbiBUYWJsZSAxIGJlbG93LgogICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
ODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlIxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4SToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNS
R0I4X0FMUEhBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjEwX0EyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2VUk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSDI0X1NURU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NU
RU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlI4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
MTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQThVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOEk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5U
MjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U1RFTkNJTF9JTkRFWDg6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zNzMsMTQgKzM3MywxNCBAQCBXZWJHTEFueSBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0OjpnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdD
MwogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVTKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRJbnRlcm5hbGZvcm1hdFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
CisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVTKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRJ
bnRlcm5hbGZvcm1hdFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGludCBudW1WYWx1ZXMgPSAwOwogI2lm
IFVTRShPUEVOR0xfRVMpCi0gICAgbV9jb250ZXh0LT5nZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdl
dCwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0FNUExFX0NPVU5UUywg
MSwgJm51bVZhbHVlcyk7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdl
dCwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpOVU1fU0FNUExFX0NPVU5UUywg
MSwgJm51bVZhbHVlcyk7CiAKICAgICBHQzNEaW50IHBhcmFtc1tudW1WYWx1ZXNdOwogICAgIG1f
Y29udGV4dC0+Z2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgbnVtVmFsdWVzLCBwYXJhbXMpOwpAQCAtMzg4LDIxICszODgsMjEgQEAgV2ViR0xBbnkgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzMKICAgICAvLyBPbiBkZXNrdG9wIE9wZW5HTCA0LjEgb3IgYmVsb3cgd2UgbXVz
dCBlbXVsYXRlIGdsR2V0SW50ZXJuYWxmb3JtYXRpdi4KIAogICAgIC8vIEdMX0lOVkFMSURfRU5V
TSBpcyBnZW5lcmF0ZWQgaWYgdGFyZ2V0IGlzIG5vdCBHTF9SRU5ERVJCVUZGRVIuCi0gICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRJbnRl
cm5hbGZvcm1hdFBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgIGlmICh0YXJnZXQg
IT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW50ZXJuYWxmb3Jt
YXRQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgLy8gR0xfSU5WQUxJRF9FTlVNIGlzIGdlbmVyYXRlZCBpZiBpbnRlcm5h
bGZvcm1hdCBpcyBub3QgY29sb3ItLCBkZXB0aC0sIG9yIHN0ZW5jaWwtcmVuZGVyYWJsZS4KICAg
ICBpZiAoIWlzUmVuZGVyYWJsZUludGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0SW50ZXJuYWxmb3JtYXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBpbnRlcm5hbCBmb3JtYXQiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgImdldEludGVybmFsZm9ybWF0UGFyYW1ldGVyIiwgImludmFsaWQgaW50ZXJuYWwgZm9ybWF0
Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFZlY3RvcjxHQzNEaW50
PiBzYW1wbGVzOwogICAgIC8vIFRoZSB3YXkgSSB1bmRlcnN0YW5kIHRoaXMgaXMgdGhhdCB0aGlz
IHdpbGwgcmV0dXJuIGEgTUlOSU1VTSBudW1TYW1wbGVzIGZvciBhbGwgYWNjZXBldGVkIGludGVy
bmFsZm9ybWF0cy4KICAgICAvLyBIb3dldmVyLCB0aGUgdHJ1ZSB2YWx1ZSBvZiB0aGlzIG9uIHN1
cHBvcnRlZCBHTCB2ZXJzaW9ucyBpcyBnbGVhbmVkIHZpYSBhIGdldEludGVybmFsZm9ybWF0aXYg
Y2FsbCB0aGF0IGRlcGVuZHMgb24gaW50ZXJuYWxmb3JtYXQuCi0gICAgaW50IG51bVNhbXBsZXNN
YXNrID0gZ2V0SW50UGFyYW1ldGVyKEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfU0FNUExFUyk7Cisg
ICAgaW50IG51bVNhbXBsZXNNYXNrID0gZ2V0SW50UGFyYW1ldGVyKEdyYXBoaWNzQ29udGV4dEdM
OjpNQVhfU0FNUExFUyk7CiAKICAgICB3aGlsZSAobnVtU2FtcGxlc01hc2sgPiAwKSB7CiAgICAg
ICAgIHNhbXBsZXMuYXBwZW5kKG51bVNhbXBsZXNNYXNrKTsKQEAgLTQzOSw1NyArNDM5LDU3IEBA
IHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzCiB7CiAgICAgLy8gVG8gYmUgYmFja3dhcmQgY29tcGF0
aWJsZSB3aXRoIFdlYkdMIDEsIGFsc28gYWNjZXB0cyBpbnRlcm5hbCBmb3JtYXQgREVQVEhfU1RF
TkNJTCwKICAgICAvLyB3aGljaCBzaG91bGQgYmUgbWFwcGVkIHRvIERFUFRIMjRfU1RFTkNJTDgg
YnkgaW1wbGVtZW50YXRpb25zLgotICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTCkKLSAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMODsKKyAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwpCisgICAgICAgIGludGVybmFsZm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDg7CiAKICAgICAvLyBFUyAzOiBH
TF9JTlZBTElEX09QRVJBVElPTiBpcyBnZW5lcmF0ZWQgaWYgaW50ZXJuYWxmb3JtYXQgaXMgYSBz
aWduZWQgb3IgdW5zaWduZWQgaW50ZWdlciBmb3JtYXQgYW5kIHNhbXBsZXMgaXMgZ3JlYXRlciB0
aGFuIDAuCiAgICAgaWYgKGlzSW50ZWdlckZvcm1hdChpbnRlcm5hbGZvcm1hdCkgJiYgc2FtcGxl
cyA+IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlIiwgIm11bHRp
c2FtcGxpbmcgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlIiwgIm11bHRpc2FtcGxpbmcgbm90IHN1cHBvcnRlZCBm
b3IgdGhpcyBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHN3aXRjaCAo
aW50ZXJuYWxmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01Q
T05FTlQxNjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQzMkY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkczMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
MTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlI4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0NPTVBPTkVOVDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMTZVSToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThVSToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4SToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQ
SEE4OgogICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0
YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7
CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKICAgICAg
ICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMODoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDg6CiAgICAgICAgIGlmICghaXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRl
cm5hbGZvcm1hdCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRl
cm5hbGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1f
Y29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwpAQCAtNDk4LDcgKzQ5OCw3IEBAIHZvaWQg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdD
M0RlbnVtIHRhcmdldCwgR0MzCiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
ICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CkBAIC01MDcsODggKzUw
Nyw4OCBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHQzNEZW51bSB0YXJnZXQsIEdDMwogYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleFN0b3JhZ2VGdW5jUGFyYW1ldGVycyhHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKICAgICBpZiAo
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhl
aWdodCA8IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICh3aWR0aCA+IG1fbWF4VGV4dHVy
ZVNpemUgfHwgaGVpZ2h0ID4gbV9tYXhUZXh0dXJlU2l6ZSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJ0
ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHRleHR1cmUgc2l6
ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJ0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIGxhcmdlciB0aGFu
IHRoZSBtYXhpbXVtIHRleHR1cmUgc2l6ZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UCkgeworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9N
QVApIHsKICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIndpZHRoICE9IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJ3aWR0aCAhPSBoZWlnaHQgZm9yIGN1YmUgbWFwIik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAg
IH0gZWxzZSBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICBpZiAobGV2ZWxzIDwgMCB8fCBsZXZlbHMgPiBtX21heFRleHR1cmVMZXZl
bCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJudW1iZXIgb2YgbGV2ZWxzIGlzIG91dCBvZiBib3VuZHMi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAibnVtYmVyIG9mIGxldmVscyBpcyBvdXQgb2YgYm91bmRzIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKGludGVybmFsRm9y
bWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UjhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlI4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlIxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIx
Nkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMyVUk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJGOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJV
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9C
MTBGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMy
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZVSToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1JHQjhfQUxQSEE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NO
T1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTBf
QTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4
VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjEwX0EyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2SToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlIxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMlVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTUkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSMTFGX0cxMUZfQjEwRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I5X0U1Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0IzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOFVJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1X0ExOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9D
T01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQy
NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQzMkY6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiVW5rbm93biBpbnRlcm5hbEZvcm1hdCIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJVbmtub3duIGludGVybmFsRm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAodGV4dHVyZS0+aW1tdXRhYmxlKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAidGV4U3RvcmFnZTJEIiwgInRleFN0b3JhZ2UyRCBhbHJlYWR5IGNhbGxlZCBvbiB0aGlzIHRl
eHR1cmUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAidGV4U3RvcmFnZTJEIiwgInRleFN0b3JhZ2UyRCBhbHJlYWR5IGNh
bGxlZCBvbiB0aGlzIHRleHR1cmUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB0ZXh0
dXJlLT5zZXRJbW11dGFibGUoKTsKQEAgLTYyMSw4ICs2MjEsOCBAQCB2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZl
bHMsIEdDMwogICAgIHsKICAgICAgICAgR0MzRGVudW0gZm9ybWF0OwogICAgICAgICBHQzNEZW51
bSB0eXBlOwotICAgICAgICBpZiAoIUdyYXBoaWNzQ29udGV4dDNEOjpwb3NzaWJsZUZvcm1hdEFu
ZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInRleFN0b3JhZ2UyRCIsICJUZXh0dXJlIGhhcyB1bmtub3duIGludGVybmFsIGZvcm1h
dCIpOworICAgICAgICBpZiAoIUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb3NzaWJsZUZvcm1h
dEFuZFR5cGVGb3JJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTSwgInRleFN0b3JhZ2UyRCIsICJUZXh0dXJlIGhhcyB1bmtub3duIGludGVybmFsIGZv
cm1hdCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTYzMSw3ICs2MzEs
NyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnRleFN0b3JhZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDMwogCiAgICAgICAgIHVuc2lnbmVkIHNpemU7CiAg
ICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRl
cyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwg
bnVsbHB0cik7Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJS
T1IpIHsKKyAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikg
ewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJ0ZXhTdG9yYWdlMkQiLCAi
YmFkIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjQw
LDEzICs2NDAsMTMgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdG9yYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzMKICAgICAgICAgbWVtc2V0KGRh
dGEuZGF0YSgpLCAwLCBzaXplKTsKIAogICAgICAgICBmb3IgKEdDM0RzaXplaSBsZXZlbCA9IDA7
IGxldmVsIDwgbGV2ZWxzOyArK2xldmVsKSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgICAgICAgICAgbV9j
b250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1gsIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0
LCB0eXBlLCBkYXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIGxl
dmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRh
dGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIGxldmVsLCAwLCAwLCBsZXZl
bFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7Ci0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1ksIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhl
aWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1osIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0
eXBlLCBkYXRhLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIGxldmVs
LCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEo
KSk7CisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJF
X0NVQkVfTUFQKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIGxldmVsLCAwLCAw
LCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBs
ZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ksIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9y
bWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhT
dWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ks
IGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRh
LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIGxldmVsLCAwLCAwLCBs
ZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIGxldmVsLCAwLCAwLCBsZXZlbFdpZHRoLCBsZXZl
bEhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSk7CiAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
MCwgMCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCkp
OwogICAgICAgICAgICAgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIGxldmVsV2lkdGggLyAyKTsK
QEAgLTY1NSwxNSArNjU1LDE1IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Rv
cmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzCiAgICAgfQogCiAg
ICAgZm9yIChHQzNEc2l6ZWkgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgKytsZXZlbCkgewot
ICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
KSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgICAgICAg
ICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRM
ZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSk7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgbGV2ZWwsIGludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7
Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgICAgICAgICB0
ZXh0dXJlLT5zZXRMZXZlbEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWiwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CisgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVApIHsKKyAgICAgICAgICAgIHRleHR1cmUtPnNl
dExldmVsSW5mbyhHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRF
KTsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAg
IHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZLCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExl
dmVsSW5mbyhHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCBs
ZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyhHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aLCBsZXZlbCwgaW50ZXJuYWxG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKTsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUpOwogICAgIH0KIH0KIApAQCAtODc3LDE3ICs4NzcsMTcgQEAgdm9p
ZCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYg
KG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9C
VUZGRVJfQklUKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOworICAgIGlmIChtYXNr
ICYgfihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4
dEdMOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVS
X0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OLCAiY2xlYXIiLCByZWFzb24pOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dEdMKCksICZyZWFz
b24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgKG1hc2sgJiBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkgJiYgaXNJbnRlZ2VyRm9ybWF0KG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVh
ciIsICJjYW5ub3QgY2xlYXIgYW4gaW50ZWdlciBidWZmZXIiKTsKKyAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJ
VCkgJiYgaXNJbnRlZ2VyRm9ybWF0KG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZl
ckZvcm1hdCgpKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhciIsICJjYW5ub3QgY2xlYXIgYW4gaW50ZWdlciBi
dWZmZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIWNsZWFySWZDb21wb3Np
dGVkKG1hc2spKQpAQCAtOTMyLDI1ICs5MzIsMjUgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0OjpkcmF3QnVmZmVycyhjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKQogICAgIGNv
bnN0IEdDM0RlbnVtKiBidWZzID0gYnVmZmVycy5kYXRhKCk7CiAgICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZykgewogICAgICAgICBpZiAobiAhPSAxKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZmZXJz
IiwgIm1vcmUgdGhhbiBvbmUgYnVmZmVyIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImRyYXdCdWZmZXJzIiwgIm1vcmUg
dGhhbiBvbmUgYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGJ1ZnNbMF0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0sgJiYgYnVmc1swXSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1ZmZlcnMiLCAiQkFD
SyBvciBOT05FIik7CisgICAgICAgIGlmIChidWZzWzBdICE9IEdyYXBoaWNzQ29udGV4dEdMOjpC
QUNLICYmIGJ1ZnNbMF0gIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ImRyYXdCdWZmZXJzIiwgIkJBQ0sgb3IgTk9ORSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVkIG9u
IGFsbCBjdXJyZW50IFdlYktpdCBwb3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBDT0xP
Ul9BVFRBQ0hNRU5UMC4KLSAgICAgICAgR0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QkFDSykgPyBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVO
VDAgOiBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0M0Qo
KS0+Z2V0RXh0ZW5zaW9ucygpLmRyYXdCdWZmZXJzRVhUKDEsICZ2YWx1ZSk7CisgICAgICAgIEdD
M0RlbnVtIHZhbHVlID0gKGJ1ZnNbMF0gPT0gR3JhcGhpY3NDb250ZXh0R0w6OkJBQ0spID8gR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwIDogR3JhcGhpY3NDb250ZXh0R0w6Ok5P
TkU7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5kcmF3QnVm
ZmVyc0VYVCgxLCAmdmFsdWUpOwogICAgICAgICBzZXRCYWNrRHJhd0J1ZmZlcihidWZzWzBdKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAobiA+IGdldE1heERyYXdCdWZmZXJzKCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiZHJhd0J1ZmZlcnMiLCAibW9yZSB0aGFuIG1heCBkcmF3IGJ1ZmZlcnMiKTsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCAiZHJhd0J1ZmZlcnMiLCAibW9yZSB0aGFuIG1heCBkcmF3IGJ1ZmZlcnMiKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8
IG47ICsraSkgewotICAgICAgICAgICAgaWYgKGJ1ZnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PTkUgJiYgYnVmc1tpXSAhPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsgaSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QnVmZmVy
cyIsICJDT0xPUl9BVFRBQ0hNRU5UaSBvciBOT05FIik7CisgICAgICAgICAgICBpZiAoYnVmc1tp
XSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSAmJiBidWZzW2ldICE9IHN0YXRpY19jYXN0PEdD
M0RlbnVtPihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBpKSkgeworICAg
ICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X09QRVJBVElPTiwgImRyYXdCdWZmZXJzIiwgIkNPTE9SX0FUVEFDSE1FTlRpIG9yIE5PTkUiKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTk2
MSwyNCArOTYxLDI0IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0J1ZmZlcnMo
Y29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVycykKIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJCdWZmZXJpdihHQzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwg
SW50MzJMaXN0JiYsIEdDM0R1aW50KQogewogICAgIHN3aXRjaCAoYnVmZmVyKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Q09MT1I6CiAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IGdldE1h
eERyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJpdiIsICJidWZmZXIgaW5kZXgg
b3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVyaXYiLCAiYnVmZmVyIGluZGV4IG91
dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8v
IFRPRE86IENhbGwgY2xlYXJCdWZmZXJpdiwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5oCiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUw6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTDoKICAgICAgICAgaWYgKGRyYXdidWZmZXIp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJpdiIsICJidWZmZXIgaW5kZXggbXVzdCBiZSAwIik7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9W
QUxVRSwgImNsZWFyQnVmZmVyaXYiLCAiYnVmZmVyIGluZGV4IG11c3QgYmUgMCIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFRPRE86IENhbGwgY2xlYXJCdWZm
ZXJpdiwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5oCiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEg6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKICAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJjbGVhckJ1ZmZlcml2IiwgImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIENPTE9SIG9yIFNU
RU5DSUwiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAiY2xlYXJCdWZmZXJpdiIsICJidWZmZXIgYXJndW1lbnQgbXVzdCBi
ZSBDT0xPUiBvciBTVEVOQ0lMIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTk4Niwx
OCArOTg2LDE4IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJpdihH
QzNEZW51bSBidWZmZXIsIEdDM0RpbnQgZHJhd2J1ZmZlciwKIHZvaWQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJCdWZmZXJ1aXYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZm
ZXIsIFVpbnQzMkxpc3QmJiwgR0MzRHVpbnQpCiB7CiAgICAgc3dpdGNoIChidWZmZXIpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpDT0xPUjoKICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0g
Z2V0TWF4RHJhd0J1ZmZlcnMoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcnVpdiIsICJidWZmZXIg
aW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVydWl2IiwgImJ1ZmZlciBp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAvLyBUT0RPOiBDYWxsIGNsZWFyQnVmZmVydWl2LCByZXF1aXJlcyBnbDMuaCBhbmQgRVMz
L2dsLmgKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEg6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUw6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVh
ckJ1ZmZlcnVpdiIsICJidWZmZXIgYXJndW1lbnQgbXVzdCBiZSBDT0xPUiIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJj
bGVhckJ1ZmZlcnVpdiIsICJidWZmZXIgYXJndW1lbnQgbXVzdCBiZSBDT0xPUiIpOwogICAgICAg
ICBicmVhazsKICAgICB9CiB9CkBAIC0xMDA1LDI0ICsxMDA1LDI0IEBAIHZvaWQgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXJCdWZmZXJ1aXYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRy
YXdidWZmZXIsCiB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0Mz
RGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsIEZsb2F0MzJMaXN0JiYsIEdDM0R1aW50
KQogewogICAgIHN3aXRjaCAoYnVmZmVyKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1I6CiAgICAgICAgIGlmIChk
cmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IGdldE1heERyYXdCdWZmZXJzKCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY2xlYXJCdWZmZXJmdiIsICJidWZmZXIgaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVyIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIFRPRE86IENhbGwgY2xlYXJCdWZm
ZXJmdiwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5oCiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIOgogICAgICAgICBpZiAoZHJhd2J1ZmZlcikgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhckJ1ZmZlcmZ2
IiwgImJ1ZmZlciBpbmRleCBtdXN0IGJlIDAiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJmdiIsICJi
dWZmZXIgaW5kZXggbXVzdCBiZSAwIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgLy8gVE9ETzogQ2FsbCBjbGVhckJ1ZmZlcmZ2LCByZXF1aXJlcyBnbDMuaCBhbmQg
RVMzL2dsLmgKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfU1RFTkNJTDoKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcmZ2Iiwg
ImJ1ZmZlciBhcmd1bWVudCBtdXN0IGJlIENPTE9SIE9SIERFUFRIIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNsZWFy
QnVmZmVyZnYiLCAiYnVmZmVyIGFyZ3VtZW50IG11c3QgYmUgQ09MT1IgT1IgREVQVEgiKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTAzMCwxOCArMTAzMCwxOCBAQCB2b2lkIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0MzRGVudW0gYnVmZmVyLCBHQzNEaW50
IGRyYXdidWZmZXIsCiB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyQnVmZmVyZmko
R0MzRGVudW0gYnVmZmVyLCBHQzNEaW50IGRyYXdidWZmZXIsIEdDM0RmbG9hdCwgR0MzRGludCkK
IHsKICAgICBzd2l0Y2ggKGJ1ZmZlcikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTDoK
ICAgICAgICAgaWYgKGRyYXdidWZmZXIpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXJCdWZmZXJmdiIsICJidWZm
ZXIgaW5kZXggbXVzdCBiZSAwIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyQnVmZmVyZnYiLCAiYnVmZmVyIGlu
ZGV4IG11c3QgYmUgMCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IC8vIFRPRE86IENhbGwgY2xlYXJCdWZmZXJmaSwgcmVxdWlyZXMgZ2wzLmggYW5kIEVTMy9nbC5o
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1I6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U1RFTkNJTDoKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjbGVhckJ1ZmZlcmZ2IiwgImJ1ZmZlciBh
cmd1bWVudCBtdXN0IGJlIERFUFRIX1NURU5DSUwiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY2xlYXJCdWZmZXJmdiIs
ICJidWZmZXIgYXJndW1lbnQgbXVzdCBiZSBERVBUSF9TVEVOQ0lMIik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIH0KQEAgLTEyMjcsMTYgKzEyMjcsMTYgQEAgdm9pZCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpiaW5kQnVmZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0R1aW50LCBXZWJHTEJ1ZmZlcios
IEcKIFdlYkdMQW55IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEluZGV4ZWRQYXJhbWV0ZXIo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEdWludCkKIHsKICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElO
RzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
X1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUl9TVEFSVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUl9C
SU5ESU5HOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSX1NJWkU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVJfU1RBUlQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRJbmRleGVkUGFyYW1ldGVyIiwgInBhcmFtZXRlciBuYW1lIG5vdCB5ZXQgc3VwcG9ydGVkIik7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9C
SU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSX1NUQVJUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVG
RkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9CVUZGRVJf
U0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUl9TVEFSVDoK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgImdldEluZGV4ZWRQYXJhbWV0ZXIiLCAicGFyYW1ldGVyIG5hbWUgbm90IHlldCBzdXBwb3J0
ZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEluZGV4
ZWRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0SW5kZXhlZFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIH0KQEAgLTEyNTMsMjAgKzEyNTMsMjAgQEAgV2ViR0xBbnkgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybXMoV2ViR0xQcm9ncmFtJiBwcm9ncmFtLCBj
b25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX1RZUEU6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5JRk9STV9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
SUZPUk1fQkxPQ0tfSU5ERVg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9P
RkZTRVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9BUlJBWV9TVFJJREU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9NQVRSSVhfU1RSSURFOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fSVNfUk9XX01BSk9SOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fVFlQRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTklGT1JNX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9C
TE9DS19JTkRFWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX09GRlNFVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0FSUkFZX1NUUklERToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX01BVFJJWF9TVFJJREU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5JRk9STV9JU19ST1dfTUFKT1I6CiAgICAgICAgIHsKICAgICAg
ICAgICAgIFZlY3RvcjxHQzNEaW50PiBwYXJhbXModW5pZm9ybUluZGljZXMuc2l6ZSgpLCAwKTsK
ICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybXMocHJvZ3JhbS5vYmplY3Qo
KSwgdW5pZm9ybUluZGljZXMsIHBuYW1lLCBwYXJhbXMpOwogICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocGFyYW1zKTsKICAgICAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRBY3RpdmVVbmlm
b3JtcyIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRBY3RpdmVVbmlmb3JtcyIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIH0KQEAgLTEzMTksNyArMTMxOSw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlVmVydGV4QXJyYXkoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdCogYXJyYXlPYmplCiAgICAg
ICAgIGJpbmRWZXJ0ZXhBcnJheShudWxscHRyKTsgLy8gVGhlIGRlZmF1bHQgVkFPIHdhcyByZW1v
dmVkIGluIE9wZW5HTCAzLjMgYnV0IG5vdCBmcm9tIFdlYkdMIDI7IGJpbmQgdGhlIGRlZmF1bHQg
Zm9yIFdlYkdMIHRvIHVzZS4KICNlbmRpZgogICAgIAotICAgIGFycmF5T2JqZWN0LT5kZWxldGVP
YmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgYXJyYXlPYmplY3QtPmRlbGV0ZU9iamVj
dChncmFwaGljc0NvbnRleHRHTCgpKTsKIH0KIAogR0MzRGJvb2xlYW4gV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6aXNWZXJ0ZXhBcnJheShXZWJHTFZlcnRleEFycmF5T2JqZWN0KiBhcnJheU9iamVj
dCkKQEAgLTEzMzksNyArMTMzOSw3IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZFZlcnRleEFycmF5KFdlYkdMVmVydGV4QXJyYXlPYmplY3QqIGFycmF5T2JqZWN0CiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBpZiAoYXJyYXlPYmplY3QgJiYgKGFycmF5T2JqZWN0LT5pc0Rl
bGV0ZWQoKSB8fCAhYXJyYXlPYmplY3QtPnZhbGlkYXRlKDAsICp0aGlzKSB8fCAhbV9jb250ZXh0
T2JqZWN0cy5jb250YWlucyhhcnJheU9iamVjdCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhcnJheU9i
amVjdCAmJiAhYXJyYXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpICYmIGFycmF5T2JqZWN0LT5v
YmplY3QoKSkgewpAQCAtMTM4MCw3ICsxMzgwLDcgQEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgRU5B
QkxFX0lGX1JFUVVFU1RFRChXZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDMSwgbV93ZWJnbENvbXBy
ZXNzZWRUZXh0dXJlRVRDMSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiwgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZUVUQzE6OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIEVOQUJMRV9JRl9S
RVFVRVNURUQoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLCBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVQVlJUQywgIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiLCBXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIEVOQUJMRV9J
Rl9SRVFVRVNURUQoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMsIG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVMzVEMsICJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIsIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQoKnRoaXMpKTsKLSAgICBFTkFCTEVfSUZfUkVRVUVT
VEVEKFdlYkdMRGVwdGhUZXh0dXJlLCBtX3dlYmdsRGVwdGhUZXh0dXJlLCAiV0VCR0xfZGVwdGhf
dGV4dHVyZSIsIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoKmdyYXBoaWNzQ29udGV4dDNE
KCkpKTsKKyAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdlYkdMRGVwdGhUZXh0dXJlLCBtX3dlYmds
RGVwdGhUZXh0dXJlLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIsIFdlYkdMRGVwdGhUZXh0dXJlOjpz
dXBwb3J0ZWQoKmdyYXBoaWNzQ29udGV4dEdMKCkpKTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVE
KFdlYkdMRGVidWdSZW5kZXJlckluZm8sIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbywgIldFQkdM
X2RlYnVnX3JlbmRlcmVyX2luZm8iLCB0cnVlKTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdl
YkdMRGVidWdTaGFkZXJzLCBtX3dlYmdsRGVidWdTaGFkZXJzLCAiV0VCR0xfZGVidWdfc2hhZGVy
cyIsIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UiX3MpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE0MTksNyAr
MTQxOSw3IEBAIE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lU
X1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyJfcyk7CiAgICAgaWYgKFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQoKnRoaXMpKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyJfcyk7Ci0gICAgaWYgKFdlYkdMRGVwdGhU
ZXh0dXJlOjpzdXBwb3J0ZWQoKmdyYXBoaWNzQ29udGV4dDNEKCkpKQorICAgIGlmIChXZWJHTERl
cHRoVGV4dHVyZTo6c3VwcG9ydGVkKCpncmFwaGljc0NvbnRleHRHTCgpKSkKICAgICAgICAgcmVz
dWx0LmFwcGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSJfcyk7CiAgICAgcmVzdWx0LmFwcGVuZCgi
V0VCR0xfbG9zZV9jb250ZXh0Il9zKTsKICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xf
QU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIl9zKSkKQEAgLTE0MzIsMTIgKzE0MzIsMTIg
QEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoKQogc3RhdGljIGJvb2wgdmFsaWRhdGVEZWZhdWx0RnJhbWVidWZm
ZXJBdHRhY2htZW50KEdDM0RlbnVtJiBhdHRhY2htZW50KQogewogICAgIHN3aXRjaCAoYXR0YWNo
bWVudCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QkFDSzoKICAgICAgICAgLy8gQmVjYXVzZSB0aGUgYmFja2J1ZmZlciBp
cyBzaW11bGF0ZWQgb24gYWxsIGN1cnJlbnQgV2ViS2l0IHBvcnRzLCB3ZSBuZWVkIHRvIGNoYW5n
ZSBCQUNLIHRvIENPTE9SX0FUVEFDSE1FTlQwLgotICAgICAgICBhdHRhY2htZW50ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOworICAgICAgICBhdHRhY2htZW50ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUw6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMTQ1MCwxMiArMTQ1MCwxMiBAQCBXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZwog
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJU
YXJnZXQoZnVuY3Rpb25OYW1lLCB0YXJnZXQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVi
dWZmZXJCaW5kaW5nOworICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09IEdy
YXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVyQmlu
ZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOwogCiAgICAgaWYgKCF0YXJnZXRGcmFtZWJ1ZmZl
cikgewogICAgICAgICAvLyBPcGVuR0wgRVMgMzogRGVmYXVsdCBmcmFtZWJ1ZmZlciBpcyBib3Vu
ZC4KICAgICAgICAgaWYgKCF2YWxpZGF0ZURlZmF1bHRGcmFtZWJ1ZmZlckF0dGFjaG1lbnQoYXR0
YWNobWVudCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOwor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKQEAg
LTE0NjcsMjAgKzE0NjcsMjAgQEAgV2ViR0xBbnkgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmcKIAogICAgIGF1dG8g
b2JqZWN0ID0gbWFrZVJlZlB0cih0YXJnZXRGcmFtZWJ1ZmZlci0+Z2V0QXR0YWNobWVudE9iamVj
dChhdHRhY2htZW50KSk7CiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKHBuYW1lID09
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQz
RDo6Tk9ORSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIp
OworICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpOT05FKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IAogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJ
TF9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQ09NUE9ORU5UX1RZUEU6IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9T
SVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
Q09NUE9ORU5UX1RZUEU6IHsKICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRh
Y2htZW50LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwpAQCAtMTQ4OSw0
MSArMTQ4OSw0MSBAQCBXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZwogICAgIAogICAgIGlmIChvYmpl
Y3QtPmlzVGV4dHVyZSgpKSB7CiAgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRSk7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUU6CiAgICAgICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihyZWludGVycHJldF9jYXN0PFdl
YkdMVGV4dHVyZSY+KCpvYmplY3QpKTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFD
RToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9DT0xPUl9FTkNPRElORzogeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NP
TE9SX0VOQ09ESU5HOiB7CiAgICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKICAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVyZSBhdHRhY2htZW50Iik7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKG9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CiAgICAgICAgIHN3aXRjaCAo
cG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X1RZUEU6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNz
Q29udGV4dEdMOjpSRU5ERVJCVUZGRVIpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgogICAgICAgICAgICAgcmV0dXJu
IG1ha2VSZWZQdHIocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlciY+KCpvYmplY3Qp
KTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9DT0xPUl9FTkNPRElORyA6IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyA6IHsKICAgICAgICAgICAgIGF1dG8m
IHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXImPigqb2Jq
ZWN0KTsKICAgICAgICAgICAgIGF1dG8gZm9ybWF0ID0gcmVuZGVyQnVmZmVyLmdldEludGVybmFs
Rm9ybWF0KCk7Ci0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpT
UkdCOF9BTFBIQTgKLSAgICAgICAgICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBSRVNTRURfU1JHQjhfRVRDMgotICAgICAgICAgICAgICAgIHx8IGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMKLSAgICAg
ICAgICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfU1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6U1JHQik7CisgICAgICAgICAg
ICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTgKKyAgICAgICAg
ICAgICAgICB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfU1JHQjhf
RVRDMgorICAgICAgICAgICAgICAgIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMKKyAgICAgICAgICAgICAgICB8fCBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhB
MV9FVEMyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihH
cmFwaGljc0NvbnRleHRHTDo6U1JHQik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6
TElORUFSKTsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1
ZmZlciBhdHRhY2htZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fQogICAgIH0KQEAgLTE1MzcsMzYgKzE1MzcsMzYgQEAgYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3QK
IGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlclRhcmdldChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCkKIHsKICAgICBzd2l0Y2gg
KHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfRlJBTUVCVUZGRVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0ZSQU1F
QlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVI6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVOb25EZWZhdWx0RnJhbWVi
dWZmZXJBdHRhY2htZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gYXR0YWNo
bWVudCkKIHsKICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNI
TUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoYXR0YWNobWVudCA+
PSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8IHN0
YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAg
KyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQorICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBH
cmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8IHN0YXRp
Y19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQVRUQUNITUVOVDAgKyBn
ZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CisgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBhdHRhY2htZW50Iik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBHQzNEaW50IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKIHsKICAgICBpZiAoIW1fbWF4
RHJhd0J1ZmZlcnMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9EUkFXX0JVRkZFUlMsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICAgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX0RSQVdfQlVGRkVSUywg
Jm1fbWF4RHJhd0J1ZmZlcnMpOwogICAgIHJldHVybiBtX21heERyYXdCdWZmZXJzOwogfQogCkBA
IC0xNTc0LDcgKzE1NzQsNyBAQCBHQzNEaW50IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldE1h
eENvbG9yQXR0YWNobWVudHMoKQogewogICAgIC8vIERyYXdCdWZmZXJzIHJlcXVpcmVzIE1BWF9D
T0xPUl9BVFRBQ0hNRU5UUyA9PSBNQVhfRFJBV19CVUZGRVJTCiAgICAgaWYgKCFtX21heENvbG9y
QXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9EUkFXX0JVRkZFUlMsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgICAg
ICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRFJBV19CVUZG
RVJTLCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKICAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFj
aG1lbnRzOwogfQogCkBAIC0xNTgyLDU4ICsxNTgyLDU4IEBAIHZvaWQgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGlu
dGVyCiB7CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgIGlmICh0YXJn
ZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVy
U3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9i
amVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVy
YnVmZmVyIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVy
YnVmZmVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZVNpemUo
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9DT01QT05FTlQxNjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9D
T01QT05FTlQzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5U
MjQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
MTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4
SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEw
X0EyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkczMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMlVJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHMTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzg6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlI4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
NV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0lOREVYODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9BTFBIQTg6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QThVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UjMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlI4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1JHQjhfQUxQSEE4OgogICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
dGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1fcmVuZGVy
YnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQodHJ1ZSk7CiAgICAgICAgIG1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZfU1RFTkNJTDg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSDMyRl9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpERVBUSDI0X1NURU5DSUw4OgogICAgICAgICBpZiAoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVk
KCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3Jt
YXQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3Jt
YXQiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CkBAIC0xNjQyLDcgKzE2NDIsNyBAQCB2b2lkIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnJl
bmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcgogICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2Ui
LCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJp
bnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXBw
bHlTdGVuY2lsVGVzdCgpOwpAQCAtMTY1NCwxMyArMTY1NCwxMyBAQCB2b2lkIFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQogICAgICAg
ICByZXR1cm47CiAgICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7CiAgICAgc3dpdGNoICh0YXJnZXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5U
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQ6
CiAgICAgICAgIGlzVmFsaWQgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYg
KCFpc1ZhbGlkKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImlu
dmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5o
aW50KHRhcmdldCwgbW9kZSk7CkBAIC0xNjcwLDk3ICsxNjcwLDk3IEBAIEdDM0RlbnVtIFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OmJhc2VJbnRlcm5hbEZvcm1hdEZyb21JbnRlcm5hbEZvcm1hdChH
QzNEZW51bSBpCiB7CiAgICAgLy8gSGFuZGxlcyBzaXplZCwgdW5zaXplZCwgYW5kIGNvbXByZXNz
ZWQgaW50ZXJuYWwgZm9ybWF0cy4KICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ujg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UjhfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjE2RjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBS
RVNTRURfUjExX0VBQzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1NJ
R05FRF9SMTFfRUFDOgotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJFRDsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UjhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlIxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMyVUk6Ci0gICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOF9TTk9STToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRzE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMy
RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1JHMTFfRUFDOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgotICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkcxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHMzJVSToKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpSR19JTlRFR0VSOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1JHQjg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4SToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCMTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjMyVUk6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVI7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0IxMF9BMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCOF9B
TFBIQTg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2RjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9SR0I4X1BVTkNIVEhS
T1VHSF9BTFBIQTFfRVRDMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VE
X1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOgotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4VUk6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCMTBfQTJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
MTZJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTMyVUk6Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRjoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEgyNF9TVEVOQ0lMODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDMyRl9TVEVO
Q0lMODoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UjhfU05PUk06CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2RjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkNPTVBSRVNTRURfUjExX0VBQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
T01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
R0w6OlJFRDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOEk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlIzMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyVUk6CisgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1JH
MTFfRUFDOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfU0lHTkVEX1JH
MTFfRUFDOgorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJHOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4
VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkcxNlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJVSToKKyAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dEdMOjpSR19JTlRFR0VSOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
Qjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOF9TTk9STToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JH
Qjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZGOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgorICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJHQjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkdCMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2
VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjMyVUk6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6
UkdCX0lOVEVHRVI7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNV9BMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9STToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTUkdCOF9BTFBIQTg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9S
R0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOgorICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEzMkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQTMyVUk6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QV9JTlRFR0VSOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQ7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSDMyRl9TVEVOQ0lMODoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpERVBU
SF9TVEVOQ0lMOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QUxQSEE6CiAgICAgICAgIHJldHVybiBpbnRlcm5hbGZvcm1hdDsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6
Ok5PTkU7CiAgICAgfQogfQogCiBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmlzSW50ZWdl
ckZvcm1hdChHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGJhc2VJbnRl
cm5hbEZvcm1hdEZyb21JbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR19JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VS
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR19JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUjoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NzEsMzI5ICsxNzcxLDMyOSBA
QCBXZWJHTEFueSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoR0MzRGVudW0g
cG5hbWUpCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFDVElWRV9URVhUVVJFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFDVElWRV9U
RVhUVVJFOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CiAgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAgICAgIHJldHVy
biBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFMUEhBX0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEFf
QklUUzoKICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVz
LmFscGhhKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUl9C
SU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUl9CSU5ESU5H
OgogICAgICAgICByZXR1cm4gbV9ib3VuZEFycmF5QnVmZmVyOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EOgogICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfQ09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxF
TkRfQ09MT1I6CiAgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9BTFBIQToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9EU1RfQUxQSEE6CiAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfRFNUX1JHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9EU1Rf
UkdCOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX0FMUEhBOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0VRVUFUSU9OX0FMUEhBOgogICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX0VRVUFUSU9OX1JHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVO
RF9FUVVBVElPTl9SR0I6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX1NSQ19BTFBIQToKICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORF9TUkNfUkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX1NS
Q19SR0I6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkJMVUVfQklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQ0xFQVJfVkFMVUU6CiAgICAgICAgIHJldHVy
biBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
T0xPUl9XUklURU1BU0s6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfVEVYVFVSRV9G
T1JNQVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBSRVNTRURfVEVYVFVSRV9G
T1JNQVRTOgogICAgICAgICByZXR1cm4gVWludDMyQXJyYXk6OnRyeUNyZWF0ZShtX2NvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUo
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkNVTExfRkFDRToKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVTExfRkFDRV9NT0RFOgogICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
VVJSRU5UX1BST0dSQU06CiAgICAgICAgIHJldHVybiBtX2N1cnJlbnRQcm9ncmFtOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfQklUUzoKICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9hdHRyaWJ1dGVzLmRlcHRoKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NMRUFS
X1ZBTFVFOgogICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfRlVOQzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9SQU5HRToKICAgICAgICAgcmV0dXJuIGdldFdl
YkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9URVNUOgog
ICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpESVRIRVI6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlf
QlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBtYWtlUmVmUHRyKG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVJfQklORElORzoKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5k
aW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0ZBQ0U6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6RlJPTlRfRkFDRToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFU
RV9NSVBNQVBfSElOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpHRU5FUkFURV9NSVBN
QVBfSElOVDoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVFTl9CSVRTOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkdSRUVOX0JJVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfRk9STUFUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfRk9STUFUOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU1QTEVNRU5UQVRJT05fQ09MT1Jf
UkVBRF9UWVBFOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1dJRFRIOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkxJTkVfV0lEVEg6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKICAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgogICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
UkVOREVSQlVGRkVSX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1JFTkRF
UkJVRkZFUl9TSVpFOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVEVY
VFVSRV9TSVpFOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CiAgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfQVRUUklCUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX0FUVFJJ
QlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CiAgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BP
UlRfRElNUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVklFV1BPUlRfRElNUzoK
ICAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UEFDS19BTElHTk1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UEFDS19BTElH
Tk1FTlQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNFVF9GQUNUT1I6CiAgICAgICAgIHJldHVybiBnZXRG
bG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdP
Tl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZR09OX09GRlNF
VF9GSUxMOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6CiAgICAgICAgIHJldHVybiBn
ZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVE
X0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0JJVFM6CiAgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRF
UkJVRkZFUl9CSU5ESU5HOgogICAgICAgICByZXR1cm4gbV9yZW5kZXJidWZmZXJCaW5kaW5nOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJFTkRFUkVSOgogICAgICAgICByZXR1cm4gIldlYktpdCBXZWJHTCJfc3RyOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNBTVBMRV9CVUZGRVJTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJB
R0VfSU5WRVJUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9DT1ZFUkFHRV9J
TlZFUlQ6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgogICAgICAgICByZXR1cm4g
Z2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFUzoKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9CT1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9CT1g6CiAg
ICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U0NJU1NPUl9URVNUOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJT
SU9OOgotICAgICAgICByZXR1cm4gIldlYkdMIEdMU0wgRVMgMS4wICgiICsgbV9jb250ZXh0LT5n
ZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTikgKyAi
KSI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX0ZBSUw6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAg
ICByZXR1cm4gIldlYkdMIEdMU0wgRVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3Jh
cGhpY3NDb250ZXh0R0w6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSI7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX0ZBSUw6CiAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CQUNLX0ZVTkM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJ
TF9CQUNLX0ZVTkM6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
RkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9GQUlMOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFT
UzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUkVGOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19SRUY6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19W
QUxVRV9NQVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19WQUxV
RV9NQVNLOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19XUklURU1BU0s6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKICAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9CSVRTOgogICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJp
YnV0ZXMuc3RlbmNpbCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQ0xFQVJf
VkFMVUU6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpTVEVOQ0lMX0ZBSUw6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfRlVOQzoKICAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1Nf
REVQVEhfUEFTUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1BBU1NfREVQ
VEhfUEFTUzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX1JFRjoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVDoKICAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVkFMVUVfTUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX1ZB
TFVFX01BU0s6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9XUklURU1BU0s6CiAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1VCUElYRUxfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVUJQSVhFTF9C
SVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0JJTkRJTkdfMkQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9CSU5ESU5HXzJEOgogICAgICAgICByZXR1cm4gbV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZzsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgogICAgICAgICByZXR1cm4gbV90
ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVOVDoKICAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZM
SVBfWV9XRUJHTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfRkxJUF9ZX1dF
QkdMOgogICAgICAgICByZXR1cm4gbV91bnBhY2tGbGlwWTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgogICAgICAgICByZXR1
cm4gbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKICAgICAgICAgcmV0
dXJuIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVORE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFTkRPUjoKICAgICAg
ICAgcmV0dXJuICJXZWJLaXQiX3N0cjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFUlNJT046CiAgICAgICAgIHJldHVy
biAiV2ViR0wgMi4wIl9zdHI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VklFV1BPUlQ6CiAgICAgICAgIHJldHVybiBn
ZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKICAgICBjYXNlIFdlYkdMRGVidWdSZW5k
ZXJlckluZm86OlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdMOgogICAgICAgICBpZiAobV93ZWJnbERl
YnVnUmVuZGVyZXJJbmZvKSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgICAg
IHJldHVybiAiQXBwbGUgR1BVIl9zdHI7CiAjZWxzZQotICAgICAgICAgICAgcmV0dXJuIG1fY29u
dGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUik7CisgICAgICAgICAg
ICByZXR1cm4gbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkVS
KTsKICNlbmRpZgogICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVy
X2luZm8gbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1JfV0VCR0w6CiAgICAgICAgIGlm
IChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0
LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUik7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3Qg
ZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBo
aWNzQ29udGV4dEdMOjpWRU5ET1IpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01B
WF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCiAgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYykKLSAgICAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihFeHRl
bnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIo
RXh0ZW5zaW9uc0dMOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlz
b3Ryb3BpYyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQ6
CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF8zRF9URVhUVVJFX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUFYXzNEX1RFWFRVUkVfU0laRToKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0FSUkFZX1RFWFRVUkVf
TEFZRVJTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9BUlJBWV9URVhUVVJFX0xB
WUVSUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UUzoKICAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJ
TkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpNQVhfQ09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOgogICAgICAgICBy
ZXR1cm4gZ2V0SW50NjRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpNQVhfQ09NQklORURfVU5JRk9STV9CTE9DS1M6CiAgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5F
RF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
Ok1BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOgogICAgICAgICByZXR1cm4g
Z2V0SW50NjRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9EUkFXX0JVRkZFUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0RSQVdfQlVG
RkVSUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX0VMRU1FTlRfSU5ERVg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6TUFYX0VMRU1FTlRfSU5ERVg6CiAgICAgICAgIHJldHVybiBnZXRJbnQ2NFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0VMRU1FTlRTX0lO
RElDRVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0VMRU1FTlRTX0lORElDRVM6
CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9FTEVNRU5UU19WRVJUSUNFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfRUxFTUVOVFNfVkVSVElDRVM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9V
TklGT1JNX0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX0ZSQUdN
RU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1f
QkxPQ0tTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X0JMT0NLUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9QUk9HUkFNX1RFWEVMX09GRlNFVDoKICAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1NBTVBMRVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1NBTVBMRVM6CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9TRVJWRVJfV0FJVF9USU1FT1VUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9TRVJWRVJfV0FJVF9USU1FT1VUOgogICAgICAgICByZXR1cm4gZ2V0SW50NjRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJF
X0xPRF9CSUFTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX0xPRF9C
SUFTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBP
TkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RSQU5TRk9STV9GRUVEQkFD
S19JTlRFUkxFQVZFRF9DT01QT05FTlRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVFJBTlNGT1JNX0ZFRURC
QUNLX1NFUEFSQVRFX0FUVFJJQlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1RS
QU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9BVFRSSUJTOgogICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTOgogICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVU5JRk9STV9CTE9DS19TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
Ok1BWF9VTklGT1JNX0JMT0NLX1NJWkU6CiAgICAgICAgIHJldHVybiBnZXRJbnQ2NFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1VOSUZPUk1fQlVGRkVS
X0JJTkRJTkdTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9VTklGT1JNX0JVRkZF
Ul9CSU5ESU5HUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfQ09NUE9ORU5UUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkFSWUlOR19DT01QT05FTlRTOgogICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
Ok1BWF9WRVJURVhfT1VUUFVUX0NPTVBPTkVOVFM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5J
Rk9STV9CTE9DS1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9VTklG
T1JNX0JMT0NLUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6IAor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRT
OiAKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1JTl9QUk9HUkFNX1RF
WEVMX09GRlNFVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNSU5fUFJPR1JBTV9URVhF
TF9PRkZTRVQ6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfUk9XX0xFTkdUSDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpQQUNLX1JPV19MRU5HVEg6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfU0tJUF9QSVhFTFM6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UEFDS19TS0lQX1BJWEVMUzoKICAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UEFDS19TS0lQX1JPV1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UEFDS19TS0lQ
X1JPV1M6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19JTUFHRV9IRUlHSFQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5QQUNLX0lNQUdFX0hFSUdIVDoKICAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1JPV19M
RU5HVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX1JPV19MRU5HVEg6CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19TS0lQX0lNQUdFUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpVTlBBQ0tfU0tJUF9JTUFHRVM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19TS0lQX1BJWEVMUzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfU0tJUF9QSVhFTFM6CiAgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19TS0lQX1JPV1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX1NL
SVBfUk9XUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkFTVEVSSVpFUl9ESVNDQVJEOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJBU1RFUklaRVJfRElTQ0FSRDoKICAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9B
TFBIQV9UT19DT1ZFUkFHRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0NPVkVSQUdFOgogICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJB
TlNGT1JNX0ZFRURCQUNLX0FDVElWRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFO
U0ZPUk1fRkVFREJBQ0tfQUNUSVZFOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JNX0ZFRURCQUNL
X1BBVVNFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tf
UEFVU0VEOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05N
RU5UOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVJSQVlfQklORElORzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpWRVJURVhfQVJSQVlfQklORElORzoKICAgICAgICAgaWYgKG1fYm91bmRWZXJ0
ZXhBcnJheU9iamVjdC0+aXNEZWZhdWx0T2JqZWN0KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIG1ha2VSZWZQdHIoc3RhdGljX2Nhc3Q8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdCY+KCptX2JvdW5kVmVydGV4QXJyYXlPYmplY3QpKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjA6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RFJBV19CVUZGRVIxOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjM6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRSQVdfQlVGRkVSNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVI3OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpEUkFXX0JVRkZFUjk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19CVUZGRVIx
MDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JVRkZFUjExOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMTI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RFJBV19CVUZGRVIxMzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEUkFXX0JV
RkZFUjE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfQlVGRkVSMTU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIwOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRSQVdfQlVGRkVSMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFX
X0JVRkZFUjI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIzOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSNDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpEUkFXX0JVRkZFUjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJB
V19CVUZGRVI2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSNzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjg6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6RFJBV19CVUZGRVI5OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRS
QVdfQlVGRkVSMTA6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RFJBV19CVUZGRVIxMToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZFUjEyOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRSQVdfQlVGRkVSMTM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6RFJBV19CVUZGRVIxNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEUkFXX0JVRkZF
UjE1OgogICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCiAgICAgICAgICAgICByZXR1
cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOwogICAgICAgICBy
ZXR1cm4gbV9iYWNrRHJhd0J1ZmZlcjsgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVJfQklORElORzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVy
biBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09QWV9SRUFEX0JVRkZFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRF
X0JVRkZFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9QQUNLX0JVRkZFUl9C
SU5ESU5HOiAgIAotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZG
RVJfQklORElORzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0JVRkZFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0JJTkRJTkc6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18zRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVJfQklORElORzoKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJw
YXJhbWV0ZXIgbmFtZSBub3QgeWV0IHN1cHBvcnRlZCIpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkNPUFlfUkVBRF9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09Q
WV9XUklURV9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UElYRUxfUEFDS19C
VUZGRVJfQklORElORzogICAKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBB
Q0tfQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9CVUZG
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFUl9CSU5ESU5HOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAicGFyYW1ldGVyIG5hbWUgbm90IHlldCBzdXBwb3J0ZWQiKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFt
ZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CkBAIC0yMTIyLDEzICsyMTIyLDEz
IEBAIGJvb2wgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnCiAgICAgaWYgKCFtYXhJbmRleCkgewogICAgICAg
ICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0
aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6CiAgICAgICAgICAgICBtYXhJbmRleCA9IGdl
dE1heEluZGV4PEdDM0R1Ynl0ZT4oYnVmZmVyLCAwLCBudW1FbGVtZW50cyk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgogICAgICAg
ICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxHQzNEdXNob3J0PihidWZmZXIsIDAsIG51bUVs
ZW1lbnRzIC8gc2l6ZW9mKEdDM0R1c2hvcnQpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKICAgICAgICAgICAgIG1heEluZGV4ID0gZ2V0
TWF4SW5kZXg8R0MzRHVpbnQ+KGJ1ZmZlciwgMCwgbnVtRWxlbWVudHMgLyBzaXplb2YoR0MzRHVp
bnQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtMjE1NCwxNCAr
MjE1NCwxNCBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJh
eUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZwogYm9vbCBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZVTkNfQUREOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfU1VC
VFJBQ1Q6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNU
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1JTjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlVOQ19BREQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUlOOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWDoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogfQpAQCAtMjE2OSwxOSArMjE2OSwxOSBAQCBib29sIFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
MwogYm9vbCBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCiB7CiAgICAgc3dpdGNoIChjYXApIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVT
VDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkFTVEVSSVpFUl9ESVNDQVJEOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkJMRU5EOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVTExfRkFD
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZ
R09OX09GRlNFVF9GSUxMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRV9BTFBI
QV9UT19DT1ZFUkFHRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQ09WRVJB
R0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSQVNURVJJWkVSX0RJU0NBUkQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIGNhcGFiaWxpdHkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaAppbmRleCA5MmMxODMyYjllYzlhMzM1Y2Q5ODA1ZDkwMzk3NTI0M2MwZDMwMmMxLi5j
ZWQxOGNkNGZhOGRhYWQ4YzI0NjBiNWE3OWMyMTMzMjc2ODUwYjA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCkBAIC00MSw4
ICs0MSw4IEBAIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3Q7CiBjbGFzcyBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ugewog
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoV2ViR0wyUmVuZGVyaW5nQ29udGV4dCk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBj
cmVhdGUoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFz
QmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1
dGVzKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
IGNyZWF0ZShDYW52YXNCYXNlJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52
YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiYmLCBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMpOwogCiAgICAgLy8gQnVmZmVyIG9iamVjdHMKICAgICB1c2luZyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhOwpAQCAtMjA2LDggKzIwNiw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSBmaW5hbDsK
IAogcHJpdmF0ZToKLSAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFw
aGljc0NvbnRleHQzREF0dHJpYnV0ZXMpOwotICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2Fu
dmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHQzRD4mJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRy
aWJ1dGVzKTsKKyAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoQ2FudmFz
QmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiwgR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzKTsKIAogICAgIGJvb2wgaXNXZWJHTDIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQWN0
aXZlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgK
aW5kZXggNjVjMDgzNDQ4ZWZiMmQ3YjM1ZTUyZmJhMmRjNzRmNWNkOTJjN2U0Mi4uNmY0M2MwNDEw
N2IzNjFkMTRjOTk5ZjZkOThjNTBkYzcwNDVhZjNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShXRUJHTCkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEJ1ZmZlci5jcHAKaW5kZXggZDg3Y2FlMjUwNjNjNzZhN2Y3ZDAzYjI2Yzg4MjNmNmU3
MjIxNzljNC4uYjhlZTI1ZmFjZjY4NTBmMDJmZGRjNDg2ODY1MmEwY2I1M2M2ZjgwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcApAQCAtNDIsNyArNDIsNyBA
QCBSZWY8V2ViR0xCdWZmZXI+IFdlYkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY3R4KQogV2ViR0xCdWZmZXI6OldlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKIHsKLSAgICBzZXRP
YmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpKTsKKyAgICBzZXRP
YmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dEdMKCktPmNyZWF0ZUJ1ZmZlcigpKTsKICAgICBjbGVh
ckNhY2hlZE1heEluZGljZXMoKTsKIH0KIApAQCAtNTEsNyArNTEsNyBAQCBXZWJHTEJ1ZmZlcjo6
fldlYkdMQnVmZmVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKLXZvaWQgV2ViR0xCdWZm
ZXI6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZv
cm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMQnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQogewogICAgIGNvbnRleHQzZC0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7CiB9CkBAIC02Miw3ICs2
Miw3IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGFJbXBsKGNvbnN0IHZv
aWQqIGRhdGEsIEdDM0RzaXplaXB0ciBieXRlTGVuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHN3aXRjaCAobV90YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVN
RU5UX0FSUkFZX0JVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUjoKICAgICAgICAgaWYgKGJ5dGVMZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1f
Ynl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CkBAIC04MiwxOCArODIsMTggQEAgYm9vbCBXZWJHTEJ1
ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YUltcGwoY29uc3Qgdm9pZCogZGF0YSwgR0MzRHNpemVp
cHRyIGJ5dGVMZW4KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2VsZW1lbnRBcnJheUJ1
ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBUlJB
WV9CVUZGRVI6CiAgICAgICAgIG1fYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgc3dp
dGNoIChtX3RhcmdldCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JF
QURfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JV
RkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVI6
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1JFQURfQlVGRkVSOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UElYRUxfUEFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlBJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSOgogICAgICAgICAgICAgbV9ieXRlTGVuZ3RoID0gYnl0
ZUxlbmd0aDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xMzUsNyAr
MTM1LDcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YUltcGwoR0Mz
RGludHB0ciBvZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEKICAgICB9CiAKICAgICBzd2l0Y2ggKG1f
dGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZG
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVI6CiAg
ICAgICAgIGNsZWFyQ2FjaGVkTWF4SW5kaWNlcygpOwogICAgICAgICBpZiAoYnl0ZUxlbmd0aCkg
ewogICAgICAgICAgICAgaWYgKCFtX2VsZW1lbnRBcnJheUJ1ZmZlcikKQEAgLTE0MywxNyArMTQz
LDE3IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGFJbXBsKEdDM0Rp
bnRwdHIgb2Zmc2V0LCBjb25zdCB2b2lkKiBkYXRhCiAgICAgICAgICAgICBtZW1jcHkoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fZWxlbWVudEFycmF5QnVmZmVyLT5kYXRhKCkpICsgb2Zm
c2V0LCBkYXRhLCBieXRlTGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBk
ZWZhdWx0OgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIHN3aXRjaCAobV90YXJnZXQpIHsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJ
WEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9V
TlBBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1f
RkVFREJBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JN
X0JVRkZFUjoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAjZW5kaWYKQEAg
LTE5NCw3ICsxOTQsNyBAQCBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVDb3B5QnVmZmVyU3Vi
RGF0YShjb25zdCBXZWJHTEJ1ZmZlciYgcmVhZEJ1ZmZlciwgR0MzRAogICAgIH0KIAogICAgIHN3
aXRjaCAobV90YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKICAgICAgICAgY2xlYXJDYWNoZWRNYXhJbmRpY2VzKCk7CiAgICAgICAgIGlmIChzaXpl
KSB7CiAgICAgICAgICAgICBpZiAoIW1fZWxlbWVudEFycmF5QnVmZmVyKQpAQCAtMjAyLDE3ICsy
MDIsMTcgQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQ29weUJ1ZmZlclN1YkRhdGEoY29u
c3QgV2ViR0xCdWZmZXImIHJlYWRCdWZmZXIsIEdDM0QKICAgICAgICAgICAgIG1lbWNweShzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9lbGVtZW50QXJyYXlCdWZmZXItPmRhdGEoKSkgKyB3
cml0ZU9mZnNldCwgc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHJlYWRCdWZmZXIu
ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyByZWFkT2Zmc2V0LCBzaXplKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogI2lmIEVOQUJMRShXRUJHTDIpCiAg
ICAgICAgIHN3aXRjaCAobV90YXJnZXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q09QWV9SRUFEX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09Q
WV9XUklURV9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1BB
Q0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tf
QlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZF
UjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9XUklURV9CVUZGRVI6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUjoKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTI1OCwxNyArMjU4LDE3IEBAIHZvaWQgV2ViR0xC
dWZmZXI6OnNldFRhcmdldChHQzNEZW51bSB0YXJnZXQsIGJvb2wgZm9yV2ViR0wyKQogICAgIC8v
IEluIFdlYkdMLCBhIGJ1ZmZlciBpcyBib3VuZCB0byBvbmUgdGFyZ2V0IGluIGl0cyBsaWZldGlt
ZQogICAgIGlmIChtX3RhcmdldCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh0YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OkFSUkFZX0JVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSKQogICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKICAgICBlbHNl
IGlmIChmb3JXZWJHTDIpIHsKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICBzd2l0Y2ggKHRh
cmdldCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1JFQURfQlVGRkVS
OgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVI6Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBJWEVMX1VOUEFDS19CVUZGRVI6Ci0gICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOSUZPUk1fQlVGRkVSOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpDT1BZX1JFQURfQlVGRkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpDT1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UElYRUxfUEFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlBJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOSUZPUk1fQlVGRkVSOgogICAgICAgICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7CiAgICAgICAg
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKaW5kZXgg
ZTMzZDk3MzdjMzU5MjM5ODMyYzZkYTVmM2Y1ODA4ZmI0YTY3ODkwMy4uYmQ0M2NkZDA5OTQ3Nzdk
ZWQ3NTdlY2I4MjhiYTg3NzdkOGY5ODM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ1ZmZlci5oCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBX
ZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0
ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQ
bGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBHQzNEZW51bSBtX3Rh
cmdldCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBU1RDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVBU1RDLmNwcAppbmRleCAxMzJmM2U2MGI3YmE2MzMxYTM5ZGQ4
OGI3NjFiMDJjNTA3YmFlMmM0Li4xYmZmNDNiNzdlNzhjOGQxNjM4ZTI4NzkxNzAwMjJjYmMyZWE4
ZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVNUQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b21wcmVzc2VkVGV4dHVyZUFTVEMuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
V0VCR0wpCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25z
R0wuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCkBAIC0zNiw0MSArMzYsNDEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIAogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEM6OldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBU1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAgICAg
OiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQotICAgICwgbV9pc0hEUlN1cHBvcnRlZChjb250ZXh0
LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfS0hSX3Rl
eHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIiX3MpKQotICAgICwgbV9pc0xEUlN1cHBvcnRlZChj
b250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xf
S0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIiX3MpKQorICAgICwgbV9pc0hEUlN1cHBv
cnRlZChjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0
cygiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIiX3MpKQorICAgICwgbV9pc0xE
UlN1cHBvcnRlZChjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5z
dXBwb3J0cygiR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIiX3MpKQogewotICAg
IGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJs
ZWQoIkdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfaGRyIl9zKTsKLSAgICBjb250ZXh0
LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9L
SFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2xkciJfcyk7CisgICAgY29udGV4dC5ncmFwaGlj
c0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfS0hSX3RleHR1
cmVfY29tcHJlc3Npb25fYXN0Y19oZHIiX3MpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0
R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0tIUl90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2FzdGNfbGRyIl9zKTsKIAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSKTsKLSAgICBj
b250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfNXg0X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIpOwotICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ182eDVfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUik7Ci0gICAgY29u
dGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9BU1RDXzh4NV9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSKTsKLSAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX0FTVENfOHg4X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSKTsKLSAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4Nl9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUik7Ci0gICAgY29u
dGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9BU1RDXzEweDEwX0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUik7Ci0gICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzEyeDEyX0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFIpOworICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ181eDRfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUik7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzZ4NV9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSKTsKKyAgICBj
b250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfOHg1X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ184eDhfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ18xMHg2X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSKTsKKyAgICBj
b250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfMTB4MTBfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSKTsKKyAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSKTsKICAgICAKLSAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q180eDRfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSKTsKLSAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ181eDVfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVf
S0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSKTsKLSAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDVfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSKTsK
LSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMHg1X0tIUik7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFIpOwotICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMHgxMF9LSFIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUik7Ci0gICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q180eDRfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSKTsKKyAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9T
UkdCOF9BTFBIQThfQVNUQ181eDVfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVf
S0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSKTsKKyAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDVfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSKTsK
KyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMHg1X0tIUik7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFIpOworICAg
IGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMHgxMF9LSFIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUik7CisgICAg
Y29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSKTsKIH0KIAogV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFTVEM6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQygpID0gZGVmYXVsdDsKQEAgLTk0
LDggKzk0LDggQEAgVmVjdG9yPFN0cmluZz4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVEM6Omdl
dFN1cHBvcnRlZFByb2ZpbGVzKCkKIAogYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQzo6
c3VwcG9ydGVkKGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7Ci0g
ICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLnN1
cHBvcnRzKCJHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3RjX2hkciJfcykKLSAgICAgICAg
fHwgY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMo
IkdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyIl9zKTsKKyAgICByZXR1cm4gY29u
dGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0tI
Ul90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfaGRyIl9zKQorICAgICAgICB8fCBjb250ZXh0Lmdy
YXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfS0hSX3RleHR1
cmVfY29tcHJlc3Npb25fYXN0Y19sZHIiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuY3BwCmluZGV4IDIxNjhkYTM1ZmJhZjY5Yzg0NDg5NDI4NzI2MmJiNjFiMGQ4
Nzc4ZmYuLjlmODFmYjA4MWUxNWU4YjZhZTllYjcwYjVhYTY4MTc0YzQyYzg5ZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVBVEMuY3BwCkBAIC0yOSwxOCArMjksMTggQEAKIAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4
dGVuc2lvbnNHTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYgY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7Ci0gICAgY29u
dGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgi
R0xfQU1EX2NvbXByZXNzZWRfQVRDX3RleHR1cmUiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29u
dGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BTURfY29tcHJlc3Nl
ZF9BVENfdGV4dHVyZSIpOwogCi0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQpOwotICAgIGNvbnRleHQuYWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JB
X0VYUExJQ0lUX0FMUEhBX0FNRCk7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhB
X0FNRCk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FM
UEhBX0FNRCk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRCk7CiB9CiAK
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKCkg
PSBkZWZhdWx0OwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFt
ZSBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpnZXROYW1lKCkgY29uc3QKIAogYm9vbCBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5n
ZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlIik7
CisgICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygp
LnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTENvbXByZXNzZWRUZXh0dXJlRVRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuY3BwCmluZGV4IGY0Yzk0YTZkNjNmNDliMjY2ODFk
YTM1NzYyNWJjYmQ1MWQxYmM3NjQuLmE2YTU0YWExNTM3MDg2ZmUyOWYxYzYyZTczYTliMDEzNWFm
M2Y3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVFVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVFVEMuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdF
QkdMKQogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMuaCIKIAotI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYs
MTggKzM2LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVF
VEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYg
Y29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7Ci0gICAgY29udGV4dC5n
cmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQU5H
TEVfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpOworICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0
R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2NvbXByZXNzZWRf
dGV4dHVyZV9ldGMiKTsKIAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQo
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1IxMV9FQUMpOwotICAgIGNvbnRleHQuYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFD
KTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SRzExX0VBQyk7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZv
cm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDKTsKLSAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0I4X0VUQzIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0VUQzIpOwotICAgIGNvbnRleHQuYWRkQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIpOwot
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkE4X0VUQzJfRUFDKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMpOwor
ICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1IxMV9FQUMpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQo
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDKTsKKyAgICBjb250ZXh0LmFk
ZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SRzExX0VB
Qyk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0I4X0VUQzIpOworICAgIGNv
bnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NSR0I4X0VUQzIpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyKTsKKyAg
ICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIpOworICAgIGNvbnRleHQuYWRkQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJf
RUFDKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMpOwogfQogCiBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlRVRDOjp+V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQygpID0gZGVmYXVsdDsKQEAg
LTU5LDcgKzU5LDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUVUQzo6Z2V0TmFtZSgpIGNvbnN0CiAKIGJvb2wgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUVUQzo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7
Ci0gICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
LnN1cHBvcnRzKCJHTF9BTkdMRV9jb21wcmVzc2VkX3RleHR1cmVfZXRjIik7CisgICAgcmV0dXJu
IGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJH
TF9BTkdMRV9jb21wcmVzc2VkX3RleHR1cmVfZXRjIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVFVEMxLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVFVEMxLmNwcAppbmRleCBiZGMzYmVlMGE4NzZhY2Y2OTgxYjAwNDhjNjc1
MDNkM2M0Y2ZiY2U2Li5mYjNkZmVhZmZhNjBiZjU4ZTJiNmRlYjQxNDE1OGNkM2YxOWU3ODg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0
dXJlRVRDMS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUVUQzEuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdMKQog
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxLmgiCiAKLSNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDkgKzM2
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzE6Oldl
YkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhp
Y3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX09FU19jb21w
cmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlIik7CisgICAgY29udGV4dC5ncmFwaGljc0NvbnRleHRH
TCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfT0VTX2NvbXByZXNzZWRfRVRD
MV9SR0I4X3RleHR1cmUiKTsKIAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uczNEOjpFVEMxX1JHQjhfT0VTKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6RVRDMV9SR0I4X09FUyk7CiB9CiAKIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVFVEMxOjp+V2ViR0xDb21wcmVzc2VkVGV4dHVyZUVUQzEoKSA9IGRl
ZmF1bHQ7CkBAIC01MCw3ICs1MCw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVFVEMxOjpnZXROYW1lKCkgY29uc3QKIAogYm9vbCBXZWJHTENv
bXByZXNzZWRUZXh0dXJlRVRDMTo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Um
IGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0
RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVy
ZSIpOworICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lv
bnMoKS5zdXBwb3J0cygiR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKaW5kZXggNGJkMGFm
NDc0MDkwNDE4MzU0YjY1NjAzYTdiNjBjNWRmZTJkOThmNi4uOTM1OTlhYzNjN2U3OWJjMDk2OTAw
ZTdmZDQyMWZjMDQ1ZDM0ZjdmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwCkBAIC0yOSw3ICsyOSw3
IEBACiAKICNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKIAotI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUg
IldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzcsMTIgKzM3LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewotICAgIGNv
bnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQo
IkdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIik7CisgICAgY29udGV4dC5ncmFwaGlj
c0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfSU1HX3RleHR1
cmVfY29tcHJlc3Npb25fcHZydGMiKTsKIAotICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1
cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HKTsK
LSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyk7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFf
SU1HKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcpOworICAgIGNvbnRleHQuYWRkQ29t
cHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180
QlBQVjFfSU1HKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyk7CisgICAgY29udGV4dC5h
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ180QlBQVjFfSU1HKTsKKyAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0
KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcpOwogfQogCiBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6On5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMo
KSA9IGRlZmF1bHQ7CkBAIC01NCw3ICs1NCw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25O
YW1lIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6Z2V0TmFtZSgpIGNvbnN0CiAKIGJvb2wg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0NvbnRleHQz
RCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9u
X3B2cnRjIik7CisgICAgcmV0dXJuIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0
ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyIpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKaW5kZXggNWRmZjE5
MDRkNzY5NDIwOWNlOTk2ZmIwMmVmNDU5Y2I2MGE2MjNjZC4uYTNkMTUxZWQ5Y2EzNmVkNTMxZTE4
NGZjYmNhNDU0MGJlZDYxOWFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcApAQCAtMjksNyArMjksNyBA
QAogCiAjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKIAotI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcs
MTUgKzM3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
JiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKLSAgICBhdXRvJiBl
eHRlbnNpb25zID0gY29udGV4dC5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7
CisgICAgYXV0byYgZXh0ZW5zaW9ucyA9IGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0
RXh0ZW5zaW9ucygpOwogICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1
cmVfY29tcHJlc3Npb25fZHh0MSIpOwogICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzIik7CiAgICAgZXh0ZW5zaW9ucy5lbnN1cmVF
bmFibGVkKCJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUiKTsKIAotICAgIGNvbnRl
eHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUKTsKLSAgICBjb250ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0
KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpOwotICAgIGNvbnRl
eHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQzX0VYVCk7Ci0gICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUKTsKKyAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVCk7CisgICAgY29udGV4dC5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKTsKKyAgICBjb250
ZXh0LmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19FWFQpOworICAgIGNvbnRleHQuYWRkQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXQoRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCk7CiB9CiAKIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjp+V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSA9
IGRlZmF1bHQ7CkBAIC01Nyw3ICs1Nyw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1l
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpnZXROYW1lKCkgY29uc3QKIAogYm9vbCBXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQpCiB7Ci0gICAgYXV0byYgZXh0ZW5zaW9ucyA9IGNvbnRleHQuZ3JhcGhpY3ND
b250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGF1dG8mIGV4dGVuc2lvbnMgPSBjb250
ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKTsKICNpZiBVU0UoQU5HTEUp
CiAgICAgcmV0dXJuIGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNz
aW9uX2R4dDEiKQogICAgICAgICAmJiBleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDMiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oCmluZGV4IGVhNjc0MjM5YzAwMDg2Y2I4M2MwMzMz
NmExZjE2MzcxMGViNmVmOWMuLjk4OGQzNjgyM2Q1OGNlMWY5ZjE3MmM5NTlhYjA3ZDFlOGIwMzRj
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEF0
dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRB
dHRyaWJ1dGVzLmgKQEAgLTI5LDEyICsyOSwxMiBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcg
V2ViR0xQb3dlclByZWZlcmVuY2UgPSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTsK
LXVzaW5nIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgPSBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0
ZXM7Cit1c2luZyBXZWJHTFBvd2VyUHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQ
cmVmZXJlbmNlOwordXNpbmcgV2ViR0xDb250ZXh0QXR0cmlidXRlcyA9IEdyYXBoaWNzQ29udGV4
dEdMQXR0cmlidXRlczsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHAKaW5kZXggOWRkZWYxNThj
ZDBhY2RlNmI2OGNhZGRkMmJjOTNjZWQ1YTgzZGVmYS4uNDJiOWNjZjQyM2UyMDMwZGY2NGMxZjY1
OTRiYWQzOWU1ZWRiOWIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29udGV4dEdyb3VwLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdM
KQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIK
ICNpbmNsdWRlICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCkBAIC00NCwxMCArNDQsMTAgQEAgV2Vi
R0xDb250ZXh0R3JvdXA6On5XZWJHTENvbnRleHRHcm91cCgpCiAgICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRCYgV2ViR0xDb250ZXh0R3JvdXA6
OmdldEFHcmFwaGljc0NvbnRleHQzRCgpCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgV2ViR0xD
b250ZXh0R3JvdXA6OmdldEFHcmFwaGljc0NvbnRleHRHTCgpCiB7CiAgICAgQVNTRVJUKCFtX2Nv
bnRleHRzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuICooKm1fY29udGV4dHMuYmVnaW4oKSktPmdy
YXBoaWNzQ29udGV4dDNEKCk7CisgICAgcmV0dXJuICooKm1fY29udGV4dHMuYmVnaW4oKSktPmdy
YXBoaWNzQ29udGV4dEdMKCk7CiB9CiAKIHZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmFkZENvbnRl
eHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oCmluZGV4IGVhY2QyMmVjNzYzYWUwM2My
NmUwMTRmM2Q1MGYwN2VkNmI1OTEzNjcuLjYzZDFkMjkwMTlhNzFkNzc4ZWNlYzNjOTEzZmI0ZjFh
YjFhNTIwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29u
dGV4dEdyb3VwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0
R3JvdXAuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRPYmplY3QoV2Vi
R0xTaGFyZWRPYmplY3QmKTsKICAgICB2b2lkIHJlbW92ZU9iamVjdChXZWJHTFNoYXJlZE9iamVj
dCYpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QmIGdldEFHcmFwaGljc0NvbnRleHQzRCgpOwor
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBnZXRBR3JhcGhpY3NDb250ZXh0R0woKTsKIAog
ICAgIHZvaWQgbG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0
Q29udGV4dE1vZGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTENvbnRleHRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b250ZXh0T2JqZWN0LmNwcAppbmRleCA2YTFjN2FiMjk5OWM4NDVjZTlmZTQzMTI5MTQwZWMzY2Ji
YzQwNWVhLi40NTE0MTI4YjUxZjg0ZWI3YzcwYjgwMjFmNTlkODc1ZDFmNTU4YzEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAKQEAg
LTQ3LDE1ICs0NywxNSBAQCB2b2lkIFdlYkdMQ29udGV4dE9iamVjdDo6ZGV0YWNoQ29udGV4dCgp
CiB7CiAgICAgZGV0YWNoKCk7CiAgICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBkZWxldGVP
YmplY3QobV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgZGVsZXRlT2Jq
ZWN0KG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgICAgIG1fY29udGV4dC0+
cmVtb3ZlQ29udGV4dE9iamVjdCgqdGhpcyk7CiAgICAgICAgIG1fY29udGV4dCA9IG51bGxwdHI7
CiAgICAgfQogfQogCi1HcmFwaGljc0NvbnRleHQzRCogV2ViR0xDb250ZXh0T2JqZWN0OjpnZXRB
R3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAorR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIFdlYkdM
Q29udGV4dE9iamVjdDo6Z2V0QUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9jb250ZXh0ID8gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gbV9jb250ZXh0ID8gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHRHTCgpIDog
bnVsbHB0cjsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bnRleHRPYmplY3QuaAppbmRleCAzNmYyMjQ4NTI0MDJkOWViNTgxZmM1MDExYTUwODc3NGNiMmJl
NmMxLi5jMzhlNjQ4NzIzZTQ3YjU3MjNmMDkwNWI4NWRiMjFmMzhiMTE1MWQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaApAQCAtMzEsNyAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOwogCiAvLyBXZWJHTENvbnRleHRPYmplY3QgdGhlIGJhc2UgY2xhc3MgZm9yIG9i
amVjdHMgdGhhdCBhcmUgb3duZWQgYnkgYSBzcGVjaWZpYwpAQCAtNTcsNyArNTcsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBtX2NvbnRleHQ7CiAgICAgfQogCi0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnZXRBR3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBtX2NvbnRl
eHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hh
ZGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5j
cHAKaW5kZXggYjhhODIxYmI3ZWU3ZTU3MjRmMzZhMzgxN2FjZjAwNGVlNGY0NWVlNS4uYzU1ODQ4
YmY3ZjU2YjA2N2Q4NzQ2NmI0OGM4NmZhNzE2M2Y0MzJhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcApAQCAtMjksNyArMjksNyBAQAog
CiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogCkBAIC0zOCw3ICszOCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hh
ZGVycyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRl
bnNpb24oY29udGV4dCkKIHsKLSAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4
dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3Vy
Y2UiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5l
bnN1cmVFbmFibGVkKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKTsKIH0KIAog
V2ViR0xEZWJ1Z1NoYWRlcnM6On5XZWJHTERlYnVnU2hhZGVycygpID0gZGVmYXVsdDsKQEAgLTU0
LDcgKzU0LDcgQEAgU3RyaW5nIFdlYkdMRGVidWdTaGFkZXJzOjpnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyJiBzaGFkZXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAg
ICBpZiAoIW1fY29udGV4dC52YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlIiwgJnNoYWRlcikpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJl
dHVybiBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIub2JqZWN0KCkpOworICAgIHJldHVybiBt
X2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIub2JqZWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERl
cHRoVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4
dHVyZS5jcHAKaW5kZXggMGQxYjdhNzUxYWNkN2E4MTRhNGRlNTEzYzk5ZjI2OWQ2ZmE5MGQwMy4u
NDUzMWU5ZjZjYTFhZjA2MjhhNDZkN2VkYjZjNzM1MTBjODQ4MTI0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcApAQCAtMjksMTUgKzI5
LDE1IEBACiAKICNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgogCi0jaW5jbHVkZSAiRXh0
ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogV2ViR0xEZXB0aFRleHR1cmU6OldlYkdMRGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQog
ewotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3Vy
ZUVuYWJsZWQoIkdMX09FU19kZXB0aF90ZXh0dXJlIik7Ci0gICAgY29udGV4dC5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxlZCgiR0xfQVJCX2RlcHRoX3Rl
eHR1cmUiKTsKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMo
KS5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZGVwdGhfdGV4dHVyZSIpOworICAgIGNvbnRleHQuZ3Jh
cGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmVuc3VyZUVuYWJsZWQoIkdMX0FSQl9k
ZXB0aF90ZXh0dXJlIik7CiB9CiAKIFdlYkdMRGVwdGhUZXh0dXJlOjp+V2ViR0xEZXB0aFRleHR1
cmUoKSA9IGRlZmF1bHQ7CkBAIC00Nyw5ICs0Nyw5IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNp
b25OYW1lIFdlYkdMRGVwdGhUZXh0dXJlOjpnZXROYW1lKCkgY29uc3QKICAgICByZXR1cm4gV2Vi
R0xEZXB0aFRleHR1cmVOYW1lOwogfQogCi1ib29sIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0
ZWQoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQpCitib29sIFdlYkdMRGVwdGhUZXh0dXJlOjpz
dXBwb3J0ZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQpCiB7Ci0gICAgRXh0ZW5z
aW9uczNEJiBleHRlbnNpb25zID0gY29udGV4dC5nZXRFeHRlbnNpb25zKCk7CisgICAgRXh0ZW5z
aW9uc0dMJiBleHRlbnNpb25zID0gY29udGV4dC5nZXRFeHRlbnNpb25zKCk7CiAgICAgcmV0dXJu
IGV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX09FU19kZXB0aF90ZXh0dXJlIikKICAgICAgICAgfHwg
ZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQVJCX2RlcHRoX3RleHR1cmUiKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5oCmluZGV4IDUyY2U5NmRh
Yzg5YTQzNzFjNzNlZTMzYTVmNTQ3YjA2Y2M0MmI3YTguLjBmOGI5OWQ0MjQ0ZGUzYjJiODNhNmJm
ZmUyMjRhOGIyM2FjNjcxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVwdGhUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xEZXB0aFRleHR1cmUuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQg
V2ViR0xEZXB0aFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogICAgIHZpcnR1
YWwgfldlYkdMRGVwdGhUZXh0dXJlKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoR3Jh
cGhpY3NDb250ZXh0M0QmKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmKTsKIAogICAgIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJy
aWRlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJh
d0J1ZmZlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVy
cy5jcHAKaW5kZXggNjUwOWE5MjI0NzJmMWUwNzlhYzkxMTM0YTNmNjk3ZGE4ZTJjNjM4ZS4uY2Uz
NDVlNjk4MmQzMWVmYTkzYjNmOTI4MTVmMGMwZDcwYjdlYjlkMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKQEAgLTI4LDE0ICsyOCwxNCBA
QAogI2lmIEVOQUJMRShXRUJHTCkKICNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCiAKLSNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihj
b250ZXh0KQogewotICAgIGNvbnRleHQuZ3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9u
cygpLmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICBjb250ZXh0Lmdy
YXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9FWFRf
ZHJhd19idWZmZXJzIik7CiB9CiAKIFdlYkdMRHJhd0J1ZmZlcnM6On5XZWJHTERyYXdCdWZmZXJz
KCkgPSBkZWZhdWx0OwpAQCAtNDgsOSArNDgsOSBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9u
TmFtZSBXZWJHTERyYXdCdWZmZXJzOjpnZXROYW1lKCkgY29uc3QKIGJvb2wgV2ViR0xEcmF3QnVm
ZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCiB7CiAj
aWYgVVNFKEFOR0xFKQotICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdl
dEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIpOworICAgIHJldHVy
biBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygi
R0xfRVhUX2RyYXdfYnVmZmVycyIpOwogI2Vsc2UKLSAgICByZXR1cm4gY29udGV4dC5ncmFwaGlj
c0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0VYVF9kcmF3X2J1ZmZl
cnMiKQorICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lv
bnMoKS5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIpCiAgICAgICAgICYmIHNhdGlzZmll
c1dlYkdMUmVxdWlyZW1lbnRzKGNvbnRleHQpOwogI2VuZGlmCiB9CkBAIC02MywyNSArNjMsMjUg
QEAgdm9pZCBXZWJHTERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc1dFQkdMKGNvbnN0IFZlY3RvcjxH
QzNEZW51bT4mIGJ1ZmZlcnMpCiAgICAgY29uc3QgR0MzRGVudW0qIGJ1ZnMgPSBidWZmZXJzLmRh
dGEoKTsKICAgICBpZiAoIW1fY29udGV4dC5tX2ZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAg
ICBpZiAobiAhPSAxKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc1dFQkdMIiwgIm1v
cmUgdGhhbiBvbmUgYnVmZmVyIik7CisgICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc1dFQkdM
IiwgIm1vcmUgdGhhbiBvbmUgYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGJ1ZnNbMF0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0sgJiYgYnVm
c1swXSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkgewotICAgICAgICAgICAgbV9jb250ZXh0
LnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImRyYXdCdWZmZXJzV0VCR0wiLCAiQkFDSyBvciBOT05FIik7CisgICAgICAgIGlmIChidWZzWzBd
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLICYmIGJ1ZnNbMF0gIT0gR3JhcGhpY3NDb250ZXh0
R0w6Ok5PTkUpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QnVmZmVyc1dFQkdMIiwgIkJB
Q0sgb3IgTk9ORSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8v
IEJlY2F1c2UgdGhlIGJhY2tidWZmZXIgaXMgc2ltdWxhdGVkIG9uIGFsbCBjdXJyZW50IFdlYktp
dCBwb3J0cywgd2UgbmVlZCB0byBjaGFuZ2UgQkFDSyB0byBDT0xPUl9BVFRBQ0hNRU5UMC4KLSAg
ICAgICAgR0MzRGVudW0gdmFsdWUgPSAoYnVmc1swXSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QkFD
SykgPyBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgOiBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORTsKLSAgICAgICAgbV9jb250ZXh0LmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4
dGVuc2lvbnMoKS5kcmF3QnVmZmVyc0VYVCgxLCAmdmFsdWUpOworICAgICAgICBHQzNEZW51bSB2
YWx1ZSA9IChidWZzWzBdID09IEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLKSA/IEdyYXBoaWNzQ29u
dGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCA6IEdyYXBoaWNzQ29udGV4dEdMOjpOT05FOworICAg
ICAgICBtX2NvbnRleHQuZ3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmRyYXdC
dWZmZXJzRVhUKDEsICZ2YWx1ZSk7CiAgICAgICAgIG1fY29udGV4dC5zZXRCYWNrRHJhd0J1ZmZl
cihidWZzWzBdKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobiA+IG1fY29udGV4dC5nZXRN
YXhEcmF3QnVmZmVycygpKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQuc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkcmF3QnVmZmVyc1dFQkdMIiwg
Im1vcmUgdGhhbiBtYXggZHJhdyBidWZmZXJzIik7CisgICAgICAgICAgICBtX2NvbnRleHQuc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJkcmF3QnVm
ZmVyc1dFQkdMIiwgIm1vcmUgdGhhbiBtYXggZHJhdyBidWZmZXJzIik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBuOyAr
K2kpIHsKLSAgICAgICAgICAgIGlmIChidWZzW2ldICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
ICYmIGJ1ZnNbaV0gIT0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEV4dGVuc2lvbnMzRDo6Q09MT1Jf
QVRUQUNITUVOVDBfRVhUICsgaSkpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQuc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0J1
ZmZlcnNXRUJHTCIsICJDT0xPUl9BVFRBQ0hNRU5UaV9FWFQgb3IgTk9ORSIpOworICAgICAgICAg
ICAgaWYgKGJ1ZnNbaV0gIT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUgJiYgYnVmc1tpXSAhPSBz
dGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UMF9FWFQg
KyBpKSkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QnVmZmVyc1dFQkdMIiwgIkNP
TE9SX0FUVEFDSE1FTlRpX0VYVCBvciBOT05FIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MiwxOCArOTIsMTggQEAgdm9pZCBXZWJHTERy
YXdCdWZmZXJzOjpkcmF3QnVmZmVyc1dFQkdMKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZmZl
cnMpCiAvLyBzdGF0aWMKIGJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1
aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgd2ViZ2xDb250ZXh0KQogewotICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gd2ViZ2xDb250ZXh0LmdyYXBoaWNzQ29udGV4
dDNEKCk7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQgPSB3ZWJnbENvbnRl
eHQuZ3JhcGhpY3NDb250ZXh0R0woKTsKIAogICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHdl
IG1ha2Ugc3VyZSBHTF9FWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZC4KICAgICBHQzNEaW50
IG1heERyYXdCdWZmZXJzID0gMDsKICAgICBHQzNEaW50IG1heENvbG9yQXR0YWNobWVudHMgPSAw
OwotICAgIGNvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVS
U19FWFQsICZtYXhEcmF3QnVmZmVycyk7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5z
aW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbWF4Q29sb3JBdHRhY2htZW50cyk7
CisgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfRFJBV19CVUZGRVJT
X0VYVCwgJm1heERyYXdCdWZmZXJzKTsKKyAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zR0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtYXhDb2xvckF0dGFjaG1lbnRzKTsK
ICAgICBpZiAobWF4RHJhd0J1ZmZlcnMgPCA0IHx8IG1heENvbG9yQXR0YWNobWVudHMgPCA0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybTNET2JqZWN0IGZibyA9IGNvbnRl
eHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBjb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBmYm8pOwogCiAgICAgY29u
c3QgdW5zaWduZWQgY2hhciBidWZmZXJbNF0gPSB7IDAsIDAsIDAsIDAgfTsgLy8gdGV4dHVyZXMg
YXJlIHJlcXVpcmVkIHRvIGJlIGluaXRpYWxpemVkIGZvciBvdGhlciBwb3J0cy4KICAgICBib29s
IHN1cHBvcnRzRGVwdGggPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX09F
U19kZXB0aF90ZXh0dXJlIikKQEAgLTExMywxNCArMTEzLDE0IEBAIGJvb2wgV2ViR0xEcmF3QnVm
ZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgd2ViCiAgICAgUGxhdGZvcm0zRE9iamVjdCBkZXB0aFN0ZW5jaWwgPSAwOwogICAgIGlmIChz
dXBwb3J0c0RlcHRoU3RlbmNpbCkgewogICAgICAgICBkZXB0aFN0ZW5jaWwgPSBjb250ZXh0LT5j
cmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwpOwotICAgICAgICBjb250ZXh0LT50ZXhJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTCwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5D
SUwsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgYnVmZmVyKTsKKyAgICAg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIGRl
cHRoU3RlbmNpbCk7CisgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMLCAxLCAx
LCAwLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0R0w6
OlVOU0lHTkVEX0lOVF8yNF84LCBidWZmZXIpOwogICAgIH0KICAgICBQbGF0Zm9ybTNET2JqZWN0
IGRlcHRoID0gMDsKICAgICBpZiAoc3VwcG9ydHNEZXB0aCkgewogICAgICAgICBkZXB0aCA9IGNv
bnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoKTsKLSAgICAgICAgY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVCwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCwgYnVmZmVyKTsKKyAgICAg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIGRl
cHRoKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgMSwgMSwgMCwg
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0lOVCwgYnVmZmVyKTsKICAgICB9CiAKICAgICBWZWN0b3I8UGxhdGZvcm0zRE9iamVj
dD4gY29sb3JzOwpAQCAtMTI5LDMwICsxMjksMzAgQEAgYm9vbCBXZWJHTERyYXdCdWZmZXJzOjpz
YXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiB3ZWIK
ICAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBtYXhBbGxvd2VkQnVmZmVyczsgKytpKSB7CiAg
ICAgICAgIFBsYXRmb3JtM0RPYmplY3QgY29sb3IgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7
CiAgICAgICAgIGNvbG9ycy5hcHBlbmQoY29sb3IpOwotICAgICAgICBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29sb3IpOwotICAgICAgICBjb250
ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgMSwgMSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBidWZmZXIpOwotICAgICAgICBjb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGksIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBjb2xvciwgMCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBjb2xvcik7CisgICAgICAgIGNvbnRl
eHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBLCAxLCAxLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJ1ZmZlcik7CisgICAgICAgIGNvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwICsgaSwgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQsIGNvbG9yLCAwKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoc3VwcG9ydHNEZXB0aCkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoLCAwKTsKLSAgICAgICAgICAgIGlm
IChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgZGVwdGgsIDApOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAg
ICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICAgICAgY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfMkQsIDAsIDApOwogICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c0RlcHRo
U3RlbmNpbCkgewotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGRlcHRoU3RlbmNpbCwgMCk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOwotICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExF
VEUpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1F
TlQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBkZXB0aFN0ZW5jaWwsIDApOworICAg
ICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgZGVwdGhTdGVuY2lsLCAwKTsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7
CiAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCAwKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIDApOworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQs
IDAsIDApOworICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRB
Q0hNRU5ULCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgMCwgMCk7CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5jcHAKaW5kZXggZmMwY2RlNjY1NzEwNjFhN2RlMTQ2Y2RmN2RkZDlmNWYxYTU1MWQ4NC4uYjkz
NjlmODc2NjM5Y2NmMzJiOWNiYzVmMjgzNWUyNjZhYjk0YzM5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5j
bHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKQEAgLTUxLDkgKzUxLDkgQEAgbmFtZXNwYWNlIHsKICAgICAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0
IG92ZXJyaWRlOwogICAgICAgICB2b2lkIHNldEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7Ci0gICAg
ICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGljc0NvbnRleHQzRCopIG92ZXJyaWRlOwotICAgICAg
ICB2b2lkIGF0dGFjaChHcmFwaGljc0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92
ZXJyaWRlOwotICAgICAgICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiwgR0MzRGVu
dW0gYXR0YWNobWVudCkgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgb25EZXRhY2hlZChHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCopIG92ZXJyaWRlOworICAgICAgICB2b2lkIGF0dGFjaChHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOworICAgICAg
ICB2b2lkIHVuYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgR0MzRGVudW0gYXR0YWNo
bWVudCkgb3ZlcnJpZGU7CiAKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50KCkg
eyB9OwogCkBAIC0xMTEsMjYgKzExMSwyNiBAQCBuYW1lc3BhY2UgewogICAgICAgICAgICAgbV9y
ZW5kZXJidWZmZXItPnNldEluaXRpYWxpemVkKCk7CiAgICAgfQogCi0gICAgdm9pZCBXZWJHTFJl
bmRlcmJ1ZmZlckF0dGFjaG1lbnQ6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCisgICAgdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlckF0dGFjaG1lbnQ6Om9uRGV0YWNoZWQoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQpCiAgICAgewogICAgICAgICBtX3JlbmRlcmJ1
ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KTsKICAgICB9CiAKLSAgICB2b2lkIFdlYkdMUmVuZGVy
YnVmZmVyQXR0YWNobWVudDo6YXR0YWNoKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBHQzNE
ZW51bSBhdHRhY2htZW50KQorICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50Ojph
dHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQpCiAgICAgewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCA9IG9iamVjdE9yWmVy
byhtX3JlbmRlcmJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2JqZWN0KTsKKyAgICAgICAgY29udGV4dC0+
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBh
dHRhY2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSLCBvYmplY3QpOwogICAg
IH0KIAotICAgIHZvaWQgV2ViR0xSZW5kZXJidWZmZXJBdHRhY2htZW50Ojp1bmF0dGFjaChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgR0MzRGVudW0gYXR0YWNobWVudCkKKyAgICB2b2lkIFdl
YkdMUmVuZGVyYnVmZmVyQXR0YWNobWVudDo6dW5hdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAgICAgewogI2lmICFVU0UoQU5HTEUp
Ci0gICAgICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwot
ICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5U
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKGF0dGFj
aG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgewor
ICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCwg
R3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgICAgICAgICBjb250ZXh0
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJCVUZGRVIsIDApOwogICAgICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICAgICAg
Y29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRF
UkJVRkZFUiwgMCk7CiAgICAgfQogCiAgICAgY2xhc3MgV2ViR0xUZXh0dXJlQXR0YWNobWVudCA6
IHB1YmxpYyBXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEF0dGFjaG1lbnQgewpAQCAtMTQ3LDkgKzE0
Nyw5IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IG92ZXJyaWRl
OwogICAgICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAg
dm9pZCBzZXRJbml0aWFsaXplZCgpIG92ZXJyaWRlOwotICAgICAgICB2b2lkIG9uRGV0YWNoZWQo
R3JhcGhpY3NDb250ZXh0M0QqKSBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhp
Y3NDb250ZXh0M0QqLCBHQzNEZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKLSAgICAgICAgdm9p
ZCB1bmF0dGFjaChHcmFwaGljc0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJy
aWRlOworICAgICAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKSBv
dmVycmlkZTsKKyAgICAgICAgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBH
QzNEZW51bSBhdHRhY2htZW50KSBvdmVycmlkZTsKKyAgICAgICAgdm9pZCB1bmF0dGFjaChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpIG92ZXJyaWRlOwogCiAg
ICAgICAgIFdlYkdMVGV4dHVyZUF0dGFjaG1lbnQoKSB7IH07CiAKQEAgLTIxMSwyNiArMjExLDI2
IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgIC8vIFRleHR1cmVzIGFyZSBhc3N1bWVkIHRvIGJlIGlu
aXRpYWxpemVkLgogICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJlQXR0YWNobWVudDo6b25E
ZXRhY2hlZChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICB2b2lkIFdlYkdMVGV4dHVy
ZUF0dGFjaG1lbnQ6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQp
CiAgICAgewogICAgICAgICBtX3RleHR1cmUtPm9uRGV0YWNoZWQoY29udGV4dCk7CiAgICAgfQog
Ci0gICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50OjphdHRhY2goR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCisgICAgdm9pZCBXZWJHTFRleHR1cmVB
dHRhY2htZW50OjphdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQsIEdDM0Rl
bnVtIGF0dGFjaG1lbnQpCiAgICAgewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCA9
IG9iamVjdE9yWmVybyhtX3RleHR1cmUuZ2V0KCkpOwotICAgICAgICBjb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQs
IG1fdGFyZ2V0LCBvYmplY3QsIG1fbGV2ZWwpOworICAgICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIG1f
dGFyZ2V0LCBvYmplY3QsIG1fbGV2ZWwpOwogICAgIH0KIAotICAgIHZvaWQgV2ViR0xUZXh0dXJl
QXR0YWNobWVudDo6dW5hdHRhY2goR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQpCisgICAgdm9pZCBXZWJHTFRleHR1cmVBdHRhY2htZW50Ojp1bmF0dGFjaChH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgR0MzRGVudW0gYXR0YWNobWVudCkKICAg
ICB7CiAjaWYgIVVTRShBTkdMRSkKLSAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgewotICAgICAgICAgICAgY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgbV90YXJnZXQsIDAsIG1fbGV2ZWwp
OwotICAgICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5U
LCBtX3RhcmdldCwgMCwgbV9sZXZlbCk7CisgICAgICAgIGlmIChhdHRhY2htZW50ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIG1fdGFyZ2V0LCAwLCBtX2xl
dmVsKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dEdMOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNI
TUVOVCwgbV90YXJnZXQsIDAsIG1fbGV2ZWwpOwogICAgICAgICB9IGVsc2UKICNlbmRpZgotICAg
ICAgICAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCBtX3RhcmdldCwgMCwgbV9sZXZlbCk7CisgICAgICAg
ICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIGF0dGFjaG1lbnQsIG1fdGFyZ2V0LCAwLCBtX2xldmVsKTsKICAgICB9CiAKICAg
ICBib29sIGlzQXR0YWNobWVudENvbXBsZXRlKFdlYkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNo
bWVudCogYXR0YWNoZWRPYmplY3QsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIGNvbnN0IGNoYXIqKiBy
ZWFzb24pCkBAIC0yMzgsOCArMjM4LDggQEAgbmFtZXNwYWNlIHsKICAgICAgICAgQVNTRVJUKGF0
dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5pc1ZhbGlkKCkpOwogICAgICAgICBBU1NF
UlQocmVhc29uKTsKICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gYXR0YWNoZWRPYmplY3QtPmdl
dEZvcm1hdCgpOwotICAgICAgICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudCk7Ci0gICAgICAgIHVuc2lnbmVk
IGhhdmUgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlGb3JtYXQoZm9ybWF0KTsK
KyAgICAgICAgdW5zaWduZWQgbmVlZCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRDbGVh
ckJpdHNCeUF0dGFjaG1lbnRUeXBlKGF0dGFjaG1lbnQpOworICAgICAgICB1bnNpZ25lZCBoYXZl
ID0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCk7
CiAKICAgICAgICAgaWYgKChuZWVkICYgaGF2ZSkgIT0gbmVlZCkgewogICAgICAgICAgICAgKnJl
YXNvbiA9ICJhdHRhY2htZW50IHR5cGUgaXMgbm90IGNvcnJlY3QgZm9yIGF0dGFjaG1lbnQiOwpA
QCAtMjQ5LDggKzI0OSw4IEBAIG5hbWVzcGFjZSB7CiAgICAgICAgICAgICAqcmVhc29uID0gImF0
dGFjaG1lbnQgaGFzIGEgMCBkaW1lbnNpb24iOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICgoYXR0YWNobWVudCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQpCi0gICAgICAgICAgICAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUwpIHsKKyAgICAgICAgaWYgKChhdHRhY2htZW50ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCkKKyAgICAgICAgICAgICYmIGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTCkgewogICAgICAgICAgICpyZWFzb24gPSAiYXR0
YWNobWVudCBERVBUSF9TVEVOQ0lMIG5vdCBhbGxvd2VkIG9uIERFUFRIIG9yIFNURU5DSUwgYXR0
YWNobWVudCI7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yNzIsNyAr
MjcyLDcgQEAgV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJiBjdHgpCiAgICAgOiBXZWJHTENvbnRleHRPYmplY3QoY3R4KQogICAgICwg
bV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQogewotICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3ND
b250ZXh0M0QoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CisgICAgc2V0T2JqZWN0KGN0eC5ncmFw
aGljc0NvbnRleHRHTCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsKIH0KIAogV2ViR0xGcmFtZWJ1
ZmZlcjo6fldlYkdMRnJhbWVidWZmZXIoKQpAQCAtMzExLDcgKzMxMSw3IEBAIHZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6YXR0YWNoKEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIGF0dGFjaG1l
bnRQb2ludCkKICAgICBBU1NFUlQoaXNCb3VuZCgpKTsKICAgICBSZWZQdHI8V2ViR0xBdHRhY2ht
ZW50PiBhdHRhY2htZW50T2JqZWN0ID0gZ2V0QXR0YWNobWVudChhdHRhY2htZW50KTsKICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdCkKLSAgICAgICAgYXR0YWNobWVudE9iamVjdC0+YXR0YWNoKGNv
bnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSwgYXR0YWNobWVudFBvaW50KTsKKyAgICAgICAg
YXR0YWNobWVudE9iamVjdC0+YXR0YWNoKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKSwg
YXR0YWNobWVudFBvaW50KTsKIH0KIAogV2ViR0xTaGFyZWRPYmplY3QqIFdlYkdMRnJhbWVidWZm
ZXI6OmdldEF0dGFjaG1lbnRPYmplY3QoR0MzRGVudW0gYXR0YWNobWVudCkgY29uc3QKQEAgLTMz
NiwyMCArMzM2LDIwIEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZy
b21Cb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAKICAgICBSZWZQdHI8V2Vi
R0xBdHRhY2htZW50PiBhdHRhY2htZW50T2JqZWN0ID0gZ2V0QXR0YWNobWVudChhdHRhY2htZW50
KTsKICAgICBpZiAoYXR0YWNobWVudE9iamVjdCkgewotICAgICAgICBhdHRhY2htZW50T2JqZWN0
LT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIGF0
dGFjaG1lbnRPYmplY3QtPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgp
KTsKICAgICAgICAgbV9hdHRhY2htZW50cy5yZW1vdmUoYXR0YWNobWVudCk7CiAgICAgICAgIGRy
YXdCdWZmZXJzSWZOZWNlc3NhcnkoZmFsc2UpOwogI2lmICFVU0UoQU5HTEUpCiAgICAgICAgIHN3
aXRjaCAoYXR0YWNobWVudCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5U
KTsKLSAgICAgICAgICAgIGF0dGFjaChHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hN
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAg
ICAgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfQVRUQUNITUVOVCk7CisgICAgICAgICAgICBhdHRhY2goR3JhcGhpY3ND
b250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
QVRUQUNITUVOVCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgICAgIGF0dGFjaChHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQVRUQUNITUVOVCk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FU
VEFDSE1FTlQ6CisgICAgICAgICAgICBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQVRUQUNITUVOVDoKLSAgICAgICAgICAgIGF0dGFjaChHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hN
RU5UKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgYXR0YWNoKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0FUVEFDSE1FTlQpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKFdl
YkdMU2hhcmVkT2JqZWN0KiBhCiAgICAgICAgICAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBh
dHRhY2htZW50T2JqZWN0ID0gZW50cnkudmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoYXR0
YWNobWVudE9iamVjdC0+aXNTaGFyZWRPYmplY3QoYXR0YWNobWVudCkpIHsKICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGVudHJ5LmtleTsKLSAgICAgICAgICAgICAg
ICBhdHRhY2htZW50T2JqZWN0LT51bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCksIGF0dGFjaG1lbnRUeXBlKTsKKyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0LT51
bmF0dGFjaChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dEdMKCksIGF0dGFjaG1lbnRUeXBlKTsK
ICAgICAgICAgICAgICAgICByZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIoYXR0
YWNobWVudFR5cGUpOwogICAgICAgICAgICAgICAgIGNoZWNrTW9yZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0zODQsNyArMzg0LDcgQEAgR0MzRHNpemVpIFdlYkdMRnJhbWVi
dWZmZXI6OmdldENvbG9yQnVmZmVyV2lkdGgoKSBjb25zdAogewogICAgIGlmICghb2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1l
bnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCk7
CisgICAgUmVmUHRyPFdlYkdMQXR0YWNobWVudD4gYXR0YWNobWVudCA9IGdldEF0dGFjaG1lbnQo
R3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwKTsKICAgICBpZiAoIWF0dGFjaG1l
bnQpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zOTUsNyArMzk1LDcgQEAgR0MzRHNpemVpIFdl
YkdMRnJhbWVidWZmZXI6OmdldENvbG9yQnVmZmVySGVpZ2h0KCkgY29uc3QKIHsKICAgICBpZiAo
IW9iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50
PiBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDApOworICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBnZXRB
dHRhY2htZW50KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCk7CiAgICAgaWYg
KCFhdHRhY2htZW50KQogICAgICAgICByZXR1cm4gMDsKIApAQCAtNDA2LDcgKzQwNiw3IEBAIEdD
M0RlbnVtIFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3QKIHsK
ICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8V2ViR0xB
dHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDApOworICAgIFJlZlB0cjxXZWJHTEF0dGFjaG1lbnQ+IGF0dGFjaG1l
bnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5UMCk7
CiAgICAgaWYgKCFhdHRhY2htZW50KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gYXR0
YWNobWVudC0+Z2V0Rm9ybWF0KCk7CkBAIC00MjIsMjkgKzQyMiwyOSBAQCBHQzNEZW51bSBXZWJH
TEZyYW1lYnVmZmVyOjpjaGVja1N0YXR1cyhjb25zdCBjaGFyKiogcmVhc29uKSBjb25zdAogICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX2F0dGFjaG1lbnRzKSB7CiAgICAgICAgIFJlZlB0cjxXZWJH
TEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYg
KCFpc0F0dGFjaG1lbnRDb21wbGV0ZShhdHRhY2htZW50LmdldCgpLCBlbnRyeS5rZXksIHJlYXNv
bikpCi0gICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICBpZiAoIWF0dGFj
aG1lbnQtPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2htZW50IGlz
IG5vdCB2YWxpZCI7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgfQogICAgICAgICBHQzNEZW51bSBh
dHRhY2htZW50Rm9ybWF0ID0gYXR0YWNobWVudC0+Z2V0Rm9ybWF0KCk7CiAKICAgICAgICAgLy8g
QXR0YWNoaW5nIGFuIFNSR0JfRVhUIGZvcm1hdCBhdHRhY2htZW50IHRvIGEgZnJhbWVidWZmZXIg
aXMgaW52YWxpZC4KLSAgICAgICAgaWYgKGF0dGFjaG1lbnRGb3JtYXQgPT0gRXh0ZW5zaW9uczNE
OjpTUkdCX0VYVCkKKyAgICAgICAgaWYgKGF0dGFjaG1lbnRGb3JtYXQgPT0gRXh0ZW5zaW9uc0dM
OjpTUkdCX0VYVCkKICAgICAgICAgICAgIGF0dGFjaG1lbnRGb3JtYXQgPSAwOwogCiAgICAgICAg
IGlmICghYXR0YWNobWVudEZvcm1hdCkgewogICAgICAgICAgICAgKnJlYXNvbiA9ICJhdHRhY2ht
ZW50IGlzIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCI7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UOwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAoZW50cnkua2V5KSB7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQ6CiAgICAgICAgICAgICBoYXZlRGVw
dGggPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAgICAgICAgaGF2ZVN0ZW5jaWwgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgogICAgICAgICAgICAgaGF2ZURlcHRoU3RlbmNpbCA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDU0LDQzICs0NTQsNDMgQEAg
R0MzRGVudW0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y2hlY2tTdGF0dXMoY29uc3QgY2hhcioqIHJlYXNv
bikgY29uc3QKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICh3aWR0aCAhPSBhdHRh
Y2htZW50LT5nZXRXaWR0aCgpIHx8IGhlaWdodCAhPSBhdHRhY2htZW50LT5nZXRIZWlnaHQoKSkg
ewogICAgICAgICAgICAgICAgICpyZWFzb24gPSAiYXR0YWNobWVudHMgZG8gbm90IGhhdmUgdGhl
IHNhbWUgZGltZW5zaW9ucyI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlM7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lP
TlM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgKytjb3VudDsKICAgICB9CiAg
ICAgaWYgKCFjb3VudCkgewogICAgICAgICAqcmVhc29uID0gIm5vIGF0dGFjaG1lbnRzIjsKLSAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01J
U1NJTkdfQVRUQUNITUVOVDsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVDsKICAgICB9CiAgICAgaWYgKCF3
aWR0aCB8fCAhaGVpZ2h0KSB7CiAgICAgICAgICpyZWFzb24gPSAiZnJhbWVidWZmZXIgaGFzIGEg
MCBkaW1lbnNpb24iOwotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dEdMOjpGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgfQogICAgIC8vIFdl
YkdMIHNwZWNpZmljOiBubyBjb25mbGljdGluZyBERVBUSC9TVEVOQ0lML0RFUFRIX1NURU5DSUwg
YXR0YWNobWVudHMuCiAgICAgaWYgKChoYXZlRGVwdGhTdGVuY2lsICYmIChoYXZlRGVwdGggfHwg
aGF2ZVN0ZW5jaWwpKSB8fCAoaGF2ZURlcHRoICYmIGhhdmVTdGVuY2lsKSkgewogICAgICAgICAq
cmVhc29uID0gImNvbmZsaWN0aW5nIERFUFRIL1NURU5DSUwvREVQVEhfU1RFTkNJTCBhdHRhY2ht
ZW50cyI7Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQ7CiAgICAgfQotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEU7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZF
Ul9DT01QTEVURTsKIH0KIAotYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2VzcyhHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkLCBjb25zdCBjaGFyKiogcmVhc29uKQorYm9vbCBXZWJHTEZy
YW1lYnVmZmVyOjpvbkFjY2VzcyhHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBj
b25zdCBjaGFyKiogcmVhc29uKQogewotICAgIGlmIChjaGVja1N0YXR1cyhyZWFzb24pICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICBpZiAoY2hlY2tTdGF0
dXMocmVhc29uKSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gaW5pdGlhbGl6ZUF0dGFjaG1lbnRzKGNv
bnRleHQzZCwgcmVhc29uKTsKIH0KIAogYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjpoYXNTdGVuY2ls
QnVmZmVyKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50
ID0gZ2V0QXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsK
KyAgICBSZWZQdHI8V2ViR0xBdHRhY2htZW50PiBhdHRhY2htZW50ID0gZ2V0QXR0YWNobWVudChH
cmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UKTsKICAgICBpZiAoIWF0dGFjaG1l
bnQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBnZXRBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOworICAgICAgICBhdHRhY2htZW50ID0gZ2V0QXR0
YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTsKICAg
ICByZXR1cm4gYXR0YWNobWVudCAmJiBhdHRhY2htZW50LT5pc1ZhbGlkKCk7CiB9CiAKLXZvaWQg
V2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6
ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0
Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBtX2F0
dGFjaG1lbnRzLnZhbHVlcygpKQogICAgICAgICBhdHRhY2htZW50LT5vbkRldGFjaGVkKGNvbnRl
eHQzZCk7CkBAIC00OTgsNyArNDk4LDcgQEAgdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVP
YmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0QKICAgICBj
b250ZXh0M2QtPmRlbGV0ZUZyYW1lYnVmZmVyKG9iamVjdCk7CiB9CiAKLWJvb2wgV2ViR0xGcmFt
ZWJ1ZmZlcjo6aW5pdGlhbGl6ZUF0dGFjaG1lbnRzKEdyYXBoaWNzQ29udGV4dDNEKiBnM2QsIGNv
bnN0IGNoYXIqKiByZWFzb24pCitib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVBdHRh
Y2htZW50cyhHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogZzNkLCBjb25zdCBjaGFyKiogcmVhc29u
KQogewogICAgIEFTU0VSVChvYmplY3QoKSk7CiAgICAgR0MzRGJpdGZpZWxkIG1hc2sgPSAwOwpA
QCAtNTA3LDIxICs1MDcsMjEgQEAgYm9vbCBXZWJHTEZyYW1lYnVmZmVyOjppbml0aWFsaXplQXR0
YWNobWVudHMoR3JhcGhpY3NDb250ZXh0M0QqIGczZCwgY29uc3QgY2hhcioKICAgICAgICAgR0Mz
RGVudW0gYXR0YWNobWVudFR5cGUgPSBlbnRyeS5rZXk7CiAgICAgICAgIFJlZlB0cjxXZWJHTEF0
dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBlbnRyeS52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFh
dHRhY2htZW50LT5pc0luaXRpYWxpemVkKCkpCi0gICAgICAgICAgIG1hc2sgfD0gR3JhcGhpY3ND
b250ZXh0M0Q6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUpOwor
ICAgICAgICAgICAgbWFzayB8PSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2xlYXJCaXRz
QnlBdHRhY2htZW50VHlwZShhdHRhY2htZW50VHlwZSk7CiAgICAgfQogICAgIGlmICghbWFzaykK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBXZSBvbmx5IGNsZWFyIHVuLWluaXRpYWxp
emVkIHJlbmRlcmJ1ZmZlcnMgd2hlbiB0aGV5IGFyZSByZWFkeSB0byBiZQogICAgIC8vIHJlYWQs
IGkuZS4sIHdoZW4gdGhlIGZyYW1lYnVmZmVyIGlzIGNvbXBsZXRlLgotICAgIGlmIChnM2QtPmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICBpZiAoZzNkLT5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUikgIT0g
R3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgICpyZWFz
b24gPSAiZnJhbWVidWZmZXIgbm90IGNvbXBsZXRlIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIGJvb2wgaW5pdENvbG9yID0gbWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9CVUZGRVJfQklUOwotICAgIGJvb2wgaW5pdERlcHRoID0gbWFzayAmIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgIGJvb2wgaW5pdFN0ZW5jaWwgPSBtYXNrICYg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAgICBib29sIGluaXRDb2xv
ciA9IG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBib29s
IGluaXREZXB0aCA9IG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVDsK
KyAgICBib29sIGluaXRTdGVuY2lsID0gbWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lM
X0JVRkZFUl9CSVQ7CiAKICAgICBHQzNEZmxvYXQgY29sb3JDbGVhclZhbHVlW10gPSB7MCwgMCwg
MCwgMH0sIGRlcHRoQ2xlYXJWYWx1ZSA9IDA7CiAgICAgR0MzRGludCBzdGVuY2lsQ2xlYXJWYWx1
ZSA9IDA7CkBAIC01MzAsMjcgKzUzMCwyNyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmluaXRp
YWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgogICAg
IEdDM0Rib29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSAwOwogICAgIEdDM0Rib29sZWFuIGlzRGl0
aGVyRW5hYmxlZCA9IDA7CiAgICAgaWYgKGluaXRDb2xvcikgewotICAgICAgICBnM2QtPmdldEZs
b2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUUsIGNvbG9yQ2xlYXJWYWx1
ZSk7Ci0gICAgICAgIGczZC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dS
SVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICAgICAgZzNkLT5nZXRGbG9hdHYoR3JhcGhpY3NDb250
ZXh0R0w6OkNPTE9SX0NMRUFSX1ZBTFVFLCBjb2xvckNsZWFyVmFsdWUpOworICAgICAgICBnM2Qt
PmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9XUklURU1BU0ssIGNvbG9yTWFz
ayk7CiAgICAgICAgIGczZC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKICAgICAgICAgZzNkLT5j
b2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgfQogICAgIGlmIChpbml0RGVw
dGgpIHsKLSAgICAgICAgZzNkLT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NM
RUFSX1ZBTFVFLCAmZGVwdGhDbGVhclZhbHVlKTsKLSAgICAgICAgZzNkLT5nZXRCb29sZWFudihH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAg
ZzNkLT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NMRUFSX1ZBTFVFLCAmZGVw
dGhDbGVhclZhbHVlKTsKKyAgICAgICAgZzNkLT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKICAgICAgICAgZzNkLT5jbGVhckRlcHRo
KDEuMGYpOwogICAgICAgICBnM2QtPmRlcHRoTWFzayh0cnVlKTsKICAgICB9CiAgICAgaWYgKGlu
aXRTdGVuY2lsKSB7Ci0gICAgICAgIGczZC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQ0xFQVJfVkFMVUUsICZzdGVuY2lsQ2xlYXJWYWx1ZSk7Ci0gICAgICAgIGczZC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLLCByZWludGVy
cHJldF9jYXN0PEdDM0RpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgZzNkLT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9DTEVBUl9WQUxVRSwgJnN0ZW5jaWxDbGVh
clZhbHVlKTsKKyAgICAgICAgZzNkLT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0MzRGludCo+KCZzdGVuY2lsTWFzaykp
OwogICAgICAgICBnM2QtPmNsZWFyU3RlbmNpbCgwKTsKICAgICAgICAgZzNkLT5zdGVuY2lsTWFz
aygweGZmZmZmZmZmKTsKICAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IGczZC0+aXNFbmFi
bGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGczZC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpc0RpdGhlckVuYWJsZWQgPSBn
M2QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKLSAgICBnM2QtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisgICAgaXNTY2lzc29yRW5hYmxlZCA9IGcz
ZC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpOworICAgIGczZC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVu
YWJsZWQgPSBnM2QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHRHTDo6RElUSEVSKTsKKyAgICBn
M2QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0R0w6OkRJVEhFUik7CiAKICAgICBnM2QtPmNsZWFy
KG1hc2spOwogCkBAIC01NjcsMTggKzU2NywxOCBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6Omlu
aXRpYWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRleHQzRCogZzNkLCBjb25zdCBjaGFyKgog
ICAgICAgICBnM2QtPnN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsKICAgICB9CiAgICAgaWYgKGlz
U2Npc3NvckVuYWJsZWQpCi0gICAgICAgIGczZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOworICAgICAgICBnM2QtPmVuYWJsZShHcmFwaGljc0NvbnRleHRHTDo6U0NJ
U1NPUl9URVNUKTsKICAgICBlbHNlCi0gICAgICAgIGczZC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dEdMOjpTQ0lTU09SX1RFU1QpOwogICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCi0gICAgICAgIGcz
ZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworICAgICAgICBnM2QtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHRHTDo6RElUSEVSKTsKICAgICBlbHNlCi0gICAgICAgIGczZC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKKyAgICAgICAgZzNkLT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dEdMOjpESVRIRVIpOwogCiAgICAgZm9yIChBdHRhY2htZW50TWFwOjppdGVy
YXRvciBpdCA9IG1fYXR0YWNobWVudHMuYmVnaW4oKTsgaXQgIT0gbV9hdHRhY2htZW50cy5lbmQo
KTsgKytpdCkgewogICAgICAgICBHQzNEZW51bSBhdHRhY2htZW50VHlwZSA9IGl0LT5rZXk7CiAg
ICAgICAgIGF1dG8gYXR0YWNobWVudCA9IGl0LT52YWx1ZTsKLSAgICAgICAgR0MzRGJpdGZpZWxk
IGJpdHMgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlBdHRhY2htZW50VHlwZShh
dHRhY2htZW50VHlwZSk7CisgICAgICAgIEdDM0RiaXRmaWVsZCBiaXRzID0gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoYXR0YWNobWVudFR5cGUp
OwogICAgICAgICBpZiAoYml0cyAmIG1hc2spCiAgICAgICAgICAgICBhdHRhY2htZW50LT5zZXRJ
bml0aWFsaXplZCgpOwogICAgIH0KQEAgLTU5NSw3ICs1OTUsNyBAQCB2b2lkIFdlYkdMRnJhbWVi
dWZmZXI6OmRyYXdCdWZmZXJzKGNvbnN0IFZlY3RvcjxHQzNEZW51bT4mIGJ1ZnMpCiAgICAgbV9k
cmF3QnVmZmVycyA9IGJ1ZnM7CiAgICAgbV9maWx0ZXJlZERyYXdCdWZmZXJzLnJlc2l6ZShtX2Ry
YXdCdWZmZXJzLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2ZpbHRlcmVkRHJh
d0J1ZmZlcnMpCi0gICAgICAgIGJ1ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAg
ICAgICBidWZmZXIgPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKICAgICBkcmF3QnVmZmVyc0lm
TmVjZXNzYXJ5KHRydWUpOwogfQogCkBAIC02MTEsMzMgKzYxMSwzMyBAQCB2b2lkIFdlYkdMRnJh
bWVidWZmZXI6OmRyYXdCdWZmZXJzSWZOZWNlc3NhcnkoYm9vbCBmb3JjZSkKICAgICBib29sIHJl
c2V0ID0gZm9yY2U7CiAgICAgLy8gVGhpcyBmaWx0ZXJpbmcgd29ya3MgYXJvdW5kIGdyYXBoaWNz
IGRyaXZlciBidWdzIG9uIE1hYyBPUyBYLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9k
cmF3QnVmZmVycy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9kcmF3QnVmZmVyc1tpXSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSAmJiBnZXRBdHRhY2htZW50KG1fZHJhd0J1ZmZlcnNb
aV0pKSB7CisgICAgICAgIGlmIChtX2RyYXdCdWZmZXJzW2ldICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpOT05FICYmIGdldEF0dGFjaG1lbnQobV9kcmF3QnVmZmVyc1tpXSkpIHsKICAgICAgICAgICAg
IGlmIChtX2ZpbHRlcmVkRHJhd0J1ZmZlcnNbaV0gIT0gbV9kcmF3QnVmZmVyc1tpXSkgewogICAg
ICAgICAgICAgICAgIG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSA9IG1fZHJhd0J1ZmZlcnNbaV07
CiAgICAgICAgICAgICAgICAgcmVzZXQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSkgewotICAgICAgICAgICAgICAgIG1fZmlsdGVyZWREcmF3QnVm
ZmVyc1tpXSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgICAgICAgICAgaWYgKG1fZmls
dGVyZWREcmF3QnVmZmVyc1tpXSAhPSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSkgeworICAgICAg
ICAgICAgICAgIG1fZmlsdGVyZWREcmF3QnVmZmVyc1tpXSA9IEdyYXBoaWNzQ29udGV4dEdMOjpO
T05FOwogICAgICAgICAgICAgICAgIHJlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KICAgICBpZiAocmVzZXQpIHsKLSAgICAgICAgY29udGV4dCgpLT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCkuZHJhd0J1ZmZlcnNFWFQoCisgICAgICAgIGNv
bnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmRyYXdCdWZmZXJz
RVhUKAogICAgICAgICAgICAgbV9maWx0ZXJlZERyYXdCdWZmZXJzLnNpemUoKSwgbV9maWx0ZXJl
ZERyYXdCdWZmZXJzLmRhdGEoKSk7CiAgICAgfQogfQogCiBHQzNEZW51bSBXZWJHTEZyYW1lYnVm
ZmVyOjpnZXREcmF3QnVmZmVyKEdDM0RlbnVtIGRyYXdCdWZmZXIpCiB7Ci0gICAgaW50IGluZGV4
ID0gc3RhdGljX2Nhc3Q8aW50PihkcmF3QnVmZmVyIC0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZF
UjBfRVhUKTsKKyAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGRyYXdCdWZmZXIgLSBF
eHRlbnNpb25zR0w6OkRSQVdfQlVGRkVSMF9FWFQpOwogICAgIEFTU0VSVChpbmRleCA+PSAwKTsK
ICAgICBpZiAoaW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZHJhd0J1ZmZlcnMuc2l6ZSgpKSkK
ICAgICAgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNbaW5kZXhdOwotICAgIGlmIChkcmF3QnVmZmVy
ID09IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCkKLSAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkU7CisgICAgaWYgKGRyYXdCdWZmZXIgPT0gRXh0ZW5zaW9uc0dMOjpEUkFXX0JV
RkZFUjBfRVhUKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFD
SE1FTlQwOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCmluZGV4IGVlMGE5
NDMxYjcwNzE2ZDliYzcwZmFkMGIxOWIwYzVlMzhkMTY0YmEuLjhiNGI5NWFiYzk1MzFkYjc5ZTMy
NWQzNWVjYjZkYzZlYzA3NWM4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmgKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGlzSW5p
dGlhbGl6ZWQoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbml0aWFsaXpl
ZCgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0
M0QqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0M0Qq
LCBHQzNEZW51bSBhdHRhY2htZW50KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFj
aChHcmFwaGljc0NvbnRleHQzRCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBHQzNE
ZW51bSBhdHRhY2htZW50KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1bmF0dGFjaChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCosIEdDM0RlbnVtIGF0dGFjaG1lbnQpID0gMDsKIAogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgV2ViR0xBdHRhY2htZW50KCk7CkBAIC04Miw3ICs4Miw3IEBAIHB1
YmxpYzoKICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxl
dGU7IG90aGVyd2lzZSBpbml0aWFsaXplCiAgICAgLy8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZl
bid0IGJlZW4gaW5pdGlhbGl6ZWQgYW5kCiAgICAgLy8gbmVlZFRvSW5pdGlhbGl6ZUF0dGFjaG1l
bnRzIGlzIHRydWUuCi0gICAgYm9vbCBvbkFjY2VzcyhHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0
IGNoYXIqKiByZWFzb24pOworICAgIGJvb2wgb25BY2Nlc3MoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqLCBjb25zdCBjaGFyKiogcmVhc29uKTsKIAogICAgIC8vIFNvZnR3YXJlIHZlcnNpb24gb2Yg
Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKCksIGV4Y2VwdCB0aGF0IHdoZW4KICAgICAvLyBGUkFN
RUJVRkZFUl9DT01QTEVURSBpcyByZXR1cm5lZCwgaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yCkBA
IC0xMDQsMTMgKzEwNCwxMyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgV2ViR0xGcmFtZWJ1
ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVj
dEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTEF0dGFjaG1lbnQqIGdl
dEF0dGFjaG1lbnQoR0MzRGVudW0pIGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGZy
YW1lYnVmZmVyIGlzIGluY29tcGxldGUuCi0gICAgYm9vbCBpbml0aWFsaXplQXR0YWNobWVudHMo
R3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBjaGFyKiogcmVhc29uKTsKKyAgICBib29sIGluaXRp
YWxpemVBdHRhY2htZW50cyhHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIGNvbnN0IGNoYXIqKiBy
ZWFzb24pOwogCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGN1cnJlbnRseSBi
b3VuZC4KICAgICBib29sIGlzQm91bmQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMT2JqZWN0LmNwcAppbmRleCA0OGY5MzllMGRhOGY0ZTMyYzgyMmQyOTEyMTI0ZmZj
YmU0ZTVhYTk5Li5hZjI4NDljZDg5ODNhZGE3N2JiOWNkMzQ1YjIzOGRlYTE2MWI2YmVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3BwCkBAIC00NCw3ICs0NCw3
IEBAIHZvaWQgV2ViR0xPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
ICAgICBtX29iamVjdCA9IG9iamVjdDsKIH0KIAotdm9pZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2Jq
ZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCit2b2lkIFdlYkdMT2JqZWN0OjpkZWxl
dGVPYmplY3QoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCkKIHsKICAgICBtX2Rl
bGV0ZWQgPSB0cnVlOwogICAgIGlmICghbV9vYmplY3QpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQg
V2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQog
CiAgICAgaWYgKCFtX2F0dGFjaG1lbnRDb3VudCkgewogICAgICAgICBpZiAoIWNvbnRleHQzZCkK
LSAgICAgICAgICAgIGNvbnRleHQzZCA9IGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworICAgICAg
ICAgICAgY29udGV4dDNkID0gZ2V0QUdyYXBoaWNzQ29udGV4dEdMKCk7CiAKICAgICAgICAgaWYg
KGNvbnRleHQzZCkKICAgICAgICAgICAgIGRlbGV0ZU9iamVjdEltcGwoY29udGV4dDNkLCBtX29i
amVjdCk7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgV2ViR0xPYmplY3Q6OmRldGFjaCgpCiAgICAg
bV9hdHRhY2htZW50Q291bnQgPSAwOyAvLyBNYWtlIHN1cmUgT3BlbkdMIHJlc291cmNlIGlzIGRl
bGV0ZWQuCiB9CiAKLXZvaWQgV2ViR0xPYmplY3Q6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzZCkKK3ZvaWQgV2ViR0xPYmplY3Q6Om9uRGV0YWNoZWQoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCkKIHsKICAgICBpZiAobV9hdHRhY2htZW50Q291bnQpCiAg
ICAgICAgIC0tbV9hdHRhY2htZW50Q291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xPYmplY3QuaAppbmRleCAwZGE1ZDcxOGQ2Y2I1YzI1YjQxZmEyNjQ0ODBlNGY4M2FkNDE3NjIz
Li40OTI0ZmY4YTE4ZjVkMmNjMjEyM2MwZTlhZjg0MThjM2RiYTIzOGRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOwogY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CiBjbGFzcyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOwogCkBAIC00NSwxMCArNDUsMTAgQEAgcHVibGljOgogICAgIC8v
IGRlbGV0ZU9iamVjdCBtYXkgbm90IGFsd2F5cyBkZWxldGUgdGhlIE9wZW5HTCByZXNvdXJjZS4g
IEZvciBwcm9ncmFtcyBhbmQKICAgICAvLyBzaGFkZXJzLCBkZWxldGlvbiBpcyBkZWxheWVkIHVu
dGlsIHRoZXkgYXJlIG5vIGxvbmdlciBhdHRhY2hlZC4KICAgICAvLyBGSVhNRTogcmV2aXNpdCB0
aGlzIHdoZW4gcmVzb3VyY2Ugc2hhcmluZyBiZXR3ZWVuIGNvbnRleHRzIGFyZSBpbXBsZW1lbnRl
ZC4KLSAgICB2b2lkIGRlbGV0ZU9iamVjdChHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZvaWQg
ZGVsZXRlT2JqZWN0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKik7CiAKICAgICB2b2lkIG9uQXR0
YWNoZWQoKSB7ICsrbV9hdHRhY2htZW50Q291bnQ7IH0KLSAgICB2b2lkIG9uRGV0YWNoZWQoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKKyAgICB2b2lkIG9uRGV0YWNoZWQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqKTsKIAogICAgIC8vIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNsaWVudCBzaWRl
IGlzc3VlIGEgZGVsZXRlIGNhbGwgYWxyZWFkeSwgbm90CiAgICAgLy8gd2hldGhlciB0aGUgT3Bl
bkdMIHJlc291cmNlIGlzIGRlbGV0ZWQuCkBAIC02NSwxMyArNjUsMTMgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgLy8gZGVsZXRlT2Jq
ZWN0SW1wbCBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSB0byBkZWxldGUgdGhlIE9wZW5HTCBy
ZXNvdXJjZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRl
eHQzRCosIFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
IAogICAgIHZpcnR1YWwgYm9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNvbnN0ID0gMDsKIAogICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKIAotICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0Qq
IGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiBnZXRBR3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCA9IDA7CiAKIHBy
aXZhdGU6CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX29iamVjdCB7IDAgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCmluZGV4IGRlZWFjNzUwZjRmZGEyNDNl
NmEzNzE2NmVmNDNhOTFhOWI0M2ZkNTguLjNlZmVmZmJhMTAzYTdhOWZmMGUyMWEzZTE2ZjZhZGNj
ZDQ3NzM4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNw
cApAQCAtNzAsNyArNzAsNyBAQCBXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJiBjdHgpCiAgICAgICAgIGluc3RhbmNlcyhsb2NrKS5hZGQodGhpcywg
JmN0eCk7CiAgICAgfQogCi0gICAgc2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRleHQzRCgpLT5j
cmVhdGVQcm9ncmFtKCkpOworICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0R0woKS0+
Y3JlYXRlUHJvZ3JhbSgpKTsKIH0KIAogV2ViR0xQcm9ncmFtOjp+V2ViR0xQcm9ncmFtKCkKQEAg
LTkzLDcgKzkzLDcgQEAgdm9pZCBXZWJHTFByb2dyYW06OmNvbnRleHREZXN0cm95ZWQoKQogICAg
IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyOjpjb250ZXh0RGVzdHJveWVkKCk7CiB9CiAKLXZv
aWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqKQordm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9i
amVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9i
amVjdCBvYmopCiB7CiAgICAgY29udGV4dDNkLT5kZWxldGVQcm9ncmFtKG9iaik7CiAgICAgaWYg
KG1fdmVydGV4U2hhZGVyKSB7CkBAIC0xNTEsOSArMTUxLDkgQEAgdm9pZCBXZWJHTFByb2dyYW06
OmluY3JlYXNlTGlua0NvdW50KCkKIFdlYkdMU2hhZGVyKiBXZWJHTFByb2dyYW06OmdldEF0dGFj
aGVkU2hhZGVyKEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpWRVJURVhfU0hBREVSOgogICAgICAgICByZXR1cm4gbV92ZXJ0ZXhTaGFkZXIuZ2V0
KCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgcmV0dXJuIG1f
ZnJhZ21lbnRTaGFkZXIuZ2V0KCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xNjUsMTIgKzE2NSwxMiBAQCBib29sIFdlYkdMUHJvZ3JhbTo6YXR0YWNoU2hhZGVyKFdlYkdM
U2hhZGVyKiBzaGFkZXIpCiAgICAgaWYgKCFzaGFkZXIgfHwgIXNoYWRlci0+b2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBzd2l0Y2ggKHNoYWRlci0+Z2V0VHlwZSgpKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpWRVJURVhfU0hBREVSOgogICAgICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fdmVydGV4U2hhZGVyID0gc2hh
ZGVyOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFHTUVOVF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hB
REVSOgogICAgICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgbV9mcmFnbWVudFNoYWRlciA9IHNoYWRlcjsKQEAgLTE4NSwxMiArMTg1
LDEyIEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRl
cikKICAgICBpZiAoIXNoYWRlciB8fCAhc2hhZGVyLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHN3aXRjaCAoc2hhZGVyLT5nZXRUeXBlKCkpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlZFUlRFWF9TSEFERVI6CiAgICAgICAgIGlmIChtX3ZlcnRleFNoYWRlciAhPSBzaGFkZXIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fdmVydGV4U2hhZGVyID0gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
R01FTlRfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURF
UjoKICAgICAgICAgaWYgKG1fZnJhZ21lbnRTaGFkZXIgIT0gc2hhZGVyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBtX2ZyYWdtZW50U2hhZGVyID0gbnVsbHB0cjsKQEAgLTIw
MCwxNSArMjAwLDE1IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIoV2ViR0xTaGFk
ZXIqIHNoYWRlcikKICAgICB9CiB9CiAKLXZvaWQgV2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0
dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQordm9pZCBXZWJHTFBy
b2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
KiBjb250ZXh0M2QpCiB7CiAgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnMuY2xlYXIoKTsKIAog
ICAgIEdDM0RpbnQgbnVtQXR0cmlicyA9IDA7Ci0gICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYo
b2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJp
YnMpOworICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBHcmFwaGljc0NvbnRl
eHRHTDo6QUNUSVZFX0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsKICAgICBtX2FjdGl2ZUF0dHJp
YkxvY2F0aW9ucy5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1BdHRyaWJzKSk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdHRyaWJzOyArK2kpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkFjdGl2ZUluZm8gaW5mbzsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OkFj
dGl2ZUluZm8gaW5mbzsKICAgICAgICAgY29udGV4dDNkLT5nZXRBY3RpdmVBdHRyaWJJbXBsKG9i
amVjdCgpLCBpLCBpbmZvKTsKICAgICAgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbaV0gPSBj
b250ZXh0M2QtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdCgpLCBpbmZvLm5hbWUpOwogICAgIH0K
QEAgLTIyMiwxMSArMjIyLDExIEBAIHZvaWQgV2ViR0xQcm9ncmFtOjpjYWNoZUluZm9JZk5lZWRl
ZCgpCiAgICAgaWYgKCFvYmplY3QoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogY29udGV4dCA9IGdldEFHcmFwaGljc0NvbnRleHRHTCgpOwogICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIEdDM0RpbnQgbGlua1N0YXR1cyA9
IDA7Ci0gICAgY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBHcmFwaGljc0NvbnRleHQz
RDo6TElOS19TVEFUVVMsICZsaW5rU3RhdHVzKTsKKyAgICBjb250ZXh0LT5nZXRQcm9ncmFtaXYo
b2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOwog
ICAgIG1fbGlua1N0YXR1cyA9IGxpbmtTdGF0dXM7CiAgICAgaWYgKG1fbGlua1N0YXR1cykKICAg
ICAgICAgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoY29udGV4dCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCmluZGV4IDNlMDgyZmMyZGRiYzExOWViMjM1ZGI2
NWJlNTk1OTBjMzNhNDM1MDQuLjg5YjQ2MGMwNjcwZjJlZWI1OGE0NDgzNDc1ZmJhMTA2OTQ1Njhj
N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCkBAIC03Mywx
MCArNzMsMTAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhp
Y3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0
ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBv
dmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25z
KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdm9pZCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9u
cyhHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOwogICAgIHZvaWQgY2FjaGVJbmZvSWZOZWVkZWQo
KTsKIAogICAgIFZlY3RvcjxHQzNEaW50PiBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5jcHAKaW5kZXggOGNhNTI1MTE1NzM1MDE1
NDVhYzU1ZjVlOTQxZWFhNWE4MDQzYmVhZi4uY2I2NDQ1MjIyNzM0NjUwNTcyY2JiNTYwMzMzN2I5
ZjJmNDVkOTY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xR
dWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5jcHAK
QEAgLTQ2LDE0ICs0NiwxNCBAQCBXZWJHTFF1ZXJ5Ojp+V2ViR0xRdWVyeSgpCiBXZWJHTFF1ZXJ5
OjpXZWJHTFF1ZXJ5KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdM
U2hhcmVkT2JqZWN0KGN0eCkKIHsKLSAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVRdWVyeSBmcm9t
IEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVF1ZXJ5IGZyb20g
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKLXZvaWQgV2ViR0xRdWVyeTo6ZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKK3ZvaWQgV2ViR0xRdWVyeTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBVTlVT
RURfUEFSQU0oY29udGV4dDNkKTsKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICAvLyBG
SVhNRTogQ2FsbCBkZWxldGVRdWVyeSBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJ
WE1FOiBDYWxsIGRlbGV0ZVF1ZXJ5IGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUXVlcnkuaAppbmRleCBmZDY0NGQyNGMx
MjgxYzljMTk4ZTJmNWFmOTE1MmVjODQ2MTViMzY1Li4wODdjMDQxMWY5NjM5YjMyMTJhODg1NjY1
MmFiYTFhYjEyYzUxM2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFF1ZXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xRdWVyeS5o
CkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFdl
YkdMUXVlcnkoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwotICAgIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCmluZGV4
IDY5OTZkOWIxZGE5MzBmM2EyYmFiYTIzMGU0OTJjMGQ3ODRhN2NkMTkuLjA2ZWUwN2I1NzNmZjU3
NmNmY2FjNDQ3MzhhM2Y2Y2M1YzI0Mzg4NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKQEAgLTQ2LDE3ICs0NiwxNyBAQCBXZWJHTFJl
bmRlcmJ1ZmZlcjo6fldlYkdMUmVuZGVyYnVmZmVyKCkKIAogV2ViR0xSZW5kZXJidWZmZXI6Oldl
YkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdl
YkdMU2hhcmVkT2JqZWN0KGN0eCkKLSAgICAsIG1faW50ZXJuYWxGb3JtYXQoR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE0KQorICAgICwgbV9pbnRlcm5hbEZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6
UkdCQTQpCiAgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQogICAgICwgbV93aWR0aCgwKQogICAg
ICwgbV9oZWlnaHQoMCkKICAgICAsIG1faXNWYWxpZCh0cnVlKQogICAgICwgbV9oYXNFdmVyQmVl
bkJvdW5kKGZhbHNlKQogewotICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0M0QoKS0+
Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOworICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3NDb250ZXh0
R0woKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyYnVmZmVy
OjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3Jt
M0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFJlbmRlcmJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1w
bChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKIHsKICAgICBjb250ZXh0M2QtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKaW5kZXgg
MzdhOTM4ZTMzYTYyZDE0NzE1MWNkYThiZDZjMzc0YzQ3MGYxZmUxMC4uYzI4MDI3ZTZmZTM3ODc2
YzBjZjlkNDE3YmQ2NGMyZWRjYzk5Mzk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7
CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIAogcHJpdmF0ZToK
ICAgICBib29sIGlzUmVuZGVyYnVmZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAKaW5kZXggM2E1MGZmYzBlMGU0ODczM2JmZDRiZTBmNGQyNjdmYWI4ZTZmYTlkOS4u
Mjg0M2Q0NjE2YWYxZTI1NDFiYjFlZjE3MzY3OTEzNDFmMjdmMzZkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0z
NSw3ICszNSw3IEBACiAjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgogI2luY2x1ZGUg
IkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgogI2luY2x1ZGUgIkVYVHNSR0IuaCIKLSNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKICNpbmNs
dWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgR3JhcGhpY3NDb250
ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJp
bmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52
YXMsIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQogewogICAgIGF1dG8g
cmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+
KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7CiAKQEAgLTgx
LDcgKzgxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYKICAgICByZXR1cm4gcmVuZGVyaW5n
Q29udGV4dDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhp
Y3NDb250ZXh0M0Q+JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTD4mJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKIHsKICAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgV1RG
TW92ZShjb250ZXh0KSwgYXR0cmlidXRlcykpOwogCkBAIC05MCwxMiArOTAsMTIgQEAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoQ2FudmFzQmFzZSYKICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KIAotV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2Fu
dmFzLCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcykKK1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcywgR3Jh
cGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKGNhbnZhcywgYXR0cmlidXRlcykKIHsKIH0KIAotV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3Jh
cGhpY3NDb250ZXh0M0Q+JiYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCitXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChD
YW52YXNCYXNlJiBjYW52YXMsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiBjb250ZXh0
LCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UoY2FudmFzLCBXVEZNb3ZlKGNvbnRleHQpLCBhdHRyaWJ1dGVzKQog
ewogICAgIGluaXRpYWxpemVWZXJ0ZXhBcnJheU9iamVjdHMoKTsKQEAgLTI1MSw1OCArMjUxLDU4
IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IAogICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIi
LCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KICAgICAKICAgICBhdXRvIG9iamVjdCA9IG1ha2VSZWZQdHIobV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1lbnRPYmplY3QoYXR0YWNobWVudCkpOwogICAgIGlm
ICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgICAgICBpZiAo
cG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X1RZUEUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNz
Q29udGV4dEdMOjpOT05FKTsKICAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5W
QUxJRF9FTlVNIGluIHRoaXMgY2FzZSwgd2hpbGUgZGVza3RvcCBHTAogICAgICAgICAvLyBzcGVj
aWZpZXMgSU5WQUxJRF9PUEVSQVRJT04uCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAogICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7
CiAgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVD
VF9OQU1FOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CiAgICAgICAgICAg
ICByZXR1cm4gbWFrZVJlZlB0cihyZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSY+KCpvYmpl
Y3QpKTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9URVhUVVJFX0xFVkVMOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9MRVZFTDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewogICAg
ICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUs
ICZ2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVyZSBhdHRhY2htZW50Iik7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUg
Zm9yIHRleHR1cmUgYXR0YWNobWVudCIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQob2JqZWN0LT5pc1JlbmRlcmJ1
ZmZlcigpKTsKICAgICAgICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSKTsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUik7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUU6CiAgICAgICAgICAgICByZXR1cm4gbWFrZVJlZlB0cihyZWludGVycHJldF9jYXN0PFdl
YkdMUmVuZGVyYnVmZmVyJj4oKm9iamVjdCkpOwotICAgICAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQ6IHsKKyAgICAgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhU
OiB7CiAgICAgICAgICAgICBpZiAoIW1fZXh0c1JHQikgewotICAgICAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVu
ZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBh
dHRhY2htZW50Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IHJlbmRlckJ1ZmZlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QuZ2V0KCkpOwogICAg
ICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVmZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAh
PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYmIHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNp
b25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3Jt
YXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUKQotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCk7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpOworICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNp
b25zR0w6OlNSR0JfRVhUICYmIHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zR0w6OlNS
R0JfQUxQSEFfRVhUKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0
ZW5zaW9uc0dMOjpTUkdCOF9BTFBIQThfRVhUKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVCk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVIpOwog
ICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBh
dHRhY2htZW50Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMCwyNCAr
MzEwLDI0IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdlCiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpCiB7Ci0gICAg
aWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29u
dGV4dEdMOjpGUkFNRUJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0
aGlzIHJldHVybiB0cnVlIHVuY29uZGl0aW9uYWxseSBmb3IgQ09MT1JfQVRUQUNITUVOVDAsCiAg
ICAgLy8gYnV0IGZhbHNlIGZvciBvdGhlciBDT0xPUl9BVFRBQ0hNRU5UIHZhbHVlcyBpZiBtX3dl
YmdsRHJhd0J1ZmZlcnMgaXMgZmFsc2U/CiAgICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9S
X0FUVEFDSE1FTlQwOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1F
TlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVm
ZmVycwotICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+PSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxH
QzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29s
b3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgPj0gR3JhcGhpY3ND
b250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwCisgICAgICAgICAgICAmJiBhdHRhY2htZW50IDwg
c3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9BVFRBQ0hNRU5U
MCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgYXR0YWNobWVudCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpA
QCAtMzM2LDI1ICszMzYsMjUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm4KIHsKICAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJT
dG9yYWdlIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFs
aWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVyYnVmZmVyU3Rv
cmFnZSIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVO
VDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgotICAgICAgICBpZiAoaW50ZXJuYWxmb3Jt
YXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNSR0IpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I1
X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTVEVOQ0lMX0lOREVYODoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JH
QjhfQUxQSEE4X0VYVDoKKyAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ID09IEV4dGVuc2lvbnNH
TDo6U1JHQjhfQUxQSEE4X0VYVCAmJiAhbV9leHRzUkdCKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVy
U3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdl
dCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwpAQCAtMzYyLDE1ICszNjIsMTUgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm4KICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5z
ZXRJc1ZhbGlkKHRydWUpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUo
d2lkdGgsIGhlaWdodCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RF
TkNJTDoKICAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpCi0gICAgICAgICAg
ICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRlbnNpb25zM0Q6OkRF
UFRIMjRfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgbV9jb250ZXh0LT5y
ZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgRXh0ZW5zaW9uc0dMOjpERVBUSDI0X1NURU5DSUw4
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXpl
KHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFs
aWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFs
Zm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3Jt
YXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CkBA
IC0zODIsMTYgKzM4MiwxNiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBib29sIGlz
VmFsaWQgPSBmYWxzZTsKICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgogICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFU
SVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcwogICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQog
ICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBp
ZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImhpbnQiLCAi
aW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQt
PmhpbnQodGFyZ2V0LCBtb2RlKTsKQEAgLTQwMSwxMyArNDAxLDEzIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKIHsKICAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1hc2sgJiB+KEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOworICAgIGlmIChtYXNrICYgfihHcmFwaGlj
c0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9C
VUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
ICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
b25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CiAgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MobV9j
b250ZXh0LmdldCgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJl
YXNvbik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQpAQCAtNDIxLDI0
MyArNDIxLDI0MyBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRl
cihHQzNEZW51bSBwbmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2gg
KHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1RFWFRVUkU6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1RFWFRVUkU6CiAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxv
YXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMSUFT
RURfUE9JTlRfU0laRV9SQU5HRToKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQV9CSVRTOgogICAgICAgICBpZiAoIW1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0ZXMuYWxwaGEpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6CiAgICAgICAgIHJldHVybiBtX2Jv
dW5kQXJyYXlCdWZmZXI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkQ6CiAgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xP
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORF9DT0xPUjoKICAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkJMRU5EX0RTVF9BTFBIQToKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfUkdCOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0RTVF9SR0I6CiAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxF
TkRfRVFVQVRJT05fQUxQSEE6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdC
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX0VRVUFUSU9OX1JHQjoKICAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCTEVORF9TUkNfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6QkxFTkRfU1JDX0FMUEhBOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19SR0I6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfU1JDX1JHQjoKICAgICAgICAgcmV0dXJu
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTFVFX0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkxVRV9CSVRTOgog
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpDT0xPUl9DTEVBUl9WQUxVRToKICAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVN
QVNLOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX1dSSVRFTUFTSzoKICAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CiAgICAgICAgIHJldHVy
biBVaW50MzJBcnJheTo6dHJ5Q3JlYXRlKG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmRhdGEo
KSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q1VMTF9G
QUNFOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFX01PREU6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6Q1VMTF9GQUNFX01PREU6CiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9H
UkFNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNVUlJFTlRfUFJPR1JBTToKICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFByb2dyYW07Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9CSVRTOgogICAg
ICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0ZXMuZGVwdGgpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ0xFQVJfVkFMVUU6CiAgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfRlVOQzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9GVU5DOgogICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX1JBTkdFOgogICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1RFU1Q6CiAgICAgICAgIHJldHVybiBnZXRCb29s
ZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9X
UklURU1BU0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfV1JJVEVNQVNLOgog
ICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RElUSEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRJVEhF
UjoKICAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzoKICAgICAg
ICAgcmV0dXJuIG1ha2VSZWZQdHIobV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
QklORElORzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUl9CSU5ESU5H
OgogICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJPTlRfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGUk9O
VF9GQUNFOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6R1JFRU5fQklU
UzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CiAg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CiAgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVfV0lEVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElORV9XSURUSDoKICAg
ICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKICAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9GUkFHTUVO
VF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfUkVOREVSQlVGRkVSX1NJWkU6CiAgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX1NJWkU6CiAgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZB
UllJTkdfVkVDVE9SUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfQVRUUklCUzoKICAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BWF9WSUVXUE9SVF9ESU1TOgogICAgICAgICByZXR1cm4gZ2V0V2Vi
R0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpO
VU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQQUNLX0FMSUdOTUVOVDoKICAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9M
WUdPTl9PRkZTRVRfRkFDVE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBPTFlHT05f
T0ZGU0VUX0ZBQ1RPUjoKICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlBPTFlHT05fT0ZGU0VUX0ZJTEw6CiAgICAgICAgIHJldHVy
biBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQT0xZR09OX09GRlNFVF9VTklUUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQT0xZ
R09OX09GRlNFVF9VTklUUzoKICAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfQklUUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSRURfQklUUzoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CiAgICAg
ICAgIHJldHVybiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSRVI6CiAg
ICAgICAgIHJldHVybiAiV2ViS2l0IFdlYkdMIl9zdHI7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFX0JVRkZFUlM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExF
X0JVRkZFUlM6CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0NPVkVSQUdFX0lOVkVSVDoKICAgICAgICAgcmV0dXJu
IGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9DT1ZFUkFHRV9WQUxVRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1Q
TEVfQ09WRVJBR0VfVkFMVUU6CiAgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTQU1QTEVTOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX0JPWDoKICAgICAgICAgcmV0dXJuIGdldFdlYkdM
SW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1Q6CiAg
ICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Ci0gICAgICAgIHJldHVybiAi
V2ViR0wgR0xTTCBFUyAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRl
eHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OKSArICIpIjsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046CisgICAgICAgIHJldHVybiAiV2ViR0wgR0xTTCBF
UyAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHRHTDo6U0hBRElO
R19MQU5HVUFHRV9WRVJTSU9OKSArICIpIjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0JBQ0tfRkFJTDoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKICAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CiAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOgogICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQkFDS19SRUY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9C
QUNLX1JFRjoKICAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CiAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQklU
UzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JJVFM6CiAgICAgICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKICAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9GQUlMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfRkFJTDoKICAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0ZVTkM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9GVU5DOgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9G
QUlMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlM
OgogICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9QQVNTOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfUEFTU19ERVBUSF9QQVNTOgogICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfUkVGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxf
UkVGOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1RFTkNJTF9URVNUOgogICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVkFMVUVfTUFTSzoKICAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX1dSSVRFTUFTSzoKICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVUJQSVhFTF9CSVRTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNVQlBJWEVMX0JJVFM6CiAgICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQklORElOR18yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0JJTkRJ
TkdfMkQ6CiAgICAgICAgIHJldHVybiBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0
XS50ZXh0dXJlMkRCaW5kaW5nOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
QklORElOR19DVUJFX01BUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0JJ
TkRJTkdfQ1VCRV9NQVA6CiAgICAgICAgIHJldHVybiBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRl
eHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBB
Q0tfQUxJR05NRU5UOgogICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19GTElQX1lfV0VCR0w6CiAgICAgICAgIHJldHVybiBt
X3VucGFja0ZsaXBZOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxU
SVBMWV9BTFBIQV9XRUJHTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfUFJF
TVVMVElQTFlfQUxQSEFfV0VCR0w6CiAgICAgICAgIHJldHVybiBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09O
VkVSU0lPTl9XRUJHTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQ09MT1JT
UEFDRV9DT05WRVJTSU9OX1dFQkdMOgogICAgICAgICByZXR1cm4gbV91bnBhY2tDb2xvcnNwYWNl
Q29udmVyc2lvbjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1I6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VkVORE9SOgogICAgICAgICByZXR1cm4gIldlYktpdCJfc3Ry
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlNJT046CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VkVSU0lPTjoKICAgICAgICAgcmV0dXJuICJXZWJHTCAxLjAiX3N0cjsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWSUVXUE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpWSUVXUE9SVDoKICAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZB
VElWRV9ISU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCisgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMKICAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykK
LSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6
OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVu
YWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRl
bnNpb25zR0w6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMgbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgY2FzZSBXZWJH
TERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKICAgICAgICAgaWYg
KG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykgewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgICAgICAgICByZXR1cm4gIkFwcGxlIEdQVSJfc3RyOwogI2Vsc2UKLSAgICAgICAgICAgIHJl
dHVybiBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVIpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJFUik7CiAjZW5kaWYKICAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1
Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgog
ICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJu
IG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1IpOwotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVy
X2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQtPmdldFN0
cmluZyhHcmFwaGljc0NvbnRleHRHTDo6VkVORE9SKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVk
Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpWRVJU
RVhfQVJSQVlfQklORElOR19PRVM6IC8vIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKICAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKICAgICAg
ICAgICAgIGlmIChtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmV0dXJuIG1ha2VS
ZWZQdHIoc3RhdGljX2Nhc3Q8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyY+KCptX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QpKTsKICAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVkIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3Qgbm90IGVuYWJsZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3Rl
eHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgY2FzZSBFeHRlbnNpb25zR0w6Ok1BWF9URVhU
VVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
CiAgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAgICAgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJF
X01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uc0dMOjpN
QVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5h
YmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAvLyBFWFRfZHJh
d19idWZmZXJzIEJFR0lOCiAgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCiAgICAgICAg
ICAgICByZXR1cm4gZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpOwotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdf
YnVmZmVycyBub3QgZW5hYmxlZCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgogICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQogICAgICAgICAgICAgcmV0dXJuIGdldE1heERyYXdCdWZmZXJzKCk7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFi
bGVkIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xf
ZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYm
IHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYg
cG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUg
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVu
c2lvbnNHTDo6RFJBV19CVUZGRVIwX0VYVAorICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNf
Y2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uc0dMOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJh
d0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRl
eHRHTDo6Tk9ORTsKICAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBu
YW1lKTsKICAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgogICAgICAgICAg
ICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKICAgICAgICAgICAgIHJldHVybiB2YWx1
ZTsKICAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
RU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIH0KQEAgLTY2Nyw5ICs2NjcsOSBAQCBHQzNEaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQogICAgIGlmICghc3VwcG9y
dHNEcmF3QnVmZmVycygpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fbWF4RHJhd0J1
ZmZlcnMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhf
RFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZlcnMpOworICAgICAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERy
YXdCdWZmZXJzKTsKICAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19F
WFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgICAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JB
dHRhY2htZW50cyk7CiAgICAgLy8gV0VCR0xfZHJhd19idWZmZXJzIHJlcXVpcmVzIE1BWF9DT0xP
Ul9BVFRBQ0hNRU5UUyA+PSBNQVhfRFJBV19CVUZGRVJTLgogICAgIHJldHVybiBzdGQ6Om1pbiht
X21heERyYXdCdWZmZXJzLCBtX21heENvbG9yQXR0YWNobWVudHMpOwogfQpAQCAtNjc5LDcgKzY3
OSw3IEBAIEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkKICAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zR0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMp
OwogICAgIHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7CiB9CiAgICAgCkBAIC03MDcsMjAg
KzcwNywyMCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5
Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbgogICAgIGlmICghbWF4SW5kZXgpIHsK
ICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZl
ciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6IHsKICAgICAgICAgICAgIGNv
bnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+
ZGF0YSgpKTsKICAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxl
bWVudHM7IGkrKykKICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heEluZGV4ID8gc3RkOjpt
YXgobWF4SW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBbaV0pKSA6IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihwW2ldKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOiB7CiAgICAgICAgICAgICBu
dW1FbGVtZW50cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CiAgICAgICAgICAgICBjb25zdCBHQzNE
dXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgp
KTsKICAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7
IGkrKykKICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heEluZGV4ID8gc3RkOjptYXgobWF4
SW5kZXgudmFsdWUoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBbaV0pKSA6IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwW2ldKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDogeworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6IHsKICAgICAgICAgICAgIGlmICghbV9vZXNF
bGVtZW50SW5kZXhVaW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7CkBAIC03NTEsMTkgKzc1MSwxOSBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0
aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbgogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1v
ZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlVOQ19BREQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19TVUJUUkFDVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQ6
Ci0gICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQgfHwgbW9kZSA9PSBF
eHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4KSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpG
VU5DX0FERDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGVU5DX1NVQlRSQUNUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6TUlOX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6TUFYX0VYVDoK
KyAgICAgICAgaWYgKChtb2RlID09IEV4dGVuc2lvbnNHTDo6TUlOX0VYVCB8fCBtb2RlID09IEV4
dGVuc2lvbnNHTDo6TUFYX0VYVCkgJiYgIW1fZXh0QmxlbmRNaW5NYXgpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBtb2RlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CkBAIC03NzEsMTgg
Kzc3MSwxOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0
aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRAogYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIGNhcCkKIHsKICAgICBzd2l0Y2ggKGNhcCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRJVEhFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNF
VF9GSUxMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZF
UkFHRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCTEVO
RDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
SVRIRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UE9MWUdPTl9PRkZTRVRfRklMTDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpTVEVOQ0lMX1RFU1Q6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGNhcGFiaWxpdHkiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5k
ZXggYjIxNGQ0MzYxOGEzM2Y0YmE3ZjQ4OWYwMmY3ZjY5YmI3NTEyMmU0ZS4uZThlMzY4ODgyOGI2
ZjUwYmNkYmIwNTZkOTMwMGExNDMyZjgwMTg0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTM1LDggKzM1LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVi
bGljIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBHcmFwaGlj
c0NvbnRleHQzREF0dHJpYnV0ZXMpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHQz
RD4mJiwgR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBHcmFwaGlj
c0NvbnRleHRHTEF0dHJpYnV0ZXMpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIFJlZjxHcmFwaGljc0NvbnRleHRH
TE9wZW5HTD4mJiwgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzKTsKIAogICAgIGJvb2wgaXNX
ZWJHTDEoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKQEAgLTU4LDggKzU4LDggQEAg
cHVibGljOgogICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gY2FwKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQoQ2FudmFzQmFzZSYsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7Ci0gICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0M0Q+
JiYsIEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KENhbnZhc0Jhc2UmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOworICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJiwgUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
PiYmLCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA3OWE1NWUyY2I3Nzc3NzA3YmZjMzg5YjFkODNj
MzBiYWUyYmQ3MzFlLi4wYzJmYzg0YmZjMDZiZGY0ZDhkYzM2Yzc1ZDliOTliNmRiZmQyM2U1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcApAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgIkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYy5oIgogI2luY2x1ZGUgIkVYVHNSR0IuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9u
c0dMLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0zOTMsMzcgKzM5MywzNyBAQCBwcml2YXRl
OgogICAgICAgICBpZiAoIW1fcHJvZ3JhbSB8fCBMSUtFTFkoIUluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6aXNXZWJHTFByb2dyYW1IaWdobGlnaHRlZChtX2NvbnRleHQsICptX3Byb2dyYW0pKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoaGFzQnVmZmVyQmluZGluZyhHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElORykpIHsKLSAgICAgICAgICAgIGlmICgh
aGFzQnVmZmVyQmluZGluZyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkcp
KQorICAgICAgICBpZiAoaGFzQnVmZmVyQmluZGluZyhHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVJfQklORElORykpIHsKKyAgICAgICAgICAgIGlmICghaGFzQnVmZmVyQmluZGluZyhHcmFw
aGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0JJTkRJTkcpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGlmIChoYXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0dGFjaG1lbnQo
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQpKQorICAgICAgICAgICAgaWYgKGhh
c0ZyYW1lYnVmZmVyUGFyYW1ldGVyQXR0YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
QVRUQUNITUVOVCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKGhh
c0ZyYW1lYnVmZmVyUGFyYW1ldGVyQXR0YWNobWVudChHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9BVFRBQ0hNRU5UKSkKKyAgICAgICAgICAgIGlmIChoYXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0
dGFjaG1lbnQoR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgICAgICAgICBpZiAoaGFz
RnJhbWVidWZmZXJQYXJhbWV0ZXJBdHRhY2htZW50KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQpKQorICAgICAgICAgICAgaWYgKGhhc0ZyYW1lYnVmZmVyUGFyYW1l
dGVyQXR0YWNobWVudChHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAg
IHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUiwgbV9zYXZlZEJs
ZW5kLmNvbG9yKTsKLSAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EX0VRVUFUSU9OX1JHQiwgbV9zYXZlZEJsZW5kLmVxdWF0aW9uUkdCKTsKLSAgICAgICAgc2F2
ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFUSU9OX0FMUEhBLCBtX3Nh
dmVkQmxlbmQuZXF1YXRpb25BbHBoYSk7Ci0gICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORF9TUkNfUkdCLCBtX3NhdmVkQmxlbmQuc3JjUkdCKTsKLSAgICAgICAg
c2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQSwgbV9zYXZl
ZEJsZW5kLnNyY0FscGhhKTsKLSAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX0RTVF9SR0IsIG1fc2F2ZWRCbGVuZC5kc3RSR0IpOwotICAgICAgICBzYXZlQmxl
bmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBLCBtX3NhdmVkQmxlbmQu
ZHN0QWxwaGEpOwotICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkQsIG1fc2F2ZWRCbGVuZC5lbmFibGVkKTsKKyAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhp
Y3NDb250ZXh0R0w6OkJMRU5EX0NPTE9SLCBtX3NhdmVkQmxlbmQuY29sb3IpOworICAgICAgICBz
YXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRVFVQVRJT05fUkdCLCBtX3Nh
dmVkQmxlbmQuZXF1YXRpb25SR0IpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0Nv
bnRleHRHTDo6QkxFTkRfRVFVQVRJT05fQUxQSEEsIG1fc2F2ZWRCbGVuZC5lcXVhdGlvbkFscGhh
KTsKKyAgICAgICAgc2F2ZUJsZW5kVmFsdWUoR3JhcGhpY3NDb250ZXh0R0w6OkJMRU5EX1NSQ19S
R0IsIG1fc2F2ZWRCbGVuZC5zcmNSR0IpOworICAgICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGlj
c0NvbnRleHRHTDo6QkxFTkRfU1JDX0FMUEhBLCBtX3NhdmVkQmxlbmQuc3JjQWxwaGEpOworICAg
ICAgICBzYXZlQmxlbmRWYWx1ZShHcmFwaGljc0NvbnRleHRHTDo6QkxFTkRfRFNUX1JHQiwgbV9z
YXZlZEJsZW5kLmRzdFJHQik7CisgICAgICAgIHNhdmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4
dEdMOjpCTEVORF9EU1RfQUxQSEEsIG1fc2F2ZWRCbGVuZC5kc3RBbHBoYSk7CisgICAgICAgIHNh
dmVCbGVuZFZhbHVlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORCwgbV9zYXZlZEJsZW5kLmVuYWJs
ZWQpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgcmVkID0gMTExLjAgLyAyNTUu
MDsKICAgICAgICAgc3RhdGljIGNvbnN0IEdDM0RmbG9hdCBncmVlbiA9IDE2OC4wIC8gMjU1LjA7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgYmx1ZSA9IDIyMC4wIC8gMjU1LjA7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBHQzNEZmxvYXQgYWxwaGEgPSAyLjAgLyAzLjA7CiAKLSAgICAg
ICAgbV9jb250ZXh0LmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBt
X2NvbnRleHQuZW5hYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORCk7CiAgICAgICAgIG1fY29u
dGV4dC5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgbV9jb250
ZXh0LmJsZW5kRXF1YXRpb24oR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREKTsKLSAgICAgICAg
bV9jb250ZXh0LmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IsIEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKKyAgICAgICAgbV9jb250ZXh0
LmJsZW5kRXF1YXRpb24oR3JhcGhpY3NDb250ZXh0R0w6OkZVTkNfQUREKTsKKyAgICAgICAgbV9j
b250ZXh0LmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHRHTDo6Q09OU1RBTlRfQ09MT1IsIEdyYXBo
aWNzQ29udGV4dEdMOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKIAogICAgICAgICBtX2RpZEFwcGx5
ID0gdHJ1ZTsKICAgICB9CkBAIC00MzQsNyArNDM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBpZiAoIW1fc2F2ZWRCbGVuZC5lbmFibGVkKQotICAgICAgICAg
ICAgbV9jb250ZXh0LmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dEdMOjpCTEVORCk7CiAKICAgICAg
ICAgY29uc3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGNvbG9yID0gbV9zYXZlZEJsZW5kLmNvbG9y
OwogICAgICAgICBtX2NvbnRleHQuYmxlbmRDb2xvcihjb2xvci0+aXRlbSgwKSwgY29sb3ItPml0
ZW0oMSksIGNvbG9yLT5pdGVtKDIpLCBjb2xvci0+aXRlbSgzKSk7CkBAIC00NTcsMTkgKzQ1Nywx
OSBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFzQnVmZmVyQmluZGluZyhHQzNEZW51bSBwbmFtZSkK
ICAgICB7CiAgICAgICAgIFdlYkdMQW55IGJpbmRpbmcgPSBtX2NvbnRleHQuZ2V0UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9CSU5ESU5HKQorICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZS
QU1FQlVGRkVSX0JJTkRJTkcpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4+KGJpbmRpbmcpICYmIFdURjo6Z2V0PFJlZlB0
cjxXZWJHTEZyYW1lYnVmZmVyPj4oYmluZGluZyk7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkcpCisgICAgICAgIGlmIChwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0JJTkRJTkcpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+Pihi
aW5kaW5nKSAmJiBXVEY6OmdldDxSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+PihiaW5kaW5nKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGJvb2wgaGFzRnJhbWVidWZmZXJQ
YXJhbWV0ZXJBdHRhY2htZW50KEdDM0RlbnVtIGF0dGFjaG1lbnQpCiAgICAgewotICAgICAgICBX
ZWJHTEFueSBhdHRhY2htZW50UGFyYW1ldGVyID0gbV9jb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGF0dGFjaG1l
bnQsIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBF
KTsKKyAgICAgICAgV2ViR0xBbnkgYXR0YWNobWVudFBhcmFtZXRlciA9IG1fY29udGV4dC5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSLCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfVFlQRSk7CiAgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTx1bnNp
Z25lZD4oYXR0YWNobWVudFBhcmFtZXRlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChXVEY6OmdldDx1bnNpZ25lZD4oYXR0YWNobWVudFBhcmFtZXRlcikgIT0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpKQorICAg
ICAgICBpZiAoV1RGOjpnZXQ8dW5zaWduZWQ+KGF0dGFjaG1lbnRQYXJhbWV0ZXIpICE9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDkw
LDcgKzQ5MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZEFwcGx5IHsgZmFsc2UgfTsKIH07
CiAKLXN0YXRpYyBib29sIGlzSGlnaFBlcmZvcm1hbmNlQ29udGV4dChjb25zdCBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+JiBjb250ZXh0KQorc3RhdGljIGJvb2wgaXNIaWdoUGVyZm9ybWFuY2VD
b250ZXh0KGNvbnN0IFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mIGNvbnRleHQpCiB7
CiAgICAgcmV0dXJuIGNvbnRleHQtPnBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbigpID09
IFdlYkdMUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2U7CiB9CkBAIC01NDIsOSArNTQy
LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZShDYW4KICAgICAgICAgfQogCiAgICAgICAgIGlmIChm
cmFtZS0+c2V0dGluZ3MoKS5mb3JjZVdlYkdMVXNlc0xvd1Bvd2VyKCkpIHsKLSAgICAgICAgICAg
IGlmIChhdHRyaWJ1dGVzLnBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHQzRFBvd2Vy
UHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
cG93ZXJQcmVmZXJlbmNlID09IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOjpIaWdo
UGVyZm9ybWFuY2UpCiAgICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAiT3ZlcnJpZGluZyBwb3dl
clByZWZlcmVuY2UgZnJvbSBoaWdoLXBlcmZvcm1hbmNlIHRvIGxvdy1wb3dlci4iKTsKLSAgICAg
ICAgICAgIGF0dHJpYnV0ZXMucG93ZXJQcmVmZXJlbmNlID0gR3JhcGhpY3NDb250ZXh0M0RQb3dl
clByZWZlcmVuY2U6Okxvd1Bvd2VyOworICAgICAgICAgICAgYXR0cmlidXRlcy5wb3dlclByZWZl
cmVuY2UgPSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6TG93UG93ZXI7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAocGFnZSkKQEAgLTU3Nyw3ICs1NzcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Y3JlYXRlKENhbgogICAgICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKICAgICB9CiAK
LSAgICBhdXRvIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMs
IGhvc3RXaW5kb3cpOworICAgIGF1dG8gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRvdyk7CiAgICAgaWYgKCFjb250ZXh0IHx8ICFj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgewogICAgICAgICBpZiAoY2FudmFzRWxlbWVu
dCkgewogICAgICAgICAgICAgY2FudmFzRWxlbWVudC0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRl
eHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZl
bnQsCkBAIC02MjcsNyArNjI3LDcgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiBjYW52YXMsIFdlYkdMQ28KICAgICBtX2No
ZWNrRm9yQ29udGV4dExvc3NIYW5kbGluZ1RpbWVyLnN0YXJ0T25lU2hvdChjaGVja0NvbnRleHRM
b3NzSGFuZGxpbmdEZWxheSk7CiB9CiAKLVdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8R3JhcGhpY3NDb250
ZXh0M0Q+JiYgY29udGV4dCwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNC
YXNlJiBjYW52YXMsIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4mJiBjb250ZXh0LCBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAgICAgOiBHUFVCYXNlZENhbnZhc1JlbmRl
cmluZ0NvbnRleHQoY2FudmFzKQogICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCiAg
ICAgLCBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyKGNhbnZhcy5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksICp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hD
b250ZXh0TG9zdEV2ZW50KQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoQ2FudmFzQmFzZSYgY2FudmFzLCBSZWY8
R3JhCiAgICAgCiAgICAgbV9jb250ZXh0LT5hZGRDbGllbnQoKnRoaXMpOwogCi0gICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVMsIG1f
bWF4Vmlld3BvcnREaW1zKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfVklFV1BPUlRfRElNUywgbV9tYXhWaWV3cG9ydERpbXMpOwogCiAgICAgc2V0
dXBGbGFncygpOwogICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CkBAIC03MjMsNyArNzIzLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgp
CiAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OwogICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsK
ICAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAgICBtX3VucGFja0NvbG9y
c3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJH
TDsKKyAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0R0w6
OkJST1dTRVJfREVGQVVMVF9XRUJHTDsKICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBudWxscHRy
OwogICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOwogICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nID0gbnVsbHB0cjsKQEAgLTc0NywzMCArNzQ3LDMwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQogICAgIG1fY29sb3JNYXNrWzBdID0g
bV9jb2xvck1hc2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsK
IAogICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIG1fdGV4
dHVyZVVuaXRzLmNsZWFyKCk7CiAgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMpOwogICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IG51bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHM7ICsraSkKICAgICAgICAgbV91bnJlbmRlcmFibGVUZXh0dXJl
VW5pdHMuYWRkKGkpOwogCiAgICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJ
QlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKICAg
ICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJzOwogICAgIAogICAgIG1fbWF4
VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKTsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9t
YXhUZXh0dXJlU2l6ZSk7CiAgICAgbV9tYXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNv
bXB1dGVMZXZlbENvdW50KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOwogICAg
IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemUpOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0R0w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJlU2l6
ZSk7CiAgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRl
TGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVyZVNp
emUpOwogICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9tYXhS
ZW5kZXJidWZmZXJTaXplKTsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOwog
CiAgICAgLy8gVGhlc2UgdHdvIHZhbHVlcyBmcm9tIEVYVF9kcmF3X2J1ZmZlcnMgYXJlIGxhemls
eSBxdWVyaWVkLgogICAgIG1fbWF4RHJhd0J1ZmZlcnMgPSAwOwogICAgIG1fbWF4Q29sb3JBdHRh
Y2htZW50cyA9IDA7CiAKLSAgICBtX2JhY2tEcmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkJBQ0s7CisgICAgbV9iYWNrRHJhd0J1ZmZlciA9IEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLOwog
ICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKICAgICBt
X2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFsc2U7CiAgICAgCkBAIC04NjcsNyArODY3LDcgQEAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6fldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoKQog
CiAgICAgaWYgKCFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKICAgICAgICAgZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0Qo
KTsKKyAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dEdMKCk7CiAgICAgICAgIG1fY29udGV4
dEdyb3VwLT5yZW1vdmVDb250ZXh0KCp0aGlzKTsKICAgICB9CiAKQEAgLTg4Myw3ICs4ODMsNyBA
QCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgp
CiAgICAgfQogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlc3Ryb3lHcmFw
aGljc0NvbnRleHQzRCgpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlc3Ryb3lH
cmFwaGljc0NvbnRleHRHTCgpCiB7CiAgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKICAgICAgICAgcmV0dXJuOwpAQCAtOTUzLDM3ICs5NTMsMzcgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKICAg
ICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUg
dXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCiAgICAgYm9vbCBjb21iaW5lZENsZWFyID0g
bWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKIAotICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoY29tYmluZWRDbGVhciAmJiAo
bWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKKyAgICBtX2NvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGNv
bWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6Q09MT1JfQlVGRkVSX0JJ
VCkpIHsKICAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9j
bGVhckNvbG9yWzBdIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JN
YXNrWzFdID8gbV9jbGVhckNvbG9yWzFdIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY29sb3JNYXNrWzJdID8gbV9jbGVhckNvbG9yWzJdIDogMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0g
ICAgZWxzZQorICAgIH0gZWxzZQogICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7CiAgICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7
Ci0gICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHRH
TDo6Q09MT1JfQlVGRkVSX0JJVDsKICAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKSB7
Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1hc2sgfHwgIShtYXNrICYg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQorICAgICAgICBpZiAoIWNvbWJp
bmVkQ2xlYXIgfHwgIW1fZGVwdGhNYXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9CVUZGRVJfQklUKSkKICAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBm
KTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJf
QklUOworICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0JVRkZF
Ul9CSVQ7CiAgICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKHRydWUpOwogICAgIH0KICAgICBp
ZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0ZW5jaWwpIHsKLSAgICAgICAgaWYgKGNvbWJpbmVkQ2xl
YXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKKyAg
ICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9CVUZGRVJfQklUKSkKICAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1f
Y2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOwotICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAgICAgICAgbV9jb250ZXh0LT5zdGVu
Y2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgMHhGRkZGRkZGRik7Cisg
ICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHRHTDo6U1RFTkNJTF9CVUZGRVJfQklU
OworICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0
R0w6OkZST05ULCAweEZGRkZGRkZGKTsKICAgICB9CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIDApOworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIDApOwogICAgIG1fY29udGV4dC0+Y2xlYXIo
Y2xlYXJNYXNrKTsKIAogICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJC
aW5kaW5nLmdldCgpKSk7CisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5k
aW5nLmdldCgpKSk7CiAgICAgbV9sYXllckNsZWFyZWQgPSB0cnVlOwogCiAgICAgcmV0dXJuIGNv
bWJpbmVkQ2xlYXI7CkBAIC05OTMsMTQgKzk5MywxNCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQogewogICAgIC8vIFJlc3RvcmUgdGhl
IHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgogICAgIGlmIChtX3NjaXNzb3JFbmFibGVkKQot
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0R0w6OlNDSVNTT1Jf
VEVTVCk7CiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY2xlYXJDb2xvclswXSwgbV9jbGVh
ckNvbG9yWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsZWFyQ29sb3JbMl0sIG1f
Y2xlYXJDb2xvclszXSk7CiAgICAgbV9jb250ZXh0LT5jb2xvck1hc2sobV9jb2xvck1hc2tbMF0s
IG1fY29sb3JNYXNrWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJd
LCBtX2NvbG9yTWFza1szXSk7CiAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKG1fY2xlYXJEZXB0
aCk7CiAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwpOwotICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIG1f
c3RlbmNpbE1hc2spOworICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGlj
c0NvbnRleHRHTDo6RlJPTlQsIG1fc3RlbmNpbE1hc2spOwogICAgIG1fY29udGV4dC0+ZGVwdGhN
YXNrKG1fZGVwdGhNYXNrKTsKIH0KIApAQCAtMTA3OCwxMiArMTA3OCwxMiBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGF1dG8mIHRleHR1cmVV
bml0ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF07Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJv
KHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4
dHVyZVVuaXQudGV4dHVyZTJEQmluZGluZy5nZXQoKSkpOwogICAgIGlmICh0ZXh0dXJlVW5pdC50
ZXh0dXJlMkRCaW5kaW5nICYmIHRleHR1cmVVbml0LnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1Vz
ZUJsYWNrVGV4dHVyZSh0ZXh0dXJlRXh0ZW5zaW9uRmxhZ3MoKSkpCiAgICAgICAgIG1fdW5yZW5k
ZXJhYmxlVGV4dHVyZVVuaXRzLmFkZChtX2FjdGl2ZVRleHR1cmVVbml0KTsKLSAgICBtX2NvbnRl
eHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2Jq
ZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgIG1fY29udGV4dC0+
YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSLCBvYmplY3RP
clplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7CiAgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nKQotICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0
KCkpKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkp
KTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdpbmdCdWZmZXJXaWR0
aCgpIGNvbnN0CkBAIC0xMTExLDE5ICsxMTExLDE5IEBAIGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKIHVuc2lnbmVkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpCWVRFOgogICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEU6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0Mz
RHVieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpTSE9SVDoKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgogICAgICAgICByZXR1cm4gc2l6ZW9m
KEdDM0R1c2hvcnQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKICAgICAgICAgcmV0dXJuIHNpemVvZihHQzNE
dWludCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQ6CiAgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGZsb2F0KTsK
ICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTM0LDExICsxMTM0LDExIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0
ZXh0dXJlKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAodGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCA+PSBt
X3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImFjdGl2ZVRleHR1cmUiLCAidGV4dHVyZSB1bml0
IG91dCBvZiByYW5nZSIpOworICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0
ZXh0dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
bV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTA7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRTA7CiAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQog
CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmF0
dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKgogICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNo
YWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBz
aGFkZXIpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFwcm9ncmFtLT5hdHRhY2hTaGFkZXIo
c2hhZGVyKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVyIGF0dGFjaG1lbnQgYWxy
ZWFkeSBoYXMgc2hhZGVyIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImF0dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNo
bWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBt
X2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVy
byhzaGFkZXIpKTsKQEAgLTExNjMsMTEgKzExNjMsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNE
dWkKICAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiYmlu
ZEF0dHJpYkxvY2F0aW9uIiwgInJlc2VydmVkIHByZWZpeCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJiaW5kQXR0
cmliTG9jYXRpb24iLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYmluZEF0dHJpYkxvY2F0
aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5k
ZXgsIG5hbWUpOwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFcK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChvYmplY3QpIHsKICAgICAgICAgaWYgKCFv
YmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCAqdGhpcykpIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9i
amVjdCgpOwpAQCAtMTE5NiwxMiArMTE5NiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQog
ICAgIGlmIChkZWxldGVkKQogICAgICAgICBidWZmZXIgPSBudWxscHRyOwogICAgIGlmIChidWZm
ZXIgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9IHRhcmdl
dCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2VkIHdpdGgg
bXVsdGlwbGUgdGFyZ2V0cyIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5v
dCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKKyAg
ICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIpCiAgICAgICAg
IG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgIGVsc2UgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCiAgICAgICAgIG1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwpAQCAtMTIwOSwyMiArMTIw
OSwyMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRCdWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQogICAgICAgICBpZiAoaXNXZWJHTDIoKSkg
ewogICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkgewotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZF
UjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfUkVBRF9CVUZGRVI6
CiAgICAgICAgICAgICAgICAgbV9ib3VuZENvcHlSZWFkQnVmZmVyID0gYnVmZmVyOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09Q
WV9XUklURV9CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDT1BZ
X1dSSVRFX0JVRkZFUjoKICAgICAgICAgICAgICAgICBtX2JvdW5kQ29weVdyaXRlQnVmZmVyID0g
YnVmZmVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UElYRUxfUEFDS19CVUZGRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpQSVhFTF9QQUNLX0JVRkZFUjoKICAgICAgICAgICAgICAgICBtX2JvdW5kUGl4
ZWxQYWNrQnVmZmVyID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1VOUEFDS19CVUZGRVI6CiAgICAgICAg
ICAgICAgICAgbV9ib3VuZFBpeGVsVW5wYWNrQnVmZmVyID0gYnVmZmVyOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CiAgICAgICAgICAgICAgICAgbV9ib3VuZFRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5JRk9STV9CVUZGRVI6CisgICAgICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUjoKICAgICAgICAgICAgICAg
ICBtX2JvdW5kVW5pZm9ybUJ1ZmZlciA9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMjM0LDcgKzEyMzQsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZl
ciogYnVmZmVyKQogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiYmluZEJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImJpbmRCdWZmZXIi
LCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KQEAgLTEyNTQsMjMgKzEyNTQsMjMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmUKIAogICAg
IGJvb2wgaXNXZWJHTDJEcmF3RnJhbWVidWZmZXJUYXJnZXQgPSBmYWxzZTsKICNpZiBFTkFCTEUo
V0VCR0wyKQotICAgIGlzV2ViR0wyRHJhd0ZyYW1lYnVmZmVyVGFyZ2V0ID0gaXNXZWJHTDIoKSAm
JiB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRSQVdfRlJBTUVCVUZGRVI7CisgICAgaXNX
ZWJHTDJEcmF3RnJhbWVidWZmZXJUYXJnZXQgPSBpc1dlYkdMMigpICYmIHRhcmdldCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6RFJBV19GUkFNRUJVRkZFUjsKICNlbmRpZgogICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOwogCi0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIgfHwgaXNXZWJHTDJEcmF3RnJhbWVidWZmZXJUYXJnZXQpIHsKKyAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiB8fCBpc1dlYkdMMkRyYXdGcmFtZWJ1
ZmZlclRhcmdldCkgewogICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgaWYg
KGlzV2ViR0wyKCkgJiYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIg
fHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSkgeworICAg
IGlmIChpc1dlYkdMMigpICYmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSIHx8IHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUikpIHsK
ICAgICAgICAgbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwogICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICghc3VjY2VzcykgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmlu
ZEZyYW1lYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJiaW5kRnJhbWVidWZmZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTI4Nyw4ICsx
Mjg3LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWYKICAgICAgICAgcmV0dXJuOwogICAgIGlm
IChkZWxldGVkKQogICAgICAgICByZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIs
ICJpbnZhbGlkIHRhcmdldCIpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJl
bmRlckJ1ZmZlcjsKQEAgLTEzMDUsMTkgKzEzMDUsMTkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4
dHUKICAgICBpZiAoZGVsZXRlZCkKICAgICAgICAgdGV4dHVyZSA9IG51bGxwdHI7CiAgICAgaWYg
KHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkg
IT0gdGFyZ2V0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUg
dXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZFRleHR1cmUiLCAidGV4
dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwogICAgIGF1dG8mIHRleHR1
cmVVbml0ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF07Ci0gICAgaWYgKHRh
cmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgeworICAgIGlmICh0YXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQpIHsKICAgICAgICAgdGV4dHVyZVVuaXQu
dGV4dHVyZTJEQmluZGluZyA9IHRleHR1cmU7CiAgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0
dXJlTGV2ZWw7CiAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPm5lZWRUb1VzZUJsYWNr
VGV4dHVyZSh0ZXh0dXJlRXh0ZW5zaW9uRmxhZ3MoKSkpCiAgICAgICAgICAgICBtX3VucmVuZGVy
YWJsZVRleHR1cmVVbml0cy5hZGQobV9hY3RpdmVUZXh0dXJlVW5pdCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1fdW5yZW5kZXJhYmxlVGV4dHVyZVVuaXRzLnJlbW92ZShtX2FjdGl2ZVRl
eHR1cmVVbml0KTsKLSAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUCkgeworICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQKSB7CiAgICAgICAgIHRleHR1cmVVbml0LnRleHR1cmVD
dWJlTWFwQmluZGluZyA9IHRleHR1cmU7CiAgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFw
VGV4dHVyZUxldmVsOwogICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5uZWVkVG9Vc2VC
bGFja1RleHR1cmUodGV4dHVyZUV4dGVuc2lvbkZsYWdzKCkpKQpAQCAtMTMyNSw3ICsxMzI1LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV91
bnJlbmRlcmFibGVUZXh0dXJlVW5pdHMucmVtb3ZlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJiaW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiYmluZFRl
eHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBt
X2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKQEAg
LTEzODcsMTUgKzEzODcsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZm
ZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0QKICAgICBpZiAoIWJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRh
dGEiLCAic2l6ZSA8IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXpl
ID09IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHN0YXRpY19jYXN0
PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZl
ciIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMTQxMiw3ICsxNDEyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgT3B0aW9uYWw8QnVmZmVyRGF0YVMK
ICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFkYXRhKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJudWxsIGRhdGEiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgIm51bGwgZGF0YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJlZlB0cjxX
ZWJHTEJ1ZmZlcj4gYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVy
RGF0YSIsIHRhcmdldCwgdXNhZ2UpOwpAQCAtMTQyMSw3ICsxNDIxLDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgT3B0aW9uYWw8
QnVmZmVyRGF0YVMKIAogICAgIFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAg
aWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YS5nZXQoKSkpIHsKLSAgICAgICAg
ICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOworICAgICAgICAgICAgdGhpcy0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMTQzOCwxMSArMTQzOCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LAogewog
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBS
ZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMo
ImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7
CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJh
bWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6U1RBVElD
X0RSQVcpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG9mZnNl
dCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
IWRhdGEpCkBAIC0xNDUwLDcgKzE0NTAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LAogCiAg
ICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+YXNz
b2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRh
LmdldCgpKSkgewotICAgICAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2Yg
cmFuZ2UiKTsKKyAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJh
bmdlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTQ2NiwyNSArMTQ2
NiwyNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0Mz
RGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LAogR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCiB7CiAg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICBpZiAodGFyZ2V0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0R0w6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIGlmICh0YXJnZXQgIT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSKSB7CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAg
ICAgaWYgKGlzV2ViR0wxKCkgfHwgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RFJBV19G
UkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfRlJBTUVCVUZG
RVIpKSB7CisgICAgICAgIGlmIChpc1dlYkdMMSgpIHx8ICh0YXJnZXQgIT0gR3JhcGhpY3NDb250
ZXh0R0w6OkRSQVdfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpS
RUFEX0ZSQU1FQlVGRkVSKSkgewogI2VuZGlmCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAi
aW52YWxpZCB0YXJnZXQiKTsKICAgICAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShXRUJH
TDIpCiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KIAotICAgIGF1dG8gdGFyZ2V0RnJhbWVidWZm
ZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSRUFEX0ZSQU1FQlVGRkVSKSA/IG1f
cmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIGF1dG8g
dGFyZ2V0RnJhbWVidWZmZXIgPSAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZS
QU1FQlVGRkVSKSA/IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZyA6IG1fZnJhbWVidWZmZXJCaW5k
aW5nOwogCiAgICAgaWYgKCF0YXJnZXRGcmFtZWJ1ZmZlciB8fCAhdGFyZ2V0RnJhbWVidWZmZXIt
Pm9iamVjdCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFOworICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFOwogICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBs
ZXRlIjsKICAgICBHQzNEZW51bSByZXN1bHQgPSB0YXJnZXRGcmFtZWJ1ZmZlci0+Y2hlY2tTdGF0
dXMoJnJlYXNvbik7Ci0gICAgaWYgKHJlc3VsdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICBpZiAocmVzdWx0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpG
UkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICBTdHJpbmcgc3RyID0gIldlYkdMOiBjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzOiIgKyBTdHJpbmcocmVhc29uKTsKICAgICAgICAgcHJpbnRUb0Nv
bnNvbGUoTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBzdHIpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
b21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiAgICAgICAgIHJldHVybjsKICAgICBt
X2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOwogICAgIEdDM0Rp
bnQgdmFsdWU7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVy
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOworICAgIG1fY29u
dGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIEdyYXBoaWNzQ29udGV4dEdM
OjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKICAgICBzaGFkZXItPnNldFZhbGlkKHZhbHVlKTsK
IAogICAgIGF1dG8qIGNhbnZhcyA9IGh0bWxDYW52YXMoKTsKQEAgLTE1NjYsMTEgKzE1NjYsMTEg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF2
YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2Vk
VGV4SW1hZ2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJv
cmRlciBub3QgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4
RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCkBAIC0xNTkyLDcgKzE1OTIsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdGV4LT5zZXRMZXZl
bEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUpOwogICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOwogfQogCkBAIC0x
NjAzLDcgKzE2MDMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jTGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChm
b3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIp
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9F
TlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRh
KCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkp
CkBAIC0xNjE0LDI5ICsxNjE0LDI5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChmb3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQg
ZG9lcyBub3QgbWF0Y2ggdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1
YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRp
bWVuc2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXguZ2V0KCkpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IGRhdGEuYnl0ZUxlbmd0aCgpLCBkYXRhLmJhc2VBZGRyZXNzKCkpOworICAgIGdyYXBoaWNzQ29u
dGV4dEdMKCktPmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS5ieXRlTGVuZ3RoKCksIGRhdGEu
YmFzZUFkZHJlc3MoKSk7CiAgICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7CiB9CiAKIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7CiAg
ICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSDI0X1NURU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIMzJGX1NURU5DSUw4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5E
RVg4OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSBy
ZW5kZXJlZCB0byIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVO
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSDI0
X1NURU5DSUw4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5DSUw4
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfSU5ERVg4OgorICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xNjU2LDIzICsxNjU2LDIzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsCiAgICAgICAg
IHJldHVybjsKICAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBj
aGVjayBpZiBvdmVyZmxvdyBoYXBwZW5zIGZpcnN0LgogICAgIGlmICh4b2Zmc2V0ICsgd2lkdGgg
PCAwIHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAi
YmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9u
cyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0
ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdl
dEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3Rh
bmdsZSBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJyZWN0YW5nbGUg
b3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgR0MzRGVudW0gaW50
ZXJuYWxGb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEludGVybmFsRm9ybWF0KCJjb3B5VGV4U3ViSW1hZ2Uy
RCIsIGludGVybmFsRm9ybWF0KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghaXNUZXhJbnRl
cm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbEZvcm1hdCwgZ2V0
Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFn
ZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiY29w
eVRleFN1YkltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAmcmVhc29uKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNvbik7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoZ3JhcGhpY3NDb250ZXh0R0woKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAi
Y29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CkBAIC0xNjgyLDIxICsxNjgyLDIxIEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsCiAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3Vu
ZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBl
ZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7CiAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdDsKICAgICAgICAgR0MzRGVudW0gdHlwZTsKLSAgICAgICAgaWYgKCFH
cmFwaGljc0NvbnRleHQzRDo6cG9zc2libGVGb3JtYXRBbmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQo
dGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgZm9ybWF0LCB0eXBlKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIlRleHR1cmUgaGFzIHVua25vd24gaW50ZXJuYWwg
Zm9ybWF0Iik7CisgICAgICAgIGlmICghR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBvc3NpYmxl
Rm9ybWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFy
Z2V0LCBsZXZlbCksIGZvcm1hdCwgdHlwZSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJjb3B5VGV4U3ViSW1hZ2UyRCIs
ICJUZXh0dXJlIGhhcyB1bmtub3duIGludGVybmFsIGZvcm1hdCIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87
CiAgICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNp
emU7CiAgICAgICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdl
U2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVu
dCwgJnNpemUsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29u
dGV4dEdMOjpOT19FUlJPUikgewogICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVy
cm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB6ZXJvID0gbWFrZVVuaXF1
ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHNpemUpOwogICAgICAgICAgICAgaWYgKCF6ZXJvKSB7Ci0g
ICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFM
VUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCks
IDAsIHNpemUpOwpAQCAtMTc2MCw4ICsxNzYwLDggQEAgUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKIHsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRl
ciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0R0w6OlZFUlRFWF9TSEFERVIgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01F
TlRfU0hBREVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX0VOVU0sICJjcmVhdGVTaGFkZXIiLCAiaW52YWxpZCBzaGFkZXIgdHlwZSIpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTE3ODIsNyArMTc4Miw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBv
YmplY3QpCiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91
cCgpLCAqdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcg
dG8gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImRlbGV0ZSIsICJvYmplY3QgZG9lcyBub3QgYmVs
b25nIHRvIHRoaXMgY29udGV4dCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGlmIChvYmplY3QtPmlzRGVsZXRlZCgpKQpAQCAtMTc5MCw3ICsxNzkwLDcgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkK
ICAgICBpZiAob2JqZWN0LT5vYmplY3QoKSkKICAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGlu
IGNvbnRleHQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKICAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMg
Y29udGV4dCB1bmJvdW5kLgotICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0Nv
bnRleHQzRCgpKTsKKyAgICAgICAgb2JqZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0
R0woKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4MTEsMTcgKzE4MTEsMTcgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1l
YnVmZmVyKiBmcmFtZWJ1ZmZlcikKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgIGlmIChpc1dlYkdM
MigpICYmIGZyYW1lYnVmZmVyID09IG1fcmVhZEZyYW1lYnVmZmVyQmluZGluZykgewogICAgICAg
ICBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwotICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUiwgMCk7
CisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpS
RUFEX0ZSQU1FQlVGRkVSLCAwKTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAoZnJhbWVidWZmZXIg
PT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
PSBudWxscHRyOwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIGlmIChpc1dlYkdMMigpKQot
ICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkRSQVdfRlJBTUVCVUZGRVIsIDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkRSQVdfRlJBTUVCVUZGRVIsIDApOwogICAgICAgICBl
bHNlCiAjZW5kaWYKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIDApOwogICAgIH0K
IH0KIApAQCAtMTg5MSw3ICsxODkxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCiAgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICh6TmVhciA+
IHpGYXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGVwdGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwpAQCAtMTkwMiwyMyArMTkwMiwy
MyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRldGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKgogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJkZXRhY2hTaGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hT
aGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0
T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQz
RCgpKTsKKyAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0R0woKSk7CiB9CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZShHQzNEZW51bSBjYXApCiB7
CiAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5
KCJkaXNhYmxlIiwgY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlNURU5DSUxfVEVTVCkgewogICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7
CiAgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpCisgICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9URVNUKQogICAgICAgICBtX3NjaXNzb3JF
bmFibGVkID0gZmFsc2U7CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CiB9CkBAIC0xOTI4
LDcgKzE5MjgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0
cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFu
Z2UiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdl
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5NDIsNyArMTk0Miw3IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4KQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZU5QT1RU
ZXh0dXJlTGV2ZWwoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGxl
dmVsLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCiB7CiAgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0xOTU5LDcgKzE5NTksNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bgogICAgIGlmIChvZmZzZXQgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgaWYgKHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVCkgewogICAgICAgICAvLyBGb3IgYW4g
dW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgNCBmb3IgYWxp
Z25tZW50IHJlYXNvbnMuCiAgICAgICAgIGlmIChvZmZzZXQgJSA0KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTk3MCw3ICsxOTcwLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW4K
ICAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KSAvIDQ7CiAgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUKSB7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVCkgewogICAgICAgICAvLyBGb3IgYW4gdW5zaWdu
ZWQgc2hvcnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSAyIGZvciBhbGlnbm1l
bnQgcmVhc29ucy4KICAgICAgICAgaWYgKG9mZnNldCAlIDIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xOTgxLDcgKzE5ODEsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbgogICAg
ICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8g
MjsKICAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSkgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1l
bnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBj
b3VudCA+IG4gLSBvZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDA5LDEz
ICsyMDA5LDEzIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRl
eEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlQ6CiAg
ICAgICAgIG1heEluZGV4ID0gZ2V0TWF4SW5kZXg8R0MzRHVpbnQ+KGJ1ZmZlciwgb2Zmc2V0LCBj
b3VudCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUOgog
ICAgICAgICBtYXhJbmRleCA9IGdldE1heEluZGV4PEdDM0R1c2hvcnQ+KGJ1ZmZlciwgb2Zmc2V0
LCBjb3VudCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURToK
ICAgICAgICAgbWF4SW5kZXggPSBnZXRNYXhJbmRleDxHQzNEdWJ5dGU+KGJ1ZmZlciwgb2Zmc2V0
LCBjb3VudCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTIwOTQsNyArMjA5NCw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVu
c2lnbmVkIGVsZW1lbnRDb3VudCwKICAgICAgICAgICAgIGlmICh1c2luZ1NpbXVsYXRlZEFycmF5
QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwogICAgICAgICAgICAgICAgIGlmIChz
dGF0ZS5lbmFibGVkICYmIHN0YXRlLmlzQm91bmQoKSkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGUuYnVmZmVyQmluZGluZy0+Z2V0VGFyZ2V0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiB8fCBzdGF0ZS5idWZmZXJCaW5kaW5nLT5nZXRUYXJnZXQoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCisgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nLT5nZXRUYXJnZXQoKSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6QVJSQVlfQlVGRkVSIHx8IHN0YXRlLmJ1ZmZlckJpbmRpbmctPmdldFRhcmdldCgpID09IEdy
YXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhIXN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yMTA5LDExICsyMTA5LDExIEBAIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2ln
bmVkIGVsZW1lbnRDb3VudCwKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+b2JqZWN0KCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIm5vIG9iamVjdCBvciBvYmplY3QgZGVsZXRlZCIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gb2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCAqdGhpcykp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMg
Y29udGV4dCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcg
dG8gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMTI4LDcgKzIxMjgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDMwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50IDwgMCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJmaXJzdCBvciBjb3VudCA8IDAiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtMjEzOCw3ICsyMTM4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMKICAgICB9CiAK
ICAgICBpZiAocHJpbWl0aXZlQ291bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291
bnQgPCAwIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTIxNDYsMTcgKzIxNDYsMTcgQEAgYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzMKICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
U3VtID0gQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4oZmlyc3QpICsgQ2hlY2tlZDxH
QzNEaW50LCBSZWNvcmRPdmVyZmxvdz4oY291bnQpOwogICAgIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CiAgICAg
aWYgKGNoZWNrZWRTdW0uaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVDb3VudC5o
YXNPdmVyZmxvd2VkKCkgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhjaGVja2VkU3VtLnVu
c2FmZUdldCgpLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFy
cmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghdmFsaWRhdGVT
aW11bGF0ZWRWZXJ0ZXhBdHRyaWIwKGNoZWNrZWRTdW0udW5zYWZlR2V0KCkgLSAxKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dHNpZGUgdGhlIGJvdW5kcyBv
ZiB0aGUgc2ltdWxhdGVkIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNpbXVsYXRl
ZCB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsIHJlYXNvbik7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0R0woKSwgJnJlYXNv
bikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTIxNzIsMjEgKzIxNzIsMjEgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEcKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9TSE9SVDoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lO
VDoKICAgICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCB8fCBpc1dlYkdMMigpKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAg
ICBpZiAoY291bnQgPCAwIHx8IG9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImNvdW50
IG9yIG9mZnNldCA8IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImNvdW50IG9yIG9mZnNldCA8IDAi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAgLTIxOTYsMTggKzIxOTYs
MTggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEcKICAgICB9CiAgICAgCiAgICAgaWYgKHByaW1p
dGl2ZUNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAogICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRfQVJSQVlf
QlVGRkVSIGJvdW5kIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9C
VUZGRVIgYm91bmQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEVu
c3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlLgogICAgIGlmICghdmFsaWRhdGVF
bGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVlc3Qgb3V0IG9mIGJvdW5kcyBmb3Ig
Y3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJl
cXVlc3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghY291bnQpCkBAIC0yMjE2LDI1
ICsyMjE2LDI1IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3
RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHCiAgICAgQ2hlY2tlZDxHQzNEaW50
LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZENvdW50KGNvdW50KTsKICAgICBDaGVja2VkPEdDM0Rp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQp
OwogICAgIGlmIChjaGVja2VkQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRp
dmVDb3VudC5oYXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0
IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2
YXRpdmUodHlwZSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVt
RWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKICAgICAgICAg
aWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVHZXQoKSwg
dHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2
YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVDb3Vu
dC51bnNhZmVHZXQoKSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBh
Y2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
YXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghdmFsaWRhdGVTaW11bGF0
ZWRWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0
dGVtcHQgdG8gYWNjZXNzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgc2ltdWxhdGVkIHZlcnRl
eEF0dHJpYjAgYXJyYXkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2Vz
cyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHNpbXVsYXRlZCB2ZXJ0ZXhBdHRyaWIwIGFycmF5
Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFz
b24pOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dEdMKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIApAQCAtMjI1Niw3ICsyMjU2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXoK
ICAgICAgICAgYXV0byBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMgPSBzaW11bGF0ZVZlcnRl
eEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwogICAgICAgICBpZiAoIXNpbXVsYXRlVmVydGV4
QXR0cmliMFN0YXR1cykgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gc2ltdWxh
dGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJyYXlzIiwgInVuYWJs
ZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3QXJy
YXlzIiwgInVuYWJsZSB0byBzaW11bGF0ZSB2ZXJ0ZXhBdHRyaWIwIGFycmF5Iik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IHNpbXVsYXRlVmVydGV4QXR0cmliMFN0YXR1cy52YWx1ZSgpOwpAQCAtMjI4MiwxMSArMjI4Miwx
MSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdBcnJheXMoR0MzRGVudW0g
bW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpegogc3RhdGljIEdDM0R1aW50IGdldFJlc3RhcnRJ
bmRleChHQzNEZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURToKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0Mz
RHVieXRlPjo6bWF4KCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CiAgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdDM0R1c2hvcnQ+OjptYXgoKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfSU5UOgogICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxH
QzNEdWludD46Om1heCgpOwogICAgIH0KIApAQCAtMjMxMiw3ICsyMzEyLDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNp
emVpIGNvdW50LCBHQzMKICAgICAgICAgYXV0byBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwogICAgICAgICBpZiAoIXNpbXVs
YXRlVmVydGV4QXR0cmliMFN0YXR1cykgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUg
dG8gc2ltdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZmZXIuCi0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkcmF3RWxlbWVu
dHMiLCAidW5hYmxlIHRvIHNpbXVsYXRlIHZlcnRleEF0dHJpYjAgYXJyYXkiKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
TiwgImRyYXdFbGVtZW50cyIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJh
eSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMudmFsdWUoKTsKQEAgLTIz
NDQsMTIgKzIzNDQsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGUo
R0MzRGVudW0gY2FwKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVCkgewogICAgICAgICBtX3N0ZW5jaWxF
bmFibGVkID0gdHJ1ZTsKICAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dEdMOjpTQ0lTU09SX1RFU1QpCiAgICAg
ICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7
CiB9CkBAIC0yMzU5LDcgKzIzNTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQogICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXgg
b3V0IG9mIHJhbmdlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0
IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIzODcsMzMgKzIzODcs
MzMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnUKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICBpZiAocmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJC
VUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxp
ZGF0ZShjb250ZXh0R3JvdXAoKSwgKnRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90
IGZyb20gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGJ1
ZmZlciAmJiAhYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIiLCAiYnVmZmVyIGhhcyBuZXZlciBiZWVuIGJvdW5kIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgImJ1ZmZlciBoYXMgbmV2ZXIgYmVlbiBib3VuZCIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byB0YXJnZXRGcmFtZWJ1ZmZlciA9
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFQURfRlJBTUVCVUZGRVIpID8gbV9yZWFk
RnJhbWVidWZmZXJCaW5kaW5nIDogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CisgICAgYXV0byB0YXJn
ZXRGcmFtZWJ1ZmZlciA9ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVC
VUZGRVIpID8gbV9yZWFkRnJhbWVidWZmZXJCaW5kaW5nIDogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7
CiAKICAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRh
dGVkOyBhbGwgY3VycmVudAogICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVy
bmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKICAgICAvLyBGQk8uCiAgICAgaWYgKCF0YXJn
ZXRGcmFtZWJ1ZmZlciB8fCAhdGFyZ2V0RnJhbWVidWZmZXItPm9iamVjdCgpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElP
TiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmplY3Qg
PSBvYmplY3RPclplcm8oYnVmZmVyKTsKICNpZiAhVVNFKEFOR0xFKQotICAgIGlmIChhdHRhY2ht
ZW50ID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9i
amVjdCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgeworICAgICAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0FUVEFD
SE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAgICAgbV9jb250
ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKICAg
ICB9IGVsc2UKICNlbmRpZgogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3Qp
OwpAQCAtMjQyNiwyOSArMjQyNiwyOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYQogICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFy
YW1ldGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKGxldmVsICYmIGlzV2ViR0wxKCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJmcmFtZWJ1
ZmZlclRleHR1cmUyRCIsICJsZXZlbCBub3QgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJE
IiwgImxldmVsIG5vdCAwIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRleHR1
cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCAqdGhpcykpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gdGV4dHVyZSBvciB0ZXh0dXJlIG5vdCBmcm9t
IHRoaXMgY29udGV4dCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0
dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIHRhcmdldEZyYW1lYnVmZmVyID0gKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVBRF9GUkFNRUJVRkZFUikgPyBtX3JlYWRGcmFtZWJ1ZmZlckJpbmRpbmcg
OiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICBhdXRvIHRhcmdldEZyYW1lYnVmZmVyID0gKHRh
cmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUikgPyBtX3JlYWRGcmFt
ZWJ1ZmZlckJpbmRpbmcgOiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKIAogICAgIC8vIERvbid0IGFs
bG93IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CiAg
ICAgLy8gaW1wbGVtZW50YXRpb25zIHVzZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0
aGUgZGVmYXVsdAogICAgIC8vIEZCTy4KICAgICBpZiAoIXRhcmdldEZyYW1lYnVmZmVyIHx8ICF0
YXJnZXRGcmFtZWJ1ZmZlci0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJl
MkQiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJl
MkQiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVPYmplY3QgPSBvYmplY3RPclplcm8odGV4dHVyZSk7
CiAKICNpZiAhVVNFX0FOR0xFCi0gICAgaWYgKGF0dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkgewotICAgICAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgaWYgKGF0
dGFjaG1lbnQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkg
eworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwg
bGV2ZWwpOworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJl
T2JqZWN0LCBsZXZlbCk7CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZU9iamVjdCwgbGV2ZWwpOwpAQCAtMjQ3MiwxMiArMjQ3MiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKICAgICBpZiAo
IXRleCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMo
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9y
IG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZl
bCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2Vk
IGluIFdlYkdMIDI6CiAgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2Vu
ZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2Vk
IHRleHR1cmUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6
OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRl
IG1pcG1hcHMgZnJvbSBjb21wcmVzc2VkIHRleHR1cmUiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhJbnRlcm5hbEZvcm1hdCgiZ2VuZXJhdGVN
aXBtYXAiLCB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgMCkpKQpAQCAtMjQ4NywxNSAr
MjQ4NywxNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdlbmVyYXRlTWlwbWFw
KEdDM0RlbnVtIHRhcmdldCkKICAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhhY2sgb25jZSB0
aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCiAjaWYgT1MoREFSV0lOKQogICAgIGJvb2wgbmVlZFRv
UmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIoKSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpOworICAg
IGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01J
UE1BUF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6
Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7CiAgICAgICAgIG5lZWRUb1Jlc2V0TWluRmlsdGVyID0g
dHJ1ZTsKICAgICB9CiAjZW5kaWYKICAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdl
dCk7CiAjaWYgT1MoREFSV0lOKQogICAgIGlmIChuZWVkVG9SZXNldE1pbkZpbHRlcikKLSAgICAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7CisgICAgICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01JTl9G
SUxURVIsIHRleC0+Z2V0TWluRmlsdGVyKCkpOwogI2VuZGlmCiAgICAgdGV4LT5nZW5lcmF0ZU1p
cG1hcExldmVsSW5mbygpOwogfQpAQCAtMjUwNCw3ICsyNTA0LDcgQEAgUmVmUHRyPFdlYkdMQWN0
aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKFdlYkdM
UHJvZ3JhbSoKIHsKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8gaW5mbzsKKyAgICBH
cmFwaGljc0NvbnRleHRHTDo6QWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9jb250ZXh0LT5n
ZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yNTE3LDcgKzI1MTcsNyBAQCBSZWZQdHI8V2ViR0xB
Y3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBY3RpdmVVbmlmb3JtKFdl
YkdMUHJvZ3JhbQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZUluZm8gaW5mbzsKKyAg
ICBHcmFwaGljc0NvbnRleHRHTDo6QWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9jb250ZXh0
LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKQEAg
LTI1MzUsOCArMjUzNSw4IEBAIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+Pj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICBjb25zdCBHQzNEZW51bSBzaGFkZXJUeXBlc1tdID0gewot
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTDo6
VkVSVEVYX1NIQURFUiwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURF
UgogICAgIH07CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlck9iamVjdHM7
CiAgICAgZm9yIChhdXRvIHNoYWRlclR5cGUgOiBzaGFkZXJUeXBlcykgewpAQCAtMjU1OCw3ICsy
NTU4LDcgQEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnMKICAgICBpZiAoaXNQcmVmaXhSZXNlcnZl
ZChuYW1lKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0
YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtl
ZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsK
ICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRy
aWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwpAQCAtMjU3MCwzNCArMjU3
MCwzNCBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJh
bWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGJvb2wgdmFsaWQgPSBmYWxzZTsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVN
RU5UX0FSUkFZX0JVRkZFUikKKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpB
UlJBWV9CVUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUikKICAgICAgICAgdmFsaWQgPSB0cnVlOwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAg
aWYgKGlzV2ViR0wyKCkpIHsKICAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09QWV9SRUFEX0JVRkZFUjoKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q09QWV9XUklURV9CVUZGRVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlBJWEVMX1BBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09Q
WV9SRUFEX0JVRkZFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Q09QWV9XUklU
RV9CVUZGRVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVMX1BBQ0tfQlVG
RkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpQSVhFTF9VTlBBQ0tfQlVGRkVS
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpUUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTklGT1JNX0JVRkZFUjoKICAg
ICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGlm
ICghdmFsaWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVN
LCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
QlVGRkVSX1NJWkUgJiYgcG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9VU0FHRSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAg
ICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpCVUZGRVJfVVNBR0UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAogICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0QnVmZmVy
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICBpZiAocG5hbWUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFKQorICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6QlVGRkVSX1NJWkUpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKTsKIH0KQEAgLTI2MDksNyArMjYwOSw3IEBAIE9w
dGlvbmFsPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldENvbnRleHRBdHRyaWJ1dGVzCiAKICAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2Ug
cmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAogICAgIC8vIGFuZCBzdGVuY2ls
LCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8g
R3JhcGhpY3NDb250ZXh0M0QuCisgICAgLy8gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiAKICAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBtX2NvbnRleHQtPmNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAg
aWYgKCFtX2F0dHJpYnV0ZXMuZGVwdGgpCkBAIC0yNjIyLDcgKzI2MjIsNyBAQCBPcHRpb25hbDxX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRDb250
ZXh0QXR0cmlidXRlcwogR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXJy
b3IoKQogewogICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHRHTDo6Tk9fRVJST1I7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsK
IH0KIApAQCAtMjYzMywxOCArMjYzMywxOCBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRwogCiAg
ICAgR0MzRGludCB2YWx1ZSA9IDA7CiAgICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFTEVURV9TVEFUVVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVMRVRFX1NUQVRVUzoKICAgICAgICAgcmV0dXJuIHByb2dyYW0tPmlzRGVsZXRlZCgpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZBTElEQVRFX1NUQVRVUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpWQUxJREFURV9TVEFUVVM6CiAgICAgICAgIG1fY29udGV4dC0+Z2V0
UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxib29sPih2YWx1ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TElOS19TVEFUVVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElOS19TVEFU
VVM6CiAgICAgICAgIHJldHVybiBwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpBVFRBQ0hFRF9TSEFERVJTOgogICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1p
dihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVM6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkFDVElWRV9BVFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkFDVElWRV9VTklGT1JNUzoKICNpZiBVU0UoQU5HTEUpCiAgICAgICAgIG1fY29udGV4
dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CiAj
ZWxzZQpAQCAtMjY1Miw3ICsyNjUyLDcgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEcKICNlbmRp
ZiAvLyBVU0UoQU5HTEUpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0UHJvZ3JhbVBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRQ
cm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogfQpAQCAtMjY2OCw0MiArMjY2OCw0MiBAQCBXZWJHTEFueSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQwogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVG
RkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmICghbV9yZW5kZXJidWZmZXJC
aW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOwog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAobV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMCisgICAgaWYgKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSA9PSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfU1RFTkNJTAogICAgICAgICAmJiAhbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5pc1ZhbGlkKCkpIHsKICAgICAgICAgQVNTRVJUKCFpc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZCgpKTsKICAgICAgICAgaW50IHZhbHVlID0gMDsKICAgICAgICAgc3dpdGNo
IChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
V0lEVEg6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9XSURU
SDoKICAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRF
UkJVRkZFUl9IRUlHSFQ6CiAgICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9SRURfU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgogICAgICAgICAgICAgdmFsdWUg
PSAwOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKICAgICAgICAgICAgIHZhbHVlID0gMjQ7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1NURU5DSUxfU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
QlVGRkVSX1NURU5DSUxfU0laRToKICAgICAgICAgICAgIHZhbHVlID0gODsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5U
RVJOQUxfRk9STUFUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZG
RVJfSU5URVJOQUxfRk9STUFUOgogICAgICAgICAgICAgcmV0dXJuIG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwg
ImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdmFs
dWU7CkBAIC0yNzExLDIwICsyNzExLDIwIEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDCiAKICAg
ICBHQzNEaW50IHZhbHVlID0gMDsKICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9HUkVFTl9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9CTFVFX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0FMUEhBX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RF
UFRIX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5D
SUxfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfV0lEVEg6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgogICAgICAgICBtX2NvbnRleHQtPmdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5U
RVJOQUxfRk9STUFUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFTkRFUkJVRkZFUl9J
TlRFUk5BTF9GT1JNQVQ6CiAgICAgICAgIHJldHVybiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdl
dEludGVybmFsRm9ybWF0KCk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiB9CkBAIC0yNzM1LDE2ICsyNzM1LDE2IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBH
QzNECiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEdDM0RpbnQgdmFsdWUgPSAwOwogICAg
IHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RB
VFVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFTEVURV9TVEFUVVM6CiAgICAgICAg
IHJldHVybiBzaGFkZXItPmlzRGVsZXRlZCgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTVBJTEVfU1RBVFVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTVBJTEVfU1RB
VFVTOgogICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIp
LCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KHZhbHVl
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpTSEFERVJfVFlQRToKICAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFk
ZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFk
ZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogfQpAQCAtMjc2MSwyMyArMjc2MSwyMyBAQCBSZWZQdHI8V2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclByZWNp
c2lvbgogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZFUlRFWF9TSEFERVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlZFUlRFWF9TSEFERVI6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSOgogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQg
c2hhZGVyIHR5cGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNo
YWRlciB0eXBlIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBzd2l0Y2gg
KHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNRURJVU1fRkxPQVQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9GTE9BVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1FRElV
TV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9JTlQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxp
ZCBwcmVjaXNpb24gdHlwZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFs
aWQgcHJlY2lzaW9uIHR5cGUiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBA
IC0yODA0LDIxICsyODA0LDIxIEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuCiAgICAgR0MzRGlu
dCB2YWx1ZSA9IDA7CiAgICAgR0MzRGZsb2F0IGZWYWx1ZSA9IDA7CiAgICAgc3dpdGNoIChwbmFt
ZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVS
RV9NQUdfRklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJ
TFRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfUzoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfVDoKICAgICAgICAgbV9jb250ZXh0
LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDog
Ly8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCiAgICAgICAgIGlmIChtX2V4dFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYykgewogICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJh
bWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmZlZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oZlZhbHVlKTsKICAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBu
b3QgZW5hYmxlZCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIH0KQEAgLTI4
MjgsNyArMjgyOCw3IEBAIFdlYkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVu
aWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHCiAgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybSIsIHBy
b2dyYW0pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXVuaWZvcm1Mb2NhdGlv
biB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9ncmFtKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9n
cmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2
YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOwpAQCAt
MjgzNiw3OCArMjgzNiw3OCBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAgIEdDM0RlbnVt
IGJhc2VUeXBlOwogICAgIHVuc2lnbmVkIGxlbmd0aDsKICAgICBzd2l0Y2ggKHVuaWZvcm1Mb2Nh
dGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpCT09MOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpC
T09MOwogICAgICAgICBsZW5ndGggPSAxOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJPT0w7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Qk9PTF9WRUMyOgorICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpCT09MOwogICAgICAgICBsZW5ndGgg
PSAyOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZF
QzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Qk9PTF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dEdMOjpCT09MOwogICAgICAgICBsZW5ndGggPSAzOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Qk9PTF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpCT09MOwog
ICAgICAgICBsZW5ndGggPSA0OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ6CisgICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0R0w6OklOVDsKICAgICAgICAgbGVuZ3RoID0gMTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlRfVkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOwogICAg
ICAgICBsZW5ndGggPSAyOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlw
ZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpJTlQ7CiAgICAgICAgIGxlbmd0aCA9IDM7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgotICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6SU5UX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OklO
VDsKICAgICAgICAgbGVuZ3RoID0gNDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVuZ3RoID0gMTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoKLSAg
ICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVRfVkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RkxPQVQ7CiAgICAgICAgIGxlbmd0aCA9IDI7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZM
T0FUX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwog
ICAgICAgICBsZW5ndGggPSAzOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVF9WRUM0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF9WRUM0OgorICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVuZ3RoID0g
NDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFU
MjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHRHTDo6RkxPQVQ7CiAgICAgICAgIGxlbmd0aCA9IDQ7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6Ci0gICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkZMT0FUX01BVDM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZM
T0FUOwogICAgICAgICBsZW5ndGggPSA5OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVF9NQVQ0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVF9NQVQ0Ogor
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgbGVu
Z3RoID0gMTY7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRVJfMkQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgotICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6U0FNUExFUl8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTQU1Q
TEVSX0NVQkU6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OklOVDsKICAg
ICAgICAgbGVuZ3RoID0gMTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
Ly8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5oYW5kbGVkIHR5
cGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICBzd2l0Y2ggKGJhc2VUeXBlKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ6IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9B
VDogewogICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OwogICAgICAgICBpZiAobV9p
c1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCiAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS5nZXRuVW5pZm9ybWZ2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24s
IDE2ICogc2l6ZW9mKEdDM0RmbG9hdCksIHZhbHVlKTsKQEAgLTI5MTcsNyArMjkxNyw3IEBAIFdl
YkdMQW55IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBXZWJHCiAgICAgICAgICAgICByZXR1cm4gdmFsdWVbMF07CiAgICAg
ICAgIHJldHVybiBGbG9hdDMyQXJyYXk6OnRyeUNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKTsKICAgICB9
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOiB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6SU5UOiB7CiAgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CiAgICAgICAg
IGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgICAgIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwpAQCAtMjkyNyw3ICsyOTI3LDcg
QEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkcKICAgICAgICAgICAgIHJldHVybiB2YWx1ZVswXTsK
ICAgICAgICAgcmV0dXJuIEludDMyQXJyYXk6OnRyeUNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKTsKICAg
ICB9Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDogeworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkJPT0w6IHsKICAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKICAg
ICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQogICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCkuZ2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3Jh
bSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CkBAIC0yOTQ2LDcgKzI5
NDYsNyBAQCBXZWJHTEFueSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAgIH0KIAogICAgIC8vIElmIHdlIGdl
dCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4
IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25vd24gZXJyb3IiKTsKKyAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0i
LCAidW5rbm93biBlcnJvciIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yOTYxLDcg
KzI5NjEsNyBAQCBSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTAogICAgIGlmIChpc1ByZWZpeFJlc2Vy
dmVkKG5hbWUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXByb2dyYW0tPmdl
dExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBu
b3QgbGlua2VkIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBs
aW5rZWQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEdDM0RpbnQgdW5p
Zm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBuYW1lKTsKQEAgLTI5NzAsMTIgKzI5NzAsMTIgQEAgUmVmUHRyPFdlYkdMVW5p
Zm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtTG9jYXRp
b24oV2ViR0wKIAogICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwogI2lmIFVTRShBTkdM
RSkKLSAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdy
YXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisgICAg
bV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0Nv
bnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOwogI2Vsc2UKLSAgICBt
X2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJv
Z3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jt
cyk7CisgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmYWN0
aXZlVW5pZm9ybXMpOwogI2VuZGlmCiAgICAgZm9yIChHQzNEaW50IGkgPSAwOyBpIDwgYWN0aXZl
VW5pZm9ybXM7IGkrKykgewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QWN0aXZlSW5mbyBp
bmZvOworICAgICAgICBHcmFwaGljc0NvbnRleHRHTDo6QWN0aXZlSW5mbyBpbmZvOwogICAgICAg
ICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSks
IGksIGluZm8pKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIC8vIFN0cmlw
ICJbMF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KQEAgLTI5OTgsMzYgKzI5OTgs
MzYgQEAgV2ViR0xBbnkgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmli
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmEKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4QXR0
cmliIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRl
eCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
Y29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJhc2U6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0
ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgp
OwogCi0gICAgaWYgKChpc1dlYkdMMigpIHx8IG1fYW5nbGVJbnN0YW5jZWRBcnJheXMpICYmIHBu
YW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5H
TEUpCisgICAgaWYgKChpc1dlYkdMMigpIHx8IG1fYW5nbGVJbnN0YW5jZWRBcnJheXMpICYmIHBu
YW1lID09IEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5H
TEUpCiAgICAgICAgIHJldHVybiBzdGF0ZS5kaXZpc29yOwogCiAgICAgc3dpdGNoIChwbmFtZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9CVUZGRVJfQklORElORzoKICAgICAgICAgaWYgKCghaXNHTEVTMkNvbXBsaWFudCgpICYmICFp
bmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDAp
LmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQogICAgICAgICAgICAgfHwg
IXN0YXRlLmJ1ZmZlckJpbmRpbmcKICAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4g
c3RhdGUuYnVmZmVyQmluZGluZzsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgogICAgICAgICByZXR1cm4gc3RhdGUuZW5hYmxlZDsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJ
WkVEOgogICAgICAgICByZXR1cm4gc3RhdGUubm9ybWFsaXplZDsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgogICAgICAgICByZXR1cm4gc3RhdGUu
c2l6ZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NU
UklERToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpWRVJURVhfQVRUUklCX0FSUkFZX1NU
UklERToKICAgICAgICAgcmV0dXJuIHN0YXRlLm9yaWdpbmFsU3RyaWRlOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6CiAgICAgICAgIHJldHVybiBz
dGF0ZS50eXBlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FU
VFJJQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpDVVJSRU5UX1ZFUlRFWF9BVFRSSUI6
CiAgICAgICAgIHJldHVybiBGbG9hdDMyQXJyYXk6OnRyeUNyZWF0ZShtX3ZlcnRleEF0dHJpYlZh
bHVlW2luZGV4XS52YWx1ZSwgNCk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiB9CkBA
IC0zMTE0LDcgKzMxMTQsNyBAQCBHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQogewogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNU
KQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfVEVTVCkKICAgICAg
ICAgcmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFi
bGVkKGNhcCk7CiB9CkBAIC0zMTg4LDggKzMxODgsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmxpbmtQcm9ncmFtV2l0aG91dEludmFsaWRhdGluZ0F0dHJpYkxvY2F0aW9ucyhX
ZQogICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IFJlZlB0cjxXZWJHTFNoYWRlcj4gdmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRT
aGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpOwotICAgIFJlZlB0cjxXZWJH
TFNoYWRlcj4gZnJhZ21lbnRTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBSZWZQdHI8V2ViR0xTaGFkZXI+
IHZlcnRleFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dEdMOjpWRVJURVhfU0hBREVSKTsKKyAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IGZyYWdtZW50U2hh
ZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdN
RU5UX1NIQURFUik7CiAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNW
YWxpZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSkg
ewogICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMzIxMiwzNSArMzIxMiwzNSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQogICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2gg
KHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJH
TDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgogICAg
ICAgICBtX3VucGFja0ZsaXBZID0gcGFyYW07CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CiAgICAg
ICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dF
QkdMOgotICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgor
ICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0R0w6OkJST1dTRVJfREVGQVVMVF9X
RUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHRHTDo6Tk9ORSkKICAgICAgICAgICAgIG1f
dW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0p
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAicGl4
ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZF
UlNJT05fV0VCR0wiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlBBQ0tfQUxJR05NRU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlVOUEFDS19BTElHTk1FTlQ6CiAgICAgICAgIGlmIChwYXJhbSA9PSAxIHx8IHBhcmFtID09IDIg
fHwgcGFyYW0gPT0gNCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAocG5hbWUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQorICAgICAgICAgICAgaWYgKHBuYW1l
ID09IEdyYXBoaWNzQ29udGV4dEdMOjpQQUNLX0FMSUdOTUVOVCkKICAgICAgICAgICAgICAgICBt
X3BhY2tBbGlnbm1lbnQgPSBwYXJhbTsKLSAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgICAgICAgICBlbHNlIC8vIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5UOgogICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25t
ZW50ID0gcGFyYW07CiAgICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBw
YXJhbSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQg
cGFyYW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgZm9yIGFsaWdubWVudCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC0zMjY1LDY2ICszMjY1LDY2
IEBAIGVudW0gY2xhc3MgSW50ZXJuYWxGb3JtYXRUaGVtZSB7CiBzdGF0aWMgSW50ZXJuYWxGb3Jt
YXRUaGVtZSBpbnRlcm5hbEZvcm1hdFRoZW1lKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogewog
ICAgIHN3aXRjaCAoaW50ZXJuYWxGb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
ODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBODoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTUkdCX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1J
TkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Ujg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6U1JHQjg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTg6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6U1JHQjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlNSR0JfQUxQSEE6CiAgICAgICAgIHJldHVybiBJbnRlcm5hbEZvcm1hdFRoZW1lOjpOb3Jt
YWxpemVkRml4ZWRQb2ludDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I5X0U1OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlIxMUZfRzExRl9CMTBGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjEw
X0EyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOV9FNToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IxMF9BMjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTFG
X0cxMUZfQjEwRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgogICAg
ICAgICByZXR1cm4gSW50ZXJuYWxGb3JtYXRUaGVtZTo6UGFja2VkOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlI4X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOF9T
Tk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4X1NOT1JNOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlI4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOF9TTk9STToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4X1NOT1JNOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkE4X1NOT1JNOgogICAgICAgICByZXR1cm4gSW50ZXJuYWxGb3JtYXRUaGVt
ZTo6U2lnbmVkTm9ybWFsaXplZEZpeGVkUG9pbnQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UjE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMzJGOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJG
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2RjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0IzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTE2RjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlIxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyRjoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSRzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNkY6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyRjoKICAgICAgICAgcmV0
dXJuIEludGVybmFsRm9ybWF0VGhlbWU6OkZsb2F0aW5nUG9pbnQ7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UjhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UjMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzhJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2SToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0IzMkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOEk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOEk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkczMkk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOEk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMySToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJOgogICAg
ICAgICByZXR1cm4gSW50ZXJuYWxGb3JtYXRUaGVtZTo6U2lnbmVkSW50ZWdlcjsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIx
NlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZVSToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjE2VUk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlI4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2VUk6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6Ukc4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlJHMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZVSToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkE4VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUk6CiAgICAgICAgIHJldHVybiBJbnRlcm5hbEZvcm1h
dFRoZW1lOjpVbnNpZ25lZEludGVnZXI7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIElu
dGVybmFsRm9ybWF0VGhlbWU6Ok5vbmU7CkBAIC0zMzM0LDE3ICszMzM0LDE3IEBAIHN0YXRpYyBJ
bnRlcm5hbEZvcm1hdFRoZW1lIGludGVybmFsRm9ybWF0VGhlbWUoR0MzRGVudW0gaW50ZXJuYWxG
b3JtYXQpCiBzdGF0aWMgaW50IG51bWJlck9mQ29tcG9uZW50c0ZvckZvcm1hdChHQzNEZW51bSBm
b3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRUQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJFRF9JTlRFR0VSOgogICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
X0lOVEVHRVI6CiAgICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUjoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdC
X0lOVEVHRVI6CiAgICAgICAgIHJldHVybiAzOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQV9JTlRFR0VSOgogICAgICAgICByZXR1cm4gNDsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTMzNTQsNjkgKzMzNTQsNjkgQEAgc3RhdGljIGludCBudW1iZXJPZkNvbXBv
bmVudHNGb3JGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQogc3RhdGljIGludCBudW1iZXJPZkNvbXBv
bmVudHNGb3JJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKIHsKICAgICBz
d2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVN
SU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlI4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4X1NOT1JN
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSOFVJOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlI4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
MTZVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSMTZJOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlIzMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIzMkk6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMjQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOF9T
Tk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZGOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlIzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjhVSToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOEk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjE2SToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMzJJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRjoKICAgICAgICAgcmV0dXJuIDE7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRzhfU05PUk06
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkczMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUk6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRzE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkk6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkczMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
MzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMjRfU1RFTkNJTDg6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEgzMkZfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5D
RV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk06CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkczMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4VUk6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Ukc4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2VUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkcxNkk6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkczMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJJOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEgzMkZfU1RFTkNJTDg6CiAgICAgICAgIHJldHVybiAyOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4
X1NOT1JNOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxMUZfRzExRl9CMTBGOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjlfRTU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCMTZGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyRjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCOEk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZVSToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCMzJVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkk6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjg6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhfU05PUk06
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UjExRl9HMTFGX0IxMEY6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UkdCOV9FNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0IxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJGOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQjhVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxNlVJOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQjE2SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMlVJ
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMySToKICAgICAgICAgcmV0dXJuIDM7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTUkdCX0FMUEhBOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I4X0FMUEhBODoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjEwX0EyOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkExNkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyRjoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBOFVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE4SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9BMlVJOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkExNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkExNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMyVUk6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTMySToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlNSR0JfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
U1JHQjhfQUxQSEE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4X1NOT1JNOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTI6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JBMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4VUk6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQThJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjEwX0EyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUk6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2SToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBMzJVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJ
OgogICAgICAgICByZXR1cm4gNDsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKQEAg
LTM0MzQsNTIgKzM0MzQsNTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFk
UGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgKICAgICBHQzNEZW51
bSBpbnRlcm5hbEZvcm1hdCA9IDA7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CiAg
ICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0
M0QoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCBy
ZWFzb24pOworICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFw
aGljc0NvbnRleHRHTCgpLCAmcmVhc29uKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVh
ZFBpeGVscyIsIHJlYXNvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgLy8gRklYTUU6IHJlYWRCdWZmZXIoKSBzaG91bGQgYWZmZWN0IHRoaXMKICAgICAgICAgaW50
ZXJuYWxGb3JtYXQgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQo
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAgICAg
ICAgICAgaW50ZXJuYWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTg7CisgICAgICAg
ICAgICBpbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBODsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
ODsKKyAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQjg7
CiAgICAgfQogCiAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxz
IiwgIk1pc3NpbmcgYXR0YWNobWVudCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIk1pc3Npbmcg
YXR0YWNobWVudCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGlzV2ViR0wx
KCkpIHsKICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QUxQSEE6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6QUxQSEE6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3JtYXQi
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQ6CiAgICAgICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0ICYmICFtX29lc1RleHR1
cmVIYWxmRmxvYXQpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsK
KyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlYWRQ
aXhlbHMiLCAiaW52YWxpZCB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiZm9ybWF0IG5vdCBS
R0JBIG9yIHR5cGUgbm90IFVOU0lHTkVEX0JZVEV8RkxPQVQiKTsKKyAgICAgICAgaWYgKGZvcm1h
dCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSB8fCAodHlwZSAhPSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCkpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiZm9ybWF0IG5vdCBSR0JBIG9yIHR5cGUgbm90IFVO
U0lHTkVEX0JZVEV8RkxPQVQiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KQEAgLTM0ODcsNTMgKzM0ODcsNTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgKICAgICBJ
bnRlcm5hbEZvcm1hdFRoZW1lIGludGVybmFsRm9ybWF0VGhlbWUgPSBXZWJDb3JlOjppbnRlcm5h
bEZvcm1hdFRoZW1lKGludGVybmFsRm9ybWF0KTsKICAgICBpbnQgaW50ZXJuYWxGb3JtYXRDb21w
b25lbnRDb3VudCA9IG51bWJlck9mQ29tcG9uZW50c0ZvckludGVybmFsRm9ybWF0KGludGVybmFs
Rm9ybWF0KTsKICAgICBpZiAoaW50ZXJuYWxGb3JtYXRUaGVtZSA9PSBJbnRlcm5hbEZvcm1hdFRo
ZW1lOjpOb25lIHx8ICFpbnRlcm5hbEZvcm1hdENvbXBvbmVudENvdW50KSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4
ZWxzIiwgIkluY29ycmVjdCBpbnRlcm5hbCBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiSW5j
b3JyZWN0IGludGVybmFsIGZvcm1hdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjZGVm
aW5lIENIRUNLX0NPTVBPTkVOVF9DT1VOVCBcCiAgICAgaWYgKG51bWJlck9mQ29tcG9uZW50c0Zv
ckZvcm1hdChmb3JtYXQpIDwgaW50ZXJuYWxGb3JtYXRDb21wb25lbnRDb3VudCkgeyBcCi0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJy
ZWFkUGl4ZWxzIiwgIk5vdCBlbm91Z2ggY29tcG9uZW50cyBpbiBmb3JtYXQiKTsgXAorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVh
ZFBpeGVscyIsICJOb3QgZW5vdWdoIGNvbXBvbmVudHMgaW4gZm9ybWF0Iik7IFwKICAgICAgICAg
cmV0dXJuOyBcCiAgICAgfQogCiAjZGVmaW5lIElOVEVSTkFMX0ZPUk1BVF9DSEVDSyh0eXBlTWFj
cm8sIHBpeGVsVHlwZU1hY3JvKSBcCi0gICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OnR5cGVNYWNybyB8fCBwaXhlbHMuZ2V0VHlwZSgpICE9IEpTQzo6cGl4ZWxUeXBlTWFjcm8pIHsg
XAotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAicmVhZFBpeGVscyIsICJ0eXBlIGRvZXMgbm90IG1hdGNoIGludGVybmFsIGZvcm1hdCIp
OyBcCisgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnR5cGVNYWNybyB8
fCBwaXhlbHMuZ2V0VHlwZSgpICE9IEpTQzo6cGl4ZWxUeXBlTWFjcm8pIHsgXAorICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBp
eGVscyIsICJ0eXBlIGRvZXMgbm90IG1hdGNoIGludGVybmFsIGZvcm1hdCIpOyBcCiAgICAgICAg
IHJldHVybjsgXAogICAgIH0gXAotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFRCAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHICYmIGZvcm1hdCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCICYmIGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkg
eyBcCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJyZWFkUGl4ZWxzIiwgIlVua25vd24gZm9ybWF0Iik7IFwKKyAgICBpZiAoZm9ybWF0
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSRUQgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpSRyAmJiBmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAmJiBmb3JtYXQgIT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkEpIHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJVbmtub3duIGZvcm1h
dCIpOyBcCiAgICAgICAgIHJldHVybjsgXAogICAgIH0gXAogICAgIENIRUNLX0NPTVBPTkVOVF9D
T1VOVAogCiAjZGVmaW5lIElOVEVSTkFMX0ZPUk1BVF9JTlRFR0VSX0NIRUNLKHR5cGVNYWNybywg
cGl4ZWxUeXBlTWFjcm8pIFwKLSAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6dHlw
ZU1hY3JvIHx8IHBpeGVscy5nZXRUeXBlKCkgIT0gSlNDOjpwaXhlbFR5cGVNYWNybykgeyBcCi0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJyZWFkUGl4ZWxzIiwgInR5cGUgZG9lcyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwK
KyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZU1hY3JvIHx8IHBp
eGVscy5nZXRUeXBlKCkgIT0gSlNDOjpwaXhlbFR5cGVNYWNybykgeyBcCisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxz
IiwgInR5cGUgZG9lcyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKICAgICAgICAgcmV0
dXJuOyBcCiAgICAgfSBcCi0gICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVE
X0lOVEVHRVIgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICYmIGZv
cm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgJiYgZm9ybWF0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVIpIHsgXAotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJVbmtub3du
IGZvcm1hdCIpOyBcCisgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lO
VEVHRVIgJiYgZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICYmIGZvcm1h
dCAhPSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgJiYgZm9ybWF0ICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBX0lOVEVHRVIpIHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJVbmtub3duIGZv
cm1hdCIpOyBcCiAgICAgICAgIHJldHVybjsgXAogICAgIH0gXAogICAgIENIRUNLX0NPTVBPTkVO
VF9DT1VOVAogCi0jZGVmaW5lIENBU0VfUEFDS0VEX0lOVEVSTkFMX0ZPUk1BVF9DSEVDSyhpbnRl
cm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZTBNYWNybywgcGl4ZWxUeXBlME1hY3Jv
LCB0eXBlMU1hY3JvLCBwaXhlbFR5cGUxTWFjcm8pIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Omlu
dGVybmFsRm9ybWF0TWFjcm86IFwKLSAgICBpZiAoISh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
Ojp0eXBlME1hY3JvICYmIHBpeGVscy5nZXRUeXBlKCkgPT0gSlNDOjpwaXhlbFR5cGUwTWFjcm8p
IFwKLSAgICAgICAgJiYgISh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlMU1hY3JvICYm
IHBpeGVscy5nZXRUeXBlKCkgPT0gSlNDOjpwaXhlbFR5cGUxTWFjcm8pKSB7IFwKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQ
aXhlbHMiLCAidHlwZSBkb2VzIG5vdCBtYXRjaCBpbnRlcm5hbCBmb3JtYXQiKTsgXAorI2RlZmlu
ZSBDQVNFX1BBQ0tFRF9JTlRFUk5BTF9GT1JNQVRfQ0hFQ0soaW50ZXJuYWxGb3JtYXRNYWNybywg
Zm9ybWF0TWFjcm8sIHR5cGUwTWFjcm8sIHBpeGVsVHlwZTBNYWNybywgdHlwZTFNYWNybywgcGl4
ZWxUeXBlMU1hY3JvKSBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnRlcm5hbEZvcm1h
dE1hY3JvOiBcCisgICAgaWYgKCEodHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlw
ZTBNYWNybyAmJiBwaXhlbHMuZ2V0VHlwZSgpID09IEpTQzo6cGl4ZWxUeXBlME1hY3JvKSBcCisg
ICAgICAgICYmICEodHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZTFNYWNybyAm
JiBwaXhlbHMuZ2V0VHlwZSgpID09IEpTQzo6cGl4ZWxUeXBlMU1hY3JvKSkgeyBcCisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJyZWFk
UGl4ZWxzIiwgInR5cGUgZG9lcyBub3QgbWF0Y2ggaW50ZXJuYWwgZm9ybWF0Iik7IFwKICAgICAg
ICAgcmV0dXJuOyBcCiAgICAgfSBcCi0gICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6Zm9ybWF0TWFjcm8pIHsgXAotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJJbnZhbGlkIGZvcm1hdCIpOyBc
CisgICAgaWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9ybWF0TWFjcm8p
IHsgXAorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9FTlVNLCAicmVhZFBpeGVscyIsICJJbnZhbGlkIGZvcm1hdCIpOyBcCiAgICAgICAgIHJldHVy
bjsgXAogICAgIH0gXAogICAgIGJyZWFrOwogCiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdFRo
ZW1lKSB7CiAgICAgY2FzZSBJbnRlcm5hbEZvcm1hdFRoZW1lOjpOb3JtYWxpemVkRml4ZWRQb2lu
dDoKLSAgICAgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUKSB7CisgICAg
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCkgewogICAgICAgICAgICAg
SU5URVJOQUxfRk9STUFUX0NIRUNLKEZMT0FULCBUeXBlRmxvYXQzMik7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBJTlRFUk5BTF9GT1JNQVRfQ0hFQ0soVU5TSUdORURfQllURSwgVHlw
ZVVpbnQ4KTsKQEAgLTM1NzUsMTIgKzM1NzUsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgK
ICAgICB1bnNpZ25lZCBwYWRkaW5nID0gMDsKICAgICBpZiAoIW1faXNSb2J1c3RuZXNzRVhUU3Vw
cG9ydGVkKSB7CiAgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1h
Z2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVu
dCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOwotICAgICAgICBpZiAoZXJyb3IgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFw
aGljc0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KGVycm9yLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAocGl4ZWxzLmJ5dGVMZW5ndGgoKSA8IHRv
dGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZl
clZpZXcgbm90IGxhcmdlIGVub3VnaCBmb3IgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAicmVh
ZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVub3VnaCBmb3IgZGltZW5zaW9u
cyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzY1MiwyMiAr
MzY1MiwyMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYwogICAgIGlmICghdmFsaWRhdGVTdGVu
Y2lsRnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsIGZ1bmMpKQogICAgICAgICByZXR1cm47CiAg
ICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5E
X0JBQ0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJPTlRfQU5EX0JBQ0s6CiAgICAg
ICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNr
ID0gcmVmOwogICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CiAgICAgICAgIG1fc3Rl
bmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZST05UOgog
ICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwogICAgICAgICBtX3N0ZW5jaWxGdW5jTWFz
ayA9IG1hc2s7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJB
Q0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QkFDSzoKICAgICAgICAgbV9zdGVuY2ls
RnVuY1JlZkJhY2sgPSByZWY7CiAgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRlIiwg
ImludmFsaWQgZmFjZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2Ui
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2Vw
YXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKQEAgLTM2ODcsMTggKzM2ODcsMTggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVt
IGZhY2UsIEdDM0R1aW50IG1hc2sKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQog
ICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RlJP
TlRfQU5EX0JBQ0s6CiAgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwogICAgICAgICBtX3N0
ZW5jaWxNYXNrQmFjayA9IG1hc2s7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZST05UOgogICAg
ICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCQUNLOgog
ICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAic3Rl
bmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CkBAIC0z
NzQyLDMzICszNzQyLDMzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHCiAgICAgdGV4LT5zZXRM
ZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5
cGUpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRJbXBs
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0Nv
bnRleHQzRDo6RE9NU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJESW1wbChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250
ZXh0R0w6OkRPTVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSkKIHsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVs
dGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORSk7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9y
IGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PTkUpOwogICAg
IGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2Uy
RCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQo
KTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0
b3IuaW1hZ2VBbHBoYU9wKCk7CisgICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAg
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdl
QWxwaGFPcCgpOwogICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0
b3IuaW1hZ2VQaXhlbERhdGEoKTsKIAogICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwot
ICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJj
ZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4ICYmIGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcgJiYgIWZsaXBZKQorICAgIGlmICh0eXBlID09IEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpE
b05vdGhpbmcgJiYgIWZsaXBZKQogICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwogICAg
IGVsc2UgewogICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1h
Z2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3Jt
YXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWln
aHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4
SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6
VU5QQUNLX0FMSUdOTUVOVCwgMSk7CiAgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhKTsK
ICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOworICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdM
OjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CiB9CiAKIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5j
VmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKQEAgLTM3ODIsNyArMzc4Miw3IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuCiAKICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1
YkltYWdlKSB7CiAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgPT0gVGV4SW1hZ2UgJiYgdGV4dHVy
ZS0+aW1tdXRhYmxlKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidGV4U3RvcmFnZSgp
IGNhbGxlZCBvbiB0aGlzIHRleHR1cmUgcHJldmlvdXNseSIpOworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJ0ZXhTdG9yYWdlKCkgY2FsbGVkIG9uIHRoaXMgdGV4dHVyZSBwcmV2aW91c2x5Iik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF2YWxp
ZGF0ZU5QT1RUZXh0dXJlTGV2ZWwod2lkdGgsIGhlaWdodCwgbGV2ZWwsIGZ1bmN0aW9uTmFtZSkp
CkBAIC0zODAwLDE1ICszODAwLDE1IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBp
biB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCiAgICAgICAgIGlm
ICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJi
YWQgZGltZW5zaW9ucyIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxl
dmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICh0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSAhPSBpbnRlcm5hbEZvcm1hdCB8fCAoaXNXZWJH
TDEoKSAmJiB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgYW5kIGZvcm1hdCBkbyBub3QgbWF0Y2ggdGV4dHVy
ZSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1h
dGNoIHRleHR1cmUiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KQEAgLTM4MzUsNDEgKzM4MzUsNDEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUKICAgICAg
ICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGNoYW5nZVVu
cGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogICAgIHRleElt
YWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CiAgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0Fs
aWdubWVudCk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSog
aW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlIGRvbVNvdXJjZSwg
Ym9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQogewogICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJh
Y3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNv
dXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBH
cmFwaGljc0NvbnRleHRHTDo6Tk9ORSk7CiAgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0
U3VjY2VlZGVkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5p
bWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wIGFscGhh
T3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKICAgICBjb25zdCB2b2lkKiBpbWFn
ZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CiAgICAgCiAgICAg
Ym9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZyAm
JiAhZmxpcFkpCisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZ
VEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIGFscGhhT3AgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZyAmJiAhZmxpcFkpCiAgICAgICAg
IG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghbV9jb250
ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBm
bGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0
aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNv
dXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJh
ZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgICAgIG1fY29udGV4dC0+
cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogCiAg
ICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1h
Z2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSk7CiAKICAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJ
R05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFycmF5QnVm
ZmVyVmlldz4mJiBwaXhlbHMpCkBAIC0zODgzLDcgKzM4ODMsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQwogCiAgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRl
cm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICBpZiAoIWludGVybmFsRm9ybWF0KSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVF
LCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM5MDMsMTggKzM5MDMsMTggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MKICAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5w
aXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0R0w6OlVOUEFDS19BTElH
Tk1FTlQsIDEpOwogCiAgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwg
ZGF0YSk7CiAKICAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0R0w6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KIAogRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIE9wdGlvbmFsPFRleEltYWdl
U291cmNlPiYmIHNvdXJjZSkKIHsKICAgICBpZiAoIXNvdXJjZSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdl
MkQiLCAic291cmNlIGlzIG51bGwiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgInNvdXJjZSBpcyBu
dWxsIik7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC0zOTI4LDcgKzM5MjgsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogCiAgICAgICAgIEdDM0RlbnVtIGludGVybmFsRm9y
bWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAg
IGlmICghaW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52
YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICAgICAgfQogCkBAIC0zOTQxLDcgKzM5NDEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RAogCiAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CiAgICAgICAgIGlmIChpbWFnZSkKLSAgICAg
ICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6
OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgICAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxJbWFnZURhdGE+JiBwaXhlbHMp
IC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKICAgICAgICAgYXV0byB0ZXh0dXJlID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CkBAIC0zOTUwLDcg
KzM5NTAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogCiAgICAgICAgIEdDM0RlbnVtIGlu
dGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7
CiAgICAgICAgIGlmICghaW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIs
ICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdl
MkQiLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgfQogCkBAIC0zOTYxLDIxICszOTYxLDIxIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNECiAgICAgICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwogICAgICAg
ICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4Lgog
ICAgICAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQg
aXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlw
bHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICAgICAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkKKyAgICAg
ICAgaWYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAmJiB0eXBlID09IEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VE
YXRhKHBpeGVscy5nZXQoKSwgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJh
ZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBk
YXRhIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOworICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRH
TDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CiAKICAgICAgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhl
aWdodCgpLCBmb3JtYXQsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCkpOwogCiAgICAgICAgIGlmIChtX3VucGFja0FsaWdu
bWVudCAhPSAxKQotICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAg
ICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdO
TUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwogCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSAs
IFsmXShjb25zdCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4mIGltYWdlKSAtPiBFeGNlcHRpb25P
cjx2b2lkPiB7CkBAIC00MDAwLDE0ICs0MDAwLDE0IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
CiAKICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5h
bEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwi
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxl
dmVsIik7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4
U3ViSW1hZ2UsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Rm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgp
LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhKTsKKyAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhp
Y3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfSwgWyZdKGNvbnN0IFJl
ZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4mIGNhbnZhcykgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewog
ICAgICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQpAQCAtNDAyNCw3ICs0MDI0LDcg
QEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKIAogICAgICAgICBHQzNEZW51bSBpbnRlcm5hbEZv
cm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAg
ICBpZiAoIWludGVybmFsRm9ybWF0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiaW52YWxp
ZCB0ZXh0dXJlIHRhcmdldCBvciBsZXZlbCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImlu
dmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiB7IH07
CiAgICAgICAgIH0KIApAQCAtNDAzNSw3ICs0MDM1LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0QKICAgICAgICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgICAgIHRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBUZXhJbWFnZVNvdXJj
ZShpbWFnZURhdGEuZ2V0KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkNhbnZh
cywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgICAg
IHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291
cmNlOjpDYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogI2lmIEVOQUJMRShWSURFTykKQEAgLTQwNTQsNyAr
NDA1NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAKICAgICAgICAgR0MzRGVudW0gaW50
ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsK
ICAgICAgICAgaWYgKCFpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwg
ImludmFsaWQgdGV4dHVyZSB0YXJnZXQgb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2Uy
RCIsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0IG9yIGxldmVsIik7CiAgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgICAgICB9CiAKQEAgLTQwNjQsNyArNDA2NCw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNECiAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlby5nZXQoKSwgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwogICAgICAg
ICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBp
bWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgIHRleFN1YkltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Uu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
ICNlbmRpZgpAQCAtNDA3NiwzNiArNDA3NiwzNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAog
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHR5cGUsIE9wdGlvbmFsPEpTQzo6VHlw
ZWRBcnJheVR5cGU+IGFycmF5VHlwZSkKIHsKICNkZWZpbmUgVFlQRV9WQUxJREFUSU9OX0NBU0Uo
YXJyYXlUeXBlTWFjcm8pIGlmIChhcnJheVR5cGUgJiYgYXJyYXlUeXBlLnZhbHVlKCkgIT0gSlND
OjphcnJheVR5cGVNYWNybykgeyBcCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVm
ZmVyVmlldyBub3QgIiAjYXJyYXlUeXBlTWFjcm8pOyBcCisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgIkFycmF5QnVmZmVyVmlldyBub3QgIiAjYXJyYXlUeXBlTWFjcm8pOyBcCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IFwKICAgICAgICAgfSBcCiAgICAgICAgIGJyZWFrOwogCiAgICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgogICAgICAgICBUWVBF
X1ZBTElEQVRJT05fQ0FTRShUeXBlVWludDgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKICAgICAgICAgVFlQRV9W
QUxJREFUSU9OX0NBU0UoVHlwZUludDgpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAgICAgIFRZUEVfVkFMSURBVElPTl9D
QVNFKFR5cGVVaW50MTYpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNIT1JUOgogICAgICAgICBUWVBFX1ZBTElEQVRJT05f
Q0FTRShUeXBlSW50MTYpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VF8yXzEwXzEwXzEwX1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9J
TlRfMTBGXzExRl8xMUZfUkVWOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF81XzlfOV85X1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9J
TlRfMjRfODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVDoKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NB
U0UoVHlwZVVpbnQzMik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OklOVDoKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0Uo
VHlwZUludDMyKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3Rl
eHR1cmVfZmxvYXQKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDogLy8gT0VTX3Rl
eHR1cmVfZmxvYXQKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZUZsb2F0MzIpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0
dXJlX2hhbGZfZmxvYXQKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JF
VjoKICAgICAgICAgVFlQRV9WQUxJREFUSU9OX0NBU0UoVHlwZVVpbnQxNik7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00MTIwLDcgKzQxMjAsNyBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQwogICAgIGlmICghcGl4ZWxzKSB7CiAgICAgICAgIGlmIChk
aXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDEzMywxMiArNDEzMywxMiBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQwogICAgIAogICAgIHVuc2lnbmVkIHRvdGFsQnl0ZXNS
ZXF1aXJlZDsKICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6
ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwg
JnRvdGFsQnl0ZXNSZXF1aXJlZCwgbnVsbHB0cik7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpOT19FUlJPUikgeworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHRH
TDo6Tk9fRVJST1IpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVp
cmVkKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5v
dWdoIGZvciByZXF1ZXN0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3
IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTU4LDQyICs0MTU4LDQyIEBAIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8
IDAiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9y
TGV2ZWwgPSBwb3coMi4wLCBtX21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CiAgICAgc3dp
dGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQ6CiAgICAgICAgIGlmICh3aWR0
aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNpemVGb3JM
ZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFu
Z2UiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdl
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6CiAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4U3ViSW1hZ2UgJiYg
d2lkdGggIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0
IGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdodCBm
b3IgY3ViZSBtYXAiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1hZ2Ugd2lkdGgg
PT0gaGVpZ2h0LgogICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxsIGJlIGNoZWNr
ZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgogICAgICAgICBp
ZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYm9yZGVyICE9IDAi
KTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAwIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgCkBAIC00MjAzLDI3ICs0MjAzLDI3IEBAIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQogewog
ICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFO
Q0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBOgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKICAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhU
ZXh0dXJlICYmIGlzV2ViR0wxKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1
cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4
dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIGRlcHRoIGZvcm1hdHMiKTsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBkZXB0aCBmb3JtYXRzIik7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OlNSR0JfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhB
X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OlNSR0JfQUxQSEFfRVhUOgogICAgICAgICBpZiAoIW1fZXh0c1JHQikgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAic1JHQiB0ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJsZWQiKTsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgInNSR0IgdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00MjMx
LDQ5ICs0MjMxLDQ5IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVU
ZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvCiAjaWYgRU5BQkxFKFdFQkdM
MikKICAgICAgICAgaWYgKCFpc1dlYkdMMSgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkgewotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgotICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVI6Ci0gICAgICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRzoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHX0lOVEVHRVI6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0Jf
SU5URUdFUjoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdF
UjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICAgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSOgorICAgICAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpSR19JTlRFR0VSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lO
VEVHRVI6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICNlbmRpZgogICAgICAg
ICB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JU
XzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQ6CiAgICAgICAgIGlmICghbV9vZXNUZXh0dXJl
RmxvYXQgJiYgaXNXZWJHTDEoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIHR5cGUiKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpI
QUxGX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOgog
ICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCAmJiBpc1dlYkdMMSgpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0
Xzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX1NIT1JUOgogICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUgJiYgaXNXZWJH
TDEoKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00MjgxLDEyMyArNDI4
MSwxMjMgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNG
b3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW8KICNpZiBFTkFCTEUoV0VCR0wyKQogICAg
ICAgICBpZiAoIWlzV2ViR0wxKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAg
ICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAgICAgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWOgotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKLSAgICAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKKyAgICAgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6CisgICAgICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpTSE9SVDoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OklOVDoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lH
TkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpVTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0ZXh0dXJlIHR5cGUiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgfQogICAgIAogICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCBhbmQgdHlwZSBpcyBzdXBwb3J0ZWQuCi0jZGVmaW5lIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKGludGVybmFsRm9ybWF0TWFjcm8sIGZvcm1hdE1hY3JvLCB0eXBlMCwg
dHlwZTEsIHR5cGUyLCB0eXBlMywgdHlwZTQpIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OmludGVy
bmFsRm9ybWF0TWFjcm86IFwKLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpm
b3JtYXRNYWNybykgeyBcCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQgZm9y
IGludGVybmFsZm9ybWF0Iik7IFwKKyNkZWZpbmUgSU5URVJOQUxfRk9STUFUX0NBU0UoaW50ZXJu
YWxGb3JtYXRNYWNybywgZm9ybWF0TWFjcm8sIHR5cGUwLCB0eXBlMSwgdHlwZTIsIHR5cGUzLCB0
eXBlNCkgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW50ZXJuYWxGb3JtYXRNYWNybzog
XAorICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZvcm1hdE1hY3Jv
KSB7IFwKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCBmb3IgaW50ZXJuYWxm
b3JtYXQiKTsgXAogICAgICAgICByZXR1cm4gZmFsc2U7IFwKICAgICB9IFwKICAgICBpZiAodHlw
ZSAhPSB0eXBlMCAmJiB0eXBlICE9IHR5cGUxICYmIHR5cGUgIT0gdHlwZTIgJiYgdHlwZSAhPSB0
eXBlMyAmJiB0eXBlICE9IHR5cGU0KSB7IFwKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTIHx8ICh0eXBlMCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVCAmJiB0eXBlMSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAmJiB0
eXBlMiAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAmJiB0eXBlMyAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVCkpIHsgXAotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHR5cGUgZm9yIGludGVybmFsZm9ybWF0Iik7IFwKKyAgICAgICAgaWYgKHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTIHx8ICh0eXBlMCAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6SEFMRl9GTE9BVCAmJiB0eXBlMSAhPSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9G
TE9BVCAmJiB0eXBlMiAhPSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAmJiB0eXBlMyAh
PSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCkpIHsgXAorICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGludGVybmFsZm9ybWF0Iik7IFwKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgXAogICAgICAgICB9IFwKICAgICB9IFwKICAgICBicmVhazsKICAgICBz
d2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCICAg
ICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzZfNSAgLCBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQSAgICAgICAgICAgICAgLCBSR0JBICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoTFVNSU5BTkNFX0FMUEhBICAgLCBMVU1JTkFOQ0VfQUxQSEEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoTFVNSU5BTkNFICAg
ICAgICAgLCBMVU1JTkFOQ0UgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoQUxQSEEgICAgICAgICAgICAgLCBBTFBIQSAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUjggICAgICAgICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjhfU05PUk0gICAgICAgICAg
LCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoUjE2RiAgICAgICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjMy
RiAgICAgICAgICAgICAgLCBSRUQgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjhVSSAgICAgICAgICAgICAgLCBSRURf
SU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUjhJICAgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjE2VUkgICAg
ICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVCAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjE2SSAgICAgICAgICAgICAgLCBSRURfSU5URUdF
UiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUjMyVUkgICAgICAgICAgICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUjMySSAgICAgICAgICAg
ICAgLCBSRURfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUkc4ICAgICAgICAgICAgICAgLCBSRyAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
Ukc4X1NOT1JNICAgICAgICAgLCBSRyAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpC
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkcxNkYgICAgICAgICAgICAgLCBS
RyAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoUkczMkYgICAgICAgICAgICAgLCBSRyAgICAgICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkc4VUkg
ICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkc4SSAgICAgICAgICAgICAgLCBSR19JTlRF
R0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoUkcxNlVJICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkcxNkkgICAgICAg
ICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkczMlVJICAgICAgICAgICAgLCBSR19JTlRFR0VSICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUkczMkkgICAgICAgICAgICAgLCBSR19JTlRFR0VSICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOCAgICAgICAgICAgICAg
LCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoU1JHQjggICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdC
NTY1ICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF81XzZfNSAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOF9TTk9STSAgICAgICAgLCBSR0Ig
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUjExRl9HMTFGX0IxMEYgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOV9FNSAg
ICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9J
TlRfNV85XzlfOV9SRVYgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTZGICAgICAgICAgICAgLCBSR0IgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUkdCMzJGICAgICAgICAgICAgLCBSR0IgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOFVJICAgICAgICAg
ICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUkdCOEkgICAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
UkdCMTZVSSAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTZJICAgICAgICAgICAgLCBS
R0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVCAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoUkdCMzJVSSAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMzJJ
ICAgICAgICAgICAgLCBSR0JfSU5URUdFUiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTggICAgICAgICAgICAgLCBSR0JBICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoU1JHQjhfQUxQSEE4ICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQThfU05PUk0g
ICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCNV9BMSAgICAgICAgICAgLCBSR0JBICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xLCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NB
U0UoUkdCQTQgICAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF80XzRfNF80LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTBfQTIgICAgICAgICAg
LCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8x
MF8xMF9SRVYgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5U
RVJOQUxfRk9STUFUX0NBU0UoUkdCQTE2RiAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdC
QTMyRiAgICAgICAgICAgLCBSR0JBICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQThVSSAgICAgICAgICAgLCBSR0JB
X0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxf
Rk9STUFUX0NBU0UoUkdCQThJICAgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCMTBfQTJV
SSAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7
Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTE2VUkgICAgICAgICAgLCBSR0JBX0lOVEVH
RVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFU
X0NBU0UoUkdCQTE2SSAgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTMySSAgICAgICAg
ICAgLCBSR0JBX0lOVEVHRVIgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
SU5URVJOQUxfRk9STUFUX0NBU0UoUkdCQTMyVUkgICAgICAgICAgLCBSR0JBX0lOVEVHRVIgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0Uo
REVQVEhfQ09NUE9ORU5UICAgLCBERVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlQgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhfQ09NUE9ORU5UMTYgLCBE
RVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJO
QUxfRk9STUFUX0NBU0UoREVQVEhfQ09NUE9ORU5UMjQgLCBERVBUSF9DT01QT05FTlQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhf
Q09NUE9ORU5UMzJGLCBERVBUSF9DT01QT05FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEhfU1RFTkNJTCAgICAgLCBERVBUSF9T
VEVOQ0lMICAsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9S
TUFUX0NBU0UoREVQVEgyNF9TVEVOQ0lMOCAgLCBERVBUSF9TVEVOQ0lMICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgSU5URVJOQUxfRk9STUFUX0NBU0UoREVQVEgzMkZfU1RF
TkNJTDggLCBERVBUSF9TVEVOQ0lMICAsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF8zMl9VTlNJ
R05FRF9JTlRfMjRfOF9SRVYsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUOgorICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHQiAgICAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfU0hPUlRfNV82XzUgICwgR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQgICAgICAgICAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEgICAgICAgICAgICAgICwg
UkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpIQUxGX0ZMT0FULCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQpOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKExVTUlOQU5DRV9BTFBIQSAgICwgTFVNSU5BTkNFX0FMUEhBLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FU
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKExVTUlO
QU5DRSAgICAgICAgICwgTFVNSU5BTkNFICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAg
ICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKEFMUEhBICAgICAgICAgICAgICwgQUxQSEEg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFI4ICAgICAgICAgICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4X1NOT1JNICAg
ICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIxNkYgICAgICAgICAgICAgICwgUkVEICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFIzMkYgICAgICAgICAgICAgICwgUkVEICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFI4VUkgICAgICAgICAgICAg
ICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFI4SSAgICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIx
NlVJICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIxNkkgICAgICAgICAgICAgICwgUkVE
X0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFIzMlVJICAgICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFIzMkkgICAg
ICAgICAgICAgICwgUkVEX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SU5UICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOCAgICAgICAgICAgICAgICwgUkcgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHOF9TTk9STSAgICAgICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZGICAgICAgICAg
ICAgICwgUkcgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMzJGICAgICAgICAgICAgICwgUkcgICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHOFVJICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHOEkgICAgICAgICAgICAgICwg
UkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFJHMTZVSSAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMTZJ
ICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHMzJVSSAgICAgICAgICAgICwgUkdfSU5U
RUdFUiAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHMzJJICAgICAgICAgICAgICwgUkdfSU5URUdFUiAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjggICAgICAg
ICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFNSR0I4ICAgICAgICAgICAgICwgUkdCICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFJHQjU2NSAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfU0hPUlRfNV82XzUgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhfU05PUk0gICAgICAg
ICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFIxMUZfRzExRl9CMTBGICAgICwgUkdCICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJH
QjlfRTUgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UXzVfOV85XzlfUkVWICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9B
VCAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2RiAgICAgICAgICAgICwgUkdC
ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHQjMyRiAgICAgICAgICAgICwgUkdCICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhVSSAg
ICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjhJICAgICAgICAgICAgICwgUkdCX0lOVEVH
RVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKFJHQjE2VUkgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjE2SSAgICAgICAg
ICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6U0hPUlQgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjMyVUkgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KFJHQjMySSAgICAgICAgICAgICwgUkdCX0lOVEVHRVIgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4ICAgICAgICAgICAgICwg
UkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKFNSR0I4X0FMUEhBOCAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4
X1NOT1JNICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6QllURSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjVfQTEgICAgICAgICAgICwgUkdCQSAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNV81XzVfMSwgR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAsIDAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZP
Uk1BVF9DQVNFKFJHQkE0ICAgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQjEwX0EyICAg
ICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5U
XzJfMTBfMTBfMTBfUkVWICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkExNkYgICAgICAgICAgICwgUkdCQSAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6RkxPQVQgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9D
QVNFKFJHQkEzMkYgICAgICAgICAgICwgUkdCQSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4VUkgICAgICAgICAg
ICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElO
VEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkE4SSAgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6QllURSAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJH
QjEwX0EyVUkgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkExNlVJICAgICAgICAgICwgUkdC
QV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQgICAgICAgICAg
ICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFM
X0ZPUk1BVF9DQVNFKFJHQkExNkkgICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEzMkkg
ICAgICAgICAgICwgUkdCQV9JTlRFR0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6SU5UICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAs
IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKFJHQkEzMlVJICAgICAgICAgICwgUkdCQV9JTlRF
R0VSICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAg
LCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1B
VF9DQVNFKERFUFRIX0NPTVBPTkVOVCAgICwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
VU5TSUdORURfSU5UICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVO
VDE2ICwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlQg
ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAg
ICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX0NPTVBPTkVOVDI0ICwgREVQVEhfQ09NUE9ORU5U
LCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgLCAwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNF
KERFUFRIX0NPTVBPTkVOVDMyRiwgREVQVEhfQ09NUE9ORU5ULCBHcmFwaGljc0NvbnRleHRHTDo6
RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRIX1NURU5DSUwgICAgICwg
REVQVEhfU1RFTkNJTCAgLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0XzggICAg
ICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVS
TkFMX0ZPUk1BVF9DQVNFKERFUFRIMjRfU1RFTkNJTDggICwgREVQVEhfU1RFTkNJTCAgLCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgLCAwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAw
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIElOVEVSTkFMX0ZPUk1BVF9DQVNFKERFUFRI
MzJGX1NURU5DSUw4ICwgREVQVEhfU1RFTkNJTCAgLCBHcmFwaGljc0NvbnRleHRHTDo6RkxPQVRf
MzJfVU5TSUdORURfSU5UXzI0XzhfUkVWLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAwICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0VYVDoKICAgICAgICAgaWYgKGZvcm1h
dCAhPSBpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQg
YW5kIGludGVybmFsZm9ybWF0IG11c3QgbWF0Y2giKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBtdXN0IG1hdGNoIik7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV82XzUgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHR5cGUgZm9yIGludGVybmFsIGZvcm1hdCIpOworICAgICAgICBpZiAodHlwZSAhPSBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdM
OjpVTlNJR05FRF9TSE9SVF81XzZfNSAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9B
VCAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUyAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdHlwZSBmb3IgaW50ZXJuYWwgZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VY
VDoKICAgICAgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbEZvcm1hdCkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJmb3JtYXQgYW5kIGludGVybmFsZm9ybWF0IG11c3QgbWF0Y2giKTsKKyAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0IGFuZCBpbnRlcm5hbGZvcm1hdCBtdXN0IG1h
dGNoIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VT
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVQpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBpbnRlcm5hbCBmb3JtYXQiKTsKKyAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCAmJiB0eXBlICE9IEdy
YXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkZMT0FUICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxP
QVRfT0VTICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVQpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBpbnRlcm5hbCBmb3JtYXQiKTsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIlVua25vd24gaW50ZXJuYWwgZm9ybWF0
Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiVW5rbm93biBpbnRlcm5hbCBmb3JtYXQiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICN1bmRlZiBJTlRFUk5BTF9GT1JNQVRfQ0FTRQpA
QCAtNDQyOCw3ICs0NDI4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEcKIHsKICAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJjb3B5VGV4SW1hZ2UyRCIsIENvcHlUZXhJbWFnZSwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJu
YWxGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICBpZiAoIXZh
bGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlUZXhJbWFnZTJEIiwgQ29weVRleEltYWdlLCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRl
cm5hbEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4SW50ZXJuYWxGb3JtYXQoImNvcHlU
ZXhJbWFnZTJEIiwgaW50ZXJuYWxGb3JtYXQpKQogICAgICAgICByZXR1cm47CkBAIC00NDM2LDE2
ICs0NDM2LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHCiAgICAgaWYgKCF0ZXgpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJp
bmF0aW9uVmFsaWQoaW50ZXJuYWxGb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1h
dCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBh
dGlibGUgZm9ybWF0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlz
IGluY29tcGF0aWJsZSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
IWlzR0xFUzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lk
dGgsIGhlaWdodCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2Vy
IG9mIDIiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJh
bWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgJnJlYXNv
bikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOworICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNj
ZXNzKGdyYXBoaWNzQ29udGV4dEdMKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwg
ImNvcHlUZXhJbWFnZTJEIiwgcmVhc29uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOwpAQCAtNDQ1NCw3ICs0NDU0LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEcKICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwogICAg
IGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRo
KCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZj
bGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewogICAgICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAgIGludGVybmFsRm9ybWF0LCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaW50
ZXJuYWxGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBtX3VucGFja0Fs
aWdubWVudCk7CiAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQg
PiAwKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAogICAgICAgICAgICAgICAgIGNsaXBw
ZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKQEAgLTQ0NjMsMjEg
KzQ0NjMsMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEcKICAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyKTsKIAogICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMg
bm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCi0gICAg
dGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JHQkZv
cm1hdChHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCkKIHsKLSAgICByZXR1cm4gaW50ZXJuYWxGb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQgotICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQQotICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCOAotICAgICAgICB8fCBpbnRlcm5hbEZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTg7CisgICAgcmV0dXJuIGludGVybmFsRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpSR0IKKyAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkEKKyAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlJHQjgKKyAgICAgICAgfHwgaW50ZXJuYWxGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OlJHQkE4OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgT3B0aW9uYWw8
VGV4SW1hZ2VTb3VyY2U+IHNvdXJjZSkKIHsKICAgICBpZiAoIXNvdXJjZSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleElt
YWdlMkQiLCAic291cmNlIGlzIG51bGwiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInNvdXJjZSBpcyBu
dWxsIik7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCkBAIC00NDk2LDggKzQ0OTYsOCBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICAvLyBGSVhNRTogcmVzdHJpY3Rpb24g
b2YgKFJHQiB8fCBSR0JBKS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hlbgogICAg
ICAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9u
cyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KICAgICAgICAgaWYgKHRleHR1cmUKLSAgICAgICAgICAg
ICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEpCi0gICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBKQorICAg
ICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewog
ICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRl
cm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0
ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCpt
X2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CkBAIC00NTEwLDcg
KzQ1MTAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICAvLyBOb3JtYWwgcHVy
ZSBTVyBwYXRoLgogICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1h
Z2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwogICAgICAgICBpZiAoaW1hZ2Up
Ci0gICAgICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJj
ZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CisgICAg
ICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1h
Z2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxJbWFnZURhdGE+JiBwaXhlbHMpIC0+
IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKICAgICAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgVGV4SW1hZ2UsIFNvdXJjZUltYWdl
RGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4
ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKQEAgLTQ1MTksMTkgKzQ1MTks
MTkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgYm9vbCBuZWVkQ29udmVyc2lv
biA9IHRydWU7CiAgICAgICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBv
ZiBmb3JtYXQgUkdCQTguCiAgICAgICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRl
c3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8g
RmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgICAgIGlmICgh
bV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFKQorICAgICAgICBpZiAoIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgJiYgdHlwZSA9
PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkKICAgICAgICAgICAgIG5lZWRDb252
ZXJzaW9uID0gZmFsc2U7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKCFtX2NvbnRl
eHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLmdldCgpLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAi
YmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBo
aWNzQ29udGV4dEdMOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKICAgICAgICAgdGV4SW1hZ2UyREJh
c2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxz
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgp
IDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSk7CiAgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVu
dCAhPSAxKQotICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHRHTDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0sIFsmXShj
b25zdCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4mIGltYWdlKSAtPiBFeGNlcHRpb25Pcjx2b2lk
PiB7CiAgICAgICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCkBAIC00NTUyLDcgKzQ1
NTIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICBpZiAoIWltYWdlRm9yUmVu
ZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBUZXhJbWFnZSwgU291cmNlSFRN
TEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlRm9yUmVu
ZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwg
MCwgMCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIHRleEltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVu
ZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5k
ZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0sIFsmXShjb25zdCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBjYW52YXMpIC0+IEV4Y2Vw
dGlvbk9yPHZvaWQ+IHsKICAgICAgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKQEAg
LTQ1NzIsOCArNDU3Miw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIC8vIEZJ
WE1FOiByZXN0cmljdGlvbiBvZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJl
IGxpZnRlZCB3aGVuCiAgICAgICAgIC8vIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1
cmUgaW1wbGVtZW50YXRpb25zIGFyZSBmdWxseSBmdW5jdGlvbmFsLgogICAgICAgICBpZiAodGV4
dHVyZQotICAgICAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAgICAgICAgICYmIHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgICAgICYmIChm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkEpCisgICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9CWVRFKSB7CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9
IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAg
aWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFs
aWQodGFyZ2V0LCBsZXZlbCkpIHsKICAgICAgICAgICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVy
ID0gY2FudmFzLT5idWZmZXIoKTsKQEAgLTQ1ODgsNyArNDU4OCw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50CiAgICAgICAgIGlmIChpbWFnZURhdGEpCiAgICAgICAgICAgICB0ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIFRleEltYWdlU291
cmNlKGltYWdlRGF0YS5nZXQoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXhJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52
YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkNhbnZhcywg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgICAgIHRl
eEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6Q2Fu
dmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KICNpZiBFTkFCTEUoVklERU8pCkBAIC00NjA4LDkgKzQ2MDgsOSBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICAvLyBGSVhNRTogVGhlIGN1cnJlbnQg
cmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUgUkdCIG9yIFJHQkEsCiAg
ICAgICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVOU0lHTkVEX0JZVEUgYW5kIGxldmVsIHNob3VsZCBi
ZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUuCiAgICAgICAgIGF1dG8gdGV4dHVy
ZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwot
ICAgICAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRl
eHR1cmUKLSAgICAgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8
fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCi0gICAgICAgICAgICAmJiB0eXBl
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgIGlmIChHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQorICAgICAgICAgICAg
JiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQSkKKyAgICAgICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUKICAgICAgICAgICAgICYmICFsZXZlbCkgewogICAgICAgICAgICAg
YXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJu
YWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7CkBAIC00NjI1
LDcgKzQ2MjUsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpm
YXN0Q29weUltYWdlTW9kZSgpKTsKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9N
U291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsK
KyAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZp
ZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KICNlbmRpZgpAQCAtNDY0MCw3ICs0NjQwLDcgQEAgUmVmUHRyPElt
YWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdl
JiBpbWFnZSwgaW50IHcKICAgICBzaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBJ
bWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUp
OwogICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpPVVRfT0ZfTUVNT1JZ
LCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIApAQCAtNDY1Nyw3ICs0NjU3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWQK
ICAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0
KCkpOwogICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VC
dWZmZXIoc2l6ZSk7CiAgICAgaWYgKCFidWYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBt
ZW1vcnkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6Ok9V
VF9PRl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwpAQCAtNDY3NiwyNSArNDY3NiwyNSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIHBuYW1lLCBHQwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47CiAgICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgIGlmICgoaXNGbG9hdCAmJiBwYXJh
bWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRVBFQVQpCi0gICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFU
KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9TOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBpZiAoKGlzRmxvYXQgJiYgcGFyYW1m
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHRH
TDo6UkVQRUFUKQorICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0R0w6
Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0R0w6OlJFUEVBVCkp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIiKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpURVhUVVJFX01BWF9BTklTT1RST1BZ
X0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCiAgICAgICAgIGlmICghbV9l
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxl
ZCIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc0Zs
b2F0KSB7CkBAIC00NzIyLDcgKzQ3MjIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBw
cm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NzM1LDcgKzQ3MzUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJm
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0y
ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC00NzQ4LDcgKzQ3NDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVu
dCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJl
bnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NzYxLDcgKzQ3NjEs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00Zihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTRmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZv
cm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC00Nzc0LDEyICs0Nzc0LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFpIiwgImxvY2F0aW9uIG5vdCBmb3Ig
Y3VycmVudCBwcm9ncmFtIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoKGxv
Y2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRp
b24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChp
bnQpbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4
dHVyZSB1bml0Iik7CisgICAgaWYgKChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dEdMOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4dHVyZVVuaXRzLnNpemUoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwg
InVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC00NzkyLDcgKzQ3OTIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBw
cm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00ODA1LDcgKzQ4MDUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNp
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0z
aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC00ODE4LDcgKzQ4MTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVu
dCBwcm9ncmFtIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJl
bnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00ODY1LDExICs0ODY1
LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sCiAgICAgYXV0byBkYXRhID0gdi5kYXRhKCk7
CiAgICAgYXV0byBsZW5ndGggPSB2Lmxlbmd0aCgpOwogCi0gICAgaWYgKGxvY2F0aW9uLT50eXBl
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSB7CisgICAgaWYgKGxvY2F0aW9uLT50
eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUo
KSA9PSBHcmFwaGljc0NvbnRleHRHTDo6U0FNUExFUl9DVUJFKSB7CiAgICAgICAgIGZvciAoYXV0
byBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoZGF0YVtpXSA+PSBz
dGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKICAgICAgICAgICAgICAg
ICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0lenUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0
eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0cy5zaXplKCksIGksIGRhdGFbaV0sIGxvY2F0aW9u
LT50eXBlKCkpOwotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5p
dCIpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDkz
MSwxMiArNDkzMSwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVzZVByb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogICAgIGlmIChkZWxldGVkKQogICAgICAgICBwcm9n
cmFtID0gMDsKICAgICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAidXNl
UHJvZ3JhbSIsICJwcm9ncmFtIG5vdCB2YWxpZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKICAgICAgICAgaWYgKG1fY3Vy
cmVudFByb2dyYW0pCi0gICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKGdy
YXBoaWNzQ29udGV4dDNEKCkpOworICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRh
Y2hlZChncmFwaGljc0NvbnRleHRHTCgpKTsKICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHBy
b2dyYW07CiAgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3Jh
bSkpOwogICAgICAgICBpZiAocHJvZ3JhbSkKQEAgLTQ5OTYsNDQgKzQ5OTYsNDQgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGlu
ZGV4LCBHQzNEaW50IHNpemUKICAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQogICAg
ICAgICByZXR1cm47CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QllURToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkJZVEU6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTSE9S
VDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9SVDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDoKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRy
aWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2lu
dGVyIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAi
aW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHNp
emUgPCAxIHx8IHNpemUgPiA0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6
ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2
ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBzdHJpZGUiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2lu
dGVyIiwgImJhZCBzdHJpZGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAob2Zm
c2V0IDwgMCB8fCBvZmZzZXQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIG9mZnNldCIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0
dHJpYlBvaW50ZXIiLCAiYmFkIG9mZnNldCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmICghbV9ib3VuZEFycmF5QnVmZmVyICYmIG9mZnNldCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRy
aWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRy
aWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBib3VuZCBi
dWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5cGUgYW5kIHN0cmlkZQog
ICAgIGF1dG8gdHlwZVNpemUgPSBzaXplSW5CeXRlcyh0eXBlKTsKICAgICBpZiAoIXR5cGVTaXpl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCAidmVydGV4
QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0
cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJp
YlBvaW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAq
IHR5cGVTaXplOwpAQCAtNTA1NCw3ICs1MDU0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQogewogICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBh
bHJlYWR5IGxvc3QiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBhbHJlYWR5IGxv
c3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTA4NiwxMSArNTA4NiwxMSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpMb3N0QwogICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBs
ZW1lbnRhdGlvbiBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVhc29uYWJseQogICAgIC8vIGxhcmdl
IG51bWJlciBvZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJy
b3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgIGlmIChtX2NvbnRl
eHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0R0w6Ok5PX0VSUk9SKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0g
KG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5
SW5Db25zb2xlOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05U
RVhUX0xPU1RfV0VCR0wsICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsK
KyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6Q09OVEVYVF9MT1NUX1dF
QkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBsb3N0IiwgZGlzcGxheSk7CiAKICAgICAvLyBE
b24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMg
Ym90aCBiZWVuCiAgICAgLy8gZGlzcGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJl
dmVudGVkLgpAQCAtNTEwNCwxMyArNTEwNCwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Qwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmb3JjZVJlc3RvcmVDb250ZXh0KCkKIHsK
ICAgICBpZiAoIWlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29u
dGV4dCIsICJjb250ZXh0IG5vdCBsb3N0Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNv
bnRleHQgbm90IGxvc3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghbV9y
ZXN0b3JlQWxsb3dlZCkgewogICAgICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gU3ludGhl
dGljTG9zdENvbnRleHQpCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IHJl
c3RvcmF0aW9uIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJj
b250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2VkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTUxNzcsNyArNTE3Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
c3RvcCgpCiB7CiAgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikgewogICAgICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250
ZXh0KTsKLSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIGRlc3Ry
b3lHcmFwaGljc0NvbnRleHRHTCgpOwogICAgIH0KIH0KIApAQCAtNTIwNSw3ICs1MjA1LDcgQEAg
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0Rl
bnVtIHBuYW1lKQogCiBWZWN0b3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQogewotICAgIGlmIChwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7CisgICAgaWYgKHBuYW1lICE9
IEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9XUklURU1BU0spIHsKICAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC01MjUxLDEzICs1MjUxLDEz
IEBAIFJlZlB0cjxGbG9hdDMyQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFdl
YkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNECiAgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5h
bWUsIHZhbHVlKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIHN3aXRjaCAocG5hbWUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfUkFOR0U6CiAgICAgICAgIGxlbmd0aCA9IDI7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkJMRU5EX0NPTE9SOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0NM
RUFSX1ZBTFVFOgogICAgICAgICBsZW5ndGggPSA0OwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgpAQCAtNTI3MiwxMSArNTI3MiwxMSBAQCBSZWZQdHI8SW50MzJBcnJheT4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bQogICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSAwOwogICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVklFV1BPUlRfRElNUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVklF
V1BPUlRfRElNUzoKICAgICAgICAgbGVuZ3RoID0gMjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VklFV1BPUlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U0NJU1NPUl9CT1g6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VklFV1BPUlQ6CiAgICAgICAgIGxlbmd0aCA9
IDQ7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC01MzA2LDEwICs1MzA2LDEwIEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtCiAgICAgICAgIHVzZXNBdExlYXN0T25lQmxhY2tUZXh0
dXJlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoYmFkVGV4dHVyZSAhPSBtX2FjdGl2ZVRleHR1cmVV
bml0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoYmFkVGV4dHVyZSAr
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmFj
dGl2ZVRleHR1cmUoYmFkVGV4dHVyZSArIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCk7CiAg
ICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKHJl
c2V0QWN0aXZlVW5pdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGJh
ZFRleHR1cmUgKyBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOworICAgICAgICAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKGJhZFRleHR1cmUgKyBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRTApOwogICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4MkQ7CkBAIC01MzI1LDEyICs1MzI1LDEy
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2hlY2tUZXh0dXJlQ29tcGxldGVu
ZXNzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtCiAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gdGV4
dHVyZVVuaXQudGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChuZWVkc1RvVXNlQmxhY2syRFRleHR1cmUpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4
MkQuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRC5nZXQoKSkpOwogICAgICAg
ICBpZiAobmVlZHNUb1VzZUJsYWNrM0RUZXh0dXJlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3Ja
ZXJvKHRleEN1YmVNYXAuZ2V0KCkpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhD
dWJlTWFwLmdldCgpKSk7CiAgICAgfQogICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCi0gICAgICAg
IG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0ICsgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1f
YWN0aXZlVGV4dHVyZVVuaXQgKyBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRTApOwogCiAgICAg
Zm9yICh1bnNpZ25lZCByZW5kZXJhYmxlIDogbm9Mb25nZXJVbnJlbmRlcmFibGUpCiAgICAgICAg
IG1fdW5yZW5kZXJhYmxlVGV4dHVyZVVuaXRzLnJlbW92ZShyZW5kZXJhYmxlKTsKQEAgLTUzNDIs
MzEgKzUzNDIsMzEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVGYWxs
YmFja0JsYWNrVGV4dHVyZXMxeDEoKQogewogICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHsw
LCAwLCAwLCAyNTV9OwogICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0g
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV9ibGFja1RleHR1cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG1f
YmxhY2tUZXh0dXJlMkQtPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCAx
LCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCAwKTsKICAgICBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmpl
Y3QoKSk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0g
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
MSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7
CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9D
VUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNr
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsCisg
ICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQSwgMSwgMSwKKyAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ksIDAs
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAg
ICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIDEsIDEsCisgICAgICAg
IDAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
QllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEsIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7CiB9CiAKIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChHQzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gY29sb3JC
dWZmZXJGb3JtYXQpCiB7Ci0gICAgYXV0byBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENo
YW5uZWxCaXRzQnlGb3JtYXQodGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIGF1dG8gaGF2ZSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0
KTsKKyAgICBhdXRvIG5lZWQgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Q2hhbm5lbEJp
dHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7CisgICAgYXV0byBoYXZlID0gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQp
OwogICAgIHJldHVybiAobmVlZCAmIGhhdmUpID09IG5lZWQ7CiB9CiAKQEAgLTUzNzUsOCArNTM3
NSw4IEBAIEdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvdW5kRnJhbWVi
dWZmZXJDb2xvckZvcm1hdCgpCiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpOwogICAgIGlmIChtX2F0dHJpYnV0ZXMuYWxw
aGEpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6UkdCOwogfQogCiBpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKQEAgLTUz
OTcsMzAgKzUzOTcsMzAgQEAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGEKIHsKICAgICBSZWZQdHI8
V2ViR0xUZXh0dXJlPiB0ZXh0dXJlOwogICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFXzJEOgogICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVU
ZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6
CiAgICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdGFyZ2V0Iik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQogICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgIGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXAp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0
c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJn
ZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTU0MjgsNyArNTQyOCw3IEBAIFJlZlB0cjxX
ZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoY29uc3QgY2hhCiAgICAgICAgIG1fdW5yZW5kZXJhYmxlVGV4dHVyZVVuaXRzLmFkZCht
X2FjdGl2ZVRleHR1cmVVbml0KTsKIAogICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJubyB0ZXh0dXJlIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIp
OwogICAgIHJldHVybiB0ZXh0dXJlOwogfQogCkBAIC01NDM2LDcgKzU0MzYsNyBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLAogewogICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25M
ZW5ndGggPSAyNTY7CiAgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25M
ZW5ndGgpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gbGVuZ3RoID4gMjU2Iik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NDQ1LDcgKzU0NDUsNyBAQCBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkK
IHsKICAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNpemUgPCAw
Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzaXplIDwgMCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtNTQ1NSw3ICs1NDU1LDcgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFMKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5n
dGgoKTsgKytpKSB7CiAgICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJzdHJpbmcgbm90IEFTQ0lJIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CkBAIC01NDY1LDI0ICs1NDY1LDI0IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBTCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVu
Y0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsKQogewogICAgIGlmIChsZXZlbCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVs
IDwgMCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
MkQ6CiAgICAgICAgIGlmIChsZXZlbCA+PSBtX21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICBpZiAobGV2ZWwgPj0gbV9t
YXhDdWJlTWFwVGV4dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0
IG9mIHJhbmdlIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBA
IC01NTExLDcgKzU1MTEsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNhbGN1bGF0ZUJ5dGVz
Rm9yQVNUQyhHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCiBib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyYgcGl4ZWxzKQogewogICAgIGlmICh3aWR0aCA8
IDAgfHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwg
MCIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC01NTM1LDE2ICs1NTM1LDE2IEBAIGJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3Qg
Y2hhciogZnVuY3RpCiAgICAgICAgIEJsb2NrUGFyYW1ldGVycyB7IDEyLCAxMCwga0FTVENCbG9j
a1NpemUgfSwKICAgICAgICAgQmxvY2tQYXJhbWV0ZXJzIHsgMTIsIDEyLCBrQVNUQ0Jsb2NrU2l6
ZSB9CiAgICAgfTsKLSAgICBjb25zdCBHQzNEZW51bSBBU1RDRW51bVN0YXJ0UkdCQSA9IEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjsKLSAgICBjb25zdCBHQzNEZW51
bSBBU1RDRW51bVN0YXJ0U1JHQjggPSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfNHg0X0tIUjsKKyAgICBjb25zdCBHQzNEZW51bSBBU1RDRW51bVN0YXJ0UkdCQSA9
IEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjsKKyAgICBjb25zdCBH
QzNEZW51bSBBU1RDRW51bVN0YXJ0U1JHQjggPSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfNHg0X0tIUjsKIAogICAgIGNvbnN0IGludCBrRUFDQW5kRVRDMkJsb2Nr
U2l6ZSA9IDQ7CiAKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9BVENfUkdCX0FNRDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RVRDMV9SR0I4X09F
UzogeworICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9BVENfUkdCX0FNRDoKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6RVRDMV9SR0I4X09FUzogewogICAgICAgICBjb25zdCBpbnQga0Jsb2Nr
U2l6ZSA9IDg7CiAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CiAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OwpAQCAtNTU1MywxMCArNTU1MywxMCBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aQogICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3Nz
ICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRDoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURf
QUxQSEFfQU1EOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElD
SVRfQUxQSEFfQU1EOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX0FUQ19SR0JB
X0lOVEVSUE9MQVRFRF9BTFBIQV9BTUQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IGlu
dCBrQmxvY2tTaXplID0gMTY7CiAgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0
OwpAQCAtNTU2Niw4ICs1NTY2LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGkKICAgICAgICAg
ICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Js
b2NrU2l6ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgogICAgICAgICB7CiAgICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CiAgICAgICAgICAgICBjb25zdCBpbnQga0Js
b2NrV2lkdGggPSA4OwpAQCAtNTU3NSw4ICs1NTc1LDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5j
dGkKICAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dp
ZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1Np
emU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKICAgICAgICAgewogICAgICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja1NpemUgPSA4OwogICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dp
ZHRoID0gMTY7CkBAIC01NTg0LDc1ICs1NTg0LDc1IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rp
CiAgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0
aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiAyICsgNykgLyBrQmxvY2tTaXpl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfQVNUQ181eDRfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ181eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfQVNUQ182eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
QVNUQ182eDZfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNU
Q184eDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184
eDZfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDhf
S0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tI
UjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5z
aW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9u
c0dMOjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzEweDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ18xMHgxMF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURf
UkdCQV9BU1RDXzEyeDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JBX0FTVENfMTJ4MTJfS0hSOgogICAgICAgICBieXRlc1JlcXVpcmVkID0gY2FsY3VsYXRlQnl0
ZXNGb3JBU1RDKHdpZHRoLCBoZWlnaHQsIEFTVENQYXJhbWV0ZXJzW2Zvcm1hdCAtIEFTVENFbnVt
U3RhcnRSR0JBXSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hS
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4
Nl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FT
VENfOHg4X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ18xMHg1X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMHg2X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOgor
ICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9L
SFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
NXg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ182eDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FM
UEhBOF9BU1RDXzZ4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfOHg1X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hS
OgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEy
eDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMngxMl9LSFI6CiAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBjYWxjdWxhdGVCeXRlc0Zv
ckFTVEMod2lkdGgsIGhlaWdodCwgQVNUQ1BhcmFtZXRlcnNbZm9ybWF0IC0gQVNUQ0VudW1TdGFy
dFNSR0I4XSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1IxMV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1Ix
MV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6Ci0gICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9F
VEMyOiB7CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUjExX0VBQzoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TSUdORURfUjExX0VBQzoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0I4X0VUQzI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfU1JHQjhfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6IHsKICAgICAgICAgQ2hl
Y2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRCeXRlc1JlcXVpcmVkID0gKHdp
ZHRoICsga0VBQ0FuZEVUQzJCbG9ja1NpemUgLSAxKSAvIGtFQUNBbmRFVEMyQmxvY2tTaXplOwog
ICAgICAgICBjaGVja2VkQnl0ZXNSZXF1aXJlZCAqPSAoaGVpZ2h0ICsga0VBQ0FuZEVUQzJCbG9j
a1NpemUgLSAxKSAvIGtFQUNBbmRFVEMyQmxvY2tTaXplOwogICAgICAgICBjaGVja2VkQnl0ZXNS
ZXF1aXJlZCAqPSA4OwogICAgICAgICBpZiAoY2hlY2tlZEJ5dGVzUmVxdWlyZWQuaGFzT3ZlcmZs
b3dlZCgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidG9vIGxhcmdlIGRpbWVuc2lvbnMiKTsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0b28gbGFyZ2UgZGltZW5zaW9ucyIpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBjaGVj
a2VkQnl0ZXNSZXF1aXJlZC51bnNhZmVHZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHMTFfRUFDOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6IHsKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
Q09NUFJFU1NFRF9SRzExX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9T
SUdORURfUkcxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQThf
RVRDMl9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0VUQzJfRUFDOiB7CiAgICAgICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkQnl0ZXNSZXF1aXJlZCA9ICh3aWR0aCArIGtFQUNBbmRFVEMyQmxvY2tTaXplIC0gMSkg
LyBrRUFDQW5kRVRDMkJsb2NrU2l6ZTsKICAgICAgICAgY2hlY2tlZEJ5dGVzUmVxdWlyZWQgKj0g
KGhlaWdodCArIGtFQUNBbmRFVEMyQmxvY2tTaXplIC0gMSkgLyBrRUFDQW5kRVRDMkJsb2NrU2l6
ZTsKICAgICAgICAgY2hlY2tlZEJ5dGVzUmVxdWlyZWQgKj0gMTY7CiAgICAgICAgIGlmIChjaGVj
a2VkQnl0ZXNSZXF1aXJlZC5oYXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJ0b28gbGFyZ2UgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRvbyBsYXJn
ZSBkaW1lbnNpb25zIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgYnl0ZXNSZXF1aXJlZCA9IGNoZWNrZWRCeXRlc1JlcXVpcmVkLnVuc2FmZUdldCgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmIChwaXhlbHMuYnl0ZUxlbmd0aCgpICE9
IGJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZl
clZpZXcgaXMgbm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Imxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNTY2MiwxMCArNTY2MiwxMCBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1
bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aQogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKICAgICAgICAgY29uc3Qg
R0MzRHNpemVpIGtCbG9ja1dpZHRoID0gNDsKICAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9j
a0hlaWdodCA9IDQ7CiAgICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJn
ZXQgPyBtX21heFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7CkBAIC01Njcz
LDYwICs1NjczLDYwIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVD
b21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jCiAgICAgICAgIGJvb2wgd2lk
dGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2ZWwgJiYgd2lkdGggPT0gMikg
fHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0gbWF4Q29tcHJlc3NlZERpbWVu
c2lvbik7CiAgICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2ZWwgJiYgaGVpZ2h0ID09IDEp
IHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0ICUga0Jsb2NrSGVpZ2h0KSAm
JiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CiAgICAgICAgIGlmICghd2lkdGhW
YWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGgg
b3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNh
c2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBj
YXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6CiAgICAg
ICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KICAgICAgICAgaWYg
KCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwi
KTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9y
IGxldmVsIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RD
XzR4NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4
NF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9L
SFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI6Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZf
S0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
Xzh4NV9LSFI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfOHg2X0tIUjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NS
R0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjoKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hS
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpFVEMxX1JHQjhfT0VTOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1IxMV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfU0lHTkVEX1IxMV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkcxMV9FQUM6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFf
RUFDOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRD
MjoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI6CisgICAgY2Fz
ZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI6CisgICAgY2FzZSBF
eHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI6CisgICAgY2FzZSBFeHRl
bnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNP
TVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01Q
UkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9SR0JBX0FTVENfMTB4OF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNT
RURfUkdCQV9BU1RDXzEweDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NF
RF9SR0JBX0FTVENfMTJ4MTBfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1JHQkFfQVNUQ18xMngxMl9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURf
U1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpD
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjoK
KyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhf
S0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzEweDVfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhB
OF9BU1RDXzEweDZfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4
X0FMUEhBOF9BU1RDXzEweDhfS0hSOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6CisgICAgY2FzZSBFeHRlbnNpb25z
R0w6OkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOgorICAgIGNhc2UgRXh0
ZW5zaW9uc0dMOjpFVEMxX1JHQjhfT0VTOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1Ix
MV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkcxMV9FQUM6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDOgorICAgIGNhc2Ug
RXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNH
TDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6CiAgICAgICAgIC8vIE5vIGhl
aWdodCBhbmQgd2lkdGggcmVzdHJpY3Rpb25zIG9uIEFTVEMsIEVUQzEgb3IgRVRDMi4KICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTU3MzgsNTggKzU3MzgsNTggQEAgYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1l
bnNpb25zKGNvbnN0IGNoYXIqIGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKIHsKICAgICBpZiAoeG9m
ZnNldCA8IDAgfHwgeW9mZnNldCA8IDApIHsKLSAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlv
ZmZzZXQgPCAwIik7Ci0gICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zm
c2V0IG9yIHlvZmZzZXQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfRVhUOiB7CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9F
WFQ6IHsKICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja0hlaWdodCA9IDQ7CiAgICAgICAgIGlmICgoeG9mZnNldCAlIGtCbG9ja1dpZHRo
KSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBvZiA0Iik7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCBub3QgbXVsdGlwbGUgb2YgNCIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICh3aWR0aCAtIHhv
ZmZzZXQgPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpCiAgICAgICAgICAgICB8fCBoZWln
aHQgLSB5b2Zmc2V0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2Vk
VGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCk7CiAgICAgfQotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9Q
VlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9Q
VlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1BWUlRDXzJCUFBWMV9JTUc6IHsKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9S
R0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURf
UkdCQV9QVlJUQ18yQlBQVjFfSU1HOiB7CiAgICAgICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJl
IHplcm8iKTsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdM
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBhbmQgeW9mZnNldCBt
dXN0IGJlIHplcm8iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAod2lkdGggIT0gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQogICAgICAgICAg
ICAgfHwgaGVpZ2h0ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBtYXRjaCBleGlzdGluZyBsZXZlbCIp
OworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3Rp
bmcgbGV2ZWwiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRh
cmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CiAgICAgfQotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpFVEMxX1JHQjhfT0VTOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpFVEMxX1JH
QjhfT0VTOgogICAgICAgICAvLyBOb3Qgc3VwcG9ydGVkIGZvciBFVEMxX1JHQjhfT0VTIHRleHR1
cmVzLgogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUjExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TSUdORURf
UjExX0VBQzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SRzExX0VBQzoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUM6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCOF9FVEMyOgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1NSR0I4X0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzogewotICAgICAgICBpZiAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzNEKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIm5vdCBzdXBwb3J0ZWQgb24gVEVYVFVSRV8zRCB0ZXh0dXJlcyIpOworICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNp
b25zR0w6OkNPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6
OkNPTVBSRVNTRURfUkcxMV9FQUM6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTVBSRVNTRURf
U0lHTkVEX1JHMTFfRUFDOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhf
RVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9FVEMyOgorICAg
IGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9F
VEMyOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VH
SF9BTFBIQTFfRVRDMjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9SR0JBOF9F
VEMyX0VBQzoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
RVRDMl9FQUM6IHsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV8zRCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJub3Qgc3VwcG9ydGVkIG9uIFRF
WFRVUkVfM0QgdGV4dHVyZXMiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDQ7CkBAIC01Nzk4LDcgKzU3OTgsNyBA
QCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleFN1
YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZgogICAgICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tT
aXplKSB8fCAoeW9mZnNldCAlIGtCbG9ja1NpemUpCiAgICAgICAgICAgICB8fCAoKHdpZHRoICUg
a0Jsb2NrU2l6ZSkgJiYgeG9mZnNldCArIHdpZHRoICE9IHRleFdpZHRoKQogICAgICAgICAgICAg
fHwgKChoZWlnaHQgJSBrQmxvY2tTaXplKSAmJiB5b2Zmc2V0ICsgaGVpZ2h0ICE9IHRleEhlaWdo
dCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4
aXN0aW5nIHRleHR1cmUgbGV2ZWwgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgdGV4dHVyZSBsZXZlbCBkaW1lbnNp
b25zIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC01ODExLDE2ICs1ODExLDE2IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBm
CiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FX1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVf
TE9PUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpUUklBTkdMRV9GQU46Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBPSU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpMSU5FX1NUUklQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVfTE9P
UDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpUUklBTkdMRV9TVFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpU
UklBTkdMRV9GQU46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJJQU5HTEVTOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGRyYXcgbW9kZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRH
TDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtNTgyOCw3ICs1ODI4LDcgQEAgYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGUKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQogewogICAgIGlmICht
X3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYgIT0g
bV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2lsRnVu
Y01hc2tCYWNrKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNp
bHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQg
YW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC01ODM3LDE3ICs1ODM3LDE3IEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3Mo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBm
dW5jKQogewogICAgIHN3aXRjaCAoZnVuYykgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5FVkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFU1M6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TEVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUFU
RVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VRVUFMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVRVUFM
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMV0FZUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpORVZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMRVNTOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpHUkVBVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkdFUVVBTDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpOT1RFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFdBWVM6CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZnVu
Y3Rpb24iKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogfQpAQCAtNTg3NywxMSArNTg3NywxMSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50VG9Db25zb2xlKE1lc3NhZ2VMZXZlbCBsZXZlbCwg
Y29uc3QgU3RyaW5nJgogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRl
QmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywg
R0MzRGVudW0gZHN0KQogewotICAgIGlmICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09O
U1RBTlRfQ09MT1IgfHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RB
TlRfQ09MT1IpCi0gICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFO
VF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9B
TFBIQSkpCi0gICAgICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9D
T0xPUiB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xP
UikKLSAgICAgICAgICAgICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FM
UEhBIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
KSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsK
KyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTlNUQU5UX0NPTE9SIHx8IHNy
YyA9PSBHcmFwaGljc0NvbnRleHRHTDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAg
ICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0g
R3JhcGhpY3NDb250ZXh0R0w6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCisgICAgICAgIHx8
ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAgICAgICYm
IChzcmMgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFw
aGljc0NvbnRleHRHTDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU5MTIsMTkgKzU5MTIsMTkgQEAgYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmMKICAgICBpZiAoIWxvY2F0aW9uKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJv
Z3JhbSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJl
bnQgcHJvZ3JhbSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghdikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFy
cmF5Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHRyYW5zcG9zZSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAidHJhbnNwb3NlIG5vdCBGQUxTRSIpOworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAidHJhbnNwb3NlIG5vdCBGQUxTRSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIGlmIChzaXplIDwgcmVxdWlyZWRNaW5TaXplIHx8IChzaXplICUgcmVxdWlyZWRNaW5T
aXplKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBzaXplIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHNpemUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTU5MzQsMzIgKzU5MzQsMzIgQEAgV2ViR0xCdWZmZXIqIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hh
cioKIHsKICAgICBPcHRpb25hbDxXZWJHTEJ1ZmZlcio+IGJ1ZmZlcjsKICAgICBzd2l0Y2ggKHRh
cmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVS
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAg
ICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSOgogICAg
ICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgaWYgKGlzV2ViR0wyKCkp
IHsKICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDT1BZX1JFQURfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6Q09QWV9SRUFEX0JVRkZFUjoKICAgICAgICAgICAgICAgICBidWZmZXIgPSBt
X2JvdW5kQ29weVJlYWRCdWZmZXIuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT1BZX1dSSVRFX0JVRkZFUjoKKyAgICAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkNPUFlfV1JJVEVfQlVGRkVSOgogICAgICAg
ICAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRDb3B5V3JpdGVCdWZmZXIuZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQSVhF
TF9QQUNLX0JVRkZFUjoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlBJWEVM
X1BBQ0tfQlVGRkVSOgogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1fYm91bmRQaXhlbFBhY2tC
dWZmZXIuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQSVhFTF9VTlBBQ0tfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6UElYRUxfVU5QQUNLX0JVRkZFUjoKICAgICAgICAgICAgICAgICBi
dWZmZXIgPSBtX2JvdW5kUGl4ZWxVbnBhY2tCdWZmZXIuZ2V0KCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VFJBTlNG
T1JNX0ZFRURCQUNLX0JVRkZFUjoKICAgICAgICAgICAgICAgICBidWZmZXIgPSBtX2JvdW5kVHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXIuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTklGT1JNX0JVRkZFUjoKKyAgICAgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOSUZPUk1fQlVGRkVSOgogICAgICAgICAgICAg
ICAgIGJ1ZmZlciA9IG1fYm91bmRVbmlmb3JtQnVmZmVyLmdldCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTk2NywzMiArNTk2NywzMiBAQCBXZWJHTEJ1ZmZl
ciogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVy
cyhjb25zdCBjaGFyKgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZW5kaWYK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCB0YXJnZXQiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIGlmICgh
YnVmZmVyIHx8ICFidWZmZXIudmFsdWUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1
ZmZlciIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAgICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
QVRJQ19EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVzoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTVFJFQU1fRFJBVzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpTVEFUSUNfRFJBVzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEWU5B
TUlDX0RSQVc6CiAgICAgICAgIHJldHVybiBidWZmZXIudmFsdWUoKTsKICAgICB9Ci0gICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB1c2FnZSIpOworICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdXNhZ2UiKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCiB7CiAgICAgaWYgKCFpbWFnZSB8fCAhaW1h
Z2UtPmNhY2hlZEltYWdlKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGNvbnN0IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJs
KCk7CiAgICAgaWYgKHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIGltYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
aWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKQpAQCAtNjAwMyw3ICs2MDAzLDcgQEAgRXhjZXB0
aW9uT3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MSW1hZ2VF
bGVtZW50KGNvbnN0IGNoYXIKIEV4Y2VwdGlvbk9yPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQogewogICAgIGlmICghY2FudmFzIHx8ICFjYW52
YXMtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIm5vIGNhbnZhcyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpCkBAIC02MDE2LDcgKzYwMTYsNyBAQCBFeGNl
cHRpb25Pcjxib29sPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52
YXNFbGVtZW50KGNvbnN0IGNoYQogRXhjZXB0aW9uT3I8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8pCiB7CiAgICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8t
PnZpZGVvV2lkdGgoKSB8fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIm5vIHZpZGVvIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkKQEAg
LTYwMzEsNyArNjAzMSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4
QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNECiAgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChpbmRleCA+PSBt
X21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5n
ZSIpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIw
IHZhbHVlcy4KQEAgLTYwNjUsMTcgKzYwNjUsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzMK
ICAgICAKICAgICBhdXRvIGRhdGEgPSBsaXN0LmRhdGEoKTsKICAgICBpZiAoIWRhdGEpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGludCBzaXplID0gbGlzdC5sZW5n
dGgoKTsKICAgICBpZiAoc2l6ZSA8IGV4cGVjdGVkU2l6ZSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCBzaXplIik7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dEdMOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8v
IEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMuCkBAIC02MTA2LDEx
ICs2MTA2LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdFZlcnRleEF0
dHJpYjAoKQogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjpWZXJ0ZXhBdHRyaWJTdGF0
ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRl
KDApOwogICAgIAogICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcigpOwot
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRZTkFNSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0
dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhp
Y3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0R0w6OkRZTkFNSUNf
RFJBVyk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNz
Q29udGV4dEdMOjpGTE9BVCwgZmFsc2UsIDAsIDApOwogICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcg
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHRHTDo6QVJSQVlfQlVGRkVSLCAwKTsKICAgICBtX2NvbnRleHQtPmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KDApOwogICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUg
PSAwOwogICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKQEAgLTYxNTcs
NyArNjE1Nyw3IEBAIE9wdGlvbmFsPGJvb2w+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNp
bXVsYXRlVmVydGV4QXR0cmliMChHQzNEdWludCBudW1WZXJ0CiAgICAgaWYgKCF1c2luZ1ZlcnRl
eEF0dHJpYjAgJiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0
KCkpOwogCiAgICAgLy8gV2Uga25vdyBidWZmZXJTaXplIGFuZCBidWZmZXJEYXRhU2l6ZSB3b24n
dCBvdmVyZmxvdyBvciBnbyBuZWdhdGl2ZSwgdGhhbmtzIHRvIHZhbGlkYXRlU2ltdWxhdGVkVmVy
dGV4QXR0cmliMAogICAgIEdDM0R1aW50IGJ1ZmZlclNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0
OwpAQCAtNjE2NSw4ICs2MTY1LDggQEAgT3B0aW9uYWw8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0R1aW50IG51bVZlcnQKIAogICAgIGlm
IChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKICAgICAgICAg
bV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICAgICAgbV9j
b250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZl
ckRhdGFTaXplLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAg
aWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1Ip
IHsKKyAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJB
WV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBHcmFwaGljc0NvbnRleHRHTDo6RFlOQU1JQ19E
UkFXKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSAhPSBHcmFwaGljc0NvbnRl
eHRHTDo6Tk9fRVJST1IpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGNyZWF0
ZSBhIGJ1ZmZlci4KICAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxz
ZTsKICAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwpAQCAtNjE5OCw5
ICs2MTk4LDkgQEAgT3B0aW9uYWw8Ym9vbD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2lt
dWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0R1aW50IG51bVZlcnQKICAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbMl0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsyXTsKICAgICAgICAgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSBhdHRyaWJWYWx1ZS52YWx1ZVszXTsKICAgICAgICAg
bV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSBmYWxzZTsKLSAgICAgICAgbV9jb250ZXh0LT5i
dWZmZXJTdWJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIGJ1ZmZlckRh
dGFTaXplLCBidWZmZXJEYXRhLmdldCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJE
YXRhKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9CVUZGRVIsIDAsIGJ1ZmZlckRhdGFTaXplLCBi
dWZmZXJEYXRhLmdldCgpKTsKICAgICB9Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgMCwgMCwgMCk7CisgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwg
MCwgMCwgMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYyMDgsMTAgKzYyMDgsMTAgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhB
dHRyaWIwU2ltdWxhdGlvbigpCiB7CiAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdEJh
c2U6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CiAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0g
bV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVy
QmluZGluZy5nZXQoKSkpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcu
Z2V0KCkpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRl
LnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRl
LCBzdGF0ZS5vZmZzZXQpOwogICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZl
ci5nZXQoKSkpOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6
QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7CiB9
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2
ZW50KCkKQEAgLTYyNDcsMjEgKzYyNDcsMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjptYXliZVJlc3RvcmVDb250ZXh0KCkKICAgICBpbnQgY29udGV4dExvc3RSZWFzb24gPSBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CiAK
ICAgICBzd2l0Y2ggKGNvbnRleHRMb3N0UmVhc29uKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1I6Ci0gICAgICAgIC8vIFRoZSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1l
bnRhdGlvbiBtaWdodCBub3QgZnVsbHkKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpOT19F
UlJPUjoKKyAgICAgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIGltcGxlbWVudGF0
aW9uIG1pZ2h0IG5vdCBmdWxseQogICAgICAgICAvLyBzdXBwb3J0IEdMX0FSQl9yb2J1c3RuZXNz
IHNlbWFudGljcyB5ZXQuIEFsdGVybmF0aXZlbHksIHRoZQogICAgICAgICAvLyBXRUJHTF9sb3Nl
X2NvbnRleHQgZXh0ZW5zaW9uIG1pZ2h0IGhhdmUgYmVlbiB1c2VkIHRvIGZvcmNlCiAgICAgICAg
IC8vIGEgbG9zdCBjb250ZXh0LgogICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6R1VJTFRZX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpHVUlM
VFlfQ09OVEVYVF9SRVNFVF9BUkI6CiAgICAgICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBp
cyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwogICAgICAgICAvLyBndWlsdHkgb2Yg
Y2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCiAgICAgICAgIHByaW50VG9Db25zb2xlKE1lc3Nh
Z2VMZXZlbDo6V2FybmluZywgIldBUk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgY2F1
c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0OyBub3QgcmVzdG9yaW5nIHRoZSBjb250ZXh0
Iik7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6SU5OT0NFTlRfQ09O
VEVYVF9SRVNFVF9BUkI6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OklOTk9DRU5UX0NPTlRFWFRf
UkVTRVRfQVJCOgogICAgICAgICAvLyBBbHdheXMgYWxsb3cgdGhlIGNvbnRleHQgdG8gYmUgcmVz
dG9yZWQuCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpVTktOT1dOX0NP
TlRFWFRfUkVTRVRfQVJCOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpVTktOT1dOX0NPTlRFWFRf
UkVTRVRfQVJCOgogICAgICAgICAvLyBXYXJuLiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVs
bGluZyB0aGVtIHRoYXQgV2ViR0wKICAgICAgICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdo
dCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0bwogICAgICAgICAvLyByZXNldCBhbmQg
YXNrIHRoZW0gd2hldGhlciB0aGV5IHdhbnQgdG8gY29udGludWUgcnVubmluZwpAQCAtNjI5Miwx
MyArNjI5MiwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9y
ZUNvbnRleHQoKQogICAgIGlmICghaG9zdFdpbmRvdykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUobV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUobV9hdHRy
aWJ1dGVzLCBob3N0V2luZG93KSk7CiAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGlmICht
X2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCiAgICAgICAgICAgICBtX3Jlc3Rv
cmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVuIGJ1
dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJv
ciByZXN0b3JpbmcgY29udGV4dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MzY3
LDE3ICs2MzY3LDE3IEBAIG5hbWVzcGFjZSB7CiAgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdD
M0RlbnVtIGVycm9yKQogICAgIHsKICAgICAgICAgc3dpdGNoIChlcnJvcikgewotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfRU5VTToKICAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9F
TlVNIl9zOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFOgogICAgICAgICAg
ICAgcmV0dXJuICJJTlZBTElEX1ZBTFVFIl9zOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
SU5WQUxJRF9PUEVSQVRJT046CiAgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9O
Il9zOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpPVVRfT0ZfTUVNT1JZOgogICAgICAgICAgICAg
cmV0dXJuICJPVVRfT0ZfTUVNT1JZIl9zOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CiAgICAgICAgICAgICByZXR1
cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIl9zOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0w6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkNPTlRFWFRfTE9TVF9XRUJHTDoKICAgICAgICAgICAgIHJldHVybiAiQ09OVEVY
VF9MT1NUX1dFQkdMIl9zOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIldlYkdMIEVSUk9SKCIsIGhleChlcnJvciwgNCwgTG93ZXJjYXNlKSwgJyknKTsK
QEAgLTY0MDYsNyArNjQwNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXBw
bHlTdGVuY2lsVGVzdCgpCiAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzKTsKICAgICAgICAgaGF2
ZVN0ZW5jaWxCdWZmZXIgPSBhdHRyaWJ1dGVzLT5zdGVuY2lsOwogICAgIH0KLSAgICBlbmFibGVP
ckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCwgbV9zdGVuY2lsRW5hYmxl
ZCAmJiBoYXZlU3RlbmNpbEJ1ZmZlcik7CisgICAgZW5hYmxlT3JEaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dEdMOjpTVEVOQ0lMX1RFU1QsIG1fc3RlbmNpbEVuYWJsZWQgJiYgaGF2ZVN0ZW5jaWxCdWZm
ZXIpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJs
ZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJsZSkKQEAgLTY0MjgsOSArNjQyOCw5IEBA
IEdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4RHJhd0J1ZmZlcnMoKQog
ICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQogICAgICAgICByZXR1cm4gMDsKICAgICBp
ZiAoIW1fbWF4RHJhd0J1ZmZlcnMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0
ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VYVCwgJm1fbWF4RHJhd0J1ZmZlcnMpOworICAg
ICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0RSQVdfQlVGRkVS
U19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKICAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50
cykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xP
Ul9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgICAgICBtX2Nv
bnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnNHTDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VY
VCwgJm1fbWF4Q29sb3JBdHRhY2htZW50cyk7CiAgICAgLy8gV0VCR0xfZHJhd19idWZmZXJzIHJl
cXVpcmVzIE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA+PSBNQVhfRFJBV19CVUZGRVJTLgogICAgIHJl
dHVybiBzdGQ6Om1pbihtX21heERyYXdCdWZmZXJzLCBtX21heENvbG9yQXR0YWNobWVudHMpOwog
fQpAQCAtNjQ0MCw3ICs2NDQwLDcgQEAgR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKICAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0g
ICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRU
QUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZt
X21heENvbG9yQXR0YWNobWVudHMpOwogICAgIHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7
CiB9CiAKQEAgLTY0NTEsMTMgKzY0NTEsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSBidWYpCiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6cmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpCiB7Ci0gICAgYmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpOworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKIH0KIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCiB7CiAgICAgYXV0
byB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJE
QmluZGluZy5nZXQoKTsKLSAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgdGV4dHVyZSk7CisgICAgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQsIHRleHR1cmUpOwogICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPm5lZWRUb1VzZUJs
YWNrVGV4dHVyZSh0ZXh0dXJlRXh0ZW5zaW9uRmxhZ3MoKSkpCiAgICAgICAgIG1fdW5yZW5kZXJh
YmxlVGV4dHVyZVVuaXRzLmFkZChtX2FjdGl2ZVRleHR1cmVVbml0KTsKIH0KQEAgLTY0ODgsNyAr
NjQ4OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0CiAgICAgICAgIGF1dG8gc2ltdWxhdGVW
ZXJ0ZXhBdHRyaWIwU3RhdHVzID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQg
LSAxKTsKICAgICAgICAgaWYgKCFzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKICAgICAg
ICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVy
LgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiZHJhd0FycmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUg
dmVydGV4QXR0cmliMCBhcnJheSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0R0w6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5c0luc3RhbmNlZCIs
ICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJheSIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11
bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMudmFsdWUoKTsKQEAgLTY1MjUsNyArNjUyNSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjCiAgICAgICAgIGF1dG8gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIw
U3RhdHVzID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKICAgICAgICAgaWYg
KCFzaW11bGF0ZVZlcnRleEF0dHJpYjBTdGF0dXMpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUg
dW5hYmxlIHRvIHNpbXVsYXRlIHRoZSBhdHRyaWJ1dGUgYnVmZmVyLgotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZHJh
d0FycmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxhdGUgdmVydGV4QXR0cmliMCBhcnJh
eSIpOworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfT1BFUkFUSU9OLCAiZHJhd0FycmF5c0luc3RhbmNlZCIsICJ1bmFibGUgdG8gc2ltdWxh
dGUgdmVydGV4QXR0cmliMCBhcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjBT
dGF0dXMudmFsdWUoKTsKQEAgLTY1NTMsNyArNjU1Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQg
ZGl2CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJp
YnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxV
RSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTY2MDcsNyArNjYwNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6cmVjeWNsZUNvbnRleHQoKQogICAgIC8vIFVzaW5nIFN5bnRoZXRpY0xv
c3RDb250ZXh0IG1lYW5zIHRoZSBkZXZlbG9wZXIgd29uJ3QgYmUgYWJsZSB0byBmb3JjZSB0aGUg
cmVzdG9yYXRpb24KICAgICAvLyBvZiB0aGUgY29udGV4dCBieSBjYWxsaW5nIHByZXZlbnREZWZh
dWx0KCkgaW4gYSAid2ViZ2xjb250ZXh0bG9zdCIgZXZlbnQgaGFuZGxlci4KICAgICBmb3JjZUxv
c3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKLSAgICBkZXN0cm95R3JhcGhpY3NDb250
ZXh0M0QoKTsKKyAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0R0woKTsKIH0KIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9u
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaAppbmRleCBjYjg3MmUxZjA0ODRlNjBjZWM2MGIxODU4ZjI3MmFmOWFjMmUz
MzNhLi4wYzQ0NTJiYjYwYzQyYjcwZDdkZTU3OTk5Njk0MTVhZjQyNzE0MzQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKICNpbmNsdWRlICJHUFVCYXNlZENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKICNpbmNsdWRlICJTdXNwZW5kYWJsZVRpbWVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAg
LTEwMyw3ICsxMDMsNyBAQCB1c2luZyBXZWJHTENhbnZhcyA9IFdURjo6VmFyaWFudDxSZWZQdHI8
SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQdHI8T2Zmc2NyZWVuQ2FudgogdXNpbmcgV2ViR0xDYW52
YXMgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAot
Y2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQz
RDo6Q2xpZW50LCBwdWJsaWMgR1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0LCBwcml2YXRl
IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlciB7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpDbGllbnQsIHB1YmxpYyBH
UFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHByaXZhdGUgQWN0aXZpdHlTdGF0ZUNoYW5n
ZU9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UpOwogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4gY3JlYXRlKENhbnZhc0Jhc2UmLCBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzJiwgY29uc3QgU3RyaW5nJik7CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
Z3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogZ3JhcGhpY3NDb250ZXh0R0woKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdy
b3VwKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0R3JvdXAuZ2V0KCk7IH0KICAgICBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTM2Nyw3ICszNjcs
NyBAQCBwdWJsaWM6CiAgICAgLy8gVXNlZCBmb3IgdGVzdGluZyBvbmx5LCBmcm9tIEludGVybmFs
cy4KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2soKTsK
IAotICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpDbGllbnQKKyAgICAvLyBHcmFwaGljc0NvbnRl
eHRHTDo6Q2xpZW50CiAgICAgdm9pZCBkaWRDb21wb3NpdGUoKSBvdmVycmlkZTsKICAgICB2b2lk
IGZvcmNlQ29udGV4dExvc3QoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlY3ljbGVDb250ZXh0KCkg
b3ZlcnJpZGU7CkBAIC0zNzgsNyArMzc4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiwgV2ViR0xDb250ZXh0QXR0cmli
dXRlcyk7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShDYW52YXNCYXNlJiwgUmVmPEdy
YXBoaWNzQ29udGV4dDNEPiYmLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKTsKKyAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKENhbnZhc0Jhc2UmLCBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w+JiYsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMpOwogCiAgICAgZnJpZW5kIGNsYXNzIFdlYkdM
RHJhd0J1ZmZlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMRnJhbWVidWZmZXI7CkBAIC00MTAs
NyArNDEwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENv
bnRleHRPYmplY3QmKTsKICAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKIAot
ICAgIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgdm9pZCBkZXN0cm95R3Jh
cGhpY3NDb250ZXh0R0woKTsKICAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwogICAgIHZv
aWQgbWFya0NvbnRleHRDaGFuZ2VkQW5kTm90aWZ5Q2FudmFzT2JzZXJ2ZXIoKTsKIApAQCAtNDU3
LDcgKzQ1Nyw3IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgZW5hYmxlU3VwcG9ydGVkRXh0ZW5z
aW9uKEFTQ0lJTGl0ZXJhbCBleHRlbnNpb25OYW1lTGl0ZXJhbCk7CiAKLSAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w+IG1fY29udGV4dDsKICAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4
dEdyb3VwOwogCiAgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0
IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgpAQCAtNjQ0LDkgKzY0NCw5IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKIAogICAgIHZvaWQg
dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpOwotICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2UsIGJvb2wgZmxpcFksIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJj
ZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKICAgICB2b2lkIHRleFN1Yklt
YWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6
RE9NU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEpOworICAgIHZvaWQg
dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICBib29sIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhj
b25zdCBjaGFyKiwgYm9vbCk7CiAKQEAgLTgyMyw3ICs4MjMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ym9vbCB2YWxpZGF0ZVNpbXVsYXRlZFZlcnRleEF0dHJpYjAoR0MzRHVpbnQgbnVtVmVydGV4KTsK
ICAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CiAK
LSAgICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJyb3Ig
dGhhdCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KKyAgICAvLyBX
cmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3ludGhlc2l6ZUdMRXJyb3IgdGhh
dCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KICAgICBlbnVtIENv
bnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7IERpc3BsYXlJbkNvbnNvbGUsIERvbnREaXNwbGF5SW5D
b25zb2xlIH07CiAgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQ
cmVmZXJlbmNlID0gRGlzcGxheUluQ29uc29sZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFNhbXBsZXIuY3BwCmluZGV4IGI3ZTNmNmE5MzRhY2I4ZjUzYzRjNmVhMGRjYWEw
ODFhYzFjMTVmZWQuLmYyNGZjNGQ3M2U2MmU3YjJkM2M0MzA0MDJkMTcxZGJmMmRkYWE4YjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTYW1wbGVyLmNwcApAQCAtNDYsMTQg
KzQ2LDE0IEBAIFdlYkdMU2FtcGxlcjo6fldlYkdMU2FtcGxlcigpCiBXZWJHTFNhbXBsZXI6Oldl
YkdMU2FtcGxlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjdHgpCiAgICAgOiBXZWJHTFNo
YXJlZE9iamVjdChjdHgpCiB7Ci0gICAgLy8gRklYTUU6IENhbGwgY3JlYXRlU2FtcGxlciBmcm9t
IEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVNhbXBsZXIgZnJv
bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KIH0KIAotdm9pZCBXZWJHTFNhbXBsZXI6OmRlbGV0
ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QpCit2b2lkIFdlYkdMU2FtcGxlcjo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAg
ICBVTlVTRURfUEFSQU0oY29udGV4dDNkKTsKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAg
ICAvLyBGSVhNRTogQ2FsbCBkZWxldGVTYW1wbGVyIGZyb20gR3JhcGhpY3NDb250ZXh0M0QuCisg
ICAgLy8gRklYTUU6IENhbGwgZGVsZXRlU2FtcGxlciBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLgogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFNhbXBsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5oCmlu
ZGV4IDk1NDg3M2NmNDNmNTRiY2MyNTgzM2UxYjliODEwYWI4ZGI2NDlkMzkuLjkxMmJiOGMwMjNi
MWIwYmRlMjIxNmMzZWRmNTMyNDE4NmZmYmIyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2FtcGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMU2FtcGxlci5oCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVk
OgogICAgIGV4cGxpY2l0IFdlYkdMU2FtcGxlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7
Ci0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0z
RE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKaW5k
ZXggN2ZhZWQyNDA4MDM0ZjhiZjgwZGM3ODFlMDJlNmU5ZTRjMTc0NmM5NC4uZjc5NTc3Y2YxY2Rl
MjI4YTgwNzQwMTM4NjE1ODJhZWNjMmY1NjMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMU2hhZGVyLmNwcApAQCAtNDUsNyArNDUsNyBAQCBXZWJHTFNoYWRlcjo6V2ViR0xT
aGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY3R4LCBHQzNEZW51bSB0eXBlKQogICAg
ICwgbV9zb3VyY2UoZW1wdHlTdHJpbmcoKSkKICAgICAsIG1faXNWYWxpZChmYWxzZSkKIHsKLSAg
ICBzZXRPYmplY3QoY3R4LmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVNoYWRlcih0eXBlKSk7
CisgICAgc2V0T2JqZWN0KGN0eC5ncmFwaGljc0NvbnRleHRHTCgpLT5jcmVhdGVTaGFkZXIodHlw
ZSkpOwogfQogCiBXZWJHTFNoYWRlcjo6fldlYkdMU2hhZGVyKCkKQEAgLTUzLDcgKzUzLDcgQEAg
V2ViR0xTaGFkZXI6On5XZWJHTFNoYWRlcigpCiAgICAgZGVsZXRlT2JqZWN0KDApOwogfQogCi12
b2lkIFdlYkdMU2hhZGVyOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQordm9pZCBXZWJHTFNoYWRlcjo6ZGVsZXRl
T2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNE
T2JqZWN0IG9iamVjdCkKIHsKICAgICBjb250ZXh0M2QtPmRlbGV0ZVNoYWRlcihvYmplY3QpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKaW5kZXggOWY1NzFjOWMw
ZDVmZGQwYTBjNzU0YzJkMjJkMjAxYWY5OGRiYjk2Mi4uOGVkZjBlMmNiYjE4NmMzZTI1MTVjNzRh
ZGM3NzA4NTI5MWZiZTk4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xTaGFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV2ViR0xTaGFkZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIEdDM0RlbnVtKTsKIAotICAgIHZvaWQgZGVsZXRl
T2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOwor
ICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRm
b3JtM0RPYmplY3QpIGZpbmFsOwogCiAgICAgR0MzRGVudW0gbV90eXBlOwogICAgIFN0cmluZyBt
X3NvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlclByZWNpc2lvbkZvcm1hdC5oCmluZGV4IDFmZTQ0Yjc5ZjI4ZjEyZjFmYTBmZDk2NmNiY2Ix
Y2I3NDFiNDFjOGEuLjhjNGU2MjE3ZTYwNWRlODAxMDU0YzZkMjJhNmQwNDAwMzFmNmNiZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9u
Rm9ybWF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQogCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVk
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0
LmNwcAppbmRleCAxYjIyMzZmYmQ3MTJhOGI3MWMwODIwZDFjMGFhNjIzYmMzMzgyMDA0Li5kMDJi
ZmE0ZTI4NmZiMWNiZGNkOTkzOGE0YzI0NWJkMjcxYTk2YTEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBAIC01NCw5ICs1NCw5IEBA
IHZvaWQgV2ViR0xTaGFyZWRPYmplY3Q6OmRldGFjaENvbnRleHRHcm91cCgpCiAgICAgfQogfQog
Ci1HcmFwaGljc0NvbnRleHQzRCogV2ViR0xTaGFyZWRPYmplY3Q6OmdldEFHcmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0CitHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogV2ViR0xTaGFyZWRPYmplY3Q6
OmdldEFHcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dEdy
b3VwID8gJm1fY29udGV4dEdyb3VwLT5nZXRBR3JhcGhpY3NDb250ZXh0M0QoKSA6IG51bGxwdHI7
CisgICAgcmV0dXJuIG1fY29udGV4dEdyb3VwID8gJm1fY29udGV4dEdyb3VwLT5nZXRBR3JhcGhp
Y3NDb250ZXh0R0woKSA6IG51bGxwdHI7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oCmluZGV4IDJlYTQ4ZDA1Yzc5MjVhMGI3YzhmNjMx
YTE5MWQzMDkzY2NmYjUzNmUuLjdmMjM5ZDUxYzQzYzM5MjRmYjE3NTM4NWI0YjliZDk2OTdmZGJj
OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3Qu
aApAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFzcyBXZWJH
TENvbnRleHRHcm91cDsKIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKQEAgLTYw
LDcgKzYwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbV9jb250ZXh0R3JvdXA7CiAg
ICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBnZXRBR3JhcGhpY3ND
b250ZXh0R0woKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBXZWJHTENvbnRleHRH
cm91cCogbV9jb250ZXh0R3JvdXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFN5bmMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5j
LmNwcAppbmRleCA3ZDE4YTIyYjU0YjVjMjg2ZTFiYzFjYzUzZDk0YjM4NjkxN2Y4NWJhLi5iNjVl
MjhiZjViYTA2MzUxMGZmNmJhNzg3YjJlZDA3MDU5MWEzMzY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFN5bmMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMU3luYy5jcHAKQEAgLTQ2LDE0ICs0NiwxNCBAQCBXZWJHTFN5bmM6On5X
ZWJHTFN5bmMoKQogV2ViR0xTeW5jOjpXZWJHTFN5bmMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogewotICAgIC8vIEZJWE1FOiBD
YWxsIGZlbmNlU3luYyBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxs
IGZlbmNlU3luYyBmcm9tIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLgogfQogCi12b2lkIFdlYkdM
U3luYzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0
Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xTeW5jOjpkZWxldGVPYmplY3RJbXBsKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0M2QpOwogICAgIFVOVVNFRF9QQVJBTShvYmpl
Y3QpOwotICAgIC8vIEZJWE1FOiBDYWxsIGRlbGV0ZVN5bmMgZnJvbSBHcmFwaGljc0NvbnRleHQz
RC4KKyAgICAvLyBGSVhNRTogQ2FsbCBkZWxldGVTeW5jIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU3luYy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTeW5jLmgKaW5kZXgg
YTQyMjJjMzk4MDViZWViMTc0OWJmZmNlZTJlNWE3OTUzZTkwNzVhOS4uMGQxMmE4MDBiODdmYWZl
Y2NmMTRjMjgzYjhjODcwZmQ0YmRhZTgwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xTeW5jLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTeW5jLmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIFdlYkdM
U3luYyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7CiAKLSAgICB2b2lkIGRlbGV0ZU9iamVj
dEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCmluZGV4IDllYmE5NzJmNTQz
ODgyOTNlYzc0NzlkZWY3ZmIzNmNlODEwN2NlNjcuLjdlYTIxZDk5Yzc2NGEzY2Q0ZDBkMTc5MDg1
ZGY0NzJhZDM5MGI3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0
dXJlLmNwcApAQCAtNDMsMTAgKzQzLDEwIEBAIFJlZjxXZWJHTFRleHR1cmU+IFdlYkdMVGV4dHVy
ZTo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKIFdlYkdMVGV4dHVyZTo6
V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdM
U2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCi0gICAgLCBtX21pbkZpbHRlcihH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKQotICAgICwgbV9tYWdGaWx0
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikKLSAgICAsIG1fd3JhcFMoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVCkKLSAgICAsIG1fd3JhcFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkK
KyAgICAsIG1fbWluRmlsdGVyKEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01JUE1BUF9MSU5F
QVIpCisgICAgLCBtX21hZ0ZpbHRlcihHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKQorICAgICwg
bV93cmFwUyhHcmFwaGljc0NvbnRleHRHTDo6UkVQRUFUKQorICAgICwgbV93cmFwVChHcmFwaGlj
c0NvbnRleHRHTDo6UkVQRUFUKQogICAgICwgbV9pc05QT1QoZmFsc2UpCiAgICAgLCBtX2lzQ29t
cGxldGUoZmFsc2UpCiAgICAgLCBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZShmYWxzZSkKQEAgLTU1
LDcgKzU1LDcgQEAgV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY3R4KQogICAgICwgbV9pc0hhbGZGbG9hdFR5cGUoZmFsc2UpCiAgICAgLCBtX2lz
Rm9yV2ViR0wxKGN0eC5pc1dlYkdMMSgpKQogewotICAgIHNldE9iamVjdChjdHguZ3JhcGhpY3ND
b250ZXh0M0QoKS0+Y3JlYXRlVGV4dHVyZSgpKTsKKyAgICBzZXRPYmplY3QoY3R4LmdyYXBoaWNz
Q29udGV4dEdMKCktPmNyZWF0ZVRleHR1cmUoKSk7CiB9CiAKIFdlYkdMVGV4dHVyZTo6fldlYkdM
VGV4dHVyZSgpCkBAIC03MSwxMiArNzEsMTIgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnNldFRhcmdl
dChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbWF4TGV2ZWwpCiAgICAgaWYgKG1fdGFyZ2V0KQog
ICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQ6CiAgICAgICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OwogICAgICAgICBtX2luZm8ucmVzaXpl
KDEpOwogICAgICAgICBtX2luZm9bMF0ucmVzaXplKG1heExldmVsKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX0NVQkVfTUFQOgogICAgICAgICBtX3RhcmdldCA9
IHRhcmdldDsKICAgICAgICAgbV9pbmZvLnJlc2l6ZSg2KTsKICAgICAgICAgZm9yIChpbnQgaWkg
PSAwOyBpaSA8IDY7ICsraWkpCkBAIC05MCw0MCArOTAsNDAgQEAgdm9pZCBXZWJHTFRleHR1cmU6
OnNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCiAgICAgaWYgKCFv
YmplY3QoKSB8fCAhbV90YXJnZXQpCiAgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKICAgICAgICAgc3dp
dGNoIChwYXJhbSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOgot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVI6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6TkVBUkVTVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElO
RUFSOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNUX01JUE1BUF9ORUFS
RVNUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5FQVJfTUlQTUFQX05FQVJF
U1Q6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1RfTUlQTUFQX0xJTkVB
UjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSX01JUE1BUF9MSU5FQVI6
CiAgICAgICAgICAgICBtX21pbkZpbHRlciA9IHBhcmFtOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NQUdfRklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFH
X0ZJTFRFUjoKICAgICAgICAgc3dpdGNoIChwYXJhbSkgewotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpORUFSRVNUOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVI6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok5FQVJFU1Q6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUjoKICAgICAgICAgICAgIG1fbWFnRmlsdGVyID0g
cGFyYW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfUzoKICAgICAgICAgc3dpdGNoIChwYXJhbSkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFUEVBVDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
Q0xBTVBfVE9fRURHRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TUlSUk9SRURf
UkVQRUFUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRVBFQVQ6CiAgICAgICAg
ICAgICBtX3dyYXBTID0gcGFyYW07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfVDoKICAgICAgICAgc3dp
dGNoIChwYXJhbSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQ6Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVDoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6TUlSUk9SRURfUkVQRUFUOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
RVBFQVQ6CiAgICAgICAgICAgICBtX3dyYXBUID0gcGFyYW07CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgV2ViR0xUZXh0dXJlOjpuZWVkVG9V
c2VCbGFja1RleHR1cmUoVGV4dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucykgY29uc3QKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKG1fbWFnRmlsdGVyID09IEdyYXBoaWNzQ29udGV4
dDNEOjpORUFSRVNUICYmIChtX21pbkZpbHRlciA9PSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVT
VCB8fCBtX21pbkZpbHRlciA9PSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpCisgICAgaWYgKG1fbWFnRmlsdGVyID09IEdyYXBoaWNzQ29udGV4dEdMOjpORUFSRVNU
ICYmIChtX21pbkZpbHRlciA9PSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVCB8fCBtX21pbkZp
bHRlciA9PSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9pc0ZvcldlYkdMMSAmJiBtX2lzSGFsZkZsb2F0
VHlwZSAmJiAhKGV4dGVuc2lvbnMgJiBUZXh0dXJlRXh0ZW5zaW9uSGFsZkZsb2F0TGluZWFyRW5h
YmxlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjc0LDI5ICsyNzQsMjkgQEAgdm9pZCBX
ZWJHTFRleHR1cmU6OnNldENvbXByZXNzZWQoKQogICAgIG1faXNDb21wcmVzc2VkID0gdHJ1ZTsK
IH0KIAotdm9pZCBXZWJHTFRleHR1cmU6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzZCwgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMVGV4dHVy
ZTo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQ
bGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBjb250ZXh0M2QtPmRlbGV0ZVRleHR1cmUo
b2JqZWN0KTsKIH0KIAogaW50IFdlYkdMVGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleChHQzNEZW51
bSB0YXJnZXQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJEKSB7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQpCisgICAgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpURVhU
VVJFXzJEKSB7CisgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9IGVsc2UgaWYgKG1fdGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgfSBlbHNlIGlmICht
X3RhcmdldCA9PSBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9DVUJFX01BUCkgewogICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgIHJldHVy
biAyOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1k6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAg
ICAgIHJldHVybiA0OwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAgIHJldHVybiA1OwogICAgICAgICB9
CiAgICAgfQpAQCAtMzQxLDEyICszNDEsMTIgQEAgR0MzRGludCBXZWJHTFRleHR1cmU6OmNvbXB1
dGVMZXZlbENvdW50KEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHN0YXRpYyBi
b29sIGludGVybmFsRm9ybWF0SXNGbG9hdFR5cGUoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7
CiAgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkczMkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIMzJGX1NURU5DSUw4OgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0R0w6OlIzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukcz
MkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJGOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQkEzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhf
Q09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJGX1NURU5D
SUw4OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zNTYsMTIgKzM1NiwxMiBAQCBzdGF0aWMgYm9vbCBpbnRlcm5hbEZvcm1hdElz
RmxvYXRUeXBlKEdDM0RlbnVtIGludGVybmFsRm9ybWF0KQogc3RhdGljIGJvb2wgaW50ZXJuYWxG
b3JtYXRJc0hhbGZGbG9hdFR5cGUoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQpCiB7CiAgICAgc3dp
dGNoIChpbnRlcm5hbEZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkcxNkY6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UjExRl9HMTFGX0IxMEY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
OV9FNToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxNkY6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTE2RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZG
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZGOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlIxMUZfRzExRl9CMTBGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjlfRTU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZGOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkExNkY6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQxMiwxMiArNDEyLDEyIEBAIHZvaWQgV2Vi
R0xUZXh0dXJlOjp1cGRhdGUoKQogICAgIGlmIChtX2lzRm9yV2ViR0wxKSB7CiAgICAgICAgIGlm
IChtX2lzQ29tcGxldGUpIHsKICAgICAgICAgICAgIGlmIChtX2lzRm9yV2ViR0wxKQotICAgICAg
ICAgICAgICAgIG1faXNGbG9hdFR5cGUgPSBtX2luZm9bMF1bMF0udHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ7CisgICAgICAgICAgICAgICAgbV9pc0Zsb2F0VHlwZSA9IG1faW5mb1sw
XVswXS50eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVDsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBtX2lzRmxvYXRUeXBlID0gaW50ZXJuYWxGb3JtYXRJc0Zsb2F0VHlw
ZShtX2luZm9bMF1bMF0uaW50ZXJuYWxGb3JtYXQpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IG1faW5mby5zaXplKCk7ICsraWkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoKG1faXNGb3JXZWJHTDEgJiYgbV9pbmZvW2lpXVswXS50eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCkKKyAgICAgICAgICAgICAgICBpZiAoKG1faXNGb3JX
ZWJHTDEgJiYgbV9pbmZvW2lpXVswXS50eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCkK
ICAgICAgICAgICAgICAgICAgICAgfHwgKCFtX2lzRm9yV2ViR0wxICYmIGludGVybmFsRm9ybWF0
SXNGbG9hdFR5cGUobV9pbmZvW2lpXVswXS5pbnRlcm5hbEZvcm1hdCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1faXNGbG9hdFR5cGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTQzMiwxMCArNDMyLDEwIEBAIHZvaWQgV2ViR0xUZXh0dXJlOjp1cGRhdGUoKQogICAg
ICAgICAgICAgaWYgKG1faXNGb3JXZWJHTDEpCiAgICAgICAgICAgICAgICAgbV9pc0hhbGZGbG9h
dFR5cGUgPSBpbnRlcm5hbEZvcm1hdElzSGFsZkZsb2F0VHlwZShtX2luZm9bMF1bMF0uaW50ZXJu
YWxGb3JtYXQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faXNIYWxmRmxv
YXRUeXBlID0gbV9pbmZvWzBdWzBdLnR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxP
QVRfT0VTOworICAgICAgICAgICAgICAgIG1faXNIYWxmRmxvYXRUeXBlID0gbV9pbmZvWzBdWzBd
LnR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkhBTEZfRkxPQVRfT0VTOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IG1faW5mby5zaXplKCk7
ICsraWkpIHsKLSAgICAgICAgICAgICAgICBpZiAoKG1faXNGb3JXZWJHTDEgJiYgbV9pbmZvW2lp
XVswXS50eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykKKyAgICAgICAg
ICAgICAgICBpZiAoKG1faXNGb3JXZWJHTDEgJiYgbV9pbmZvW2lpXVswXS50eXBlID09IEdyYXBo
aWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUykKICAgICAgICAgICAgICAgICAgICAgfHwgKCFt
X2lzRm9yV2ViR0wxICYmIGludGVybmFsRm9ybWF0SXNIYWxmRmxvYXRUeXBlKG1faW5mb1tpaV1b
MF0uaW50ZXJuYWxGb3JtYXQpKSkgewogICAgICAgICAgICAgICAgICAgICBtX2lzSGFsZkZsb2F0
VHlwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQ2LDExICs0NDYs
MTEgQEAgdm9pZCBXZWJHTFRleHR1cmU6OnVwZGF0ZSgpCiAKICAgICBtX25lZWRUb1VzZUJsYWNr
VGV4dHVyZSA9IGZhbHNlOwogICAgIC8vIE5QT1QKLSAgICBpZiAobV9pc05QT1QgJiYgKChtX21p
bkZpbHRlciAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCAmJiBtX21pbkZpbHRlciAhPSBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKQotICAgICAgICAgICAgICAgICAgICAgfHwgbV93cmFw
UyAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSB8fCBtX3dyYXBUICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSkKKyAgICBpZiAobV9pc05QT1QgJiYgKChtX21p
bkZpbHRlciAhPSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVCAmJiBtX21pbkZpbHRlciAhPSBH
cmFwaGljc0NvbnRleHRHTDo6TElORUFSKQorICAgICAgICB8fCBtX3dyYXBTICE9IEdyYXBoaWNz
Q29udGV4dEdMOjpDTEFNUF9UT19FREdFIHx8IG1fd3JhcFQgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OkNMQU1QX1RPX0VER0UpKQogICAgICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IHRydWU7
CiAgICAgLy8gQ29tcGxldGVuZXNzCi0gICAgaWYgKCFtX2lzQ29tcGxldGUgJiYgbV9taW5GaWx0
ZXIgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QgJiYgbV9taW5GaWx0ZXIgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUikKKyAgICBpZiAoIW1faXNDb21wbGV0ZSAmJiBtX21pbkZpbHRl
ciAhPSBHcmFwaGljc0NvbnRleHRHTDo6TkVBUkVTVCAmJiBtX21pbkZpbHRlciAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6TElORUFSKQogICAgICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IHRy
dWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKaW5kZXgg
MDk2M2JmODllZmFmMmJlNWMyZTg4M2NlODkyM2M4OGQ3MzM4OGJlOC4uY2ZkODIzMzY1ZTQ1NTc3
MmViMmNiZWQzMDQzMTFlYzdkNWU4NjY1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUZXh0dXJlLmgKQEAgLTg2LDcgKzg2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBX
ZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOwogCi0gICAgdm9pZCBkZWxl
dGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwg
UGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKICAgICBjbGFzcyBMZXZlbEluZm8gewogICAg
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVHJh
bnNmb3JtRmVlZGJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFu
c2Zvcm1GZWVkYmFjay5jcHAKaW5kZXggZTUyNzZiOGUyMDk5NDI3ZTE2ZTZiNGIwYWYzODI4ZGRh
MGE0OTkxMS4uMTc0NTk0NWI2OTY0NmRmZWVhMTIxNzZkNDA1YmZmNTk2ZTBiNDRkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFjay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ay5jcHAKQEAgLTQ2LDE0ICs0NiwxNCBAQCBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjp+V2ViR0xU
cmFuc2Zvcm1GZWVkYmFjaygpCiBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrOjpXZWJHTFRyYW5zZm9y
bUZlZWRiYWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGN0eCkKICAgICA6IFdlYkdMU2hh
cmVkT2JqZWN0KGN0eCkKIHsKLSAgICAvLyBGSVhNRTogQ2FsbCBjcmVhdGVUcmFuc2Zvcm1GZWVk
YmFjayBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJWE1FOiBDYWxsIGNyZWF0ZVRy
YW5zZm9ybUZlZWRiYWNrIGZyb20gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuCiB9CiAKLXZvaWQg
V2ViR0xUcmFuc2Zvcm1GZWVkYmFjazo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xUcmFuc2Zv
cm1GZWVkYmFjazo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29u
dGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0oY29u
dGV4dDNkKTsKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKLSAgICAvLyBGSVhNRTogQ2FsbCBk
ZWxldGVUcmFuc2Zvcm1GZWVkYmFjayBmcm9tIEdyYXBoaWNzQ29udGV4dDNELgorICAgIC8vIEZJ
WE1FOiBDYWxsIGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrIGZyb20gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wuCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVHJhbnNmb3JtRmVlZGJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VHJhbnNmb3JtRmVlZGJhY2suaAppbmRleCAxMTQ3YjVmNmFkZTYzNmNlMzFlNjc3Y2QxZGMyNjIx
NjFlYTkwZTk5Li4xMTQzZGY0ZmM4MGFjZjNhMzQxODFjN2M1YzYwMmEzZTVmZTMxM2U3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRyYW5zZm9ybUZlZWRiYWNr
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUcmFuc2Zvcm1GZWVkYmFj
ay5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBXZWJHTFRyYW5z
Zm9ybUZlZWRiYWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKIAotICAgIHZvaWQgZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOworICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCos
IFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0LmNwcAppbmRleCAxYjQ2YjdiNGU4NmUxNmJiNmFmODAzYWRjNWEwMWQzNjVjODY5Zjk0
Li41ZGJiMWEwNTUzYjZlY2QzZTRkNzNlZTIzYzUyYmQ0NjczYTg1NThhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcApA
QCAtNTIsMTAgKzUyLDEwIEBAIFdlYkdMVmVydGV4QXJyYXlPYmplY3Q6OldlYkdMVmVydGV4QXJy
YXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4CiAjZWxzZQogICAgIEFT
U0VSVCh0eXBlICE9IFR5cGU6OkRlZmF1bHQgfHwgISh0aGlzLT5jb250ZXh0KCktPm1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0KSk7CiAjZW5kaWYKLSAgICBzZXRPYmplY3QodGhpcy0+Y29udGV4
dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVWZXJ0ZXhBcnJheSgpKTsKKyAgICBzZXRP
YmplY3QodGhpcy0+Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgpLT5jcmVhdGVWZXJ0ZXhB
cnJheSgpKTsKIH0KIAotdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0OjpkZWxldGVPYmplY3RJ
bXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0OjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiBjb250ZXh0M2QsIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewog
ICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBUeXBlOjpEZWZhdWx0OgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oCmluZGV4
IDJmN2VkMzUwODE3MjNmMGFiYWYyNTNiMmFiY2ZkMDEzOTcwMzY0MGIuLjdhMzBiNDkzODM2NDI5
ZDMzODY2MGU2ZDEwNGNhZmMxZDg4OTQ4ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3QoKTsKIHByaXZhdGU6CiAg
ICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgVHlw
ZSk7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZv
cm0zRE9iamVjdCkgZmluYWw7CisgICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCkgZmluYWw7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5jcHAKaW5kZXggMTI0NGM3N2I5OTIxNDIyZWFkYzQ0
YmViZTA0Njc0N2QwNmJiODUzYy4uMDdlMTg0NDVjNzhlZjdiYzljZGVmMTk1MGVmNTE4OTA2YWE5
M2Y3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RCYXNlOjpzZXRFbGVtZW50QXJyYXlCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1
ZmZlcikKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBidWZmZXItPm9uQXR0YWNoZWQoKTsKICAg
ICBpZiAobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAgbV9ib3VuZEVsZW1lbnRB
cnJheUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkpOwor
ICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+
Z3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1
ZmZlcjsKICAgICAKIH0KQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0QmFzZTo6c2V0VmVydGV4QXR0cmliU3RhdGUoR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaQog
ICAgIGlmIChidWZmZXIpCiAgICAgICAgIGJ1ZmZlci0+b25BdHRhY2hlZCgpOwogICAgIGlmIChz
dGF0ZS5idWZmZXJCaW5kaW5nKQotICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5vbkRldGFj
aGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIHN0YXRlLmJ1ZmZl
ckJpbmRpbmctPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHRHTCgpKTsKICAg
ICAKICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gYnVmZmVyOwogICAgIHN0YXRlLmJ5dGVzUGVy
RWxlbWVudCA9IGJ5dGVzUGVyRWxlbWVudDsKQEAgLTczLDIxICs3MywyMSBAQCB2b2lkIFdlYkdM
VmVydGV4QXJyYXlPYmplY3RCYXNlOjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZShHQzNEdWludCBpbmRl
eCwgR0MzRHNpemVpCiB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlOjp1bmJpbmRCdWZm
ZXIoV2ViR0xCdWZmZXImIGJ1ZmZlcikKIHsKICAgICBpZiAobV9ib3VuZEVsZW1lbnRBcnJheUJ1
ZmZlciA9PSAmYnVmZmVyKSB7Ci0gICAgICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPm9u
RGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9ib3Vu
ZEVsZW1lbnRBcnJheUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4
dEdMKCkpOwogICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyID0gbnVsbHB0cjsKICAg
ICB9CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlcnRleEF0dHJpYlN0YXRl
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8mIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0
ZVtpXTsKICAgICAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgPT0gJmJ1ZmZlcikgewotICAg
ICAgICAgICAgYnVmZmVyLm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
KTsKKyAgICAgICAgICAgIGJ1ZmZlci5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0R0woKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaSAmJiAhY29udGV4dCgp
LT5pc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5k
aW5nID0gY29udGV4dCgpLT5tX3ZlcnRleEF0dHJpYjBCdWZmZXI7CiAgICAgICAgICAgICAgICAg
c3RhdGUuYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZCgpOwogICAgICAgICAgICAgICAgIHN0YXRl
LmJ5dGVzUGVyRWxlbWVudCA9IDA7CiAgICAgICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7Ci0g
ICAgICAgICAgICAgICAgc3RhdGUudHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS50eXBlID0gR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOwogICAg
ICAgICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHJpZGUgPSAxNjsKICAgICAgICAgICAgICAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdEJhc2UuaAppbmRleCAyMDcxZjM0NDhlMjA4MGNmM2ExNTE2Yzg2NmUwODk3YjBh
Y2U5NTc0Li5lN2FjNDgxZGU4YjBmZmEzYjY3NDc1ODYxNzYwYzQ5ZWVhZGZmODA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0QmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RCYXNlLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCIKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dE9i
amVjdC5oIgogCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFdlYkdM
QnVmZmVyPiBidWZmZXJCaW5kaW5nOwogICAgICAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50
IHsgMCB9OwogICAgICAgICBHQzNEaW50IHNpemUgeyA0IH07Ci0gICAgICAgIEdDM0RlbnVtIHR5
cGUgeyBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQgfTsKKyAgICAgICAgR0MzRGVudW0gdHlwZSB7
IEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCB9OwogICAgICAgICBib29sIG5vcm1hbGl6ZWQgeyBm
YWxzZSB9OwogICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlIHsgMTYgfTsKICAgICAgICAgR0MzRHNp
emVpIG9yaWdpbmFsU3RyaWRlIHsgMCB9OwpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiwgVHlwZSk7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29u
dGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGUgPSAwOworICAgIHZvaWQgZGVsZXRl
T2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlID0gMDsKIAogICAgIFR5cGUgbV90eXBlOwogICAgIGJvb2wgbV9oYXNFdmVyQmVlbkJv
dW5kIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKaW5kZXggYWY1NTY1Y2Q5NDQ0MjRiNTNiODM1
N2RiMmMwMTkwYmUxY2U1YjQ2OS4uYTBjZTViODAwOGI2YjMwNTc2MjJhM2JlZjM1YmU5MTYxMDJm
NjQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsNyArNDYsNyBAQCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmCiAgICAgY2FzZSBUeXBlOjpEZWZhdWx0OgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFR5cGU6OlVzZXI6Ci0gICAgICAgIHNldE9iamVjdCh0aGlzLT5jb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS5jcmVhdGVWZXJ0ZXhBcnJheU9F
UygpKTsKKyAgICAgICAgc2V0T2JqZWN0KHRoaXMtPmNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0
R0woKS0+Z2V0RXh0ZW5zaW9ucygpLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiB9CkBAIC01Niw3ICs1Niw3IEBAIFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6On5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkKICAgICBkZWxldGVPYmplY3QobnVsbHB0
cik7CiB9CiAKLXZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1w
bChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
K3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCogY29udGV4dDNkLCBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVHlwZTo6RGVmYXVsdDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
aAppbmRleCBkNTVkNjBiYjA5ZGZiMjljZGNhYmFlZjdjNmUwYjBiNmQwZTgyNmRkLi4wODMzOTYy
ZDY2NWVmMTJmNGNjZGY1ZDhmMTJiNWNhZjAwYWM2ZDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCkBAIC0zNyw3
ICszNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
KCk7CiBwcml2YXRlOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYsIFR5cGUpOwotICAgIHZvaWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGlj
c0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QpIGZpbmFs
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCmluZGV4IGU5NDIzOGJjZTIyOWFi
YjE3MWY1M2FiYzgzMTczOGY4NWQzMzM0NWQuLjI5MWJkMjRiMDZmMzdkM2I0NDhlN2I3ZWMzNzg2
NDg0MTc5YWVlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTaGFkZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU2hhZGVyUHJvZ3JhbS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShXRUJHTCkKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVk
ZSAiV2ViR0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
IgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCkBAIC0xMTAsMTAgKzExMCwxMCBAQCBzdGF0aWMg
V2ViR0xTaGFkZXIqIHNoYWRlckZvclR5cGUoV2ViR0xQcm9ncmFtJiBwcm9ncmFtLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYQogewogICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgewogICAgIGNhc2Ug
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlOjpGcmFnbWVudDoKLSAgICAg
ICAgcmV0dXJuIHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUik7CisgICAgICAgIHJldHVybiBwcm9ncmFtLmdldEF0dGFjaGVkU2hhZGVy
KEdyYXBoaWNzQ29udGV4dEdMOjpGUkFHTUVOVF9TSEFERVIpOwogCiAgICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGU6OlZlcnRleDoKLSAgICAgICAgcmV0dXJu
IHByb2dyYW0uZ2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFE
RVIpOworICAgICAgICByZXR1cm4gcHJvZ3JhbS5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0Nv
bnRleHRHTDo6VkVSVEVYX1NIQURFUik7CiAKICAgICAvLyBDb21wdXRlIHNoYWRlcnMgYXJlIGEg
V2ViR1BVIGNvbmNlcHQuCiAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNo
YWRlclR5cGU6OkNvbXB1dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCmluZGV4IDgzOGIxOGYzYThiZjM2NjU0OWViM2NmOTQ2M2MzMDFjNmE3MGRjZjUuLmQ0OWY0
Mjg3Y2RkNWQ5YmU3MGIzZWEzZTI4NTc0MjA5MTE3MzhhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBAIC0zMzgsNyArMzM4LDcgQEAgcHVibGljOgogI2lm
IEVOQUJMRShXRUJHTCkKICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dXZWJHTChib29sIGVuYWJsZWRQ
ZXJTZXR0aW5ncykgeyByZXR1cm4gZW5hYmxlZFBlclNldHRpbmdzOyB9CiAgICAgLy8gSW5mb3Jt
cyB0aGUgZW1iZWRkZXIgdGhhdCBhIFdlYkdMIGNhbnZhcyBpbnNpZGUgdGhpcyBmcmFtZSByZWNl
aXZlZCBhIGxvc3QgY29udGV4dAotICAgIC8vIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBH
TF9BUkJfcm9idXN0bmVzcyBndWlsdC9pbm5vY2VuY2UgY29kZSAoc2VlIEV4dGVuc2lvbnMzRC5o
KS4KKyAgICAvLyBub3RpZmljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gR0xfQVJCX3JvYnVzdG5lc3Mg
Z3VpbHQvaW5ub2NlbmNlIGNvZGUgKHNlZSBFeHRlbnNpb25zR0wuaCkuCiAgICAgdmlydHVhbCB2
b2lkIGRpZExvc2VXZWJHTENvbnRleHQoaW50KSB7IH0KICAgICB2aXJ0dWFsIFdlYkdMTG9hZFBv
bGljeSB3ZWJHTFBvbGljeUZvclVSTChjb25zdCBVUkwmKSBjb25zdCB7IHJldHVybiBXZWJHTEFs
bG93Q3JlYXRpb247IH0KICAgICB2aXJ0dWFsIFdlYkdMTG9hZFBvbGljeSByZXNvbHZlV2ViR0xQ
b2xpY3lGb3JVUkwoY29uc3QgVVJMJikgY29uc3QgeyByZXR1cm4gV2ViR0xBbGxvd0NyZWF0aW9u
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggOGJjMzVhNTdkNmJmZjY5MjI5NjcwMGYzNTNm
OGM0NDMwNWViMTU5Ni4uZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNjEsOCArNjEsOCBAQAogI2luY2x1ZGUgIkRhdGFM
aXN0U3VnZ2VzdGlvblBpY2tlci5oIgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYmIEVO
QUJMRShHUkFQSElDU19DT05URVhUXzNEKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETWFu
YWdlci5oIgorI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTE2LDggKzUxNiw4IEBAIHZvaWQgQ2hyb21lOjp3aW5k
b3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogI2VuZGlmCiAg
ICAgbV9wYWdlLnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogCi0jaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSAgICBHcmFwaGljc0NvbnRl
eHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zY3JlZW5EaWRDaGFuZ2UoZGlzcGxheUlELCB0
aGlzKTsKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQor
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnNjcmVl
bkRpZENoYW5nZShkaXNwbGF5SUQsIHRoaXMpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDE1OTY5ZjkzNWVkODIyNGRmZDMwNTIwZjli
Njc5OTQ2ZDI1ODQyZjkuLjQyMWRmYmQ5NTc1NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMjcsNyArMjcs
NyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IDM1M2MxNDFkZGE3OTQ5NjAxN2I2YWI0ZmZmOWU0M2Q0
NDA3ZGJiNWIuLmZlMjY2OWM0MjM0MzM5ZjFlNDA4MWJhOGUwMzMzZmNjOWE4NzQxODggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtNyw3ICs3LDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhQW5pbWF0aW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9C
aXRtYXBUZXh0dXJlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0
M0RUZXh0dXJlTWFwcGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJGUFNDb3VudGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vV2ViR0xTdGF0ZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xT
dGF0ZVRyYWNrZXIuY3BwCmluZGV4IDMzZjFkNThkOWEyZjcwNWJlNTFmNzIwMmZkMTdkM2JhMmY5
MTc5MzMuLjZkNzQyNmQ4ZjFjMzcyZDZmMDE1ZDBkZTYzZDMyNmFkYTQ2YmNlNWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3RhdGVUcmFja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XZWJHTFN0YXRlVHJhY2tlci5jcHAKQEAgLTM2LDEwICsz
NiwxMCBAQCBXZWJHTFN0YXRlVHJhY2tlcjo6V2ViR0xTdGF0ZVRyYWNrZXIoU3RhdGVDaGFuZ2VI
YW5kbGVyJiYgaGFuZGxlcikKIHsKIH0KIAotYXV0byBXZWJHTFN0YXRlVHJhY2tlcjo6dG9rZW4o
R3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlKSAtPiBUb2tl
bgorYXV0byBXZWJHTFN0YXRlVHJhY2tlcjo6dG9rZW4oR3JhcGhpY3NDb250ZXh0R0xQb3dlclBy
ZWZlcmVuY2UgcG93ZXJQcmVmZXJlbmNlKSAtPiBUb2tlbgogewogICAgIC8vIFdlIG9ubHkgdHJh
Y2sgaGlnaCBwZXJmb3JtYW5jZSBXZWJHTCBjb250ZXh0cyBhdCB0aGUgbW9tZW50LgotICAgIGlm
IChwb3dlclByZWZlcmVuY2UgIT0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6Okhp
Z2hQZXJmb3JtYW5jZSkKKyAgICBpZiAocG93ZXJQcmVmZXJlbmNlICE9IEdyYXBoaWNzQ29udGV4
dEdMUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UpCiAgICAgICAgIHJldHVybiB7IH07
CiAgICAgcmV0dXJuIG1fd2ViR0xDb250ZXh0Q291bnRlci5jb3VudCgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0ZVRyYWNrZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1dlYkdMU3RhdGVUcmFja2VyLmgKaW5kZXggYjRjOGNjMmQ3YmU0ZThm
YzI5YWEwYWIzZTM2NDliYjYzZTNjODRmMC4uODQ0NjgxZTY4ZTZhMDgyMDJkMjEzMWU2ZWEzMjJh
MzVjM2Q2Mjc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vV2ViR0xTdGF0
ZVRyYWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XZWJHTFN0YXRlVHJhY2tl
ci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlci5oPgogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBXZWJH
TENvbnRleHRDb3VudGVyID0gUmVmQ291bnRlcjxXZWJHTENvbnRleHRDb3VudGVyVHlwZT47CiAg
ICAgdXNpbmcgVG9rZW4gPSBXZWJHTENvbnRleHRDb3VudGVyOjpUb2tlbjsKIAotICAgIFRva2Vu
IHRva2VuKEdyYXBoaWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlKTsKKyAgICBUb2tlbiB0b2tl
bihHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSk7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCB1cGRhdGVXZWJHTFN0YXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKaW5kZXggYTEzZmQ2YjFiYmE0Nzc4MmJj
ZTkyNzE4NDQ4YmM5ZjEwMzY4N2Y1YS4uODkyN2FhY2Y2Yzg2YjZiMjQwNDhiN2YyYTY2NzY3ZDhk
YzUyYTIwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF9HTCkKIAogI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgpAQCAtMjMxLDQgKzIzMSw0IEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlk
Z2U6OmFuZ2xlQXZhaWxhYmxlKCkKIAogfQogCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NP
TlRFWFRfM0QpCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3OGYyYTAzODYxOTk0MjI2YzkzNGNhNjUxYTBkYjFiOTBhZDMx
Mjc5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV4dGVuc2lvbnMzRF9oCi0jZGVmaW5l
IEV4dGVuc2lvbnMzRF9oCi0KLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLQotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRo
aXMgaXMgYSBiYXNlIGNsYXNzIGNvbnRhaW5pbmcgb25seSBwdXJlIHZpcnR1YWwgZnVuY3Rpb25z
LgotLy8gSW1wbGVtZW50YXRpb25zIG11c3QgcHJvdmlkZSBhIHN1YmNsYXNzLgotLy8KLS8vIFRo
ZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBhcmUgZGVmaW5lZCBiZWxvdyBhbmQgaW4gc3ViY2xhc3Nl
cywKLS8vIHBvc3NpYmx5IHBsYXRmb3JtLXNwZWNpZmljIG9uZXMuCi0vLwotLy8gQ2FsbGluZyBh
bnkgZXh0ZW5zaW9uIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgY29udGV4
dAotLy8gbXVzdCBiZSBhIG5vLW9wOyBpbiBwYXJ0aWN1bGFyLCBpdCBtYXkgbm90IGhhdmUgc2lk
ZSBlZmZlY3RzLiBJbgotLy8gdGhpcyBzaXR1YXRpb24sIGlmIHRoZSBmdW5jdGlvbiBoYXMgYSBy
ZXR1cm4gdmFsdWUsIDAgaXMgcmV0dXJuZWQuCi1jbGFzcyBFeHRlbnNpb25zM0QgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRCgpID0gZGVmYXVsdDsKLQotICAgIC8vIFN1cHBv
cnRlZCBleHRlbnNpb25zOgotICAgIC8vICAgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
Ci0gICAgLy8gICBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYQotICAgIC8vICAgR0xfQVJCX3JvYnVz
dG5lc3MKLSAgICAvLyAgIEdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28gLyBHTF9PRVNf
dGV4dHVyZV9ucG90Ci0gICAgLy8gICBHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwgLyBHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKLSAgICAvLyAgIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2Js
aXQgLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQotICAgIC8vICAgR0xfSU1HX211
bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQotICAgIC8vICAgR0xfT0VTX3RleHR1cmVfZmxv
YXQKLSAgICAvLyAgIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcgotICAgIC8vICAgR0xfT0VT
X3RleHR1cmVfaGFsZl9mbG9hdAotICAgIC8vICAgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9s
aW5lYXIKLSAgICAvLyAgIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgIC8vICAgR0xf
T0VTX3JnYjhfcmdiYTgKLSAgICAvLyAgIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAg
Ly8gICBHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Ci0gICAgLy8gICBHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UKLSAgICAvLyAgIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSAob25s
eSB0aGUgc3Vic2V0IHJlcXVpcmVkIHRvCi0gICAgLy8gICAgIGltcGxlbWVudCBJT1N1cmZhY2Ug
YmluZGluZzsgaXQncyByZWNvbW1lbmRlZCB0byBzdXBwb3J0Ci0gICAgLy8gICAgIHRoaXMgb25s
eSBvbiBNYWMgT1MgWCB0byBsaW1pdCB0aGUgYW1vdW50IG9mIGNvZGUgZGVwZW5kZW50Ci0gICAg
Ly8gICAgIG9uIHRoaXMgZXh0ZW5zaW9uKQotICAgIC8vICAgR0xfRVhUX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0MQotICAgIC8vICAgR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fczN0YwotICAg
IC8vICAgR0xfT0VTX2NvbXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUKLSAgICAvLyAgIEdMX0lN
R190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjCi0gICAgLy8gICBHTF9LSFJfdGV4dHVyZV9jb21w
cmVzc2lvbl9hc3RjX2hkcgotICAgIC8vICAgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0
Y19sZHIKLSAgICAvLyAgIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgIC8vICAg
R0xfRVhUX2RlYnVnX21hcmtlcgotICAgIC8vICAgR0xfQVJCX2RyYXdfYnVmZmVycyAvIEdMX0VY
VF9kcmF3X2J1ZmZlcnMKLSAgICAvLyAgIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKLQotICAg
IC8vIFRha2VzIGZ1bGwgbmFtZSBvZiBleHRlbnNpb247IGZvciBleGFtcGxlLAotICAgIC8vICJH
TF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
cyhjb25zdCBTdHJpbmcmKSA9IDA7Ci0KLSAgICAvLyBDZXJ0YWluIE9wZW5HTCBhbmQgV2ViR0wg
aW1wbGVtZW50YXRpb25zIG1heSBzdXBwb3J0IGVuYWJsaW5nCi0gICAgLy8gZXh0ZW5zaW9ucyBs
YXppbHkuIFRoaXMgbWV0aG9kIG1heSBvbmx5IGJlIGNhbGxlZCB3aXRoCi0gICAgLy8gZXh0ZW5z
aW9uIG5hbWVzIGZvciB3aGljaCBzdXBwb3J0cyByZXR1cm5zIHRydWUuCi0gICAgdmlydHVhbCB2
b2lkIGVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJikgPSAwOwotCi0gICAgLy8gVGFrZXMgZnVs
bCBuYW1lIG9mIGV4dGVuc2lvbjogZm9yIGV4YW1wbGUsICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRf
QkdSQTg4ODgiLgotICAgIC8vIENoZWNrcyB0byBzZWUgd2hldGhlciB0aGUgZ2l2ZW4gZXh0ZW5z
aW9uIGlzIGFjdHVhbGx5IGVuYWJsZWQgKHNlZSBlbnN1cmVFbmFibGVkKS4KLSAgICAvLyBIYXMg
bm8gb3RoZXIgc2lkZS1lZmZlY3RzLgotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3Qg
U3RyaW5nJikgPSAwOwotCi0gICAgZW51bSBFeHRlbnNpb25zRW51bVR5cGUgewotICAgICAgICAv
LyBFWFRfc1JHQiBmb3JtYXRzCi0gICAgICAgIFNSR0JfRVhUID0gMHg4QzQwLAotICAgICAgICBT
UkdCX0FMUEhBX0VYVCA9IDB4OEM0MiwKLSAgICAgICAgU1JHQjhfQUxQSEE4X0VYVCA9IDB4OEM0
MywKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQgPSAw
eDgyMTAsCi0KLSAgICAgICAgLy8gRVhUX2JsZW5kX21pbm1heCBlbnVtcwotICAgICAgICBNSU5f
RVhUID0gMHg4MDA3LAotICAgICAgICBNQVhfRVhUID0gMHg4MDA4LAotCi0gICAgICAgIC8vIEdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBlbnVtcwotICAgICAgICBCR1JBX0VYVCA9IDB4
ODBFMSwKLQotICAgICAgICAvLyBHTF9BUkJfcm9idXN0bmVzcyBlbnVtcwotICAgICAgICBHVUlM
VFlfQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTMsCi0gICAgICAgIElOTk9DRU5UX0NPTlRFWFRf
UkVTRVRfQVJCID0gMHg4MjU0LAotICAgICAgICBVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCID0g
MHg4MjU1LAotICAgICAgICBDT05URVhUX1JPQlVTVF9BQ0NFU1MgPSAweDkwRjMsCi0KLSAgICAg
ICAgLy8gR0xfRVhUL09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCBlbnVtcwotICAgICAgICBERVBU
SDI0X1NURU5DSUw4ID0gMHg4OEYwLAotICAgICAgICAKLSAgICAgICAgLy8gR0xfQU5HTEVfZnJh
bWVidWZmZXJfYmxpdCBuYW1lcwotICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSID0gMHg4Q0E4LAot
ICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAotICAgICAgICBEUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkcgPSAweDhDQTYsIAotICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcg
PSAweDhDQUEsCi0gICAgICAgIAotICAgICAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0
aXNhbXBsZSBuYW1lcwotICAgICAgICBSRU5ERVJCVUZGRVJfU0FNUExFUyA9IDB4OENBQiwKLSAg
ICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSA9IDB4OEQ1NiwKLSAgICAg
ICAgTUFYX1NBTVBMRVMgPSAweDhENTcsCi0KLSAgICAgICAgLy8gR0xfSU1HX211bHRpc2FtcGxl
ZF9yZW5kZXJfdG9fdGV4dHVyZQotICAgICAgICBSRU5ERVJCVUZGRVJfU0FNUExFU19JTUcgPSAw
eDkxMzMsCi0gICAgICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfSU1HID0g
MHg5MTM0LAotICAgICAgICBNQVhfU0FNUExFU19JTUcgPSAweDkxMzUsCi0gICAgICAgIFRFWFRV
UkVfU0FNUExFU19JTUcgPSAweDkxMzYsCi0KLSAgICAgICAgLy8gR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIG5hbWVzCi0gICAgICAgIEZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRf
T0VTID0gMHg4QjhCLAotCi0gICAgICAgIC8vIEdMX09FU19yZ2I4X3JnYmE4IG5hbWVzCi0gICAg
ICAgIFJHQjhfT0VTID0gMHg4MDUxLAotICAgICAgICBSR0JBOF9PRVMgPSAweDgwNTgsCi0gICAg
ICAgIAotICAgICAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCBuYW1lcwotICAgICAg
ICBWRVJURVhfQVJSQVlfQklORElOR19PRVMgPSAweDg1QjUsCi0KLSAgICAgICAgLy8gR0xfQU5H
TEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0gICAgICAgIFRSQU5TTEFURURfU0hBREVSX1NP
VVJDRV9MRU5HVEhfQU5HTEUgPSAweDkzQTAsCi0KLSAgICAgICAgLy8gR0xfQVJCX3RleHR1cmVf
cmVjdGFuZ2xlCi0gICAgICAgIFRFWFRVUkVfUkVDVEFOR0xFX0FSQiA9ICAweDg0RjUsCi0gICAg
ICAgIFRFWFRVUkVfQklORElOR19SRUNUQU5HTEVfQVJCID0gMHg4NEY2LAotCi0gICAgICAgIC8v
IEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKLSAgICAgICAgLy8gR0xfRVhUX3RleHR1
cmVfY29tcHJlc3Npb25fczN0YwotICAgICAgICBDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
ID0gMHg4M0YwLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCA9IDB4ODNG
MSwKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjIsCi0gICAg
ICAgIENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzLAotCi0gICAgICAgIC8v
IEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCi0gICAgICAgIEVUQzFfUkdCOF9P
RVMgPSAweDhENjQsCi0KLSAgICAgICAgLy8gV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0Ywot
ICAgICAgICBDT01QUkVTU0VEX1IxMV9FQUMgPSAweDkyNzAsCi0gICAgICAgIENPTVBSRVNTRURf
U0lHTkVEX1IxMV9FQUMgPSAweDkyNzEsCi0gICAgICAgIENPTVBSRVNTRURfUkcxMV9FQUMgPSAw
eDkyNzIsCi0gICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDID0gMHg5MjczLAotICAg
ICAgICBDT01QUkVTU0VEX1JHQjhfRVRDMiA9IDB4OTI3NCwKLSAgICAgICAgQ09NUFJFU1NFRF9T
UkdCOF9FVEMyID0gMHg5Mjc1LAotICAgICAgICBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyID0gMHg5Mjc2LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhS
T1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3NywKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBOF9FVEMy
X0VBQyA9IDB4OTI3OCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMg
PSAweDkyNzksCi0KLSAgICAgICAgLy8gR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMK
LSAgICAgICAgQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyA9IDB4OEMwMCwKLSAgICAg
ICAgQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyA9IDB4OEMwMSwKLSAgICAgICAgQ09N
UFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcgPSAweDhDMDIsCi0gICAgICAgIENPTVBSRVNT
RURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HID0gMHg4QzAzLAotCi0gICAgICAgIC8vIEdMX0FNRF9j
b21wcmVzc2VkX0FUQ190ZXh0dXJlCi0gICAgICAgIENPTVBSRVNTRURfQVRDX1JHQl9BTUQgPSAw
eDhDOTIsCi0gICAgICAgIENPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EID0g
MHg4QzkzLAotICAgICAgICBDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBIQV9B
TUQgPSAweDg3RUUsCi0gICAgICAgIAotICAgICAgICAvLyBHTF9LSFJfdGV4dHVyZV9jb21wcmVz
c2lvbl9hc3RjX2hkcgotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSID0gMHg5
M0IwLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSID0gMHg5M0IxLAotICAg
ICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSID0gMHg5M0IyLAotICAgICAgICBDT01Q
UkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSID0gMHg5M0IzLAotICAgICAgICBDT01QUkVTU0VEX1JH
QkFfQVNUQ182eDZfS0hSID0gMHg5M0I0LAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ184
eDVfS0hSID0gMHg5M0I1LAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSID0g
MHg5M0I2LAotICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSID0gMHg5M0I3LAot
ICAgICAgICBDT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUiA9IDB4OTNCOCwKLSAgICAgICAg
Q09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFIgPSAweDkzQjksCi0gICAgICAgIENPTVBSRVNT
RURfUkdCQV9BU1RDXzEweDhfS0hSID0gMHg5M0JBLAotICAgICAgICBDT01QUkVTU0VEX1JHQkFf
QVNUQ18xMHgxMF9LSFIgPSAweDkzQkIsCi0gICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEy
eDEwX0tIUiA9IDB4OTNCQywKLSAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hS
ID0gMHg5M0JELAotICAgICAgICAKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q180eDRfS0hSID0gMHg5M0QwLAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzV4NF9LSFIgPSAweDkzRDEsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
NXg1X0tIUiA9IDB4OTNEMiwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182
eDVfS0hSID0gMHg5M0QzLAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4
Nl9LSFIgPSAweDkzRDQsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1
X0tIUiA9IDB4OTNENSwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZf
S0hSID0gMHg5M0Q2LAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9L
SFIgPSAweDkzRDcsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9L
SFIgPSAweDkzRDgsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9L
SFIgPSAweDkzRDksCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9L
SFIgPSAweDkzREEsCi0gICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBf
S0hSID0gMHg5M0RCLAotICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEw
X0tIUiA9IDB4OTNEQywKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngx
Ml9LSFIgPSAweDkzREQsCi0KLSAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljCi0gICAgICAgIFRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUID0gMHg4NEZFLAotICAg
ICAgICBNQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgPSAweDg0RkYsCi0KLSAgICAgICAg
Ly8gR0xfQVJCX2RyYXdfYnVmZmVycyAvIEdMX0VYVF9kcmF3X2J1ZmZlcnMKLSAgICAgICAgTUFY
X0RSQVdfQlVGRkVSU19FWFQgPSAweDg4MjQsCi0gICAgICAgIERSQVdfQlVGRkVSMF9FWFQgPSAw
eDg4MjUsCi0gICAgICAgIERSQVdfQlVGRkVSMV9FWFQgPSAweDg4MjYsCi0gICAgICAgIERSQVdf
QlVGRkVSMl9FWFQgPSAweDg4MjcsCi0gICAgICAgIERSQVdfQlVGRkVSM19FWFQgPSAweDg4Mjgs
Ci0gICAgICAgIERSQVdfQlVGRkVSNF9FWFQgPSAweDg4MjksCi0gICAgICAgIERSQVdfQlVGRkVS
NV9FWFQgPSAweDg4MkEsCi0gICAgICAgIERSQVdfQlVGRkVSNl9FWFQgPSAweDg4MkIsCi0gICAg
ICAgIERSQVdfQlVGRkVSN19FWFQgPSAweDg4MkMsCi0gICAgICAgIERSQVdfQlVGRkVSOF9FWFQg
PSAweDg4MkQsCi0gICAgICAgIERSQVdfQlVGRkVSOV9FWFQgPSAweDg4MkUsCi0gICAgICAgIERS
QVdfQlVGRkVSMTBfRVhUID0gMHg4ODJGLAotICAgICAgICBEUkFXX0JVRkZFUjExX0VYVCA9IDB4
ODgzMCwKLSAgICAgICAgRFJBV19CVUZGRVIxMl9FWFQgPSAweDg4MzEsCi0gICAgICAgIERSQVdf
QlVGRkVSMTNfRVhUID0gMHg4ODMyLAotICAgICAgICBEUkFXX0JVRkZFUjE0X0VYVCA9IDB4ODgz
MywKLSAgICAgICAgRFJBV19CVUZGRVIxNV9FWFQgPSAweDg4MzQsCi0gICAgICAgIE1BWF9DT0xP
Ul9BVFRBQ0hNRU5UU19FWFQgPSAweDhDREYsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQwX0VY
VCA9IDB4OENFMCwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDFfRVhUID0gMHg4Q0UxLAotICAg
ICAgICBDT0xPUl9BVFRBQ0hNRU5UMl9FWFQgPSAweDhDRTIsCi0gICAgICAgIENPTE9SX0FUVEFD
SE1FTlQzX0VYVCA9IDB4OENFMywKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDRfRVhUID0gMHg4
Q0U0LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNV9FWFQgPSAweDhDRTUsCi0gICAgICAgIENP
TE9SX0FUVEFDSE1FTlQ2X0VYVCA9IDB4OENFNiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDdf
RVhUID0gMHg4Q0U3LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UOF9FWFQgPSAweDhDRTgsCi0g
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQ5X0VYVCA9IDB4OENFOSwKLSAgICAgICAgQ09MT1JfQVRU
QUNITUVOVDEwX0VYVCA9IDB4OENFQSwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDExX0VYVCA9
IDB4OENFQiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEyX0VYVCA9IDB4OENFQywKLSAgICAg
ICAgQ09MT1JfQVRUQUNITUVOVDEzX0VYVCA9IDB4OENFRCwKLSAgICAgICAgQ09MT1JfQVRUQUNI
TUVOVDE0X0VYVCA9IDB4OENFRSwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDE1X0VYVCA9IDB4
OENFRgotICAgIH07Ci0KLSAgICAvLyBHTF9BUkJfcm9idXN0bmVzcwotICAgIC8vIE5vdGU6IFRo
aXMgbWV0aG9kJ3MgYmVoYXZpb3IgZGlmZmVycyBmcm9tIHRoZSBHTF9BUkJfcm9idXN0bmVzcwot
ICAgIC8vIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0gICAgLy8gVGhlIGlt
cGxlbWVudGF0aW9uIG11c3Qgbm90IHJlc2V0IHRoZSBlcnJvciBzdGF0ZSBkdXJpbmcgdGhpcyBj
YWxsLgotICAgIC8vIElmIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIgcmV0dXJucyBhbiBlcnJv
ciwgaXQgc2hvdWxkIGNvbnRpbnVlCi0gICAgLy8gcmV0dXJuaW5nIHRoZSBzYW1lIGVycm9yLiBS
ZXN0b3JpbmcgdGhlIEdyYXBoaWNzQ29udGV4dDNEIGlzIGhhbmRsZWQKLSAgICAvLyBleHRlcm5h
bGx5LgotICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9IDA7Ci0g
ICAgCi0gICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAotICAgIHZpcnR1YWwgdm9pZCBi
bGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBz
cmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5z
aWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikgPSAwOwotICAgIAotICAgIC8v
IEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCi0gICAgdmlydHVhbCB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOwotICAgIAotICAgIC8vIEdMX09FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZl
cnRleEFycmF5T0VTKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFZl
cnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLQotICAgIC8vIEdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQotICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSAgICAvLyBFWFQgUm9i
dXN0bmVzcyAtIHVzZXMgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQgotICAgIHZpcnR1YWwgdm9p
ZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6
ZSwgdm9pZCAqZGF0YSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdD
M0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpw
YXJhbXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBw
cm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgPSAw
OwotCi0gICAgLy8gR0xfRVhUX2RlYnVnX21hcmtlcgotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRF
dmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHB1c2hH
cm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBvcEdy
b3VwTWFya2VyRVhUKHZvaWQpID0gMDsKLQotICAgIC8vIEdMX0FSQl9kcmF3X2J1ZmZlcnMgLyBH
TF9FWFRfZHJhd19idWZmZXJzCi0gICAgdmlydHVhbCB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0Rz
aXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVmcykgPSAwOwotCi0gICAgLy8gR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cwotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1j
b3VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJp
YkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpID0gMDsKLQotICAgIHZp
cnR1YWwgYm9vbCBpc05WSURJQSgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBTUQoKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGlzSW50ZWwoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzSW1h
Z2luYXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdmVuZG9yKCkgPSAwOwotCi0gICAg
Ly8gU29tZSBjb25maWd1cmF0aW9ucyBoYXZlIGJ1Z3MgcmVnYXJkaW5nIGJ1aWx0LWluIGZ1bmN0
aW9ucyBpbiB0aGVpciBPcGVuR0wgZHJpdmVycwotICAgIC8vIHRoYXQgbXVzdCBiZSBhdm9pZGVk
LiBQb3J0cyBzaG91bGQgaW1wbGVtZW50IHRoZXNlIGZsYWdzIG9uIHN1Y2ggY29uZmlndXJhdGlv
bnMuCi0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNp
emUoKSA9IDA7Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEV4
dGVuc2lvbnMzRF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbnNpb25zR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
c2lvbnNHTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiNGZlZjI1MjJhYjRmZjU3ZjE3NjQwZGU4MTgzYTgwZmNk
MGJlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbnNpb25zR0wuaApAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGlzIGEgYmFzZSBjbGFz
cyBjb250YWluaW5nIG9ubHkgcHVyZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKy8vIEltcGxlbWVudGF0
aW9ucyBtdXN0IHByb3ZpZGUgYSBzdWJjbGFzcy4KKy8vCisvLyBUaGUgc3VwcG9ydGVkIGV4dGVu
c2lvbnMgYXJlIGRlZmluZWQgYmVsb3cgYW5kIGluIHN1YmNsYXNzZXMsCisvLyBwb3NzaWJseSBw
bGF0Zm9ybS1zcGVjaWZpYyBvbmVzLgorLy8KKy8vIENhbGxpbmcgYW55IGV4dGVuc2lvbiBmdW5j
dGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGNvbnRleHQKKy8vIG11c3QgYmUgYSBu
by1vcDsgaW4gcGFydGljdWxhciwgaXQgbWF5IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4gSW4KKy8v
IHRoaXMgc2l0dWF0aW9uLCBpZiB0aGUgZnVuY3Rpb24gaGFzIGEgcmV0dXJuIHZhbHVlLCAwIGlz
IHJldHVybmVkLgorY2xhc3MgRXh0ZW5zaW9uc0dMIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5F
eHRlbnNpb25zR0woKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBTdXBwb3J0ZWQgZXh0ZW5zaW9uczoK
KyAgICAvLyAgIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIC8vICAgR0xfRVhU
X3JlYWRfZm9ybWF0X2JncmEKKyAgICAvLyAgIEdMX0FSQl9yb2J1c3RuZXNzCisgICAgLy8gICBH
TF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIC8gR0xfT0VTX3RleHR1cmVfbnBvdAorICAg
IC8vICAgR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIC8gR0xfT0VTX3BhY2tlZF9kZXB0aF9z
dGVuY2lsCisgICAgLy8gICBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IC8gR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUKKyAgICAvLyAgIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVy
X3RvX3RleHR1cmUKKyAgICAvLyAgIEdMX09FU190ZXh0dXJlX2Zsb2F0CisgICAgLy8gICBHTF9P
RVNfdGV4dHVyZV9mbG9hdF9saW5lYXIKKyAgICAvLyAgIEdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQKKyAgICAvLyAgIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyCisgICAgLy8gICBH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICAvLyAgIEdMX09FU19yZ2I4X3JnYmE4Cisg
ICAgLy8gICBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgIC8vICAgR0xfT0VTX2VsZW1l
bnRfaW5kZXhfdWludAorICAgIC8vICAgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNl
CisgICAgLy8gICBHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUgKG9ubHkgdGhlIHN1YnNldCByZXF1
aXJlZCB0bworICAgIC8vICAgICBpbXBsZW1lbnQgSU9TdXJmYWNlIGJpbmRpbmc7IGl0J3MgcmVj
b21tZW5kZWQgdG8gc3VwcG9ydAorICAgIC8vICAgICB0aGlzIG9ubHkgb24gTWFjIE9TIFggdG8g
bGltaXQgdGhlIGFtb3VudCBvZiBjb2RlIGRlcGVuZGVudAorICAgIC8vICAgICBvbiB0aGlzIGV4
dGVuc2lvbikKKyAgICAvLyAgIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAv
LyAgIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMKKyAgICAvLyAgIEdMX09FU19jb21w
cmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCisgICAgLy8gICBHTF9JTUdfdGV4dHVyZV9jb21wcmVz
c2lvbl9wdnJ0YworICAgIC8vICAgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19oZHIK
KyAgICAvLyAgIEdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCisgICAgLy8gICBF
WFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAvLyAgIEdMX0VYVF9kZWJ1Z19tYXJr
ZXIKKyAgICAvLyAgIEdMX0FSQl9kcmF3X2J1ZmZlcnMgLyBHTF9FWFRfZHJhd19idWZmZXJzCisg
ICAgLy8gICBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCisKKyAgICAvLyBUYWtlcyBmdWxsIG5h
bWUgb2YgZXh0ZW5zaW9uOyBmb3IgZXhhbXBsZSwKKyAgICAvLyAiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Ii4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJikg
PSAwOworCisgICAgLy8gQ2VydGFpbiBPcGVuR0wgYW5kIFdlYkdMIGltcGxlbWVudGF0aW9ucyBt
YXkgc3VwcG9ydCBlbmFibGluZworICAgIC8vIGV4dGVuc2lvbnMgbGF6aWx5LiBUaGlzIG1ldGhv
ZCBtYXkgb25seSBiZSBjYWxsZWQgd2l0aAorICAgIC8vIGV4dGVuc2lvbiBuYW1lcyBmb3Igd2hp
Y2ggc3VwcG9ydHMgcmV0dXJucyB0cnVlLgorICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVFbmFibGVk
KGNvbnN0IFN0cmluZyYpID0gMDsKKworICAgIC8vIFRha2VzIGZ1bGwgbmFtZSBvZiBleHRlbnNp
b246IGZvciBleGFtcGxlLCAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ii4KKyAgICAv
LyBDaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIGdpdmVuIGV4dGVuc2lvbiBpcyBhY3R1YWxseSBl
bmFibGVkIChzZWUgZW5zdXJlRW5hYmxlZCkuCisgICAgLy8gSGFzIG5vIG90aGVyIHNpZGUtZWZm
ZWN0cy4KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpID0gMDsKKwor
ICAgIGVudW0gRXh0ZW5zaW9uc0VudW1UeXBlIHsKKyAgICAgICAgLy8gRVhUX3NSR0IgZm9ybWF0
cworICAgICAgICBTUkdCX0VYVCA9IDB4OEM0MCwKKyAgICAgICAgU1JHQl9BTFBIQV9FWFQgPSAw
eDhDNDIsCisgICAgICAgIFNSR0I4X0FMUEhBOF9FWFQgPSAweDhDNDMsCisgICAgICAgIEZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUID0gMHg4MjEwLAorCisgICAgICAg
IC8vIEVYVF9ibGVuZF9taW5tYXggZW51bXMKKyAgICAgICAgTUlOX0VYVCA9IDB4ODAwNywKKyAg
ICAgICAgTUFYX0VYVCA9IDB4ODAwOCwKKworICAgICAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3Jt
YXRfQkdSQTg4ODggZW51bXMKKyAgICAgICAgQkdSQV9FWFQgPSAweDgwRTEsCisKKyAgICAgICAg
Ly8gR0xfQVJCX3JvYnVzdG5lc3MgZW51bXMKKyAgICAgICAgR1VJTFRZX0NPTlRFWFRfUkVTRVRf
QVJCID0gMHg4MjUzLAorICAgICAgICBJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1
NCwKKyAgICAgICAgVU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQiA9IDB4ODI1NSwKKyAgICAgICAg
Q09OVEVYVF9ST0JVU1RfQUNDRVNTID0gMHg5MEYzLAorCisgICAgICAgIC8vIEdMX0VYVC9PRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwgZW51bXMKKyAgICAgICAgREVQVEgyNF9TVEVOQ0lMOCA9IDB4
ODhGMCwKKworICAgICAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IG5hbWVzCisgICAg
ICAgIFJFQURfRlJBTUVCVUZGRVIgPSAweDhDQTgsCisgICAgICAgIERSQVdfRlJBTUVCVUZGRVIg
PSAweDhDQTksCisgICAgICAgIERSQVdfRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBNiwKKyAg
ICAgICAgUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HID0gMHg4Q0FBLAorCisgICAgICAgIC8vIEdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIG5hbWVzCisgICAgICAgIFJFTkRFUkJVRkZF
Ul9TQU1QTEVTID0gMHg4Q0FCLAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJ
U0FNUExFID0gMHg4RDU2LAorICAgICAgICBNQVhfU0FNUExFUyA9IDB4OEQ1NywKKworICAgICAg
ICAvLyBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCisgICAgICAgIFJFTkRF
UkJVRkZFUl9TQU1QTEVTX0lNRyA9IDB4OTEzMywKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9NVUxUSVNBTVBMRV9JTUcgPSAweDkxMzQsCisgICAgICAgIE1BWF9TQU1QTEVTX0lNRyA9
IDB4OTEzNSwKKyAgICAgICAgVEVYVFVSRV9TQU1QTEVTX0lNRyA9IDB4OTEzNiwKKworICAgICAg
ICAvLyBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbmFtZXMKKyAgICAgICAgRlJBR01FTlRf
U0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMgPSAweDhCOEIsCisKKyAgICAgICAgLy8gR0xfT0VT
X3JnYjhfcmdiYTggbmFtZXMKKyAgICAgICAgUkdCOF9PRVMgPSAweDgwNTEsCisgICAgICAgIFJH
QkE4X09FUyA9IDB4ODA1OCwKKworICAgICAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVj
dCBuYW1lcworICAgICAgICBWRVJURVhfQVJSQVlfQklORElOR19PRVMgPSAweDg1QjUsCisKKyAg
ICAgICAgLy8gR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCisgICAgICAgIFRSQU5T
TEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgPSAweDkzQTAsCisKKyAgICAgICAgLy8g
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlCisgICAgICAgIFRFWFRVUkVfUkVDVEFOR0xFX0FSQiA9
ICAweDg0RjUsCisgICAgICAgIFRFWFRVUkVfQklORElOR19SRUNUQU5HTEVfQVJCID0gMHg4NEY2
LAorCisgICAgICAgIC8vIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAgICAg
Ly8gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fczN0YworICAgICAgICBDT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUID0gMHg4M0YwLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCA9IDB4ODNGMSwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQg
PSAweDgzRjIsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0Yz
LAorCisgICAgICAgIC8vIEdMX09FU19jb21wcmVzc2VkX0VUQzFfUkdCOF90ZXh0dXJlCisgICAg
ICAgIEVUQzFfUkdCOF9PRVMgPSAweDhENjQsCisKKyAgICAgICAgLy8gV0VCR0xfY29tcHJlc3Nl
ZF90ZXh0dXJlX2V0YworICAgICAgICBDT01QUkVTU0VEX1IxMV9FQUMgPSAweDkyNzAsCisgICAg
ICAgIENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgPSAweDkyNzEsCisgICAgICAgIENPTVBSRVNT
RURfUkcxMV9FQUMgPSAweDkyNzIsCisgICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFD
ID0gMHg5MjczLAorICAgICAgICBDT01QUkVTU0VEX1JHQjhfRVRDMiA9IDB4OTI3NCwKKyAgICAg
ICAgQ09NUFJFU1NFRF9TUkdCOF9FVEMyID0gMHg5Mjc1LAorICAgICAgICBDT01QUkVTU0VEX1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc2LAorICAgICAgICBDT01QUkVTU0VE
X1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3NywKKyAgICAgICAgQ09NUFJF
U1NFRF9SR0JBOF9FVEMyX0VBQyA9IDB4OTI3OCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfRVRDMl9FQUMgPSAweDkyNzksCisKKyAgICAgICAgLy8gR0xfSU1HX3RleHR1cmVfY29t
cHJlc3Npb25fcHZydGMKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyA9
IDB4OEMwMCwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyA9IDB4OEMw
MSwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUcgPSAweDhDMDIsCisg
ICAgICAgIENPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HID0gMHg4QzAzLAorCisgICAg
ICAgIC8vIEdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlCisgICAgICAgIENPTVBSRVNTRURf
QVRDX1JHQl9BTUQgPSAweDhDOTIsCisgICAgICAgIENPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElD
SVRfQUxQSEFfQU1EID0gMHg4QzkzLAorICAgICAgICBDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVS
UE9MQVRFRF9BTFBIQV9BTUQgPSAweDg3RUUsCisKKyAgICAgICAgLy8gR0xfS0hSX3RleHR1cmVf
Y29tcHJlc3Npb25fYXN0Y19oZHIKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tI
UiA9IDB4OTNCMCwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUiA9IDB4OTNC
MSwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUiA9IDB4OTNCMiwKKyAgICAg
ICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUiA9IDB4OTNCMywKKyAgICAgICAgQ09NUFJF
U1NFRF9SR0JBX0FTVENfNng2X0tIUiA9IDB4OTNCNCwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JB
X0FTVENfOHg1X0tIUiA9IDB4OTNCNSwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2
X0tIUiA9IDB4OTNCNiwKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiA9IDB4
OTNCNywKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIgPSAweDkzQjgsCisg
ICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSID0gMHg5M0I5LAorICAgICAgICBD
T01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUiA9IDB4OTNCQSwKKyAgICAgICAgQ09NUFJFU1NF
RF9SR0JBX0FTVENfMTB4MTBfS0hSID0gMHg5M0JCLAorICAgICAgICBDT01QUkVTU0VEX1JHQkFf
QVNUQ18xMngxMF9LSFIgPSAweDkzQkMsCisgICAgICAgIENPTVBSRVNTRURfUkdCQV9BU1RDXzEy
eDEyX0tIUiA9IDB4OTNCRCwKKworICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RD
XzR4NF9LSFIgPSAweDkzRDAsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
NXg0X0tIUiA9IDB4OTNEMSwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181
eDVfS0hSID0gMHg5M0QyLAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4
NV9LSFIgPSAweDkzRDMsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2
X0tIUiA9IDB4OTNENCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVf
S0hSID0gMHg5M0Q1LAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9L
SFIgPSAweDkzRDYsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tI
UiA9IDB4OTNENywKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tI
UiA9IDB4OTNEOCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tI
UiA9IDB4OTNEOSwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tI
UiA9IDB4OTNEQSwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9L
SFIgPSAweDkzREIsCisgICAgICAgIENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBf
S0hSID0gMHg5M0RDLAorICAgICAgICBDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEy
X0tIUiA9IDB4OTNERCwKKworICAgICAgICAvLyBHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290
cm9waWMKKyAgICAgICAgVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQgPSAweDg0RkUsCisgICAg
ICAgIE1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCA9IDB4ODRGRiwKKworICAgICAgICAv
LyBHTF9BUkJfZHJhd19idWZmZXJzIC8gR0xfRVhUX2RyYXdfYnVmZmVycworICAgICAgICBNQVhf
RFJBV19CVUZGRVJTX0VYVCA9IDB4ODgyNCwKKyAgICAgICAgRFJBV19CVUZGRVIwX0VYVCA9IDB4
ODgyNSwKKyAgICAgICAgRFJBV19CVUZGRVIxX0VYVCA9IDB4ODgyNiwKKyAgICAgICAgRFJBV19C
VUZGRVIyX0VYVCA9IDB4ODgyNywKKyAgICAgICAgRFJBV19CVUZGRVIzX0VYVCA9IDB4ODgyOCwK
KyAgICAgICAgRFJBV19CVUZGRVI0X0VYVCA9IDB4ODgyOSwKKyAgICAgICAgRFJBV19CVUZGRVI1
X0VYVCA9IDB4ODgyQSwKKyAgICAgICAgRFJBV19CVUZGRVI2X0VYVCA9IDB4ODgyQiwKKyAgICAg
ICAgRFJBV19CVUZGRVI3X0VYVCA9IDB4ODgyQywKKyAgICAgICAgRFJBV19CVUZGRVI4X0VYVCA9
IDB4ODgyRCwKKyAgICAgICAgRFJBV19CVUZGRVI5X0VYVCA9IDB4ODgyRSwKKyAgICAgICAgRFJB
V19CVUZGRVIxMF9FWFQgPSAweDg4MkYsCisgICAgICAgIERSQVdfQlVGRkVSMTFfRVhUID0gMHg4
ODMwLAorICAgICAgICBEUkFXX0JVRkZFUjEyX0VYVCA9IDB4ODgzMSwKKyAgICAgICAgRFJBV19C
VUZGRVIxM19FWFQgPSAweDg4MzIsCisgICAgICAgIERSQVdfQlVGRkVSMTRfRVhUID0gMHg4ODMz
LAorICAgICAgICBEUkFXX0JVRkZFUjE1X0VYVCA9IDB4ODgzNCwKKyAgICAgICAgTUFYX0NPTE9S
X0FUVEFDSE1FTlRTX0VYVCA9IDB4OENERiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDBfRVhU
ID0gMHg4Q0UwLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMV9FWFQgPSAweDhDRTEsCisgICAg
ICAgIENPTE9SX0FUVEFDSE1FTlQyX0VYVCA9IDB4OENFMiwKKyAgICAgICAgQ09MT1JfQVRUQUNI
TUVOVDNfRVhUID0gMHg4Q0UzLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNF9FWFQgPSAweDhD
RTQsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQ1X0VYVCA9IDB4OENFNSwKKyAgICAgICAgQ09M
T1JfQVRUQUNITUVOVDZfRVhUID0gMHg4Q0U2LAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UN19F
WFQgPSAweDhDRTcsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQ4X0VYVCA9IDB4OENFOCwKKyAg
ICAgICAgQ09MT1JfQVRUQUNITUVOVDlfRVhUID0gMHg4Q0U5LAorICAgICAgICBDT0xPUl9BVFRB
Q0hNRU5UMTBfRVhUID0gMHg4Q0VBLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTFfRVhUID0g
MHg4Q0VCLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTJfRVhUID0gMHg4Q0VDLAorICAgICAg
ICBDT0xPUl9BVFRBQ0hNRU5UMTNfRVhUID0gMHg4Q0VELAorICAgICAgICBDT0xPUl9BVFRBQ0hN
RU5UMTRfRVhUID0gMHg4Q0VFLAorICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMTVfRVhUID0gMHg4
Q0VGCisgICAgfTsKKworICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzCisgICAgLy8gTm90ZTogVGhp
cyBtZXRob2QncyBiZWhhdmlvciBkaWZmZXJzIGZyb20gdGhlIEdMX0FSQl9yb2J1c3RuZXNzCisg
ICAgLy8gc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9sbG93aW5nIHdheToKKyAgICAvLyBUaGUgaW1w
bGVtZW50YXRpb24gbXVzdCBub3QgcmVzZXQgdGhlIGVycm9yIHN0YXRlIGR1cmluZyB0aGlzIGNh
bGwuCisgICAgLy8gSWYgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiByZXR1cm5zIGFuIGVycm9y
LCBpdCBzaG91bGQgY29udGludWUKKyAgICAvLyByZXR1cm5pbmcgdGhlIHNhbWUgZXJyb3IuIFJl
c3RvcmluZyB0aGUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgaXMgaGFuZGxlZAorICAgIC8vIGV4
dGVybmFsbHkuCisgICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID0g
MDsKKworICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKKyAgICB2aXJ0dWFsIHZvaWQg
YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcg
c3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVu
c2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpID0gMDsKKworICAgIC8vIEdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOworCisgICAgLy8gR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJy
YXlPRVMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisgICAgLy8gR0xfQU5HTEVfdHJhbnNsYXRl
ZF9zaGFkZXJfc291cmNlCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIC8vIEVYVCBSb2J1c3RuZXNz
IC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCCisgICAgdmlydHVhbCB2b2lkIHJlYWRu
UGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lk
ICpkYXRhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0s
IGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSA9IDA7CisKKyAg
ICAvLyBHTF9FWFRfZGVidWdfbWFya2VyCisgICAgdmlydHVhbCB2b2lkIGluc2VydEV2ZW50TWFy
a2VyRVhUKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEdyb3VwTWFy
a2VyRVhUKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcG9wR3JvdXBNYXJr
ZXJFWFQodm9pZCkgPSAwOworCisgICAgLy8gR0xfQVJCX2RyYXdfYnVmZmVycyAvIEdMX0VYVF9k
cmF3X2J1ZmZlcnMKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpIG4s
IGNvbnN0IEdDM0RlbnVtKiBidWZzKSA9IDA7CisKKyAgICAvLyBHTF9BTkdMRV9pbnN0YW5jZWRf
YXJyYXlzCisgICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0Rz
aXplaSBwcmltY291bnQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliRGl2aXNv
cihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikgPSAwOworCisgICAgdmlydHVhbCBi
b29sIGlzTlZJRElBKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0FNRCgpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNJbnRlbCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnaW5hdGlv
bigpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2ZW5kb3IoKSA9IDA7CisKKyAgICAvLyBTb21l
IGNvbmZpZ3VyYXRpb25zIGhhdmUgYnVncyByZWdhcmRpbmcgYnVpbHQtaW4gZnVuY3Rpb25zIGlu
IHRoZWlyIE9wZW5HTCBkcml2ZXJzCisgICAgLy8gdGhhdCBtdXN0IGJlIGF2b2lkZWQuIFBvcnRz
IHNob3VsZCBpbXBsZW1lbnQgdGhlc2UgZmxhZ3Mgb24gc3VjaCBjb25maWd1cmF0aW9ucy4KKyAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24oKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpID0g
MDsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9ybWF0Q29udmVydGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5jcHAKaW5kZXggMDllZWM3OGJh
ZGQwN2U4Nzk0MTc3NDA1MzBlYTVjNTNhOWRkNjA2ZC4uYjZjNjE4ZTk2MThmZGRmMGQ4YzBhM2Y3
ZjY5OTEzN2ZjNGFlOGU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9ybWF0Q29udmVydGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb3JtYXRDb252ZXJ0ZXIuY3BwCkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCisjaWYgRU5B
QkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKICNpbmNsdWRlICJGb3JtYXRDb252ZXJ0ZXIuaCIK
IAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRE5FT04uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE5FT04uaCIKICNlbmRpZgog
CiAjaWYgVVNFKEFDQ0VMRVJBVEUpCkBAIC0xNzMsMTMgKzE3MywxMyBAQCBpbmxpbmUgdW5zaWdu
ZWQgc2hvcnQgY29udmVydEZsb2F0VG9IYWxmRmxvYXQoZmxvYXQgZikKIAogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAvLyBQaXhlbCB1bnBhY2tpbmcgcm91dGluZXMuCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdCBmb3JtYXQsIHR5cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIERz
dFR5cGU+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBmb3JtYXQsIHR5
cGVuYW1lIFNvdXJjZVR5cGUsIHR5cGVuYW1lIERzdFR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQg
dW5wYWNrKGNvbnN0IFNvdXJjZVR5cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCOCwgdWludDhfdCwgdWludDhf
dD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsr
aSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTE5MSw3ICsxOTEs
NyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIHVpbnQ4XwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1I4
LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzJd
OwpAQCAtMjAzLDcgKzIwMyw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFj
azxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSOCwgdWludDhfCiAgICAgfQogfQog
Ci10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OkFSR0I4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkFSR0I4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5h
dGlvblswXSA9IHNvdXJjZVsxXTsKQEAgLTIxNSw3ICsyMTUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4
LCB1aW50OAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBQkdSOCwgdWludDhfdCwgdWludDhfdD4o
Y29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpBQkdSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbM107CkBAIC0yMjcsNyArMjI3LDcg
QEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpBQkdSOCwgdWludDgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgs
IHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVpbnQ4X3Qs
IHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBjb25zdCB1aW50MzJfdCogc291cmNlMzIgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50MzJfdCo+KHNvdXJjZSk7CiAgICAgdWludDMy
X3QqIGRlc3RpbmF0aW9uMzIgPSByZWludGVycHJldF9jYXN0X3B0cjx1aW50MzJfdCo+KGRlc3Rp
bmF0aW9uKTsKQEAgLTI0NSw3ICsyNDUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4LCB1aW50OAogICAg
IH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2
X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykK
IHsKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6dW5wYWNrT25lUm93
T2ZSR0JBNTU1MVRvUkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAg
LTI2NCw3ICsyNjQsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCB1aQogICAgIH0KIH0KIAotdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0JBNDQ0NCwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkE0NDQ0LCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwg
dWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCiAgICAgU0lNRDo6dW5wYWNrT25lUm93T2ZSR0JBNDQ0NFRv
UkdCQTgoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTI4NCw3ICsyODQs
NyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCB1aQogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1
NjUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUsIHVp
bnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKICAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZlJHQjU2NVRvUkdCQTgoc291cmNlLCBkZXN0
aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTMwMyw3ICszMDMsNyBAQCB0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QjU2NSwgdWludAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5w
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSOCwgdWludDhfdCwgdWludDhfdD4o
Y29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSOCwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC0zMTUsNyArMzE1LDcgQEAg
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSOCwgdWludDhfdCwKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4LCB1aW50
OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1
bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBOCwgdWludDhfdCwgdWludDhf
dD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxz
UGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC0z
MjcsNyArMzI3LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIHVpbnQ4X3QKICAgICB9CiB9CiAKLXRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6QVI4LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSOCwg
dWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBz
b3VyY2VbMV07CkBAIC0zMzksNyArMzM5LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjgsIHVpbnQ4X3QKICAg
ICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTgsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3Rp
bmF0aW9uWzBdID0gMHgwOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgsIHVpbnQ4
X3QsCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCB1aW50OF90LCBmbG9hdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNv
bnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIDI1NS4wZjsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC0zNjQsNyArMzY0LDcgQEAg
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0JBOCwgdWludDgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QkdSQTgsIHVp
bnQ4X3QsIGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5w
YWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JBOCwgdWludDhfdCwgZmxvYXQ+
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCiB7CiAgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gMjU1LjBm
OwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
QEAgLTM3Nyw3ICszNzcsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4LCB1aW50OAogICAgIH0KIH0KIAot
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpBQkdSOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFC
R1I4LCB1aW50OF90LCBmbG9hdD4oY29uc3QgdWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGlu
YXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZh
Y3RvciA9IDEuMGYgLyAyNTUuMGY7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7CkBAIC0zOTAsNyArMzkwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBQkdSOCwgdWlu
dDgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjgsIHVpbnQ4X3QsIGZsb2F0Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93
KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpBUkdCOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgY29u
c3QgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gMjU1LjBmOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewpAQCAtNDAzLDcgKzQwMyw3IEBAIHRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6QVJHQjgsIHVpbnQ4CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjgsIHVpbnQ4X3Qs
IGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4LCB1aW50OF90LCBmbG9hdD4oY29uc3Qg
dWludDhfdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJv
dykKIHsKICAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAyNTUuMGY7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CkBAIC00MTYsNyAr
NDE2LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCB1aW50OF8KICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
QkdSOCwgdWludDhfdCwgZmxvYXQ+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgZmxvYXQqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4X3Qs
IGZsb2F0Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAv
IDI1NS4wZjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKQEAgLTQyOSw3ICs0MjksNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUjgsIHVpbnQ4XwogICAgIH0KIH0K
IAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0IzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
QjMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291
cmNlWzBdOwpAQCAtNDQxLDcgKzQ0MSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHVucGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGLCBmbG9hCiAgICAg
fQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlIzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNv
dXJjZVswXTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIGZsb2F0LAogICAg
IH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHVucGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkEzMkYsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9
IHNvdXJjZVswXTsKQEAgLTQ2NSw3ICs0NjUsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCB1bnBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBmbG9hdAog
ICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxh
dGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpBMzJGLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0g
PSAwOwpAQCAtNDgxLDEzICs0ODEsMTMgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
dW5wYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMzJGLCBmbG9hdCwKIC8vIFBp
eGVsIHBhY2tpbmcgcm91dGluZXMuCiAvLwogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdCBmb3JtYXQsIGludCBhbHBoYU9wLCB0eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBl
bmFtZSBEc3RUeXBlPgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgZm9y
bWF0LCBpbnQgYWxwaGFPcCwgdHlwZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRHN0VHlwZT4K
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrKGNvbnN0IFNvdXJjZVR5cGUqLCBEc3RUeXBlKiwgdW5z
aWduZWQpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkE4LCBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhl
bHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90
aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25b
MF0gPSBzb3VyY2VbM107CkBAIC00OTYsNyArNDk2LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgsIEdyYXBoaWNz
Q28KICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6
RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSOCwgR3Jh
cGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDhfdD4oY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC01MDUsNyAr
NTA1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UjgsIEdyYXBoaWNzQ28KICAgICB9CiB9CiAKLXRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWlu
dDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9w
OjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTUxNyw3ICs1MTcsNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDbwogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlz
IGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UjgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVp
bnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
c291cmNlWzNdID8gMjU1LjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTUyOCw3ICs1MjgsNyBA
QCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSOCwgR3JhcGhpY3NDbwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4LCBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhp
bmcsIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gc291cmNlWzBdOwpAQCAtNTM4LDcgKzUzOCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3ND
CiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpE
b1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgs
IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50
OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhl
bHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAv
IDI1NS4wZjsKQEAgLTU1MSw3ICs1NTEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsIEdyYXBoaWNzQwogfQog
CiAvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi10
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSQTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIHVp
bnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRp
b24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lk
IHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDb250ZXh0
R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhf
dCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAyNTUuMGYgLyBzb3VyY2Vb
M10gOiAxLjBmOwpAQCAtNTYzLDcgKzU2Myw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBOCwgR3JhcGhpY3NDCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9O
b3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFw
aGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7
ICsraSkgewogICAgICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKQEAgLTU3NCw3ICs1
NzQsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljcwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
OCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjgsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBo
YU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTU5MCw3ICs1OTAs
NyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljcwogfQogCiAvLyBGSVhNRTogdGhpcyByb3V0aW5l
IGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRp
cGx5LCB1aW50OF90LCB1aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC02MDYsMTIg
KzYwNiwxMiBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4LCBHcmFwaGljcwogfQogCiAKLXRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCB1aW50OF90LCB1aW50OF90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6
OkRvTm90aGluZywgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIG1lbWNweShk
ZXN0aW5hdGlvbiwgc291cmNlLCBwaXhlbHNQZXJSb3cgKiA0KTsKIH0KIAotdGVtcGxhdGU8PiBB
TFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
QTgsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1
aW50OF90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3A6OkRvUHJlbXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAg
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOwpAQCAtNjI4LDcgKzYy
OCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljCiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRp
bmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50OF90Pihjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5t
dWx0aXBseSwgdWludDhfdCwgdWludDhfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBzb3VyY2VbM10gPyAyNTUuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtNjQ0
LDcgKzY0NCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCBHcmFwaGljCiAgICAgfQogfQogCi10ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBNDQ0NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhf
dCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcGhpY3NDb250
ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQogICAgIFNJTUQ6OnBhY2tPbmVSb3dP
ZlJHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJS
b3cpOwpAQCAtNjU5LDcgKzY1OSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBh
Y2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwCiAgICAgfQog
fQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0JBNDQ0NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJl
bXVsdGlwbHksIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTQ0
NDQsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1
aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNl
WzNdIC8gMjU1LjBmOwpAQCAtNjc2LDcgKzY3Niw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFw
CiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3Zl
ZC4KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11
bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0
LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50
MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNd
ID8gMjU1LjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTY5Miw3ICs2OTIsNyBAQCB0ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBNDQ0NCwgR3JhcAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRH
TDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05v
dGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKICAgICBTSU1EOjpwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9y
dDU1NTEoc291cmNlLCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKQEAgLTcwNyw3ICs3MDcs
NyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1
NTEsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1
aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxLCBHcmFwaGljc0NvbnRleHRH
TDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4
X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKQEAgLTcy
NCw3ICs3MjQsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcAogfQogCiAvLyBGSVhNRTogdGhp
cyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCi10ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1
MSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWlu
dDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MSwgR3JhcGhpY3NDb250ZXh0R0w6
OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewog
ICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJjZVsz
XSA6IDEuMGY7CkBAIC03NDAsNyArNzQwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZv
aWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEsIEdyYXAKICAg
ICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRv
Tm90aGluZywgdWludDhfdCwgdWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZ
U19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUs
IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIHVpbnQ4X3QsIHVpbnQxNl90
Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQg
cGl4ZWxzUGVyUm93KQogewogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKICAgICBTSU1E
OjpwYWNrT25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDU2NShzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbHNQZXJSb3cpOwpAQCAtNzU0LDcgKzc1NCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjU2NSwgR3Jh
cGhpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YU9wOjpEb1ByZW11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291
cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQjU2NSwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIHVp
bnQ4X3QsIHVpbnQxNl90Pihjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSBzb3VyY2VbM10gLyAyNTUuMGY7CkBAIC03NzAsNyArNzcwLDcgQEAgdGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1
LCBHcmFwaGkKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBi
ZSByZW1vdmVkLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6
RG9Vbm11bHRpcGx5LCB1aW50OF90LCB1aW50MTZfdD4oY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJH
QjU2NSwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgdWludDhfdCwg
dWludDE2X3Q+KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJj
ZVszXSA/IDI1NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC03ODUsNyArNzg1LDcgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCNTY1LCBHcmFwaGkKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9h
dCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQjMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxv
YXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2ln
bmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzBdOwpA
QCAtNzk2LDcgKzc5Niw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjMyRiwgR3JhcGhpCiAgICAgfQogfQogCi10
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0IzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5
LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwg
dW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFj
azxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGLCBHcmFwaGljc0NvbnRleHRH
TDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtODA4LDcgKzgwOCw3IEBAIHRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQjMyRiwgR3JhcGhpCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkYsIEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0IzMkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHks
IGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJj
ZVszXSA/IDEuMGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtODIxLDEyICs4MjEsMTIgQEAgdGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UkdCMzJGLCBHcmFwaGkKIH0KIAogLy8gVXNlZCBvbmx5IGR1cmluZyBSR0JBOCBvciBC
R1JBOCAtPiBmbG9hdGluZy1wb2ludCB1cGxvYWRzLgotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5F
IHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9h
dCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3Rl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQkEzMkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZs
b2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2UsIHBp
eGVsc1BlclJvdyAqIDQgKiBzaXplb2YoZmxvYXQpKTsKIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4o
Y29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Q
cmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gc291cmNlWzNdOwpAQCAtODM5LDcgKzgzOSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYsIEdy
YXBoCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZs
b2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdB
WVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTMy
RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0
Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAv
IHNvdXJjZVszXSA6IDEuMGY7CkBAIC04NTIsNyArODUyLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNf
SU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRiwg
R3JhcGgKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGLCBHcmFw
aGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNvbnN0IGZs
b2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQog
ewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsK
ICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbM107CkBAIC04NjEsNyArODYxLDcgQEAg
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6QTMyRiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYsIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9h
dCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBA
IC04NzAsNyArODcwLDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRiwgR3JhcGhpY3MKICAgICB9CiB9CiAKLXRl
bXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlIzMkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1ByZW11bHRpcGx5LCBm
bG9hdCwgZmxvYXQ+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRiwgR3JhcGhpY3NDb250ZXh0R0w6OkFs
cGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCBmbG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXTsKQEAgLTg4MCw3ICs4ODAsNyBAQCB0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpS
MzJGLCBHcmFwaGljcwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRl
PD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlIzMkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCBm
bG9hdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwaXhlbHNQ
ZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEu
MGYgLyBzb3VyY2VbM10gOiAxLjBmOwpAQCAtODkwLDcgKzg5MCw3IEBAIHRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkYs
IEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBm
bG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJG
LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgZmxvYXQ+KGNv
bnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CkBAIC05MDAsNyArOTAw
LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6UkEzMkYsIEdyYXBoaWMKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJG
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0
Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVs
c1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Q
cmVtdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFj
dG9yID0gc291cmNlWzNdOwpAQCAtOTExLDcgKzkxMSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lO
TElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMzJGLCBHcmFw
aGljCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3A6OkRvVW5tdWx0aXBseSwgZmxvYXQsIGZsb2F0Pihjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGLCBH
cmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgZmxvYXQ+KGNv
bnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyAr
K2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gPyAxLjBmIC8gc291
cmNlWzNdIDogMS4wZjsKQEAgLTkyMiw3ICs5MjIsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRiwgR3JhcGhp
YwogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEx
NkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZf
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydEZsb2F0VG9IYWxmRmxv
YXQoc291cmNlWzBdKTsKQEAgLTkzNCw3ICs5MzQsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFw
aAogICAgIH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwg
dWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+
IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0JBMTZGLCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQs
IHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM107
CkBAIC05NDcsNyArOTQ3LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTE2RiwgR3JhcGgKICAgICB9CiB9CiAK
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlw
bHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGLCBHcmFwaGlj
c0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0
IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVy
Um93KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkg
ewogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDEuMGYgLyBzb3VyY2Vb
M10gOiAxLjBmOwpAQCAtOTYwLDcgKzk2MCw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkYsIEdyYXBoCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpE
b05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19J
TkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdy
YXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29u
c3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQ
ZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytp
KSB7CiAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydEZsb2F0VG9IYWxmRmxvYXQoc291
cmNlWzBdKTsKQEAgLTk3MSw3ICs5NzEsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaQogICAg
IH0KIH0KIAotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Q
cmVtdWx0aXBseSwgZmxvYXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2Riwg
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZf
dD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBw
aXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtOTgz
LDcgKzk4Myw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RiwgR3JhcGhpCiAgICAgfQogfQogCi10ZW1wbGF0
ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0IxNkYsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0
LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1
bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkYsIEdyYXBoaWNzQ29udGV4dEdM
OjpBbHBoYU9wOjpEb1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNv
dXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7
CkBAIC05OTUsNyArOTk1LDcgQEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGLCBHcmFwaGkKICAgICB9CiB9CiAK
LXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBm
bG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlv
biwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
cGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkYsIEdyYXBoaWNzQ29udGV4
dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNv
dXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAg
IGRlc3RpbmF0aW9uWzBdID0gY29udmVydEZsb2F0VG9IYWxmRmxvYXQoc291cmNlWzBdKTsKQEAg
LTEwMDUsNyArMTAwNSw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGLCBHcmFwaGljCiAgICAgfQogfQogCi10
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSQTE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHks
IGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9p
ZCBwYWNrPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpY3NDb250
ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxv
YXQqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAg
ICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdOwpAQCAtMTAxNiw3ICsxMDE2LDcg
QEAgdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkExNkYsIEdyYXBoaWMKICAgICB9CiB9CiAKLXRlbXBsYXRlPD4gQUxXQVlT
X0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGLCBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+
KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4
ZWxzUGVyUm93KQordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpE
b1VubXVsdGlwbHksIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gc291cmNlWzNdID8gMS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CkBAIC0xMDI3LDcg
KzEwMjcsNyBAQCB0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2RiwgR3JhcGhpYwogICAgIH0KIH0KIAotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UjE2RiwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvTm90aGluZywgZmxvYXQsIHVpbnQx
Nl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9w
OjpEb05vdGhpbmcsIGZsb2F0LCB1aW50MTZfdD4oY29uc3QgZmxvYXQqIHNvdXJjZSwgdWludDE2
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9u
WzBdID0gY29udmVydEZsb2F0VG9IYWxmRmxvYXQoc291cmNlWzBdKTsKQEAgLTEwMzYsNyArMTAz
Niw3IEBAIHRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlIxNkYsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFM
V0FZU19JTkxJTkUgdm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZG
LCBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSwgZmxvYXQsIHVpbnQx
Nl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIxNkYsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9w
OjpEb1ByZW11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBzb3VyY2UsIHVp
bnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewogICAgICAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IHNvdXJjZVszXTsKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHRlbXBsYXRlPD4g
QUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIx
NkYsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBw
YWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZGLCBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFPcDo6RG9Vbm11bHRpcGx5LCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0KiBz
b3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQordGVt
cGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UjE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSwgZmxv
YXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2Vb
M10gPyAxLjBmIC8gc291cmNlWzNdIDogMS4wZjsKQEAgLTEwNTYsNyArMTA1Niw3IEBAIHRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlIxNkYsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBwYWNrPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBMTZGLCBHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFPcDo6RG9Ob3RoaW5nLCBmbG9hdCwgdWludDE2X3Q+KGNvbnN0IGZsb2F0
KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgcGFjazxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTE2RiwgR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZywgZmxv
YXQsIHVpbnQxNl90Pihjb25zdCBmbG9hdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24s
IHVuc2lnbmVkIHBpeGVsc1BlclJvdykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cGl4ZWxzUGVyUm93OyArK2kpIHsKICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Rmxv
YXRUb0hhbGZGbG9hdChzb3VyY2VbM10pOwpAQCAtMTA2NSwxMTkgKzEwNjUsMTE5IEBAIHRlbXBs
YXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIHBhY2s8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OkExNkYsIEdyYXBoaWNzCiAgICAgfQogfQogCi10ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBGb3JtYXQ+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdCBGb3JtYXQ+CiBzdHJ1Y3QgSXNGbG9hdEZvcm1hdCB7CiAgICAgc3RhdGljIGNvbnN0IGJv
b2wgVmFsdWUgPQotICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJHQkEzMkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0IzMkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSQTMyRgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlIzMkYKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpBMzJGOworICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQkEzMkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSQTMyRgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkYKKyAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMzJGOwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQgRm9ybWF0Pgogc3RydWN0IElzSGFsZkZsb2F0Rm9ybWF0IHsKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBWYWx1ZSA9Ci0gICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCQTE2RgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2RgotICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkY7CisgICAgICAgIEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RgorICAgICAgICB8fCBGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RgorICAgICAgICB8fCBGb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMTZGCisgICAgICAgIHx8IEZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2RgorICAgICAgICB8fCBGb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkY7CiB9OwogCi10ZW1wbGF0ZTxHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBGb3JtYXQ+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdCBGb3JtYXQ+CiBzdHJ1Y3QgSXMxNmJwcEZvcm1hdCB7CiAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgVmFsdWUgPQotICAgICAgICBGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxCi0gICAgICAgIHx8IEZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTQ0NDQKLSAgICAgICAgfHwgRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjU7CisgICAgICAgIEZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEKKyAgICAgICAgfHwgRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NAorICAgICAgICB8fCBGb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NTsKIH07CiAKLXRlbXBs
YXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IEZvcm1hdCwgYm9vbCBJc0Zsb2F0ID0g
SXNGbG9hdEZvcm1hdDxGb3JtYXQ+OjpWYWx1ZSwgYm9vbCBJc0hhbGZGbG9hdCA9IElzSGFsZkZs
b2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlLCBib29sIElzMTZicHAgPSBJczE2YnBwRm9ybWF0PEZv
cm1hdD46OlZhbHVlPgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9y
bWF0LCBib29sIElzRmxvYXQgPSBJc0Zsb2F0Rm9ybWF0PEZvcm1hdD46OlZhbHVlLCBib29sIElz
SGFsZkZsb2F0ID0gSXNIYWxmRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUsIGJvb2wgSXMxNmJw
cCA9IElzMTZicHBGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWU+CiBzdHJ1Y3QgRGF0YVR5cGVGb3JGb3Jt
YXQgewogICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQgRm9ybWF0Pgogc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0PEZvcm1hdCwgdHJ1
ZSwgZmFsc2UsIGZhbHNlPiB7CiAgICAgdHlwZWRlZiBmbG9hdCBUeXBlOwogfTsKIAotdGVtcGxh
dGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0Pgogc3RydWN0IERhdGFUeXBlRm9yRm9ybWF0
PEZvcm1hdCwgZmFsc2UsIHRydWUsIGZhbHNlPiB7CiAgICAgdHlwZWRlZiB1aW50MTZfdCBUeXBl
OwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgRm9ybWF0Pgor
dGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9ybWF0Pgogc3RydWN0IERh
dGFUeXBlRm9yRm9ybWF0PEZvcm1hdCwgZmFsc2UsIGZhbHNlLCB0cnVlPiB7CiAgICAgdHlwZWRl
ZiB1aW50MTZfdCBUeXBlOwogfTsKIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQgRm9ybWF0PgordGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgRm9y
bWF0Pgogc3RydWN0IEludGVybWVkaWF0ZUZvcm1hdCB7Ci0gICAgc3RhdGljIGNvbnN0IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IFZhbHVlID0gKElzRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6
VmFsdWUgfHwgSXNIYWxmRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUpID8gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkYgOiBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkdCQTg7CisgICAgc3RhdGljIGNvbnN0IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
IFZhbHVlID0gKElzRmxvYXRGb3JtYXQ8Rm9ybWF0Pjo6VmFsdWUgfHwgSXNIYWxmRmxvYXRGb3Jt
YXQ8Rm9ybWF0Pjo6VmFsdWUpID8gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEz
MkYgOiBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg7CiB9OwogCiAKIC8qIEVO
RCBDT0RFIFNIQVJFRCBXSVRIIE1PWklMTEEgRklSRUZPWCAqLwogCi12b2lkIEZvcm1hdENvbnZl
cnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3AgYWxwaGFPcCkKK3ZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0IHNyY0Zvcm1hdCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCBhbHBoYU9wKQogewog
I2RlZmluZSBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoU3JjRm9ybWF0KSBcCiAgICAg
Y2FzZSBTcmNGb3JtYXQ6IFwKICAgICAgICAgcmV0dXJuIGNvbnZlcnQ8U3JjRm9ybWF0Pihkc3RG
b3JtYXQsIGFscGhhT3ApOwogCiAgICAgICAgIHN3aXRjaCAoc3JjRm9ybWF0KSB7Ci0gICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlI4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFU
KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBOCkKLSAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMy
RikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QTMyRikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9D
QVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4KQotICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSQTMyRikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZP
Uk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCOCkKLSAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QkdSOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1KQotICAgICAgICAgICAgRk9STUFUQ09O
VkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0Iz
MkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVS
X0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCOCkKLSAg
ICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdDo6QUJHUjgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9T
UkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSOCkKLSAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6QkdSQTgpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQo
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE1NTUxKQotICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0JBNDQ0NCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRikKKyAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UjgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OkE4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NB
U0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMzJGKQorICAgICAg
ICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9S
TUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgpCisgICAgICAgICAgICBGT1JN
QVRDT05WRVJURVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6
OlJBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4KQor
ICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjMyRikKKyAgICAg
ICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTgpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9TUkNG
T1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0I4KQorICAgICAgICAgICAg
Rk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpBQkdSOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVI4KQorICAgICAgICAgICAgRk9STUFUQ09O
VkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JB
OCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX1NSQ0ZPUk1BVChHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE0NDQ0
KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfU1JDRk9STUFUKEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGKQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICN1bmRlZiBGT1JNQVRDT05WRVJU
RVJfQ0FTRV9TUkNGT1JNQVQKIH0KIAotdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQgU3JjRm9ybWF0PgotQUxXQVlTX0lOTElORSB2b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29u
dmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYU9wIGFscGhhT3ApCit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdCBTcmNGb3JtYXQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVydGVyOjpj
b252ZXJ0KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0R0w6OkFscGhhT3AgYWxwaGFPcCkKIHsKICNkZWZpbmUgRk9STUFUQ09OVkVSVEVSX0NB
U0VfRFNURk9STUFUKERzdEZvcm1hdCkgXAogICAgIGNhc2UgRHN0Rm9ybWF0OiBcCiAgICAgICAg
IHJldHVybiBjb252ZXJ0PFNyY0Zvcm1hdCwgRHN0Rm9ybWF0PihhbHBoYU9wKTsKIAogICAgICAg
ICBzd2l0Y2ggKGRzdEZvcm1hdCkgewotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0Vf
RFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSOCkKLSAgICAgICAgICAg
IEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdDo6UjE2RikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRikKLSAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgp
Ci0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkYpCi0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FT
RV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkEzMkYpCi0gICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJBOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1B
VChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkYpCi0gICAgICAgICAgICBGT1JN
QVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJBMzJGKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I4KQotICAgICAgICAgICAgRk9STUFUQ09OVkVS
VEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0I1NjUp
Ci0gICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjE2RikKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9D
QVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMzJGKQotICAg
ICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0JBOCkKLSAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RT
VEZPUk1BVChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEpCi0gICAgICAg
ICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQkE0NDQ0KQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNU
Rk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGKQotICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dDNEOjpEYXRh
Rm9ybWF0OjpSR0JBMzJGKQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9S
TUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSOCkKKyAgICAgICAgICAgIEZPUk1B
VENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UjE2RikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjMyRikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRF
Ul9DQVNFX0RTVEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTgpCisgICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OkExNkYpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RG
T1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkEzMkYpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJBOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1BVChHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkYpCisgICAgICAgICAgICBGT1JNQVRDT05W
RVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJG
KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NB
U0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I1NjUpCisgICAg
ICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQ6OlJHQjE2RikKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RT
VEZPUk1BVChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMzJGKQorICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBOCkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0RTVEZPUk1B
VChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTU1NTEpCisgICAgICAgICAgICBG
T1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OlJHQkE0NDQ0KQorICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFU
KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMTZGKQorICAgICAgICAgICAgRk9S
TUFUQ09OVkVSVEVSX0NBU0VfRFNURk9STUFUKEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0
OjpSR0JBMzJGKQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KQEAgLTExODUsMTcgKzExODUsMTcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEZvcm1hdENvbnZlcnRlcjo6Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dCBkc3RGb3IKICN1bmRlZiBGT1JNQVRDT05WRVJURVJfQ0FTRV9EU1RGT1JNQVQKIH0KIAotdGVt
cGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQ+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0
Q29udmVydGVyOjpjb252ZXJ0KEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3ApCit0
ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0IERzdEZvcm1hdD4KK0FMV0FZU19JTkxJTkUgdm9pZCBGb3Jt
YXRDb252ZXJ0ZXI6OmNvbnZlcnQoR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3AgYWxwaGFPcCkK
IHsKICNkZWZpbmUgRk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFPUChhbHBoYU9wKSBcCiAgICAg
Y2FzZSBhbHBoYU9wOiBcCiAgICAgICAgIHJldHVybiBjb252ZXJ0PFNyY0Zvcm1hdCwgRHN0Rm9y
bWF0LCBhbHBoYU9wPigpOwogCiAgICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgewotICAgICAgICAg
ICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFPUChHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFP
cDo6RG9Ob3RoaW5nKQotICAgICAgICAgICAgRk9STUFUQ09OVkVSVEVSX0NBU0VfQUxQSEFPUChH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcDo6RG9QcmVtdWx0aXBseSkKLSAgICAgICAgICAgIEZP
Uk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRv
VW5tdWx0aXBseSkKKyAgICAgICAgICAgIEZPUk1BVENPTlZFUlRFUl9DQVNFX0FMUEhBT1AoR3Jh
cGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZykKKyAgICAgICAgICAgIEZPUk1BVENP
TlZFUlRFUl9DQVNFX0FMUEhBT1AoR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvUHJlbXVs
dGlwbHkpCisgICAgICAgICAgICBGT1JNQVRDT05WRVJURVJfQ0FTRV9BTFBIQU9QKEdyYXBoaWNz
Q29udGV4dEdMOjpBbHBoYU9wOjpEb1VubXVsdGlwbHkpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtMTIwMywxMiArMTIw
MywxMiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgRm9ybWF0Q29udmVydGVyOjpjb252ZXJ0KEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3ApCiB9CiAKIC8vIFZpc3VhbCBTdHVkaW8gY3Jh
c2hlcyB3aXRoIGEgQzEwNjMgRmF0YWwgRXJyb3IgaWYgZXZlcnl0aGluZyBpcyBpbmxpbmVkLgot
dGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBo
YU9wIGFscGhhT3A+Cit0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IERzdEZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0R0w6OkFscGhhT3AgYWxwaGFPcD4KIEFMV0FZU19JTkxJTkVfRVhDRVBUX01TVkMgdm9p
ZCBGb3JtYXRDb252ZXJ0ZXI6OmNvbnZlcnQoKQogewogICAgIC8vIE1hbnkgaW5zdGFudGlhdGlv
bnMgb2YgdGhpcyB0ZW1wbGF0ZSBmdW5jdGlvbiB3aWxsIG5ldmVyIGJlIGVudGVyZWQsIHNvIHdl
IHRyeQogICAgIC8vIHRvIHJldHVybiBpbW1lZGlhdGVseSBpbiB0aGVzZSBjYXNlcyB0byBhdm9p
ZCB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgdXNlbGVzcyBjb2RlLgotICAgIGlmIChTcmNGb3Jt
YXQgPT0gRHN0Rm9ybWF0ICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6
OkRvTm90aGluZykgeworICAgIGlmIChTcmNGb3JtYXQgPT0gRHN0Rm9ybWF0ICYmIGFscGhhT3Ag
PT0gR3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZykgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyMTgsMjkgKzEy
MTgsMjkgQEAgQUxXQVlTX0lOTElORV9FWENFUFRfTVNWQyB2b2lkIEZvcm1hdENvbnZlcnRlcjo6
Y29udmVydCgpCiAgICAgfQogCiAgICAgLy8gT25seSB0ZXh0dXJlcyB1cGxvYWRlZCBmcm9tIERP
TSBlbGVtZW50cyBvciBJbWFnZURhdGEgY2FuIGFsbG93IERzdEZvcm1hdCAhPSBTcmNGb3JtYXQu
Ci0gICAgY29uc3QgYm9vbCBzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEg
PSBHcmFwaGljc0NvbnRleHQzRDo6c3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VE
YXRhKFNyY0Zvcm1hdCk7CisgICAgY29uc3QgYm9vbCBzcmNGb3JtYXRDb21lc0Zyb21ET01FbGVt
ZW50T3JJbWFnZURhdGEgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3JjRm9ybWF0Q29tZXNG
cm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhKFNyY0Zvcm1hdCk7CiAgICAgaWYgKCFzcmNGb3JtYXRD
b21lc0Zyb21ET01FbGVtZW50T3JJbWFnZURhdGEgJiYgU3JjRm9ybWF0ICE9IERzdEZvcm1hdCkg
ewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAvLyBMaWtld2lzZSwgb25seSB0ZXh0dXJlcyB1cGxvYWRlZCBmcm9tIERPTSBlbGVtZW50
cyBvciBJbWFnZURhdGEgY2FuIHBvc3NpYmx5IGhhdmUgdG8gYmUgdW5wcmVtdWx0aXBsaWVkLgot
ICAgIGlmICghc3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhICYmIGFscGhh
T3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSkgeworICAgIGlm
ICghc3JjRm9ybWF0Q29tZXNGcm9tRE9NRWxlbWVudE9ySW1hZ2VEYXRhICYmIGFscGhhT3AgPT0g
R3JhcGhpY3NDb250ZXh0R0w6OkFscGhhT3A6OkRvVW5tdWx0aXBseSkgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoKCFHcmFw
aGljc0NvbnRleHQzRDo6aGFzQWxwaGEoU3JjRm9ybWF0KSB8fCAhR3JhcGhpY3NDb250ZXh0M0Q6
Omhhc0NvbG9yKFNyY0Zvcm1hdCkgfHwgIUdyYXBoaWNzQ29udGV4dDNEOjpoYXNDb2xvcihEc3RG
b3JtYXQpKSAmJiBhbHBoYU9wICE9IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhp
bmcpIHsKKyAgICBpZiAoKCFHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGFzQWxwaGEoU3JjRm9y
bWF0KSB8fCAhR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omhhc0NvbG9yKFNyY0Zvcm1hdCkgfHwg
IUdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoYXNDb2xvcihEc3RGb3JtYXQpKSAmJiBhbHBoYU9w
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wOjpEb05vdGhpbmcpIHsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB0eXBlZGVm
IHR5cGVuYW1lIERhdGFUeXBlRm9yRm9ybWF0PFNyY0Zvcm1hdD46OlR5cGUgU3JjVHlwZTsKICAg
ICB0eXBlZGVmIHR5cGVuYW1lIERhdGFUeXBlRm9yRm9ybWF0PERzdEZvcm1hdD46OlR5cGUgRHN0
VHlwZTsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBJbnRlcm1lZGlh
dGVTcmNGb3JtYXQgPSBJbnRlcm1lZGlhdGVGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWU7CisgICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgSW50ZXJtZWRpYXRlU3JjRm9ybWF0
ID0gSW50ZXJtZWRpYXRlRm9ybWF0PERzdEZvcm1hdD46OlZhbHVlOwogICAgIHR5cGVkZWYgdHlw
ZW5hbWUgRGF0YVR5cGVGb3JGb3JtYXQ8SW50ZXJtZWRpYXRlU3JjRm9ybWF0Pjo6VHlwZSBJbnRl
cm1lZGlhdGVTcmNUeXBlOwogICAgIGNvbnN0IHB0cmRpZmZfdCBzcmNTdHJpZGVJbkVsZW1lbnRz
ID0gbV9zcmNTdHJpZGUgLyBzaXplb2YoU3JjVHlwZSk7CiAgICAgY29uc3QgcHRyZGlmZl90IGRz
dFN0cmlkZUluRWxlbWVudHMgPSBtX2RzdFN0cmlkZSAvIHNpemVvZihEc3RUeXBlKTsKLSAgICBj
b25zdCBib29sIHRyaXZpYWxVbnBhY2sgPSAoU3JjRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0JBOCAmJiAhSXNGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+OjpWYWx1ZSAm
JiAhSXNIYWxmRmxvYXRGb3JtYXQ8RHN0Rm9ybWF0Pjo6VmFsdWUpIHx8IFNyY0Zvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTMyRjsKLSAgICBjb25zdCBib29sIHRy
aXZpYWxQYWNrID0gKERzdEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
UkdCQTggfHwgRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JB
MzJGKSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wOjpEb05vdGhpbmcg
JiYgbV9kc3RTdHJpZGUgPiAwOworICAgIGNvbnN0IGJvb2wgdHJpdmlhbFVucGFjayA9IChTcmNG
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4ICYmICFJc0Zsb2F0
Rm9ybWF0PERzdEZvcm1hdD46OlZhbHVlICYmICFJc0hhbGZGbG9hdEZvcm1hdDxEc3RGb3JtYXQ+
OjpWYWx1ZSkgfHwgU3JjRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
R0JBMzJGOworICAgIGNvbnN0IGJvb2wgdHJpdmlhbFBhY2sgPSAoRHN0Rm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCB8fCBEc3RGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEzMkYpICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250
ZXh0R0w6OkFscGhhT3A6OkRvTm90aGluZyAmJiBtX2RzdFN0cmlkZSA+IDA7CiAgICAgQVNTRVJU
KCF0cml2aWFsVW5wYWNrIHx8ICF0cml2aWFsUGFjayk7CiAKICAgICBjb25zdCBTcmNUeXBlICpz
cmNSb3dTdGFydCA9IHN0YXRpY19jYXN0PGNvbnN0IFNyY1R5cGUqPihtX3NyY1N0YXJ0KTsKQEAg
LTEyNjMsOSArMTI2Myw5IEBAIEFMV0FZU19JTkxJTkVfRVhDRVBUX01TVkMgdm9pZCBGb3JtYXRD
b252ZXJ0ZXI6OmNvbnZlcnQoKQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgaWYgKFNyY0Zvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTgKLSAgICAgICAgICAgICYmIERzdEZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RGF0YUZvcm1hdDo6UkdCQTgKLSAgICAgICAgICAgICYmIGFscGhhT3AgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkFscGhhT3A6OkRvVW5tdWx0aXBseSkgeworICAgICAgICBpZiAoU3JjRm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOAorICAgICAgICAgICAg
JiYgRHN0Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOAorICAg
ICAgICAgICAgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcDo6RG9Vbm11
bHRpcGx5KSB7CiAgICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKICAgICAgICAgICAgIHNy
Yy53aWR0aCA9IG1fd2lkdGg7CiAgICAgICAgICAgICBzcmMuaGVpZ2h0ID0gbV9oZWlnaHQ7CkBA
IC0xMjkzLDQgKzEyOTMsNCBAQCBBTFdBWVNfSU5MSU5FX0VYQ0VQVF9NU1ZDIHZvaWQgRm9ybWF0
Q29udmVydGVyOjpjb252ZXJ0KCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
Ly8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNT
X0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb3JtYXRDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
cm1hdENvbnZlcnRlci5oCmluZGV4IDU4ZmNlMGY1NGUzMWEyMTBlNmUyYTQ4MDFlMmU1ZjhiOWMw
MjE3MTEuLjMwNDIxNWJhYmQyNGYyOGEyNjRlYWI5NjQ1ZTBlZjRjOTY5MTNjZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zvcm1hdENvbnZlcnRlci5oCkBA
IC0yNSw5ICsyNSw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWYgRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfM0QpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVBcnJheS5oPgogCkBAIC01MSwxNyArNTEsMTcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
bV91bnBhY2tlZEludGVybWVkaWF0ZVNyY0RhdGEuZ2V0KCkpOwogICAgIH0KIAotICAgIHZvaWQg
Y29udmVydChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3ApOworICAgIHZvaWQgY29udmVydChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBzcmNG
b3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0R0w6OkFscGhhT3ApOwogICAgIGJvb2wgc3VjY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2VzczsgfQogCiBwcml2YXRlOgotICAgIHRlbXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0IFNyY0Zvcm1hdD4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydChHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYU9wKTsKKyAgICB0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBTcmNG
b3JtYXQ+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQoR3JhcGhpY3NDb250ZXh0R0w6
OkRhdGFGb3JtYXQgZHN0Rm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6QWxwaGFPcCk7CiAKLSAg
ICB0ZW1wbGF0ZTxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBTcmNGb3JtYXQsIEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IERzdEZvcm1hdD4KLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgY29udmVydChHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCk7CisgICAgdGVtcGxhdGU8R3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdCBEc3RGb3JtYXQ+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQoR3Jh
cGhpY3NDb250ZXh0R0w6OkFscGhhT3ApOwogCi0gICAgdGVtcGxhdGU8R3JhcGhpY3NDb250ZXh0
M0Q6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBE
c3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3A+CisgICAgdGVtcGxh
dGU8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQgU3JjRm9ybWF0LCBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdCBEc3RGb3JtYXQsIEdyYXBoaWNzQ29udGV4dEdMOjpBbHBoYU9wIGFs
cGhhT3A+CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQoKTsKIAogICAgIGNvbnN0IHVu
c2lnbmVkIG1fd2lkdGgsIG1faGVpZ2h0OwpAQCAtNzQsNCArNzQsNCBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF8zRCkKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCmluZGV4IDI3ZmIyMDYyNzNj
YTA1OGQxZjkzMTNlNzE2YmU3NGI4YjhiMTk5MTEuLmIyMTc5ODhiOTkwZTFhMDZhM2MxZjdkNzIx
Y2E2NTkxNTU2ODA5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dMQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R0xDb250ZXh0LmNwcApAQCAtMTgsNyArMTgsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
LSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09O
VEVYVF9HTCkKICNpbmNsdWRlICJHTENvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU3Bl
Y2lmaWMuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R0xDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQu
aAppbmRleCA5YTQ0ZWZjYTExMjA0NzMwNDc3OWRkN2JhOGM1YjcwOWI4NjdlOGFkLi44OTBmYzI5
NGJjNDdkZDEyNWM4YmU3YWQ5ZDAxNTdkZjc4ZjgwMGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuaApAQCAtNDYsNyArNDYsNyBAQCB0eXBlZGVmIHVp
bnQ2NF90IEdMTmF0aXZlV2luZG93VHlwZTsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19kZXZpY2Ug
Y2Fpcm9fZGV2aWNlX3Q7CiAjZW5kaWYKIAotdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEOwordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc4LDggKzc4LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgY2Fpcm9fZGV2aWNlX3QqIGNhaXJvRGV2aWNlKCkgPSAwOwogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCkgPSAwOworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhU
X0dMKQorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRl
eHQoKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFgxMSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggYWYxZGIxZTRj
MDhkNDEyZTM1ZDhhZjJmNGY3OTJhNDIzMDEwMmRkNi4uZjU4NmRkNGIyYWY5MWY0NTY1NTM1YTcw
MjkzOTIzYWYyYmFhZGJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0
OwogY2xhc3MgUm91bmRlZFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOwogY2xhc3MgUGF0aDsKIGNsYXNzIFRleHRSdW47CiBjbGFz
cyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDYxYzU3MWU5YzM0Mjk5NjkyM2FhYWFkNTJiOWE1NjYzZmZiYjM2NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw1MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBNb3ppbGxhIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfM0QpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5j
bHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiRm9ybWF0Q29udmVydGVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbWFnZU9i
c2VydmVyLmgiCi0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotbmFtZXNwYWNlIHsKLQotR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgZ2V0
RGF0YUZvcm1hdChHQzNEZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0MzRGVudW0gZGVzdGluYXRp
b25UeXBlKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGRzdEZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBODsKLSAgICBzd2l0Y2ggKGRlc3Rp
bmF0aW9uVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
Ci0gICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQjg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBODsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgICAgICAg
ICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6Ujg7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3Jt
YXQ6OlJBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTUkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQjg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1JHQl9BTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNF80XzRfNDoKLSAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQkE0NDQ0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCQTU1NTE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCNTY1OwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VT
X3RleHR1cmVfaGFsZl9mbG9hdAotICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICAgICAgICAgIGRzdEZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkY7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMTZGOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhB
OgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OkExNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlIxNkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJBMTZGOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0I6Ci0gICAgICAgICAgICBkc3RG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZGOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNSR0JfQUxQSEE6Ci0g
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdC
QTE2RjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAg
IHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OlJHQjMyRjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTMyRjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgICAgICAgICBk
c3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UjMyRjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UkEzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1JHQjoKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0IzMkY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1JHQl9BTFBIQToKLSAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRzdEZvcm1hdDsKLX0KLQotfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkRSZXNvdXJj
ZVNhZmUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHVucGFja0FsaWdubWVudCkK
LXsKLSAgICBBU1NFUlQodW5wYWNrQWxpZ25tZW50ID09IDEgfHwgdW5wYWNrQWxpZ25tZW50ID09
IDIgfHwgdW5wYWNrQWxpZ25tZW50ID09IDQgfHwgdW5wYWNrQWxpZ25tZW50ID09IDgpOwotICAg
IFVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+IHplcm87Ci0gICAgaWYgKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzaXplOwotICAgICAgICBHQzNEZW51
bSBlcnJvciA9IGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhl
aWdodCwgdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChlcnJv
ciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICB6ZXJvID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHNpemUpOwotICAg
ICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgfQotICAg
IHJldHVybiB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7Ci19Ci0KLWJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkIGludCogY29tcG9uZW50c1BlclBpeGVsLCB1
bnNpZ25lZCBpbnQqIGJ5dGVzUGVyQ29tcG9uZW50KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFRF9JTlRFR0VSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTDoKLSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VY
VDoKLSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDM7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQV9JTlRFR0VSOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpCR1JBX0VYVDogLy8gR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0Jf
QUxQSEFfRVhUOgotICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gNDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdWJ5dGUpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICAqYnl0
ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGJ5dGUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgKmJ5dGVzUGVy
Q29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0g
c2l6ZW9mKEdDM0RzaG9ydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0g
ICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEdXNob3J0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzVfOV85XzlfUkVWOgot
ICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgKmJ5dGVzUGVyQ29tcG9u
ZW50ID0gc2l6ZW9mKEdDM0R1aW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBz
aXplb2YoR0MzRHVpbnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlQ6Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEaW50KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9F
U190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNE
ZmxvYXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAvLyBP
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVv
ZihHQzNEaGFsZmZsb2F0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfMzJfVU5TSUdORURfSU5UXzI0XzhfUkVWOgotICAgICAgICAqYnl0ZXNQZXJD
b21wb25lbnQgPSBzaXplb2YoR0MzRGZsb2F0KSArIHNpemVvZihHQzNEdWludCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnBvc3NpYmxlRm9ybWF0
QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51
bSYgZm9ybWF0LCBHQzNEZW51bSYgdHlwZSkKLXsKLSNkZWZpbmUgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShpbnRlcm5hbEZvcm1hdE1hY3JvLCBmb3JtYXRNYWNybywgdHlwZU1hY3JvKSBjYXNl
IGludGVybmFsRm9ybWF0TWFjcm86IFwKLSAgICAgICAgZm9ybWF0ID0gZm9ybWF0TWFjcm87IFwK
LSAgICAgICAgdHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjp0eXBlTWFjcm87IFwKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBzd2l0Y2ggKGludGVybmFsRm9ybWF0KSB7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCICAgICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwg
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEEgICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEEsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5B
TkNFICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFICAgICAgLCBVTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMUEhBICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSOCAgICAgICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHQzRDo6UjhfU05PUk0gICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkVEICAg
ICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlIxNkYgICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFRCAgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAg
ICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dDNEOjpSMzJGICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRUQgICAgICAgICAg
ICAsIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjhVSSAgICAgICAgICAgICAgLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlI4
SSAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFRF9JTlRFR0VSICAgICwgQllU
RSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSMTZVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRURfSU5URUdFUiAgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0g
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UjE2SSAgICAg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVIgICAgLCBTSE9SVCAgICAg
ICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlIzMlVJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
RF9JTlRFR0VSICAgICwgVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJICAgICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfSU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHQzRDo6Ukc4ICAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkcgICAgICAg
ICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHOF9TTk9STSAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHICAgICAgICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNE
OjpSRzE2RiAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRyAgICAgICAgICAgICAs
IEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkczMkYgICAgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkcgICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAp
OwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHOFVJ
ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dDNEOjpSRzhJICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR19JTlRFR0VSICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkcxNlVJICAgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05FRF9TSE9S
VCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHMTZJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHX0lO
VEVHRVIgICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSRzMyVUkgICAgICAgICAgICAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR19JTlRFR0VSICAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHQzRDo6UkczMkkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdfSU5URUdFUiAg
ICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjggICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpT
UkdCOCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIFVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1ICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApOwot
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhfU05P
Uk0gICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAgICAgICAgICAgICwgQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dDNEOjpSMTFGX0cxMUZfQjEwRiAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0IgICAgICAgICAgICAsIFVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgICk7Ci0gICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCOV9FNSAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCICAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfNV85
XzlfOV9SRVYgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjE2RiAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiAgICAg
ICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IzMkYgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQz
RDo6UkdCOFVJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCX0lOVEVHRVIgICAg
LCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjhJICAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQl9JTlRFR0VSICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ix
NlVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUiAgICAsIFVOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHQzRDo6UkdCMTZJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCX0lOVEVHRVIgICAgLCBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjMyVUkgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQl9JTlRFR0VSICAgICwgVU5TSUdORURfSU5U
ICAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dDNEOjpSR0IzMkkgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0Jf
SU5URUdFUiAgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCQTggICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0M0Q6OlNSR0I4X0FMUEhBOCAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAg
ICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOF9TTk9STSAgICAgICAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6
UkdCNV9BMSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAgICAgICAgICAgLCBV
TlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0ICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKTsK
LSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IxMF9B
MiAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFViAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHQzRDo6UkdCQTE2RiAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSAgICAgICAgICAgLCBIQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApOwotICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkYgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgICAgICAgICAgICwgRkxPQVQgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOFVJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lO
VEVHRVIgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdCQThJICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSICAgLCBCWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjEwX0EyVUkgICAgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkFfSU5URUdFUiAg
ICwgVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMTZVSSAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAg
ICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTE2SSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQV9JTlRFR0VSICAgLCBTSE9S
VCAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEzMkkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkFfSU5URUdFUiAgICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBMzJVSSAg
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVIgICAsIFVOU0lHTkVEX0lO
VCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYgLCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5ULCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOwotICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVCAg
ICwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVCwgVU5TSUdORURfU0hPUlQgICAg
ICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQyNCAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01Q
T05FTlQsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7Ci0gICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5ULCBGTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUwgICAgICwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwgICwg
VU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKTsKLSAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4ICAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMICAsIFVOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICk7
Ci0gICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHQzRDo6REVQVEgz
MkZfU1RFTkNJTDggLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCAgLCBGTE9BVF8z
Ml9VTlNJR05FRF9JTlRfMjRfOF9SRVYpOwotICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
RXh0ZW5zaW9uczNEOjpTUkdCX0VYVCAgICAgICAgICAgICAgICwgRXh0ZW5zaW9uczNEOjpTUkdC
X0VYVCAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKLSAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQgICAg
ICAgICAsIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQgICAgICAsIFVOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSN1bmRlZiBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFCi0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGFsaWdubWVudCwgdW5zaWduZWQgaW50KiBpbWFnZVNpemVJ
bkJ5dGVzLCB1bnNpZ25lZCBpbnQqIHBhZGRpbmdJbkJ5dGVzKQotewotICAgIEFTU0VSVChpbWFn
ZVNpemVJbkJ5dGVzKTsKLSAgICBBU1NFUlQoYWxpZ25tZW50ID09IDEgfHwgYWxpZ25tZW50ID09
IDIgfHwgYWxpZ25tZW50ID09IDQgfHwgYWxpZ25tZW50ID09IDgpOwotICAgIGlmICh3aWR0aCA8
IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFOwotICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudCwgY29tcG9uZW50
c1BlclBpeGVsOwotICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1h
dCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKLSAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU07Ci0gICAgaWYgKCF3aWR0
aCB8fCAhaGVpZ2h0KSB7Ci0gICAgICAgICppbWFnZVNpemVJbkJ5dGVzID0gMDsKLSAgICAgICAg
aWYgKHBhZGRpbmdJbkJ5dGVzKQotICAgICAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0gMDsKLSAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICB9Ci0gICAgQ2hl
Y2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRWYWx1ZSA9IGJ5dGVzUGVyQ29t
cG9uZW50ICogY29tcG9uZW50c1BlclBpeGVsOwotICAgIGNoZWNrZWRWYWx1ZSAqPSAgd2lkdGg7
Ci0gICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRTsKLSAgICB1bnNpZ25lZCBpbnQgdmFsaWRS
b3dTaXplID0gY2hlY2tlZFZhbHVlLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGludCBwYWRk
aW5nID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcmVzaWR1YWwgPSB2YWxpZFJvd1NpemUgJSBhbGln
bm1lbnQ7Ci0gICAgaWYgKHJlc2lkdWFsKSB7Ci0gICAgICAgIHBhZGRpbmcgPSBhbGlnbm1lbnQg
LSByZXNpZHVhbDsKLSAgICAgICAgY2hlY2tlZFZhbHVlICs9IHBhZGRpbmc7Ci0gICAgfQotICAg
IC8vIExhc3Qgcm93IG5lZWRzIG5vIHBhZGRpbmcuCi0gICAgY2hlY2tlZFZhbHVlICo9IChoZWln
aHQgLSAxKTsKLSAgICBjaGVja2VkVmFsdWUgKz0gdmFsaWRSb3dTaXplOwotICAgIGlmIChjaGVj
a2VkVmFsdWUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUU7Ci0gICAgKmltYWdlU2l6ZUluQnl0ZXMgPSBjaGVja2VkVmFsdWUu
dW5zYWZlR2V0KCk7Ci0gICAgaWYgKHBhZGRpbmdJbkJ5dGVzKQotICAgICAgICAqcGFkZGluZ0lu
Qnl0ZXMgPSBwYWRkaW5nOwotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3Io
SW1hZ2UqIGltYWdlLCBET01Tb3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlLCBib29sIHByZW11bHRp
cGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCi17Ci0gICAgbV9pbWFn
ZSA9IGltYWdlOwotICAgIG1faW1hZ2VIdG1sRG9tU291cmNlID0gaW1hZ2VIdG1sRG9tU291cmNl
OwotICAgIG1fZXh0cmFjdFN1Y2NlZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVtdWx0aXBseUFscGhh
LCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnBhY2tJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBoYU9wLCBE
YXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwg
dW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17
Ci0gICAgaWYgKCFpbWFnZSB8fCAhcGl4ZWxzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICB1bnNpZ25lZCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZv
cm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnBhY2tlZFNpemUsIG51bGxwdHIpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRh
dGEucmVzaXplKHBhY2tlZFNpemUpOwotCi0gICAgaWYgKCFwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksIHNvdXJjZUZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBmb3JtYXQsIHR5cGUsIGFscGhhT3AsIGRhdGEuZGF0
YSgpLCBmbGlwWSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoSW1hZ2VPYnNlcnZl
ciogb2JzZXJ2ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBvYnNlcnZlci0+
ZGlkRHJhdygqaW1hZ2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhLCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
VmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIGlmICghaW1hZ2VEYXRhKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0aCgpOwotICAgIGlu
dCBoZWlnaHQgPSBpbWFnZURhdGEtPmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgaW50IHBhY2tl
ZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9
PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCAxLCAmcGFja2VkU2l6ZSwgbnVsbHB0cikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGF0YS5yZXNpemUocGFja2Vk
U2l6ZSk7Ci0KLSAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBm
b3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDog
QWxwaGFPcDo6RG9Ob3RoaW5nLCBkYXRhLmRhdGEoKSwgZmxpcFkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgdW5wYWNrQWxp
Z25tZW50LCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGNvbnN0IHZvaWQqIHBp
eGVscywgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQotewotICAgIC8vIEFzc3VtZXMgZm9ybWF0LCB0
eXBlLCBldGMuIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KLSAgICBEYXRhRm9ybWF0IHNv
dXJjZURhdGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0KLSAgICAvLyBS
ZXNpemUgdGhlIG91dHB1dCBidWZmZXIuCi0gICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQ
aXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7Ci0gICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBh
cmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21w
b25lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaW50IGJ5dGVzUGVy
UGl4ZWwgPSBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKLSAgICBkYXRh
LnJlc2l6ZSh3aWR0aCAqIGhlaWdodCAqIGJ5dGVzUGVyUGl4ZWwpOwotCi0gICAgaWYgKCFwYWNr
UGl4ZWxzKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VEYXRhRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgKHByZW11
bHRpcGx5QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5n
KSwgZGF0YS5kYXRhKCksIGZsaXBZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdW5zaWduZWQgVGV4ZWxCeXRlc0ZvckZvcm1h
dChHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChm
b3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSODoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBODoKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkE4OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSODoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBNTU1MToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0JBNDQ0NDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0OjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZGOgot
ICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0I4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUjg6Ci0g
ICAgICAgIHJldHVybiAzOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OlJHQkE4OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFCR1I4OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkJHUkE4OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6QTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSQTE2RjoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdDo6UkdCMTZGOgotICAgICAgICByZXR1cm4gNjsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTMyRjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0OjpSR0JBMTZGOgotICAgICAgICByZXR1cm4gODsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IzMkY6Ci0gICAgICAgIHJldHVybiAxMjsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JBMzJGOgotICAgICAgICBy
ZXR1cm4gMTY7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURh
dGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0aW5h
dGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBBbHBoYU9wIGFscGhhT3AsIHZv
aWQqIGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBmbGlwWSkKLXsKLSAgICBpbnQgdmFsaWRTcmMgPSB3
aWR0aCAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7Ci0gICAgaW50IHJl
bWFpbmRlciA9IHNvdXJjZVVucGFja0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFj
a0FsaWdubWVudCkgOiAwOwotICAgIGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRT
cmMgKyBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7Ci0KLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHBhY2tpbmcgcGl4ZWxzIHRvIFdlYkdMIDIgZm9ybWF0cwot
ICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRUQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0lOVEVHRVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Ukc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdfSU5URUdFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JfSU5URUdFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBX0lOVEVHRVI6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3dpdGNo
IChkZXN0aW5hdGlvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OklOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFVjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
NV85XzlfOV9SRVY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0
Xzg6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBEYXRhRm9ybWF0IGRzdERh
dGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5
cGUpOwotICAgIGludCBkc3RTdHJpZGUgPSB3aWR0aCAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoZHN0
RGF0YUZvcm1hdCk7Ci0gICAgaWYgKGZsaXBZKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uRGF0YSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpICsgZHN0U3RyaWRlKihoZWln
aHQgLSAxKTsKLSAgICAgICAgZHN0U3RyaWRlID0gLWRzdFN0cmlkZTsKLSAgICB9Ci0gICAgaWYg
KCFoYXNBbHBoYShzb3VyY2VEYXRhRm9ybWF0KSB8fCAhaGFzQ29sb3Ioc291cmNlRGF0YUZvcm1h
dCkgfHwgIWhhc0NvbG9yKGRzdERhdGFGb3JtYXQpKQotICAgICAgICBhbHBoYU9wID0gQWxwaGFP
cDo6RG9Ob3RoaW5nOwotCi0gICAgaWYgKHNvdXJjZURhdGFGb3JtYXQgPT0gZHN0RGF0YUZvcm1h
dCAmJiBhbHBoYU9wID09IEFscGhhT3A6OkRvTm90aGluZykgewotICAgICAgICBjb25zdCB1aW50
OF90KiBwdHIgPSBzb3VyY2VEYXRhOwotICAgICAgICBjb25zdCB1aW50OF90KiBwdHJFbmQgPSBz
b3VyY2VEYXRhICsgc3JjU3RyaWRlICogaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCByb3dTaXpl
ID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRlOiAtZHN0U3RyaWRlOwotICAgICAgICB1aW50
OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsKLSAgICAg
ICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkgewotICAgICAgICAgICAgbWVtY3B5KGRzdCwgcHRyLCBy
b3dTaXplKTsKLSAgICAgICAgICAgIHB0ciArPSBzcmNTdHJpZGU7Ci0gICAgICAgICAgICBkc3Qg
Kz0gZHN0U3RyaWRlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIEZvcm1hdENvbnZlcnRlciBjb252ZXJ0ZXIod2lkdGgsIGhlaWdodCwgc291cmNlRGF0YSwg
ZGVzdGluYXRpb25EYXRhLCBzcmNTdHJpZGUsIGRzdFN0cmlkZSk7Ci0gICAgY29udmVydGVyLmNv
bnZlcnQoc291cmNlRGF0YUZvcm1hdCwgZHN0RGF0YUZvcm1hdCwgYWxwaGFPcCk7Ci0gICAgaWYg
KCFjb252ZXJ0ZXIuc3VjY2VzcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLSNpZiAhKFBMQVRGT1JNKENPQ09BKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNF
KEFOR0xFKSkpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0VmlzaWJpbGl0eShi
b29sKQotewotfQotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKLXsKLX0KLSNlbmRpZgotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8z
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTZmNGY2ODkyZTRhNzQw
NDM2Zjc4NDMwZmNkMTNjYWVjZTg0M2MzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NDkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEQmFzZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNp
bmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLQotI2lmIFVTRShDQSkKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNBTGF5ZXIuaCIKLSNlbmRpZgotCi0vLyBGSVhNRTogRmluZCBhIGJldHRlciB3YXkg
dG8gYXZvaWQgdGhlIG5hbWUgY29uZmxpY3Rpb24gZm9yIE5PX0VSUk9SLgotI2lmIFBMQVRGT1JN
KFdJTikKLSN1bmRlZiBOT19FUlJPUgotI2VsaWYgUExBVEZPUk0oR1RLKQotLy8gVGhpcyBkZWZp
bmUgaXMgZnJvbSB0aGUgWDExIGhlYWRlcnMsIGJ1dCBpdCdzIHVzZWQgYmVsb3csIHNvIHdlIG11
c3QgdW5kZWZpbmUgaXQuCi0jdW5kZWYgVkVSU0lPTgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbC5oPgot
I2lmZGVmIF9fT0JKQ19fCi0jaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+Ci0jZW5kaWYgLy8gX19P
QkpDX18KLSNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JK
Q19DTEFTUyBXZWJHTExheWVyOwotdHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UqIElPU3VyZmFj
ZVJlZjsKLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKLQotI2lmIFVTRShOSUNPU0lBKQotbmFt
ZXNwYWNlIE5pY29zaWEgewotY2xhc3MgR0MzRExheWVyOwotfQotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBVU0UoQU5HTEUpCi1jbGFzcyBF
eHRlbnNpb25zM0RBTkdMRTsKLSNlbGlmICFQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9F
UykKLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTOwotI2VsaWYgVVNFKE9QRU5HTCkgfHwgKFBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5H
TDsKLSNlbmRpZgotY2xhc3MgSG9zdFdpbmRvdzsKLWNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3Mg
SW1hZ2VEYXRhOwotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLWNsYXNzIFRleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllcjsKLSNlbmRpZgotCi10eXBlZGVmIFdURjo6SGFzaE1hcDxDU3RyaW5n
LCB1aW50NjRfdD4gU2hhZGVyTmFtZUhhc2g7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0
M0RCYXNlIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgdmlydHVhbCB+Q2xpZW50KCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wb3Np
dGUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZUNvbnRleHQoKSA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgPSAwOwotICAgIH07
Ci0KLSAgICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0RBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlv
bjo6T2Zmc2NyZWVuKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRCgpOwotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgc3RhdGljIFJlZjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRl
U2hhcmVkKEdyYXBoaWNzQ29udGV4dDNEJiBzaGFyZWRDb250ZXh0KTsKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDNEKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZXh0T2JqOyB9
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3RleHR1cmU7IH0KLSAgICBDQUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVy
LmdldCgpKTsgfQotI2lmIFVTRShBTkdMRSkKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
RGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlPYmo7IH0K
LSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEQ29uZmlnIHBsYXRmb3JtQ29uZmlnKCkgY29u
c3QgeyByZXR1cm4gbV9jb25maWdPYmo7IH0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0jZWxzZQot
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgdm9pZCBhZGRDbGllbnQoQ2xpZW50JiBjbGllbnQpIHsgbV9jbGllbnRzLmFkZCgmY2xpZW50
KTsgfQotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENsaWVudCYgY2xpZW50KSB7IG1fY2xpZW50cy5y
ZW1vdmUoJmNsaWVudCk7IH0KLQotICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBm
cm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgotICAgIHZvaWQgcHJlcGFyZVRleHR1
cmUoKTsKLQotICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleEltYWdlMkQoKS4gQWxsb3dzIHBp
eGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCi0gICAgdm9pZCB0ZXhJbWFnZTJERGlyZWN0KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKTsKLQotICAgIC8vIEdl
dCBhbiBhdHRyaWJ1dGUgbG9jYXRpb24gd2l0aG91dCBjaGVja2luZyB0aGUgbmFtZSAtPiBtYW5n
bGVkbmFtZSBtYXBwaW5nLgotICAgIGludCBnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICAvLyBDb21waWxl
IGEgc2hhZGVyIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBBTkdMRS4KLSAgICB2b2lkIGNvbXBpbGVT
aGFkZXJEaXJlY3QoUGxhdGZvcm0zRE9iamVjdCk7Ci0KLSAgICAvLyBIZWxwZXIgdG8gdGV4SW1h
Z2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50aGVzaXplZC4KLSAgICAvLyBC
eSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBkZWZhdWx0IHNldHRpbmcuCi0g
ICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
R0MzRGludCBhbGlnbm1lbnQgPSA0KTsKLQotICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNv
bnN0OwotCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gSGVscGVycyBmb3IgdGV4dHVyZSB1
cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgotICAgIC8vCi0KLSAgICAvLyBDb21wdXRlcyB0
aGUgY29tcG9uZW50cyBwZXIgcGl4ZWwgYW5kIGJ5dGVzIHBlciBjb21wb25lbnQKLSAgICAvLyBm
b3IgdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxzZSBp
ZgotICAgIC8vIGVpdGhlciB3YXMgYW4gaW52YWxpZCBlbnVtLgotICAgIHN0YXRpYyBib29sIGNv
bXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCog
Y29tcG9uZW50c1BlclBpeGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGJ5dGVzUGVyQ29tcG9uZW50KTsKLQotICAgIC8vIENv
bXB1dGVzIHRoZSBpbWFnZSBzaXplIGluIGJ5dGVzLiBJZiBwYWRkaW5nSW5CeXRlcyBpcyBub3Qg
bnVsbCwgcGFkZGluZwotICAgIC8vIGlzIGFsc28gY2FsY3VsYXRlZCBpbiByZXR1cm4uIFJldHVy
bnMgTk9fRVJST1IgaWYgc3VjY2VlZCwgb3RoZXJ3aXNlCi0gICAgLy8gcmV0dXJuIHRoZSBzdWdn
ZXN0ZWQgR0wgZXJyb3IgaW5kaWNhdGluZyB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmU6Ci0gICAg
Ly8gICBJTlZBTElEX1ZBTFVFIGlmIHdpZHRoL2hlaWdodCBpcyBuZWdhdGl2ZSBvciBvdmVyZmxv
dyBoYXBwZW5zLgotICAgIC8vICAgSU5WQUxJRF9FTlVNIGlmIGZvcm1hdC90eXBlIGlzIGlsbGVn
YWwuCi0gICAgc3RhdGljIEdDM0RlbnVtIGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVt
IGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RpbnQgYWxpZ25tZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogaW1h
Z2VTaXplSW5CeXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQqIHBhZGRpbmdJbkJ5dGVzKTsKLQotICAgIHN0YXRpYyBib29sIHBvc3NpYmxlRm9y
bWF0QW5kVHlwZUZvckludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNE
ZW51bSYgZm9ybWF0LCBHQzNEZW51bSYgdHlwZSk7Ci0KLSAgICAvLyBFeHRyYWN0cyB0aGUgY29u
dGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAotICAg
IC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQg
YW5kIHR5cGUsCi0gICAgLy8gYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFs
cGhhIGZsYWdzLiBSZXR1cm5zIHRydWUKLSAgICAvLyB1cG9uIHN1Y2Nlc3MuCi0gICAgc3RhdGlj
IGJvb2wgZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEqLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biB3aGljaCBleHRyYWN0cyB0aGUgdXNlci1zdXBwbGllZCB0ZXh0dXJlCi0gICAgLy8gZGF0YSwg
YXBwbHlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIHBhcmFtZXRlcnMuCi0gICAg
Ly8gSWYgdGhlIGRhdGEgaXMgbm90IHRpZ2h0bHkgcGFja2VkIGFjY29yZGluZyB0byB0aGUgcGFz
c2VkCi0gICAgLy8gdW5wYWNrQWxpZ25tZW50LCB0aGUgb3V0cHV0IGRhdGEgd2lsbCBiZSB0aWdo
dGx5IHBhY2tlZC4KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYg
YW55IGVycm9yIG9jY3VycmVkLgotICAgIHN0YXRpYyBib29sIGV4dHJhY3RUZXh0dXJlRGF0YSh1
bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHBpeGVscywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwotCi0gICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KLSAgICAvLwotCi0gICAgdm9p
ZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpIG92ZXJyaWRlOwotICAgIHZvaWQgYXR0
YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXIpIG92ZXJyaWRlOwotICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmpl
Y3QsIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwotICAgIHZv
aWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgYmxlbmRD
b2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBH
QzNEY2xhbXBmIGFscGhhKSBvdmVycmlkZTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVu
dW0gbW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVu
dW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKSBvdmVycmlkZTsKLSAgICB2b2lkIGJsZW5k
RnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKSBvdmVycmlkZTsKLSAgICB2
b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBH
QzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVt
IHVzYWdlKSBvdmVycmlkZTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpIG92ZXJy
aWRlOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIg
b2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkKiBtYXBCdWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zm
c2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKSBvdmVycmlkZTsK
LSAgICBHQzNEYm9vbGVhbiB1bm1hcEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY29weUJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0MzRGVudW0g
d3JpdGVUYXJnZXQsIEdDM0RpbnRwdHIgcmVhZE9mZnNldCwgR0MzRGludHB0ciB3cml0ZU9mZnNl
dCwgR0MzRHNpemVpcHRyKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZ2V0SW50ZXJuYWxmb3JtYXRp
dihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRHNpemVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6
ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRleFN0b3JhZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4U3Rv
cmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRl
cHRoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8R0MzRHVpbnQ+JiB1bmlmb3JtSW5kaWNlcywgR0Mz
RGVudW0gcG5hbWUsIFZlY3RvcjxHQzNEaW50PiYgcGFyYW1zKSBvdmVycmlkZTsKLQotICAgIEdD
M0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1
ZSwgR0MzRGNsYW1wZiBhbHBoYSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhckRlcHRoKEdDM0Rj
bGFtcGYgZGVwdGgpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQgcykg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVh
biBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLQotICAg
IHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb3B5
VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb3B5VGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1v
ZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmpl
Y3QpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBt
b2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBmaW5pc2goKSBvdmVycmlkZTsKLSAgICB2b2lkIGZsdXNoKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCwgR0MzRGludCBsZXZlbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmcm9udEZhY2UoR0MzRGVu
dW0gbW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJn
ZXQpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpIG92ZXJyaWRlOwotICAgIGJv
b2wgZ2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBBY3RpdmVJbmZvJik7Ci0gICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKSBvdmVycmlkZTsK
LSAgICBib29sIGdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKLSAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVp
KiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykgb3ZlcnJpZGU7Ci0gICAgR0MzRGlu
dCBnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUp
IG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29s
ZWFuKiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0g
ICAgR0MzRGVudW0gZ2V0RXJyb3IoKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEZsb2F0dihHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0SW50ZWdlcjY0dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotI2lmICFVU0Uo
QU5HTEUpCi0gICAgdm9pZCBnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotI2VuZGlm
IC8vICFVU0UoQU5HTEUpCi0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RP
YmplY3QpIG92ZXJyaWRlOwotICAgIFN0cmluZyBnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3Jt
M0RPYmplY3RbMl0sIEdDM0RzaXplaSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAgIFN0cmlu
ZyBnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQg
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHBy
ZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNEaW50KiBwcmVjaXNpb24pIG92ZXJyaWRl
OwotICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
Ci0gICAgU3RyaW5nIGdldFN0cmluZyhHQzNEZW51bSBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOwotICAg
IHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRVbmlmb3JtaXYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1
ZSkgb3ZlcnJpZGU7Ci0gICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFZlcnRleEF0
dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICBHQzNEc2l6ZWlwdHIg
Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKSBv
dmVycmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKSBvdmVycmlkZTsK
LSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OwotICAgIEdDM0Rib29sZWFuIGlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlk
ZTsKLSAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGxpbmtQcm9n
cmFtKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pIG92ZXJyaWRlOwotICAgIHZvaWQgcG9seWdvbk9m
ZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0
YSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwotCi0gICAg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZl
cnQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNoYWRl
clNvdXJjZShQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIHN0cmluZykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzaykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVt
IGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spIG92ZXJyaWRlOwotICAgIHZv
aWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwg
R0MzRGVudW0genBhc3MpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNz
KSBvdmVycmlkZTsKLQotICAgIGJvb2wgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJm
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQgcGFyYW0pIG92ZXJyaWRlOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4KSBvdmVycmlkZTsKLSAgICB2
b2lkIHVuaWZvcm0xZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxv
YXQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQgeCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3Jt
MmYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KSBvdmVycmlkZTsK
LSAgICB2b2lkIHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBH
QzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0yaXYo
R0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVycmlkZTsK
LSAgICB2b2lkIHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZs
b2F0IHksIEdDM0RmbG9hdCB6KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAg
IHZvaWQgdW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEaW50IHopIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5pZm9y
bTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEdDM0RmbG9hdCB3KSBvdmVycmlkZTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEZmxvYXQqIHYpIG92ZXJyaWRlOwotICAgIHZv
aWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
aW50IHosIEdDM0RpbnQgdykgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lk
IHVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2YWxpZGF0
ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0jaWYgIVVTRShBTkdMRSkKLSAg
ICBib29sIGNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVy
LCBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdDsKLSAgICBib29sIHByZWNp
c2lvbnNNYXRjaChQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVj
dCBmcmFnbWVudFNoYWRlcikgY29uc3Q7Ci0jZW5kaWYKLQotICAgIHZvaWQgdmVydGV4QXR0cmli
MWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRl
eEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJy
aWRlOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVp
bnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgdmVydGV4
QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEdDM0RmbG9hdCB3KSBvdmVycmlkZTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihH
QzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpIG92ZXJyaWRlOwotICAgIHZv
aWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNE
ZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNE
aW50cHRyIG9mZnNldCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgICB2b2lkIGRy
YXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVp
IGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdFbGVt
ZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlz
b3IpIG92ZXJyaWRlOwotCi0gICAgLy8gVmVydGV4QXJyYXlPamVjdCBjYWxscwotICAgIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXkoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0
ZVZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwotICAgIEdDM0Rib29sZWFu
IGlzVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBiaW5k
VmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHBhaW50
VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IEludFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250ZXh0Jik7
Ci0KLSAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotICAgIHZvaWQgbWFya0xheWVyQ29t
cG9zaXRlZCgpOwotICAgIGJvb2wgbGF5ZXJDb21wb3NpdGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBm
b3JjZUNvbnRleHRMb3N0KCk7Ci0gICAgdm9pZCByZWN5Y2xlQ29udGV4dCgpOwotCi0gICAgdm9p
ZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Ci0gICAgdm9pZCBzaW11bGF0
ZUNvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKEltYWdlQnVmZmVyKik7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKTsKLSAgICBib29sIHBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0Nh
bnZhcyhJbWFnZUJ1ZmZlciopOwotCi0jaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdFQkdMMikK
LSAgICB2b2lkIHByaW1pdGl2ZVJlc3RhcnRJbmRleChHQzNEdWludCkgb3ZlcnJpZGU7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgdGV4SW1hZ2VJT1N1cmZhY2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSU9TdXJm
YWNlUmVmLCBHQzNEdWludCBwbGFuZSk7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIHZvaWQg
cHJlc2VudFJlbmRlcmJ1ZmZlcigpOwotI2VuZGlmCi0KLSNpZiBVU0UoT1BFTkdMKSB8fCBVU0Uo
QU5HTEUpCi0gICAgdm9pZCBhbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRTaXplKTsK
LSAgICB2b2lkIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZyb21MYXllcigp
OwotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgdm9pZCB1
cGRhdGVDR0xDb250ZXh0KCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8vIFBMQVRGT1JNKENP
Q09BKQotCi0gICAgdm9pZCBzZXRDb250ZXh0VmlzaWJpbGl0eShib29sKTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uOyB9Ci0K
LSAgICAvLyBTdXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uCi0gICAgUGxh
dGZvcm0zRE9iamVjdCBjcmVhdGVCdWZmZXIoKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGNyZWF0ZUZyYW1lYnVmZmVyKCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBj
cmVhdGVQcm9ncmFtKCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVSZW5k
ZXJidWZmZXIoKSBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVNoYWRlcihH
QzNEZW51bSkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVUZXh0dXJlKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGRlbGV0ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBT
eW50aGVzaXplcyBhbiBPcGVuR0wgZXJyb3Igd2hpY2ggd2lsbCBiZSByZXR1cm5lZCBmcm9tIGEK
LSAgICAvLyBsYXRlciBjYWxsIHRvIGdldEVycm9yLiBUaGlzIGlzIHVzZWQgdG8gZW11bGF0ZSBP
cGVuR0wgRVMKLSAgICAvLyAyLjAgYmVoYXZpb3Igb24gdGhlIGRlc2t0b3AgYW5kIHRvIGVuZm9y
Y2UgYWRkaXRpb25hbCBlcnJvcgotICAgIC8vIGNoZWNraW5nIG1hbmRhdGVkIGJ5IFdlYkdMLgot
ICAgIC8vCi0gICAgLy8gUGVyIHRoZSBiZWhhdmlvciBvZiBnbEdldEVycm9yLCB0aGlzIHN0b3Jl
cyBhdCBtb3N0IG9uZQotICAgIC8vIGluc3RhbmNlIG9mIGFueSBnaXZlbiBlcnJvciwgYW5kIHJl
dHVybnMgdGhlbSBmcm9tIGNhbGxzIHRvCi0gICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRo
ZXkgd2VyZSBhZGRlZC4KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9y
KTsKLQotICAgIC8vIFJlYWQgcmVhbCBPcGVuR0wgZXJyb3JzLCBhbmQgbW92ZSB0aGVtIHRvIHRo
ZSBzeW50aGV0aWMKLSAgICAvLyBlcnJvciBsaXN0LiBSZXR1cm4gdHJ1ZSBpZiBhdCBsZWFzdCBv
bmUgZXJyb3IgaXMgbW92ZWQuCi0gICAgYm9vbCBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLQotICAgIC8vIFN1cHBvcnQgZm9yIGV4dGVuc2lvbnMuIFJldHVybnMgYSBub24tbnVs
bCBvYmplY3QsIHRob3VnaCBub3QKLSAgICAvLyBhbGwgbWV0aG9kcyBpdCBjb250YWlucyBtYXkg
bmVjZXNzYXJpbHkgYmUgc3VwcG9ydGVkIG9uIHRoZQotICAgIC8vIGN1cnJlbnQgaGFyZHdhcmUu
IE11c3QgY2FsbCBFeHRlbnNpb25zM0Q6OnN1cHBvcnRzKCkgdG8KLSAgICAvLyBkZXRlcm1pbmUg
dGhpcy4KLSAgICBFeHRlbnNpb25zM0QmIGdldEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKLQotICAg
IEludFNpemUgZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdDsKLQotICAgIC8vIFBh
Y2tzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2Ugd2hpY2ggaXMgcGFzc2VkIGluIHxw
aXhlbHN8IGludG8gdGhlIHBhc3NlZCBWZWN0b3IKLSAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGdp
dmVuIGZvcm1hdCBhbmQgdHlwZSwgYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBBbHBoYU9wIGZs
YWdzLgotICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCi0gICAgc3RhdGljIGJvb2wg
cGFja0ltYWdlRGF0YShJbWFnZSosIGNvbnN0IHZvaWQqIHBpeGVscywgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBib29sIGZsaXBZLCBBbHBoYU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZv
cm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5w
YWNrQWxpZ25tZW50LCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwotCi0gICAgY2xhc3MgSW1hZ2VF
eHRyYWN0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgSW1hZ2VFeHRyYWN0b3IoSW1hZ2UqLCBE
T01Tb3VyY2UsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSk7Ci0KLSAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1w
bGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdG8gZGVhbGxvY2F0ZSBvciByZWxlYXNlIHJlc291
cmNlcwotICAgICAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlIGlmIG5lZWRlZC4KLSAg
ICAgICAgfkltYWdlRXh0cmFjdG9yKCk7Ci0KLSAgICAgICAgYm9vbCBleHRyYWN0U3VjY2VlZGVk
KCkgeyByZXR1cm4gbV9leHRyYWN0U3VjY2VlZGVkOyB9Ci0gICAgICAgIGNvbnN0IHZvaWQqIGlt
YWdlUGl4ZWxEYXRhKCkgeyByZXR1cm4gbV9pbWFnZVBpeGVsRGF0YTsgfQotICAgICAgICB1bnNp
Z25lZCBpbWFnZVdpZHRoKCkgeyByZXR1cm4gbV9pbWFnZVdpZHRoOyB9Ci0gICAgICAgIHVuc2ln
bmVkIGltYWdlSGVpZ2h0KCkgeyByZXR1cm4gbV9pbWFnZUhlaWdodDsgfQotICAgICAgICBEYXRh
Rm9ybWF0IGltYWdlU291cmNlRm9ybWF0KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZUZvcm1hdDsg
fQotICAgICAgICBBbHBoYU9wIGltYWdlQWxwaGFPcCgpIHsgcmV0dXJuIG1fYWxwaGFPcDsgfQot
ICAgICAgICB1bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpIHsgcmV0dXJuIG1f
aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7IH0KLSAgICAgICAgRE9NU291cmNlIGltYWdlSHRt
bERvbVNvdXJjZSgpIHsgcmV0dXJuIG1faW1hZ2VIdG1sRG9tU291cmNlOyB9Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRp
b24gb2YgdGhpcyBtZXRob2QuCi0gICAgICAgIC8vIEV4dHJhY3RzIHRoZSBpbWFnZSBhbmQga2Vl
cHMgdHJhY2sgb2YgaXRzIHN0YXR1cywgc3VjaCBhcyB3aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxp
Z25tZW50LCBmb3JtYXQgYW5kIEFscGhhT3AgZXRjLAotICAgICAgICAvLyBuZWVkcyB0byBsb2Nr
IHRoZSByZXNvdXJjZXMgb3IgcmVsZXZhbnQgZGF0YSBpZiBuZWVkZWQgYW5kIHJldHVybnMgdHJ1
ZSB1cG9uIHN1Y2Nlc3MKLSAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKLQotI2lmIFVTRShDQUlS
TykKLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9pbWFnZVN1cmZhY2U7Ci0jZWxp
ZiBVU0UoQ0cpCi0gICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2NnSW1hZ2U7Ci0gICAg
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtX2RlY29kZWRJbWFnZTsKLSAgICAgICAgUmV0YWlu
UHRyPENGRGF0YVJlZj4gbV9waXhlbERhdGE7Ci0gICAgICAgIFVuaXF1ZUFycmF5PHVpbnQ4X3Q+
IG1fZm9ybWFsaXplZFJHQkE4RGF0YTsKLSNlbmRpZgotICAgICAgICBJbWFnZSogbV9pbWFnZTsK
LSAgICAgICAgRE9NU291cmNlIG1faW1hZ2VIdG1sRG9tU291cmNlOwotICAgICAgICBib29sIG1f
ZXh0cmFjdFN1Y2NlZWRlZDsKLSAgICAgICAgY29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsK
LSAgICAgICAgdW5zaWduZWQgbV9pbWFnZVdpZHRoOwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdl
SGVpZ2h0OwotICAgICAgICBEYXRhRm9ybWF0IG1faW1hZ2VTb3VyY2VGb3JtYXQ7Ci0gICAgICAg
IEFscGhhT3AgbV9hbHBoYU9wOwotICAgICAgICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5wYWNr
QWxpZ25tZW50OwotICAgIH07Ci0KLSAgICB2b2lkIHNldEZhaWxOZXh0R1BVU3RhdHVzQ2hlY2so
KSB7IG1fZmFpbE5leHRTdGF0dXNDaGVjayA9IHRydWU7IH0KLQotICAgIEdDM0RlbnVtIGFjdGl2
ZVRleHR1cmVVbml0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdDsg
fQotICAgIEdDM0RlbnVtIGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKTsgfQotICAgIEdDM0RlbnVtIGN1cnJlbnRCb3VuZFRh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY3VycmVudEJvdW5kVGFyZ2V0KCk7IH0KLSAg
ICB1bnNpZ25lZCB0ZXh0dXJlU2VlZChHQzNEdWludCB0ZXh0dXJlKSB7IHJldHVybiBtX3N0YXRl
LnRleHR1cmVTZWVkQ291bnQuY291bnQodGV4dHVyZSk7IH0KLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICB1c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQzMl90OwotICAgIHZvaWQgc2NyZWVu
RGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcywgSG9zdFdpbmRvdyos
IERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0M0Qq
IHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKLQotICAgIC8vIEhlbHBlciBmb3IgcGFja0ltYWdl
RGF0YS9leHRyYWN0SW1hZ2VEYXRhL2V4dHJhY3RUZXh0dXJlRGF0YSB3aGljaCBpbXBsZW1lbnQg
cGFja2luZyBvZiBwaXhlbAotICAgIC8vIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIE9wZW5HTCBk
ZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCi0gICAgLy8gQSBzb3VyY2VVbnBhY2tBbGlnbm1l
bnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlCi0gICAgLy8gZGF0YSBpcyB0aWdo
dGx5IHBhY2tlZC4gTm9uLXplcm8gdmFsdWVzIG1heSB0YWtlIGEgc2xvdyBwYXRoLgotICAgIC8v
IERlc3RpbmF0aW9uIGRhdGEgd2lsbCBoYXZlIG5vIGdhcHMgYmV0d2VlbiByb3dzLgotICAgIHN0
YXRpYyBib29sIHBhY2tQaXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwgRGF0YUZvcm1h
dCBzb3VyY2VEYXRhRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNp
Z25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIHVuc2lnbmVkIGRlc3RpbmF0aW9uRm9ybWF0LCB1
bnNpZ25lZCBkZXN0aW5hdGlvblR5cGUsIEFscGhhT3AsIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSwg
Ym9vbCBmbGlwWSk7Ci0KLSAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVl
c3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCi0gICAgLy8gaW4gcGFydGljdWxhciBz
dGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKLSAgICAv
LyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBP
cGVuR0wKLSAgICAvLyBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lkIHZhbGlkYXRlRGVwdGhTdGVu
Y2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7Ci0gICAgdm9pZCB2
YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLSAgICAKLSAgICAvLyBEaWQgdGhlIG1vc3QgcmVjZW50IGRy
YXdpbmcgb3BlcmF0aW9uIGxlYXZlIHRoZSBHUFUgaW4gYW4gYWNjZXB0YWJsZSBzdGF0ZT8KLSAg
ICB2b2lkIGNoZWNrR1BVU3RhdHVzKCk7Ci0KLSAgICAvLyBSZWFkIHJlbmRlcmluZyByZXN1bHRz
IGludG8gYSBwaXhlbCBhcnJheSB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKLSAgICAvLyBi
YWNrYnVmZmVyLgotICAgIHZvaWQgcmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciog
cGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSk7Ci0gICAgdm9pZCByZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNp
Z25lZCBjaGFyKiBwaXhlbHMpOwotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICB2b2lkIHNldFJl
bmRlcmJ1ZmZlclN0b3JhZ2VGcm9tRHJhd2FibGUoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KTsKLSNlbmRpZgotCi0gICAgYm9vbCByZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJik7
Ci0gICAgdm9pZCByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3Qm
ID0gSW50UmVjdCgpKTsKLSAgICB2b2lkIGF0dGFjaERlcHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVl
ZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgYWxsb3dPZmZsaW5lUmVuZGVy
ZXJzKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGludCBtX2N1cnJlbnRXaWR0aCB7IDAgfTsKLSAg
ICBpbnQgbV9jdXJyZW50SGVpZ2h0IHsgMCB9OwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
UmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKLSAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIG1fY29udGV4dE9iaiB7IG51bGxwdHIgfTsKLSNpZiBVU0UoQU5HTEUpCi0gICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRERpc3BsYXkgbV9kaXNwbGF5T2JqIHsgbnVsbHB0ciB9
OwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RDb25maWcgbV9jb25maWdPYmogeyBudWxs
cHRyIH07Ci0jZW5kaWYgLy8gVVNFKEFOR0xFKQotI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQot
Ci0jaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0EpCi0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbV93ZWJHTExheWVyOwotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBz
aDo6U2hhZGVyVmFyaWFibGU+IFNoYWRlclN5bWJvbE1hcDsKLQotICAgIHN0cnVjdCBTaGFkZXJT
b3VyY2VFbnRyeSB7Ci0gICAgICAgIEdDM0RlbnVtIHR5cGU7Ci0gICAgICAgIFN0cmluZyBzb3Vy
Y2U7Ci0gICAgICAgIFN0cmluZyB0cmFuc2xhdGVkU291cmNlOwotICAgICAgICBTdHJpbmcgbG9n
OwotICAgICAgICBib29sIGlzVmFsaWQ7Ci0gICAgICAgIFNoYWRlclN5bWJvbE1hcCBhdHRyaWJ1
dGVNYXA7Ci0gICAgICAgIFNoYWRlclN5bWJvbE1hcCB1bmlmb3JtTWFwOwotICAgICAgICBTaGFk
ZXJTeW1ib2xNYXAgdmFyeWluZ01hcDsKLSAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQotICAg
ICAgICAgICAgOiB0eXBlKFZFUlRFWF9TSEFERVIpCi0gICAgICAgICAgICAsIGlzVmFsaWQoZmFs
c2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU2hhZGVyU3ltYm9s
TWFwJiBzeW1ib2xNYXAoZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9U
WVBFX0FUVFJJQlVURSB8fCBzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JN
IHx8IHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOwotICAgICAgICAg
ICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTWFwOwotICAgICAgICAgICAgaWYgKHN5bWJvbFR5
cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHZhcnlpbmdNYXA7Ci0gICAgICAgICAgICByZXR1cm4gdW5pZm9ybU1hcDsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSNpZiAhVVNFKEFOR0xFKQotICAgIC8vIEZJWE1FOiBTaGFkZXJzIGFyZSBuZXZl
ciByZW1vdmVkIGZyb20gdGhpcyBtYXAsIGV2ZW4gaWYgdGhleSBhbmQgdGhlaXIgcHJvZ3JhbSBh
cmUgZGVsZXRlZC4KLSAgICAvLyBUaGlzIGlzIGJhZCwgYW5kIGl0IGFsc28gcmVsaWVzIG9uIHRo
ZSBmYWN0IHdlIG5ldmVyIHJldXNlIFBsYXRmb3JtM0RPYmplY3QgbnVtYmVycy4KLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNv
dXJjZU1hcDsKLSAgICBTaGFkZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7Ci0KLSAgICB0
eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgc3RkOjpwYWlyPFBsYXRmb3JtM0RPYmpl
Y3QsIFBsYXRmb3JtM0RPYmplY3Q+PiBMaW5rZWRTaGFkZXJNYXA7Ci0gICAgTGlua2VkU2hhZGVy
TWFwIG1fbGlua2VkU2hhZGVyTWFwOwotCi0gICAgc3RydWN0IEFjdGl2ZVNoYWRlclN5bWJvbENv
dW50cyB7Ci0gICAgICAgIFZlY3RvcjxHQzNEaW50PiBmaWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRl
SW5kZXhNYXA7Ci0gICAgICAgIFZlY3RvcjxHQzNEaW50PiBmaWx0ZXJlZFRvQWN0dWFsVW5pZm9y
bUluZGV4TWFwOwotCi0gICAgICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cygpCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIEdDM0RpbnQgY291bnRGb3JUeXBlKEdDM0RlbnVtIGFj
dGl2ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChhY3RpdmVUeXBlID09IEFD
VElWRV9BVFRSSUJVVEVTIHx8IGFjdGl2ZVR5cGUgPT0gQUNUSVZFX1VOSUZPUk1TKTsKLSAgICAg
ICAgICAgIGlmIChhY3RpdmVUeXBlID09IEFDVElWRV9BVFRSSUJVVEVTKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmaWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpOwotCi0g
ICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCk7
Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0
LCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHM+IFNoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcDsK
LSAgICBTaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291
bnRNYXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IEhhc2hlZFN5bWJv
bE1hcDsKLSAgICBIYXNoZWRTeW1ib2xNYXAgbV9wb3NzaWJseVVudXNlZEF0dHJpYnV0ZU1hcDsK
LQotICAgIFN0cmluZyBtYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
QU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFN0cmluZyBt
YXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgc2l6ZV90IGNvdW50
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFN0cmluZyBvcmlnaW5hbFN5bWJvbE5hbWUoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBtYXBwZWRTeW1ib2xJblNoYWRlclNvdXJj
ZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwotICAgIE9wdGlvbmFsPFN0cmluZz4gb3JpZ2luYWxTeW1ib2xJblNo
YWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRlck5h
bWVIYXNoPiBuYW1lSGFzaE1hcEZvclNoYWRlcnM7Ci0jZW5kaWYgLy8gIVVTRShBTkdMRSkKLQot
I2lmIFVTRShBTkdMRSkKLSAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNEQU5HTEU7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnMzREFOR0xFPiBtX2V4dGVuc2lvbnM7Ci0jZWxpZiAh
UExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCi0gICAgZnJpZW5kIGNsYXNzIEV4dGVu
c2lvbnMzRE9wZW5HTEVTOwotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lv
bnM7Ci0jZWxpZiBVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xf
RVMpKQotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7Ci0gICAgZnJpZW5kIGNs
YXNzIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5z
aW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7Ci0jZW5kaWYKLQotICAgIEdyYXBoaWNzQ29udGV4
dDNEUG93ZXJQcmVmZXJlbmNlIG1fcG93ZXJQcmVmZXJlbmNlVXNlZEZvckNyZWF0aW9uIHsgR3Jh
cGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQgfTsKLSAgICBWZWN0b3I8VmVj
dG9yPGZsb2F0Pj4gbV92ZXJ0ZXhBcnJheTsKLQotI2lmICFVU0UoQU5HTEUpCi0gICAgQU5HTEVX
ZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKLSNlbmRpZgotCi0gICAgR0MzRHVpbnQgbV90ZXh0dXJl
IHsgMCB9OwotICAgIEdDM0R1aW50IG1fZmJvIHsgMCB9OwotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSAgICBHQzNEdWludCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OwotICAgIEdD
M0R1aW50IG1faW50ZXJtZWRpYXRlVGV4dHVyZSB7IDAgfTsKLSNlbmRpZgotCi0gICAgR0MzRHVp
bnQgbV9kZXB0aEJ1ZmZlciB7IDAgfTsKLSAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXIgeyAw
IH07Ci0gICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07Ci0KLSAgICBib29s
IG1fbGF5ZXJDb21wb3NpdGVkIHsgZmFsc2UgfTsKLSAgICBHQzNEdWludCBtX2ludGVybmFsQ29s
b3JGb3JtYXQgeyAwIH07Ci0KLSNpZiBVU0UoQU5HTEUpICYmIFBMQVRGT1JNKENPQ09BKQotICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RTdXJmYWNlIG1fcGJ1ZmZlcjsKLSNlbmRpZgotCi0g
ICAgc3RydWN0IEdyYXBoaWNzQ29udGV4dDNEU3RhdGUgewotICAgICAgICBHQzNEdWludCBib3Vu
ZEZCTyB7IDAgfTsKLSAgICAgICAgR0MzRGVudW0gYWN0aXZlVGV4dHVyZVVuaXQgeyBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTAgfTsKLQotICAgICAgICB1c2luZyBCb3VuZFRleHR1cmVNYXAg
PSBIYXNoTWFwPEdDM0RlbnVtLAotICAgICAgICAgICAgc3RkOjpwYWlyPEdDM0R1aW50LCBHQzNE
ZW51bT4sCi0gICAgICAgICAgICBXVEY6OkludEhhc2g8R0MzRGVudW0+LCAKLSAgICAgICAgICAg
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+LAotICAgICAgICAg
ICAgV1RGOjpQYWlySGFzaFRyYWl0czxXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PEdDM0R1aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWludD4+
Ci0gICAgICAgID47Ci0gICAgICAgIEJvdW5kVGV4dHVyZU1hcCBib3VuZFRleHR1cmVNYXA7Ci0g
ICAgICAgIEdDM0R1aW50IGN1cnJlbnRCb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBib3Vu
ZFRleHR1cmUoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdDM0R1aW50IGJvdW5kVGV4
dHVyZShHQzNEZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byBpdGVyYXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKLSAgICAg
ICAgICAgIGlmIChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5maXJzdDsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0KLSAgICAgICAgR0MzRHVpbnQgY3VycmVudEJvdW5kVGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gYm91bmRUYXJnZXQoYWN0aXZlVGV4dHVyZVVuaXQpOyB9Ci0gICAgICAgIEdD
M0RlbnVtIGJvdW5kVGFyZ2V0KEdDM0RlbnVtIHRleHR1cmVVbml0KSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gYm91bmRUZXh0dXJlTWFwLmZpbmQodGV4dHVy
ZVVuaXQpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yICE9IGJvdW5kVGV4dHVyZU1hcC5lbmQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLnNlY29uZDsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRCb3VuZFRleHR1
cmUoR0MzRGVudW0gdGV4dHVyZVVuaXQsIEdDM0R1aW50IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgYm91bmRUZXh0dXJlTWFwLnNldCh0ZXh0dXJlVW5p
dCwgc3RkOjptYWtlX3BhaXIodGV4dHVyZSwgdGFyZ2V0KSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB1c2luZyBUZXh0dXJlU2VlZENvdW50ID0gSGFzaENvdW50ZWRTZXQ8R0MzRHVpbnQsIFdURjo6
SW50SGFzaDxHQzNEdWludD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0Mz
RHVpbnQ+PjsKLSAgICAgICAgVGV4dHVyZVNlZWRDb3VudCB0ZXh0dXJlU2VlZENvdW50OwotICAg
IH07Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRFN0YXRlIG1fc3RhdGU7Ci0KLSAgICAvLyBGb3Ig
bXVsdGlzYW1wbGluZwotICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVGQk8geyAwIH07Ci0gICAg
R0MzRHVpbnQgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciB7IDAgfTsKLSAgICBHQzNE
dWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgeyAwIH07Ci0KLSAgICAvLyBFcnJvcnMgcmFp
c2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCi0gICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1f
c3ludGhldGljRXJyb3JzOwotCi0jaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBF
UikKLSAgICBmcmllbmQgY2xhc3MgTmljb3NpYTo6R0MzRExheWVyOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxOaWNvc2lhOjpHQzNETGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2VsaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcj4g
bV90ZXhtYXBMYXllcjsKLSNlbHNlCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBt
X3ByaXZhdGU7Ci0jZW5kaWYKLQotICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRzOwotCi0g
ICAgYm9vbCBtX2lzRm9yV2ViR0wyIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdXNpbmdDb3JlUHJv
ZmlsZSB7IGZhbHNlIH07Ci0KLSAgICB1bnNpZ25lZCBtX3N0YXR1c0NoZWNrQ291bnQgeyAwIH07
Ci0gICAgYm9vbCBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgeyBmYWxzZSB9OwotCi0jaWYgVVNFKENB
SVJPKQotICAgIFBsYXRmb3JtM0RPYmplY3QgbV92YW8geyAwIH07Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKENPQ09BKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKLSAgICBib29sIG1f
aGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSB7IGZhbHNlIH07Ci0jZW5kaWYKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRl
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2ZmMTdjMWZlMjkyMWEyMjkxM2Yy
ZmJiNjQyMDIwYTg4MWZlM2NlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNEQXR0cmlidXRlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RQb3dlclByZWZlcmVuY2UgewotICAgIERlZmF1bHQsCi0gICAgTG93UG93
ZXIsCi0gICAgSGlnaFBlcmZvcm1hbmNlCi19OwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0M0RB
dHRyaWJ1dGVzIHsKLSAgICAvLyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzCi0gICAgYm9vbCBhbHBo
YSB7IHRydWUgfTsKLSAgICBib29sIGRlcHRoIHsgdHJ1ZSB9OwotICAgIGJvb2wgc3RlbmNpbCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBhbnRpYWxpYXMgeyB0cnVlIH07Ci0gICAgYm9vbCBwcmVtdWx0
aXBsaWVkQWxwaGEgeyB0cnVlIH07Ci0gICAgYm9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgeyBm
YWxzZSB9OwotICAgIGJvb2wgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCB7IGZhbHNlIH07
Ci0gICAgdXNpbmcgUG93ZXJQcmVmZXJlbmNlID0gR3JhcGhpY3NDb250ZXh0M0RQb3dlclByZWZl
cmVuY2U7Ci0gICAgUG93ZXJQcmVmZXJlbmNlIHBvd2VyUHJlZmVyZW5jZSB7IFBvd2VyUHJlZmVy
ZW5jZTo6RGVmYXVsdCB9OwotCi0gICAgLy8gQWRkaXRpb25hbCBhdHRyaWJ1dGVzLgotICAgIGJv
b2wgc2hhcmVSZXNvdXJjZXMgeyB0cnVlIH07Ci0gICAgYm9vbCBpc1dlYkdMMiB7IGZhbHNlIH07
Ci0gICAgYm9vbCBub0V4dGVuc2lvbnMgeyBmYWxzZSB9OwotICAgIGZsb2F0IGRldmljZVBpeGVs
UmF0aW8geyAxIH07Ci0gICAgUG93ZXJQcmVmZXJlbmNlIGluaXRpYWxQb3dlclByZWZlcmVuY2Ug
eyBQb3dlclByZWZlcmVuY2U6OkRlZmF1bHQgfTsKLX07Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2VhYTYxNWFmY2Q4YWQ0MDMzMjk2ZDlh
NTY0NTAzNjdmOTY2ZTdkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
QmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBNb3ppbGxhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEQmFzZS5oIgotCi0jaWYgRU5BQkxF
KFdFQkdMKQotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpHcmFwaGljc0NvbnRleHQzREJhc2UoR3JhcGhp
Y3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3Jh
cGhpY3NDb250ZXh0M0RCYXNlKikKLSAgICA6IG1fYXR0cnMoYXR0cnMpCi0gICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uKQotewotfQotCi11bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzREJh
c2U6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoR0MzRGVudW0gYXR0YWNobWVudCkKLXsK
LSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6Q09MT1JfQVRUQUNITUVOVDA6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFD
SE1FTlQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDJfRVhU
OgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UM19FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQ0X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09MT1JfQVRUQUNITUVOVDVfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xP
Ul9BVFRBQ0hNRU5UNl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1F
TlQ3X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09MT1JfQVRUQUNITUVOVDhfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT0xPUl9BVFRBQ0hNRU5UOV9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxMF9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTE9SX0FUVEFDSE1FTlQxMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9S
X0FUVEFDSE1FTlQxMl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1F
TlQxM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxNF9FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTE9SX0FUVEFDSE1FTlQxNV9FWFQ6Ci0gICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzREJhc2U6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRl
eHQzREJhc2U6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Z2V0Q2xl
YXJCaXRzQnlGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6UkdCQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6TFVN
SU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpMVU1JTkFOQ0U6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlOjpSODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Ujhf
U05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlIxNkY6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzREJhc2U6OlIzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlI4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlI4SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UjE2VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
REJhc2U6OlIxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlIzMlVJOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSMzJJOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0RCYXNlOjpSRzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHOF9TTk9S
TToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkcxNkY6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzREJhc2U6OlJHMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNl
OjpSRzhVSToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6Ukc4SToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkcxNlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0RCYXNlOjpSRzE2SToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkczMlVJOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSRzMySToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6UkdCODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6U1JH
Qjg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjU2NToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCOF9TTk9STToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6UjExRl9HMTFGX0IxMEY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6
OlJHQjlfRTU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjE2RjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCMzJGOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0RCYXNlOjpSR0I4VUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjhJ
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0IxNlVJOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0RCYXNlOjpSR0IxNkk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlJHQjMyVUk6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjMySToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTg6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OlNSR0I4X0FMUEhBODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6UkdCQThfU05PUk06Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjVfQTE6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0RCYXNlOjpSR0IxMF9BMjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6UkdCQTE2RjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTMyRjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQThVSToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6UkdCQThJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpS
R0IxMF9BMlVJOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBMTZVSToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCQTE2SToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEQmFzZTo6UkdCQTMySToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6
UkdCQTMyVUk6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEQmFzZTo6Q09MT1JfQlVGRkVSX0JJVDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFz
ZTo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRF
UFRIX0NPTVBPTkVOVDI0OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9D
T01QT05FTlQzMkY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0NPTVBP
TkVOVDoKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfQlVGRkVS
X0JJVDsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6U1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzREJhc2U6OlNURU5DSUxfQlVGRkVSX0JJVDsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfU1RFTkNJTDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEgyNF9TVEVOQ0lMODoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEQmFzZTo6REVQVEgzMkZfU1RFTkNJTDg6Ci0gICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzREJh
c2U6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLXVpbnQ4X3QgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpnZXRDaGFubmVsQml0
c0J5Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpBTFBIQToKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpBbHBoYSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzREJhc2U6OkxVTUlOQU5DRToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KENoYW5uZWxCaXRzOjpSR0IpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpM
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFu
bmVsQml0czo6UkdCQSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OlJHQjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEQmFzZTo6UkdCNTY1OgotICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpTUkdCX0VYVDoKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5u
ZWxCaXRzOjpSR0IpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEQmFzZTo6UkdCNV9BMToKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9F
WFQ6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdC
QSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzREJhc2U6OkRFUFRIX0NPTVBPTkVOVDE2Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6RGVwdGgpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0RCYXNlOjpTVEVOQ0lMX0lOREVYODoKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpTdGVuY2lsKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEQmFzZTo6REVQVEhfU1RFTkNJTDoKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpEZXB0aFN0ZW5jaWwpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmUwMzgwNWMyMThjNzk4NzA0OWNkZDgwYTZmMDcwY2NhMTgxMzk3OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzREJhc2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
czNELmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgT1Mo
V0lORE9XUykKLS8vIERlZmluZWQgaW4gd2luZXJyb3IuaAotI2lmZGVmIE5PX0VSUk9SCi0jdW5k
ZWYgTk9fRVJST1IKLSNlbmRpZgotI2VuZGlmCi0KLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRDsKLXR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRERp
c3BsYXk7Ci10eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0RTdXJmYWNlOwot
dHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEQ29uZmlnOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1jbGFzcyBFeHRlbnNpb25zM0Q7Ci1jbGFzcyBIb3N0V2luZG93OwotY2xh
c3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBJbWFnZURhdGE7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYXBoaWNzQ29udGV4dDNEQmFzZT4gewotcHVi
bGljOgotICAgIGVudW0gewotICAgICAgICAvLyBXZWJHTCAxIGNvbnN0YW50cy4KLSAgICAgICAg
REVQVEhfQlVGRkVSX0JJVCA9IDB4MDAwMDAxMDAsCi0gICAgICAgIFNURU5DSUxfQlVGRkVSX0JJ
VCA9IDB4MDAwMDA0MDAsCi0gICAgICAgIENPTE9SX0JVRkZFUl9CSVQgPSAweDAwMDA0MDAwLAot
ICAgICAgICBQT0lOVFMgPSAweDAwMDAsCi0gICAgICAgIExJTkVTID0gMHgwMDAxLAotICAgICAg
ICBMSU5FX0xPT1AgPSAweDAwMDIsCi0gICAgICAgIExJTkVfU1RSSVAgPSAweDAwMDMsCi0gICAg
ICAgIFRSSUFOR0xFUyA9IDB4MDAwNCwKLSAgICAgICAgVFJJQU5HTEVfU1RSSVAgPSAweDAwMDUs
Ci0gICAgICAgIFRSSUFOR0xFX0ZBTiA9IDB4MDAwNiwKLSAgICAgICAgWkVSTyA9IDAsCi0gICAg
ICAgIE9ORSA9IDEsCi0gICAgICAgIFNSQ19DT0xPUiA9IDB4MDMwMCwKLSAgICAgICAgT05FX01J
TlVTX1NSQ19DT0xPUiA9IDB4MDMwMSwKLSAgICAgICAgU1JDX0FMUEhBID0gMHgwMzAyLAotICAg
ICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBID0gMHgwMzAzLAotICAgICAgICBEU1RfQUxQSEEgPSAw
eDAzMDQsCi0gICAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgPSAweDAzMDUsCi0gICAgICAgIERT
VF9DT0xPUiA9IDB4MDMwNiwKLSAgICAgICAgT05FX01JTlVTX0RTVF9DT0xPUiA9IDB4MDMwNywK
LSAgICAgICAgU1JDX0FMUEhBX1NBVFVSQVRFID0gMHgwMzA4LAotICAgICAgICBGVU5DX0FERCA9
IDB4ODAwNiwKLSAgICAgICAgQkxFTkRfRVFVQVRJT04gPSAweDgwMDksCi0gICAgICAgIEJMRU5E
X0VRVUFUSU9OX1JHQiA9IDB4ODAwOSwKLSAgICAgICAgQkxFTkRfRVFVQVRJT05fQUxQSEEgPSAw
eDg4M0QsCi0gICAgICAgIEZVTkNfU1VCVFJBQ1QgPSAweDgwMEEsCi0gICAgICAgIEZVTkNfUkVW
RVJTRV9TVUJUUkFDVCA9IDB4ODAwQiwKLSAgICAgICAgQkxFTkRfRFNUX1JHQiA9IDB4ODBDOCwK
LSAgICAgICAgQkxFTkRfU1JDX1JHQiA9IDB4ODBDOSwKLSAgICAgICAgQkxFTkRfRFNUX0FMUEhB
ID0gMHg4MENBLAotICAgICAgICBCTEVORF9TUkNfQUxQSEEgPSAweDgwQ0IsCi0gICAgICAgIENP
TlNUQU5UX0NPTE9SID0gMHg4MDAxLAotICAgICAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1Ig
PSAweDgwMDIsCi0gICAgICAgIENPTlNUQU5UX0FMUEhBID0gMHg4MDAzLAotICAgICAgICBPTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEEgPSAweDgwMDQsCi0gICAgICAgIEJMRU5EX0NPTE9SID0gMHg4
MDA1LAotICAgICAgICBBUlJBWV9CVUZGRVIgPSAweDg4OTIsCi0gICAgICAgIEVMRU1FTlRfQVJS
QVlfQlVGRkVSID0gMHg4ODkzLAotICAgICAgICBBUlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5
NCwKLSAgICAgICAgRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5NSwKLSAgICAg
ICAgU1RSRUFNX0RSQVcgPSAweDg4RTAsCi0gICAgICAgIFNUQVRJQ19EUkFXID0gMHg4OEU0LAot
ICAgICAgICBEWU5BTUlDX0RSQVcgPSAweDg4RTgsCi0gICAgICAgIEJVRkZFUl9TSVpFID0gMHg4
NzY0LAotICAgICAgICBCVUZGRVJfVVNBR0UgPSAweDg3NjUsCi0gICAgICAgIENVUlJFTlRfVkVS
VEVYX0FUVFJJQiA9IDB4ODYyNiwKLSAgICAgICAgRlJPTlQgPSAweDA0MDQsCi0gICAgICAgIEJB
Q0sgPSAweDA0MDUsCi0gICAgICAgIEZST05UX0FORF9CQUNLID0gMHgwNDA4LAotICAgICAgICBU
RVhUVVJFXzJEID0gMHgwREUxLAotICAgICAgICBDVUxMX0ZBQ0UgPSAweDBCNDQsCi0gICAgICAg
IEJMRU5EID0gMHgwQkUyLAotICAgICAgICBESVRIRVIgPSAweDBCRDAsCi0gICAgICAgIFNURU5D
SUxfVEVTVCA9IDB4MEI5MCwKLSAgICAgICAgREVQVEhfVEVTVCA9IDB4MEI3MSwKLSAgICAgICAg
U0NJU1NPUl9URVNUID0gMHgwQzExLAotICAgICAgICBQT0xZR09OX09GRlNFVF9GSUxMID0gMHg4
MDM3LAotICAgICAgICBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgPSAweDgwOUUsCi0gICAgICAg
IFNBTVBMRV9DT1ZFUkFHRSA9IDB4ODBBMCwKLSAgICAgICAgTk9fRVJST1IgPSAwLAotICAgICAg
ICBJTlZBTElEX0VOVU0gPSAweDA1MDAsCi0gICAgICAgIElOVkFMSURfVkFMVUUgPSAweDA1MDEs
Ci0gICAgICAgIElOVkFMSURfT1BFUkFUSU9OID0gMHgwNTAyLAotICAgICAgICBPVVRfT0ZfTUVN
T1JZID0gMHgwNTA1LAotICAgICAgICBDVyA9IDB4MDkwMCwKLSAgICAgICAgQ0NXID0gMHgwOTAx
LAotICAgICAgICBMSU5FX1dJRFRIID0gMHgwQjIxLAotICAgICAgICBBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0UgPSAweDg0NkQsCi0gICAgICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSA9IDB4
ODQ2RSwKLSAgICAgICAgQ1VMTF9GQUNFX01PREUgPSAweDBCNDUsCi0gICAgICAgIEZST05UX0ZB
Q0UgPSAweDBCNDYsCi0gICAgICAgIERFUFRIX1JBTkdFID0gMHgwQjcwLAotICAgICAgICBERVBU
SF9XUklURU1BU0sgPSAweDBCNzIsCi0gICAgICAgIERFUFRIX0NMRUFSX1ZBTFVFID0gMHgwQjcz
LAotICAgICAgICBERVBUSF9GVU5DID0gMHgwQjc0LAotICAgICAgICBTVEVOQ0lMX0NMRUFSX1ZB
TFVFID0gMHgwQjkxLAotICAgICAgICBTVEVOQ0lMX0ZVTkMgPSAweDBCOTIsCi0gICAgICAgIFNU
RU5DSUxfRkFJTCA9IDB4MEI5NCwKLSAgICAgICAgU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgPSAw
eDBCOTUsCi0gICAgICAgIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTID0gMHgwQjk2LAotICAgICAg
ICBTVEVOQ0lMX1JFRiA9IDB4MEI5NywKLSAgICAgICAgU1RFTkNJTF9WQUxVRV9NQVNLID0gMHgw
QjkzLAotICAgICAgICBTVEVOQ0lMX1dSSVRFTUFTSyA9IDB4MEI5OCwKLSAgICAgICAgU1RFTkNJ
TF9CQUNLX0ZVTkMgPSAweDg4MDAsCi0gICAgICAgIFNURU5DSUxfQkFDS19GQUlMID0gMHg4ODAx
LAotICAgICAgICBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMID0gMHg4ODAyLAotICAgICAg
ICBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTID0gMHg4ODAzLAotICAgICAgICBTVEVOQ0lM
X0JBQ0tfUkVGID0gMHg4Q0EzLAotICAgICAgICBTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyA9IDB4
OENBNCwKLSAgICAgICAgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyA9IDB4OENBNSwKLSAgICAgICAg
VklFV1BPUlQgPSAweDBCQTIsCi0gICAgICAgIFNDSVNTT1JfQk9YID0gMHgwQzEwLAotICAgICAg
ICBDT0xPUl9DTEVBUl9WQUxVRSA9IDB4MEMyMiwKLSAgICAgICAgQ09MT1JfV1JJVEVNQVNLID0g
MHgwQzIzLAotICAgICAgICBVTlBBQ0tfQUxJR05NRU5UID0gMHgwQ0Y1LAotICAgICAgICBQQUNL
X0FMSUdOTUVOVCA9IDB4MEQwNSwKLSAgICAgICAgTUFYX1RFWFRVUkVfU0laRSA9IDB4MEQzMywK
LSAgICAgICAgTUFYX1ZJRVdQT1JUX0RJTVMgPSAweDBEM0EsCi0gICAgICAgIFNVQlBJWEVMX0JJ
VFMgPSAweDBENTAsCi0gICAgICAgIFJFRF9CSVRTID0gMHgwRDUyLAotICAgICAgICBHUkVFTl9C
SVRTID0gMHgwRDUzLAotICAgICAgICBCTFVFX0JJVFMgPSAweDBENTQsCi0gICAgICAgIEFMUEhB
X0JJVFMgPSAweDBENTUsCi0gICAgICAgIERFUFRIX0JJVFMgPSAweDBENTYsCi0gICAgICAgIFNU
RU5DSUxfQklUUyA9IDB4MEQ1NywKLSAgICAgICAgUE9MWUdPTl9PRkZTRVRfVU5JVFMgPSAweDJB
MDAsCi0gICAgICAgIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiA9IDB4ODAzOCwKLSAgICAgICAgVEVY
VFVSRV9CSU5ESU5HXzJEID0gMHg4MDY5LAotICAgICAgICBTQU1QTEVfQlVGRkVSUyA9IDB4ODBB
OCwKLSAgICAgICAgU0FNUExFUyA9IDB4ODBBOSwKLSAgICAgICAgU0FNUExFX0NPVkVSQUdFX1ZB
TFVFID0gMHg4MEFBLAotICAgICAgICBTQU1QTEVfQ09WRVJBR0VfSU5WRVJUID0gMHg4MEFCLAot
ICAgICAgICBOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAweDg2QTIsCi0gICAgICAg
IENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTID0gMHg4NkEzLAotICAgICAgICBET05UX0NBUkUg
PSAweDExMDAsCi0gICAgICAgIEZBU1RFU1QgPSAweDExMDEsCi0gICAgICAgIE5JQ0VTVCA9IDB4
MTEwMiwKLSAgICAgICAgR0VORVJBVEVfTUlQTUFQX0hJTlQgPSAweDgxOTIsCi0gICAgICAgIEJZ
VEUgPSAweDE0MDAsCi0gICAgICAgIFVOU0lHTkVEX0JZVEUgPSAweDE0MDEsCi0gICAgICAgIFNI
T1JUID0gMHgxNDAyLAotICAgICAgICBVTlNJR05FRF9TSE9SVCA9IDB4MTQwMywKLSAgICAgICAg
SU5UID0gMHgxNDA0LAotICAgICAgICBVTlNJR05FRF9JTlQgPSAweDE0MDUsCi0gICAgICAgIEZM
T0FUID0gMHgxNDA2LAotICAgICAgICBIQUxGX0ZMT0FUX09FUyA9IDB4OEQ2MSwKLSAgICAgICAg
RklYRUQgPSAweDE0MEMsCi0gICAgICAgIERFUFRIX0NPTVBPTkVOVCA9IDB4MTkwMiwKLSAgICAg
ICAgQUxQSEEgPSAweDE5MDYsCi0gICAgICAgIFJHQiA9IDB4MTkwNywKLSAgICAgICAgUkdCQSA9
IDB4MTkwOCwKLSAgICAgICAgQkdSQSA9IDB4ODBFMSwKLSAgICAgICAgTFVNSU5BTkNFID0gMHgx
OTA5LAotICAgICAgICBMVU1JTkFOQ0VfQUxQSEEgPSAweDE5MEEsCi0gICAgICAgIFVOU0lHTkVE
X1NIT1JUXzRfNF80XzQgPSAweDgwMzMsCi0gICAgICAgIFVOU0lHTkVEX1NIT1JUXzVfNV81XzEg
PSAweDgwMzQsCi0gICAgICAgIFVOU0lHTkVEX1NIT1JUXzVfNl81ID0gMHg4MzYzLAotICAgICAg
ICBGUkFHTUVOVF9TSEFERVIgPSAweDhCMzAsCi0gICAgICAgIFZFUlRFWF9TSEFERVIgPSAweDhC
MzEsCi0gICAgICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDB4ODg2OSwKLSAgICAgICAgTUFYX1ZF
UlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkIsCi0gICAgICAgIE1BWF9WQVJZSU5HX1ZFQ1RP
UlMgPSAweDhERkMsCi0gICAgICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTID0g
MHg4QjRELAotICAgICAgICBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNEMs
Ci0gICAgICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4ODcyLAotICAgICAgICBNQVhf
RlJBR01FTlRfVU5JRk9STV9WRUNUT1JTID0gMHg4REZELAotICAgICAgICBTSEFERVJfVFlQRSA9
IDB4OEI0RiwKLSAgICAgICAgREVMRVRFX1NUQVRVUyA9IDB4OEI4MCwKLSAgICAgICAgTElOS19T
VEFUVVMgPSAweDhCODIsCi0gICAgICAgIFZBTElEQVRFX1NUQVRVUyA9IDB4OEI4MywKLSAgICAg
ICAgQVRUQUNIRURfU0hBREVSUyA9IDB4OEI4NSwKLSAgICAgICAgQUNUSVZFX1VOSUZPUk1TID0g
MHg4Qjg2LAotICAgICAgICBBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIID0gMHg4Qjg3LAotICAg
ICAgICBBQ1RJVkVfQVRUUklCVVRFUyA9IDB4OEI4OSwKLSAgICAgICAgQUNUSVZFX0FUVFJJQlVU
RV9NQVhfTEVOR1RIID0gMHg4QjhBLAotICAgICAgICBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04g
PSAweDhCOEMsCi0gICAgICAgIENVUlJFTlRfUFJPR1JBTSA9IDB4OEI4RCwKLSAgICAgICAgTkVW
RVIgPSAweDAyMDAsCi0gICAgICAgIExFU1MgPSAweDAyMDEsCi0gICAgICAgIEVRVUFMID0gMHgw
MjAyLAotICAgICAgICBMRVFVQUwgPSAweDAyMDMsCi0gICAgICAgIEdSRUFURVIgPSAweDAyMDQs
Ci0gICAgICAgIE5PVEVRVUFMID0gMHgwMjA1LAotICAgICAgICBHRVFVQUwgPSAweDAyMDYsCi0g
ICAgICAgIEFMV0FZUyA9IDB4MDIwNywKLSAgICAgICAgS0VFUCA9IDB4MUUwMCwKLSAgICAgICAg
UkVQTEFDRSA9IDB4MUUwMSwKLSAgICAgICAgSU5DUiA9IDB4MUUwMiwKLSAgICAgICAgREVDUiA9
IDB4MUUwMywKLSAgICAgICAgSU5WRVJUID0gMHgxNTBBLAotICAgICAgICBJTkNSX1dSQVAgPSAw
eDg1MDcsCi0gICAgICAgIERFQ1JfV1JBUCA9IDB4ODUwOCwKLSAgICAgICAgVkVORE9SID0gMHgx
RjAwLAotICAgICAgICBSRU5ERVJFUiA9IDB4MUYwMSwKLSAgICAgICAgVkVSU0lPTiA9IDB4MUYw
MiwKLSAgICAgICAgRVhURU5TSU9OUyA9IDB4MUYwMywKLSAgICAgICAgTkVBUkVTVCA9IDB4MjYw
MCwKLSAgICAgICAgTElORUFSID0gMHgyNjAxLAotICAgICAgICBORUFSRVNUX01JUE1BUF9ORUFS
RVNUID0gMHgyNzAwLAotICAgICAgICBMSU5FQVJfTUlQTUFQX05FQVJFU1QgPSAweDI3MDEsCi0g
ICAgICAgIE5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IDB4MjcwMiwKLSAgICAgICAgTElORUFSX01J
UE1BUF9MSU5FQVIgPSAweDI3MDMsCi0gICAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiA9IDB4Mjgw
MCwKLSAgICAgICAgVEVYVFVSRV9NSU5fRklMVEVSID0gMHgyODAxLAotICAgICAgICBURVhUVVJF
X1dSQVBfUyA9IDB4MjgwMiwKLSAgICAgICAgVEVYVFVSRV9XUkFQX1QgPSAweDI4MDMsCi0gICAg
ICAgIFRFWFRVUkUgPSAweDE3MDIsCi0gICAgICAgIFRFWFRVUkVfQ1VCRV9NQVAgPSAweDg1MTMs
Ci0gICAgICAgIFRFWFRVUkVfQklORElOR19DVUJFX01BUCA9IDB4ODUxNCwKLSAgICAgICAgVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID0gMHg4NTE1LAotICAgICAgICBURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ggPSAweDg1MTYsCi0gICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWSA9IDB4ODUxNywKLSAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZID0gMHg4
NTE4LAotICAgICAgICBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogPSAweDg1MTksCi0gICAg
ICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiA9IDB4ODUxQSwKLSAgICAgICAgTUFYX0NV
QkVfTUFQX1RFWFRVUkVfU0laRSA9IDB4ODUxQywKLSAgICAgICAgVEVYVFVSRTAgPSAweDg0QzAs
Ci0gICAgICAgIFRFWFRVUkUxID0gMHg4NEMxLAotICAgICAgICBURVhUVVJFMiA9IDB4ODRDMiwK
LSAgICAgICAgVEVYVFVSRTMgPSAweDg0QzMsCi0gICAgICAgIFRFWFRVUkU0ID0gMHg4NEM0LAot
ICAgICAgICBURVhUVVJFNSA9IDB4ODRDNSwKLSAgICAgICAgVEVYVFVSRTYgPSAweDg0QzYsCi0g
ICAgICAgIFRFWFRVUkU3ID0gMHg4NEM3LAotICAgICAgICBURVhUVVJFOCA9IDB4ODRDOCwKLSAg
ICAgICAgVEVYVFVSRTkgPSAweDg0QzksCi0gICAgICAgIFRFWFRVUkUxMCA9IDB4ODRDQSwKLSAg
ICAgICAgVEVYVFVSRTExID0gMHg4NENCLAotICAgICAgICBURVhUVVJFMTIgPSAweDg0Q0MsCi0g
ICAgICAgIFRFWFRVUkUxMyA9IDB4ODRDRCwKLSAgICAgICAgVEVYVFVSRTE0ID0gMHg4NENFLAot
ICAgICAgICBURVhUVVJFMTUgPSAweDg0Q0YsCi0gICAgICAgIFRFWFRVUkUxNiA9IDB4ODREMCwK
LSAgICAgICAgVEVYVFVSRTE3ID0gMHg4NEQxLAotICAgICAgICBURVhUVVJFMTggPSAweDg0RDIs
Ci0gICAgICAgIFRFWFRVUkUxOSA9IDB4ODREMywKLSAgICAgICAgVEVYVFVSRTIwID0gMHg4NEQ0
LAotICAgICAgICBURVhUVVJFMjEgPSAweDg0RDUsCi0gICAgICAgIFRFWFRVUkUyMiA9IDB4ODRE
NiwKLSAgICAgICAgVEVYVFVSRTIzID0gMHg4NEQ3LAotICAgICAgICBURVhUVVJFMjQgPSAweDg0
RDgsCi0gICAgICAgIFRFWFRVUkUyNSA9IDB4ODREOSwKLSAgICAgICAgVEVYVFVSRTI2ID0gMHg4
NERBLAotICAgICAgICBURVhUVVJFMjcgPSAweDg0REIsCi0gICAgICAgIFRFWFRVUkUyOCA9IDB4
ODREQywKLSAgICAgICAgVEVYVFVSRTI5ID0gMHg4NERELAotICAgICAgICBURVhUVVJFMzAgPSAw
eDg0REUsCi0gICAgICAgIFRFWFRVUkUzMSA9IDB4ODRERiwKLSAgICAgICAgQUNUSVZFX1RFWFRV
UkUgPSAweDg0RTAsCi0gICAgICAgIFJFUEVBVCA9IDB4MjkwMSwKLSAgICAgICAgQ0xBTVBfVE9f
RURHRSA9IDB4ODEyRiwKLSAgICAgICAgTUlSUk9SRURfUkVQRUFUID0gMHg4MzcwLAotICAgICAg
ICBGTE9BVF9WRUMyID0gMHg4QjUwLAotICAgICAgICBGTE9BVF9WRUMzID0gMHg4QjUxLAotICAg
ICAgICBGTE9BVF9WRUM0ID0gMHg4QjUyLAotICAgICAgICBJTlRfVkVDMiA9IDB4OEI1MywKLSAg
ICAgICAgSU5UX1ZFQzMgPSAweDhCNTQsCi0gICAgICAgIElOVF9WRUM0ID0gMHg4QjU1LAotICAg
ICAgICBCT09MID0gMHg4QjU2LAotICAgICAgICBCT09MX1ZFQzIgPSAweDhCNTcsCi0gICAgICAg
IEJPT0xfVkVDMyA9IDB4OEI1OCwKLSAgICAgICAgQk9PTF9WRUM0ID0gMHg4QjU5LAotICAgICAg
ICBGTE9BVF9NQVQyID0gMHg4QjVBLAotICAgICAgICBGTE9BVF9NQVQzID0gMHg4QjVCLAotICAg
ICAgICBGTE9BVF9NQVQ0ID0gMHg4QjVDLAotICAgICAgICBTQU1QTEVSXzJEID0gMHg4QjVFLAot
ICAgICAgICBTQU1QTEVSX0NVQkUgPSAweDhCNjAsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJS
QVlfRU5BQkxFRCA9IDB4ODYyMiwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFID0g
MHg4NjIzLAotICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSA9IDB4ODYyNCwKLSAg
ICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFID0gMHg4NjI1LAotICAgICAgICBWRVJURVhf
QVRUUklCX0FSUkFZX05PUk1BTElaRUQgPSAweDg4NkEsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJf
QVJSQVlfUE9JTlRFUiA9IDB4ODY0NSwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZG
RVJfQklORElORyA9IDB4ODg5RiwKLSAgICAgICAgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9U
WVBFID0gMHg4QjlBLAotICAgICAgICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCA9
IDB4OEI5QiwKLSAgICAgICAgQ09NUElMRV9TVEFUVVMgPSAweDhCODEsCi0gICAgICAgIElORk9f
TE9HX0xFTkdUSCA9IDB4OEI4NCwKLSAgICAgICAgU0hBREVSX1NPVVJDRV9MRU5HVEggPSAweDhC
ODgsCi0gICAgICAgIFNIQURFUl9DT01QSUxFUiA9IDB4OERGQSwKLSAgICAgICAgU0hBREVSX0JJ
TkFSWV9GT1JNQVRTID0gMHg4REY4LAotICAgICAgICBOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
ID0gMHg4REY5LAotICAgICAgICBMT1dfRkxPQVQgPSAweDhERjAsCi0gICAgICAgIE1FRElVTV9G
TE9BVCA9IDB4OERGMSwKLSAgICAgICAgSElHSF9GTE9BVCA9IDB4OERGMiwKLSAgICAgICAgTE9X
X0lOVCA9IDB4OERGMywKLSAgICAgICAgTUVESVVNX0lOVCA9IDB4OERGNCwKLSAgICAgICAgSElH
SF9JTlQgPSAweDhERjUsCi0gICAgICAgIEZSQU1FQlVGRkVSID0gMHg4RDQwLAotICAgICAgICBS
RU5ERVJCVUZGRVIgPSAweDhENDEsCi0gICAgICAgIFJHQkE0ID0gMHg4MDU2LAotICAgICAgICBS
R0I1X0ExID0gMHg4MDU3LAotICAgICAgICBSR0I1NjUgPSAweDhENjIsCi0gICAgICAgIERFUFRI
X0NPTVBPTkVOVDE2ID0gMHg4MUE1LAotICAgICAgICBTVEVOQ0lMX0lOREVYID0gMHgxOTAxLAot
ICAgICAgICBTVEVOQ0lMX0lOREVYOCA9IDB4OEQ0OCwKLSAgICAgICAgUkVOREVSQlVGRkVSX1dJ
RFRIID0gMHg4RDQyLAotICAgICAgICBSRU5ERVJCVUZGRVJfSEVJR0hUID0gMHg4RDQzLAotICAg
ICAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUID0gMHg4RDQ0LAotICAgICAgICBSRU5E
RVJCVUZGRVJfUkVEX1NJWkUgPSAweDhENTAsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9HUkVFTl9T
SVpFID0gMHg4RDUxLAotICAgICAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFID0gMHg4RDUyLAot
ICAgICAgICBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSA9IDB4OEQ1MywKLSAgICAgICAgUkVOREVS
QlVGRkVSX0RFUFRIX1NJWkUgPSAweDhENTQsCi0gICAgICAgIFJFTkRFUkJVRkZFUl9TVEVOQ0lM
X1NJWkUgPSAweDhENTUsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZ
UEUgPSAweDhDRDAsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUg
PSAweDhDRDEsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCA9
IDB4OENEMiwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQ
X0ZBQ0UgPSAweDhDRDMsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQwID0gMHg4Q0UwLAotICAg
ICAgICBERVBUSF9BVFRBQ0hNRU5UID0gMHg4RDAwLAotICAgICAgICBTVEVOQ0lMX0FUVEFDSE1F
TlQgPSAweDhEMjAsCi0gICAgICAgIE5PTkUgPSAwLAotICAgICAgICBGUkFNRUJVRkZFUl9DT01Q
TEVURSA9IDB4OENENSwKLSAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
ID0gMHg4Q0Q2LAotICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNI
TUVOVCA9IDB4OENENywKLSAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05T
ID0gMHg4Q0Q5LAotICAgICAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCA9IDB4OENERCwKLSAg
ICAgICAgRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBNiwKLSAgICAgICAgUkVOREVSQlVGRkVS
X0JJTkRJTkcgPSAweDhDQTcsCi0gICAgICAgIE1BWF9SRU5ERVJCVUZGRVJfU0laRSA9IDB4ODRF
OCwKLSAgICAgICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gPSAweDA1MDYsCi0KLSAg
ICAgICAgLy8gV2ViR0wtc3BlY2lmaWMgZW51bXMKLSAgICAgICAgVU5QQUNLX0ZMSVBfWV9XRUJH
TCA9IDB4OTI0MCwKLSAgICAgICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMID0gMHg5
MjQxLAotICAgICAgICBDT05URVhUX0xPU1RfV0VCR0wgPSAweDkyNDIsCi0gICAgICAgIFVOUEFD
S19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDMsCi0gICAgICAgIEJST1dTRVJf
REVGQVVMVF9XRUJHTCA9IDB4OTI0NCwKLSAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJ
U09SX0FOR0xFID0gMHg4OEZFLAotICAgICAgICAKLSAgICAgICAgLy8gV2ViR0wyIGNvbnN0YW50
cwotICAgICAgICBSRUFEX0JVRkZFUiA9IDB4MEMwMiwKLSAgICAgICAgVU5QQUNLX1JPV19MRU5H
VEggPSAweDBDRjIsCi0gICAgICAgIFVOUEFDS19TS0lQX1JPV1MgPSAweDBDRjMsCi0gICAgICAg
IFVOUEFDS19TS0lQX1BJWEVMUyA9IDB4MENGNCwKLSAgICAgICAgUEFDS19ST1dfTEVOR1RIID0g
MHgwRDAyLAotICAgICAgICBQQUNLX1NLSVBfUk9XUyA9IDB4MEQwMywKLSAgICAgICAgUEFDS19T
S0lQX1BJWEVMUyA9IDB4MEQwNCwKLSAgICAgICAgQ09MT1IgPSAweDE4MDAsCi0gICAgICAgIERF
UFRIID0gMHgxODAxLAotICAgICAgICBTVEVOQ0lMID0gMHgxODAyLAotICAgICAgICBSRUQgPSAw
eDE5MDMsCi0gICAgICAgIFJHQjggPSAweDgwNTEsCi0gICAgICAgIFJHQkE4ID0gMHg4MDU4LAot
ICAgICAgICBSR0IxMF9BMiA9IDB4ODA1OSwKLSAgICAgICAgVEVYVFVSRV9CSU5ESU5HXzNEID0g
MHg4MDZBLAotICAgICAgICBVTlBBQ0tfU0tJUF9JTUFHRVMgPSAweDgwNkQsCi0gICAgICAgIFVO
UEFDS19JTUFHRV9IRUlHSFQgPSAweDgwNkUsCi0gICAgICAgIFRFWFRVUkVfM0QgPSAweDgwNkYs
Ci0gICAgICAgIFRFWFRVUkVfV1JBUF9SID0gMHg4MDcyLAotICAgICAgICBNQVhfM0RfVEVYVFVS
RV9TSVpFID0gMHg4MDczLAotICAgICAgICBVTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgPSAw
eDgzNjgsCi0gICAgICAgIE1BWF9FTEVNRU5UU19WRVJUSUNFUyA9IDB4ODBFOCwKLSAgICAgICAg
TUFYX0VMRU1FTlRTX0lORElDRVMgPSAweDgwRTksCi0gICAgICAgIFRFWFRVUkVfTUlOX0xPRCA9
IDB4ODEzQSwKLSAgICAgICAgVEVYVFVSRV9NQVhfTE9EID0gMHg4MTNCLAotICAgICAgICBURVhU
VVJFX0JBU0VfTEVWRUwgPSAweDgxM0MsCi0gICAgICAgIFRFWFRVUkVfTUFYX0xFVkVMID0gMHg4
MTNELAotICAgICAgICBNSU4gPSAweDgwMDcsCi0gICAgICAgIE1BWCA9IDB4ODAwOCwKLSAgICAg
ICAgREVQVEhfQ09NUE9ORU5UMjQgPSAweDgxQTYsCi0gICAgICAgIE1BWF9URVhUVVJFX0xPRF9C
SUFTID0gMHg4NEZELAotICAgICAgICBURVhUVVJFX0NPTVBBUkVfTU9ERSA9IDB4ODg0QywKLSAg
ICAgICAgVEVYVFVSRV9DT01QQVJFX0ZVTkMgPSAweDg4NEQsCi0gICAgICAgIENVUlJFTlRfUVVF
UlkgPSAweDg4NjUsCi0gICAgICAgIFFVRVJZX1JFU1VMVCA9IDB4ODg2NiwKLSAgICAgICAgUVVF
UllfUkVTVUxUX0FWQUlMQUJMRSA9IDB4ODg2NywKLSAgICAgICAgU1RSRUFNX1JFQUQgPSAweDg4
RTEsCi0gICAgICAgIFNUUkVBTV9DT1BZID0gMHg4OEUyLAotICAgICAgICBTVEFUSUNfUkVBRCA9
IDB4ODhFNSwKLSAgICAgICAgU1RBVElDX0NPUFkgPSAweDg4RTYsCi0gICAgICAgIERZTkFNSUNf
UkVBRCA9IDB4ODhFOSwKLSAgICAgICAgRFlOQU1JQ19DT1BZID0gMHg4OEVBLAotICAgICAgICBN
QVhfRFJBV19CVUZGRVJTID0gMHg4ODI0LAotICAgICAgICBEUkFXX0JVRkZFUjAgPSAweDg4MjUs
Ci0gICAgICAgIERSQVdfQlVGRkVSMSA9IDB4ODgyNiwKLSAgICAgICAgRFJBV19CVUZGRVIyID0g
MHg4ODI3LAotICAgICAgICBEUkFXX0JVRkZFUjMgPSAweDg4MjgsCi0gICAgICAgIERSQVdfQlVG
RkVSNCA9IDB4ODgyOSwKLSAgICAgICAgRFJBV19CVUZGRVI1ID0gMHg4ODJBLAotICAgICAgICBE
UkFXX0JVRkZFUjYgPSAweDg4MkIsCi0gICAgICAgIERSQVdfQlVGRkVSNyA9IDB4ODgyQywKLSAg
ICAgICAgRFJBV19CVUZGRVI4ID0gMHg4ODJELAotICAgICAgICBEUkFXX0JVRkZFUjkgPSAweDg4
MkUsCi0gICAgICAgIERSQVdfQlVGRkVSMTAgPSAweDg4MkYsCi0gICAgICAgIERSQVdfQlVGRkVS
MTEgPSAweDg4MzAsCi0gICAgICAgIERSQVdfQlVGRkVSMTIgPSAweDg4MzEsCi0gICAgICAgIERS
QVdfQlVGRkVSMTMgPSAweDg4MzIsCi0gICAgICAgIERSQVdfQlVGRkVSMTQgPSAweDg4MzMsCi0g
ICAgICAgIERSQVdfQlVGRkVSMTUgPSAweDg4MzQsCi0gICAgICAgIE1BWF9GUkFHTUVOVF9VTklG
T1JNX0NPTVBPTkVOVFMgPSAweDhCNDksCi0gICAgICAgIE1BWF9WRVJURVhfVU5JRk9STV9DT01Q
T05FTlRTID0gMHg4QjRBLAotICAgICAgICBTQU1QTEVSXzNEID0gMHg4QjVGLAotICAgICAgICBT
QU1QTEVSXzJEX1NIQURPVyA9IDB4OEI2MiwKLSAgICAgICAgRlJBR01FTlRfU0hBREVSX0RFUklW
QVRJVkVfSElOVCA9IDB4OEI4QiwKLSAgICAgICAgUElYRUxfUEFDS19CVUZGRVIgPSAweDg4RUIs
Ci0gICAgICAgIFBJWEVMX1VOUEFDS19CVUZGRVIgPSAweDg4RUMsCi0gICAgICAgIFBJWEVMX1BB
Q0tfQlVGRkVSX0JJTkRJTkcgPSAweDg4RUQsCi0gICAgICAgIFBJWEVMX1VOUEFDS19CVUZGRVJf
QklORElORyA9IDB4ODhFRiwKLSAgICAgICAgRkxPQVRfTUFUMngzID0gMHg4QjY1LAotICAgICAg
ICBGTE9BVF9NQVQyeDQgPSAweDhCNjYsCi0gICAgICAgIEZMT0FUX01BVDN4MiA9IDB4OEI2NywK
LSAgICAgICAgRkxPQVRfTUFUM3g0ID0gMHg4QjY4LAotICAgICAgICBGTE9BVF9NQVQ0eDIgPSAw
eDhCNjksCi0gICAgICAgIEZMT0FUX01BVDR4MyA9IDB4OEI2QSwKLSAgICAgICAgU1JHQiA9IDB4
OEM0MCwKLSAgICAgICAgU1JHQjggPSAweDhDNDEsCi0gICAgICAgIFNSR0JfQUxQSEEgPSAweDhD
NDIsCi0gICAgICAgIFNSR0I4X0FMUEhBOCA9IDB4OEM0MywKLSAgICAgICAgQ09NUEFSRV9SRUZf
VE9fVEVYVFVSRSA9IDB4ODg0RSwKLSAgICAgICAgUkdCQTMyRiA9IDB4ODgxNCwKLSAgICAgICAg
UkdCMzJGID0gMHg4ODE1LAotICAgICAgICBSR0JBMTZGID0gMHg4ODFBLAotICAgICAgICBSR0Ix
NkYgPSAweDg4MUIsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUiA9IDB4ODhG
RCwKLSAgICAgICAgTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTID0gMHg4OEZGLAotICAgICAgICBN
SU5fUFJPR1JBTV9URVhFTF9PRkZTRVQgPSAweDg5MDQsCi0gICAgICAgIE1BWF9QUk9HUkFNX1RF
WEVMX09GRlNFVCA9IDB4ODkwNSwKLSAgICAgICAgTUFYX1ZBUllJTkdfQ09NUE9ORU5UUyA9IDB4
OEI0QiwKLSAgICAgICAgVEVYVFVSRV8yRF9BUlJBWSA9IDB4OEMxQSwKLSAgICAgICAgVEVYVFVS
RV9CSU5ESU5HXzJEX0FSUkFZID0gMHg4QzFELAotICAgICAgICBSMTFGX0cxMUZfQjEwRiA9IDB4
OEMzQSwKLSAgICAgICAgVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViA9IDB4OEMzQiwKLSAg
ICAgICAgUkdCOV9FNSA9IDB4OEMzRCwKLSAgICAgICAgVU5TSUdORURfSU5UXzVfOV85XzlfUkVW
ID0gMHg4QzNFLAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREUgPSAweDhD
N0YsCi0gICAgICAgIE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUyA9
IDB4OEM4MCwKLSAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTID0gMHg4QzgzLAot
ICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUID0gMHg4Qzg0LAotICAgICAg
ICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkUgPSAweDhDODUsCi0gICAgICAgIFRSQU5T
Rk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU4gPSAweDhDODgsCi0gICAgICAgIFJBU1RF
UklaRVJfRElTQ0FSRCA9IDB4OEM4OSwKLSAgICAgICAgTUFYX1RSQU5TRk9STV9GRUVEQkFDS19J
TlRFUkxFQVZFRF9DT01QT05FTlRTID0gMHg4QzhBLAotICAgICAgICBNQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX1NFUEFSQVRFX0FUVFJJQlMgPSAweDhDOEIsCi0gICAgICAgIElOVEVSTEVBVkVEX0FU
VFJJQlMgPSAweDhDOEMsCi0gICAgICAgIFNFUEFSQVRFX0FUVFJJQlMgPSAweDhDOEQsCi0gICAg
ICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVIgPSAweDhDOEUsCi0gICAgICAgIFRSQU5TRk9S
TV9GRUVEQkFDS19CVUZGRVJfQklORElORyA9IDB4OEM4RiwKLSAgICAgICAgUkdCQTMyVUkgPSAw
eDhENzAsCi0gICAgICAgIFJHQjMyVUkgPSAweDhENzEsCi0gICAgICAgIFJHQkExNlVJID0gMHg4
RDc2LAotICAgICAgICBSR0IxNlVJID0gMHg4RDc3LAotICAgICAgICBSR0JBOFVJID0gMHg4RDdD
LAotICAgICAgICBSR0I4VUkgPSAweDhEN0QsCi0gICAgICAgIFJHQkEzMkkgPSAweDhEODIsCi0g
ICAgICAgIFJHQjMySSA9IDB4OEQ4MywKLSAgICAgICAgUkdCQTE2SSA9IDB4OEQ4OCwKLSAgICAg
ICAgUkdCMTZJID0gMHg4RDg5LAotICAgICAgICBSR0JBOEkgPSAweDhEOEUsCi0gICAgICAgIFJH
QjhJID0gMHg4RDhGLAotICAgICAgICBSRURfSU5URUdFUiA9IDB4OEQ5NCwKLSAgICAgICAgUkdC
X0lOVEVHRVIgPSAweDhEOTgsCi0gICAgICAgIFJHQkFfSU5URUdFUiA9IDB4OEQ5OSwKLSAgICAg
ICAgU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDMSwKLSAgICAgICAgU0FNUExFUl8yRF9BUlJBWV9T
SEFET1cgPSAweDhEQzQsCi0gICAgICAgIFNBTVBMRVJfQ1VCRV9TSEFET1cgPSAweDhEQzUsCi0g
ICAgICAgIFVOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAotICAgICAgICBVTlNJR05FRF9JTlRf
VkVDMyA9IDB4OERDNywKLSAgICAgICAgVU5TSUdORURfSU5UX1ZFQzQgPSAweDhEQzgsCi0gICAg
ICAgIElOVF9TQU1QTEVSXzJEID0gMHg4RENBLAotICAgICAgICBJTlRfU0FNUExFUl8zRCA9IDB4
OERDQiwKLSAgICAgICAgSU5UX1NBTVBMRVJfQ1VCRSA9IDB4OERDQywKLSAgICAgICAgSU5UX1NB
TVBMRVJfMkRfQVJSQVkgPSAweDhEQ0YsCi0gICAgICAgIFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
ID0gMHg4REQyLAotICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExFUl8zRCA9IDB4OEREMywKLSAg
ICAgICAgVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSA9IDB4OERENCwKLSAgICAgICAgVU5TSUdO
RURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCi0gICAgICAgIERFUFRIX0NPTVBPTkVO
VDMyRiA9IDB4OENBQywKLSAgICAgICAgREVQVEgzMkZfU1RFTkNJTDggPSAweDhDQUQsCi0gICAg
ICAgIEZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViA9IDB4OERBRCwKLSAgICAgICAgRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyA9IDB4ODIxMCwKLSAgICAgICAgRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9DT01QT05FTlRfVFlQRSA9IDB4ODIxMSwKLSAgICAgICAgRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9SRURfU0laRSA9IDB4ODIxMiwKLSAgICAgICAgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFID0gMHg4MjEzLAotICAgICAgICBGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0JMVUVfU0laRSA9IDB4ODIxNCwKLSAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9BTFBIQV9TSVpFID0gMHg4MjE1LAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0RFUFRIX1NJWkUgPSAweDgyMTYsCi0gICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RF
TkNJTF9TSVpFID0gMHg4MjE3LAotICAgICAgICBGUkFNRUJVRkZFUl9ERUZBVUxUID0gMHg4MjE4
LAotICAgICAgICBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSAweDgyMUEsCi0gICAgICAgIERF
UFRIX1NURU5DSUwgPSAweDg0RjksCi0gICAgICAgIFVOU0lHTkVEX0lOVF8yNF84ID0gMHg4NEZB
LAotICAgICAgICBERVBUSDI0X1NURU5DSUw4ID0gMHg4OEYwLAotICAgICAgICBVTlNJR05FRF9O
T1JNQUxJWkVEID0gMHg4QzE3LAotICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAw
eDhDQTYsIC8qIFNhbWUgYXMgRlJBTUVCVUZGRVJfQklORElORyAqLwotICAgICAgICBSRUFEX0ZS
QU1FQlVGRkVSID0gMHg4Q0E4LAotICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAot
ICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQUEsCi0gICAgICAgIFJFTkRF
UkJVRkZFUl9TQU1QTEVTID0gMHg4Q0FCLAotICAgICAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X1RFWFRVUkVfTEFZRVIgPSAweDhDRDQsCi0gICAgICAgIE1BWF9DT0xPUl9BVFRBQ0hNRU5UUyA9
IDB4OENERiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEgPSAweDhDRTEsCi0gICAgICAgIENP
TE9SX0FUVEFDSE1FTlQyID0gMHg4Q0UyLAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UMyA9IDB4
OENFMywKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDQgPSAweDhDRTQsCi0gICAgICAgIENPTE9S
X0FUVEFDSE1FTlQ1ID0gMHg4Q0U1LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UNiA9IDB4OENF
NiwKLSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDcgPSAweDhDRTcsCi0gICAgICAgIENPTE9SX0FU
VEFDSE1FTlQ4ID0gMHg4Q0U4LAotICAgICAgICBDT0xPUl9BVFRBQ0hNRU5UOSA9IDB4OENFOSwK
LSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEwID0gMHg4Q0VBLAotICAgICAgICBDT0xPUl9BVFRB
Q0hNRU5UMTEgPSAweDhDRUIsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQxMiA9IDB4OENFQywK
LSAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEzID0gMHg4Q0VELAotICAgICAgICBDT0xPUl9BVFRB
Q0hNRU5UMTQgPSAweDhDRUUsCi0gICAgICAgIENPTE9SX0FUVEFDSE1FTlQxNSA9IDB4OENFRiwK
LSAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSA9IDB4OEQ1NiwKLSAg
ICAgICAgTUFYX1NBTVBMRVMgPSAweDhENTcsCi0gICAgICAgIEhBTEZfRkxPQVQgPSAweDE0MEIs
Ci0gICAgICAgIFJHID0gMHg4MjI3LAotICAgICAgICBSR19JTlRFR0VSID0gMHg4MjI4LAotICAg
ICAgICBSOCA9IDB4ODIyOSwKLSAgICAgICAgUkc4ID0gMHg4MjJCLAotICAgICAgICBSMTZGID0g
MHg4MjJELAotICAgICAgICBSMzJGID0gMHg4MjJFLAotICAgICAgICBSRzE2RiA9IDB4ODIyRiwK
LSAgICAgICAgUkczMkYgPSAweDgyMzAsCi0gICAgICAgIFI4SSA9IDB4ODIzMSwKLSAgICAgICAg
UjhVSSA9IDB4ODIzMiwKLSAgICAgICAgUjE2SSA9IDB4ODIzMywKLSAgICAgICAgUjE2VUkgPSAw
eDgyMzQsCi0gICAgICAgIFIzMkkgPSAweDgyMzUsCi0gICAgICAgIFIzMlVJID0gMHg4MjM2LAot
ICAgICAgICBSRzhJID0gMHg4MjM3LAotICAgICAgICBSRzhVSSA9IDB4ODIzOCwKLSAgICAgICAg
UkcxNkkgPSAweDgyMzksCi0gICAgICAgIFJHMTZVSSA9IDB4ODIzQSwKLSAgICAgICAgUkczMkkg
PSAweDgyM0IsCi0gICAgICAgIFJHMzJVSSA9IDB4ODIzQywKLSAgICAgICAgVkVSVEVYX0FSUkFZ
X0JJTkRJTkcgPSAweDg1QjUsCi0gICAgICAgIFI4X1NOT1JNID0gMHg4Rjk0LAotICAgICAgICBS
RzhfU05PUk0gPSAweDhGOTUsCi0gICAgICAgIFJHQjhfU05PUk0gPSAweDhGOTYsCi0gICAgICAg
IFJHQkE4X1NOT1JNID0gMHg4Rjk3LAotICAgICAgICBTSUdORURfTk9STUFMSVpFRCA9IDB4OEY5
QywKLSAgICAgICAgQ09QWV9SRUFEX0JVRkZFUiA9IDB4OEYzNiwKLSAgICAgICAgQ09QWV9XUklU
RV9CVUZGRVIgPSAweDhGMzcsCi0gICAgICAgIENPUFlfUkVBRF9CVUZGRVJfQklORElORyA9IDB4
OEYzNiwgLyogU2FtZSBhcyBDT1BZX1JFQURfQlVGRkVSICovCi0gICAgICAgIENPUFlfV1JJVEVf
QlVGRkVSX0JJTkRJTkcgPSAweDhGMzcsIC8qIFNhbWUgYXMgQ09QWV9XUklURV9CVUZGRVIgKi8K
LSAgICAgICAgVU5JRk9STV9CVUZGRVIgPSAweDhBMTEsCi0gICAgICAgIFVOSUZPUk1fQlVGRkVS
X0JJTkRJTkcgPSAweDhBMjgsCi0gICAgICAgIFVOSUZPUk1fQlVGRkVSX1NUQVJUID0gMHg4QTI5
LAotICAgICAgICBVTklGT1JNX0JVRkZFUl9TSVpFID0gMHg4QTJBLAotICAgICAgICBNQVhfVkVS
VEVYX1VOSUZPUk1fQkxPQ0tTID0gMHg4QTJCLAotICAgICAgICBNQVhfRlJBR01FTlRfVU5JRk9S
TV9CTE9DS1MgPSAweDhBMkQsCi0gICAgICAgIE1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUyA9
IDB4OEEyRSwKLSAgICAgICAgTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTID0gMHg4QTJGLAot
ICAgICAgICBNQVhfVU5JRk9STV9CTE9DS19TSVpFID0gMHg4QTMwLAotICAgICAgICBNQVhfQ09N
QklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4OEEzMSwKLSAgICAgICAgTUFYX0NP
TUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4OEEzMywKLSAgICAgICAgVU5J
Rk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVCA9IDB4OEEzNCwKLSAgICAgICAgQUNUSVZFX1VO
SUZPUk1fQkxPQ0tTID0gMHg4QTM2LAotICAgICAgICBVTklGT1JNX1RZUEUgPSAweDhBMzcsCi0g
ICAgICAgIFVOSUZPUk1fU0laRSA9IDB4OEEzOCwKLSAgICAgICAgVU5JRk9STV9CTE9DS19JTkRF
WCA9IDB4OEEzQSwKLSAgICAgICAgVU5JRk9STV9PRkZTRVQgPSAweDhBM0IsCi0gICAgICAgIFVO
SUZPUk1fQVJSQVlfU1RSSURFID0gMHg4QTNDLAotICAgICAgICBVTklGT1JNX01BVFJJWF9TVFJJ
REUgPSAweDhBM0QsCi0gICAgICAgIFVOSUZPUk1fSVNfUk9XX01BSk9SID0gMHg4QTNFLAotICAg
ICAgICBVTklGT1JNX0JMT0NLX0JJTkRJTkcgPSAweDhBM0YsCi0gICAgICAgIFVOSUZPUk1fQkxP
Q0tfREFUQV9TSVpFID0gMHg4QTQwLAotICAgICAgICBVTklGT1JNX0JMT0NLX0FDVElWRV9VTklG
T1JNUyA9IDB4OEE0MiwKLSAgICAgICAgVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJ
Q0VTID0gMHg4QTQzLAotICAgICAgICBVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVY
X1NIQURFUiA9IDB4OEE0NCwKLSAgICAgICAgVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZS
QUdNRU5UX1NIQURFUiA9IDB4OEE0NiwKLSAgICAgICAgSU5WQUxJRF9JTkRFWCA9IDB4RkZGRkZG
RkYsCi0gICAgICAgIE1BWF9WRVJURVhfT1VUUFVUX0NPTVBPTkVOVFMgPSAweDkxMjIsCi0gICAg
ICAgIE1BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTID0gMHg5MTI1LAotICAgICAgICBNQVhf
U0VSVkVSX1dBSVRfVElNRU9VVCA9IDB4OTExMSwKLSAgICAgICAgT0JKRUNUX1RZUEUgPSAweDkx
MTIsCi0gICAgICAgIFNZTkNfQ09ORElUSU9OID0gMHg5MTEzLAotICAgICAgICBTWU5DX1NUQVRV
UyA9IDB4OTExNCwKLSAgICAgICAgU1lOQ19GTEFHUyA9IDB4OTExNSwKLSAgICAgICAgU1lOQ19G
RU5DRSA9IDB4OTExNiwKLSAgICAgICAgU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUgPSAweDkx
MTcsCi0gICAgICAgIFVOU0lHTkFMRUQgPSAweDkxMTgsCi0gICAgICAgIFNJR05BTEVEID0gMHg5
MTE5LAotICAgICAgICBBTFJFQURZX1NJR05BTEVEID0gMHg5MTFBLAotICAgICAgICBUSU1FT1VU
X0VYUElSRUQgPSAweDkxMUIsCi0gICAgICAgIENPTkRJVElPTl9TQVRJU0ZJRUQgPSAweDkxMUMs
Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBXQUlUX0ZBSUxFRF9XSU4gPSAweDkxMUQsCi0j
ZWxzZQotICAgICAgICBXQUlUX0ZBSUxFRCA9IDB4OTExRCwKLSNlbmRpZgotICAgICAgICBTWU5D
X0ZMVVNIX0NPTU1BTkRTX0JJVCA9IDB4MDAwMDAwMDEsCi0gICAgICAgIFZFUlRFWF9BVFRSSUJf
QVJSQVlfRElWSVNPUiA9IDB4ODhGRSwKLSAgICAgICAgQU5ZX1NBTVBMRVNfUEFTU0VEID0gMHg4
QzJGLAotICAgICAgICBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFID0gMHg4RDZBLAot
ICAgICAgICBTQU1QTEVSX0JJTkRJTkcgPSAweDg5MTksCi0gICAgICAgIFJHQjEwX0EyVUkgPSAw
eDkwNkYsCi0gICAgICAgIFRFWFRVUkVfU1dJWlpMRV9SID0gMHg4RTQyLAotICAgICAgICBURVhU
VVJFX1NXSVpaTEVfRyA9IDB4OEU0MywKLSAgICAgICAgVEVYVFVSRV9TV0laWkxFX0IgPSAweDhF
NDQsCi0gICAgICAgIFRFWFRVUkVfU1dJWlpMRV9BID0gMHg4RTQ1LAotICAgICAgICBHUkVFTiA9
IDB4MTkwNCwKLSAgICAgICAgQkxVRSA9IDB4MTkwNSwKLSAgICAgICAgSU5UXzJfMTBfMTBfMTBf
UkVWID0gMHg4RDlGLAotICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0sgPSAweDhFMjIsCi0gICAg
ICAgIFRSQU5TRk9STV9GRUVEQkFDS19QQVVTRUQgPSAweDhFMjMsCi0gICAgICAgIFRSQU5TRk9S
TV9GRUVEQkFDS19BQ1RJVkUgPSAweDhFMjQsCi0gICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19C
SU5ESU5HID0gMHg4RTI1LAotICAgICAgICBDT01QUkVTU0VEX1IxMV9FQUMgPSAweDkyNzAsCi0g
ICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgPSAweDkyNzEsCi0gICAgICAgIENPTVBS
RVNTRURfUkcxMV9FQUMgPSAweDkyNzIsCi0gICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1JHMTFf
RUFDID0gMHg5MjczLAotICAgICAgICBDT01QUkVTU0VEX1JHQjhfRVRDMiA9IDB4OTI3NCwKLSAg
ICAgICAgQ09NUFJFU1NFRF9TUkdCOF9FVEMyID0gMHg5Mjc1LAotICAgICAgICBDT01QUkVTU0VE
X1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc2LAotICAgICAgICBDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3NywKLSAgICAgICAgQ09N
UFJFU1NFRF9SR0JBOF9FVEMyX0VBQyA9IDB4OTI3OCwKLSAgICAgICAgQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfRVRDMl9FQUMgPSAweDkyNzksCi0gICAgICAgIFRFWFRVUkVfSU1NVVRBQkxFX0ZP
Uk1BVCA9IDB4OTEyRiwKLSAgICAgICAgTUFYX0VMRU1FTlRfSU5ERVggPSAweDhENkIsCi0gICAg
ICAgIE5VTV9TQU1QTEVfQ09VTlRTID0gMHg5MzgwLAotICAgICAgICBURVhUVVJFX0lNTVVUQUJM
RV9MRVZFTFMgPSAweDgyREYsCi0gICAgICAgIFBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVY
ID0gMHg4RDY5LAotICAgICAgICBQUklNSVRJVkVfUkVTVEFSVCA9IDB4OEY5RCwKLQotICAgICAg
ICAvLyBPcGVuR0wgRVMgMyBjb25zdGFudHMuCi0gICAgICAgIE1BUF9SRUFEX0JJVCA9IDB4MDAw
MSwKLQotICAgICAgICAvLyBOZWNlc3NhcnkgZGVza3RvcCBPcGVuR0wgY29uc3RhbnRzLgotICAg
ICAgICBURVhUVVJFX1JFQ1RBTkdMRV9BUkIgPSAweDg0RjUKLSAgICB9OwotCi0gICAgZW51bSBj
bGFzcyBEYXRhRm9ybWF0IDogdWludDhfdCB7Ci0gICAgICAgIFJHQkE4ID0gMCwKLSAgICAgICAg
UkdCQTE2TGl0dGxlLAotICAgICAgICBSR0JBMTZCaWcsCi0gICAgICAgIFJHQkExNkYsCi0gICAg
ICAgIFJHQkEzMkYsCi0gICAgICAgIFJHQjgsCi0gICAgICAgIFJHQjE2TGl0dGxlLAotICAgICAg
ICBSR0IxNkJpZywKLSAgICAgICAgUkdCMTZGLAotICAgICAgICBSR0IzMkYsCi0gICAgICAgIEJH
UjgsCi0gICAgICAgIEJHUkE4LAotICAgICAgICBCR1JBMTZMaXR0bGUsCi0gICAgICAgIEJHUkEx
NkJpZywKLSAgICAgICAgQVJHQjgsCi0gICAgICAgIEFSR0IxNkxpdHRsZSwKLSAgICAgICAgQVJH
QjE2QmlnLAotICAgICAgICBBQkdSOCwKLSAgICAgICAgUkdCQTU1NTEsCi0gICAgICAgIFJHQkE0
NDQ0LAotICAgICAgICBSR0I1NjUsCi0gICAgICAgIFI4LAotICAgICAgICBSMTZMaXR0bGUsCi0g
ICAgICAgIFIxNkJpZywKLSAgICAgICAgUjE2RiwKLSAgICAgICAgUjMyRiwKLSAgICAgICAgUkE4
LAotICAgICAgICBSQTE2TGl0dGxlLAotICAgICAgICBSQTE2QmlnLAotICAgICAgICBSQTE2RiwK
LSAgICAgICAgUkEzMkYsCi0gICAgICAgIEFSOCwKLSAgICAgICAgQVIxNkxpdHRsZSwKLSAgICAg
ICAgQVIxNkJpZywKLSAgICAgICAgQTgsCi0gICAgICAgIEExNkxpdHRsZSwKLSAgICAgICAgQTE2
QmlnLAotICAgICAgICBBMTZGLAotICAgICAgICBBMzJGLAotICAgICAgICBOdW1Gb3JtYXRzCi0g
ICAgfTsKLQotICAgIGVudW0gY2xhc3MgRGVzdGluYXRpb24gOiB1aW50OF90IHsKLSAgICAgICAg
T2Zmc2NyZWVuLAotICAgICAgICBEaXJlY3RseVRvSG9zdFdpbmRvdywKLSAgICB9OwotCi0gICAg
ZW51bSBjbGFzcyBDaGFubmVsQml0cyA6IHVpbnQ4X3QgewotICAgICAgICBSZWQgPSAxLAotICAg
ICAgICBHcmVlbiA9IDIsCi0gICAgICAgIEJsdWUgPSA0LAotICAgICAgICBBbHBoYSA9IDgsCi0g
ICAgICAgIERlcHRoID0gMTYsCi0gICAgICAgIFN0ZW5jaWwgPSAzMiwKLSAgICAgICAgUkdCID0g
UmVkIHwgR3JlZW4gfCBCbHVlLAotICAgICAgICBSR0JBID0gUkdCIHwgQWxwaGEsCi0gICAgICAg
IERlcHRoU3RlbmNpbCA9IERlcHRoIHwgU3RlbmNpbCwKLSAgICB9OwotCi0gICAgLy8gUG9zc2li
bGUgYWxwaGEgb3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZwotICAgIC8v
IHBpeGVsIHBhY2tpbmcuIEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11
c3QKLSAgICAvLyBiZSByZW1vdmVkLgotICAgIGVudW0gQWxwaGFPcCA6IHVpbnQ4X3QgewotICAg
ICAgICBEb05vdGhpbmcsCi0gICAgICAgIERvUHJlbXVsdGlwbHksCi0gICAgICAgIERvVW5tdWx0
aXBseSwKLSAgICB9OwotCi0gICAgZW51bSBjbGFzcyBET01Tb3VyY2UgOiB1aW50OF90IHsKLSAg
ICAgICAgSW1hZ2UsCi0gICAgICAgIENhbnZhcywKLSAgICAgICAgVmlkZW8sCi0gICAgICAgIE5v
bmUsCi0gICAgfTsKLQotI2lmIFVTRShBTkdMRSkKLSAgICBlbnVtIHsKLSAgICAgICAgLy8gVGhl
c2UgY29uc3RhbnRzIGFyZSByZWRlZmluZWQgaGVyZSBmcm9tIEFOR0xFJ3MgT3BlbkdMIEVTIGhl
YWRlcnMgdG8KLSAgICAgICAgLy8gcHJvdmlkZSBhIHNpbmdsZSBwbGFjZSB3aGVyZSBtdWx0aXBs
ZSBwb3J0aW9ucyBvZiBwbGF0Zm9ybSBjb2RlIGNhbgotICAgICAgICAvLyByZWZlcmVuY2UgdGhl
bS4KLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIElPU3VyZmFjZVRleHR1cmVUYXJnZXQgPSBU
RVhUVVJFX1JFQ1RBTkdMRV9BUkIsIC8vIGFsc28gR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUK
LSAgICAgICAgRUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9IDB4MzQ1QiwgLy8gRUdMX1RFWFRV
UkVfUkVDVEFOR0xFX0FOR0xFCi0jZWxzZQotICAgICAgICBJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0
ID0gVEVYVFVSRV8yRCwKLSAgICAgICAgRUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9IDB4MzA1
RiwgLy8gRUdMX1RFWFRVUkVfMkQKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0gICAgfTsKLSNl
bmRpZiAvLyBVU0UoQU5HTEUpCi0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBs
YXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKLQotICAgIEFMV0FZU19J
TkxJTkUgc3RhdGljIGJvb2wgaGFzQWxwaGEoRGF0YUZvcm1hdCBmb3JtYXQpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkE4OgotICAg
ICAgICBjYXNlIERhdGFGb3JtYXQ6OkExNkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6QTMy
RjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTg6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1h
dDo6QVI4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMTZGOgotICAgICAgICBjYXNlIERh
dGFGb3JtYXQ6OlJBMzJGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE4OgotICAgICAg
ICBjYXNlIERhdGFGb3JtYXQ6OkJHUkE4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSR0I4
OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFCR1I4OgotICAgICAgICBjYXNlIERhdGFGb3Jt
YXQ6OlJHQkExNkY6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTMyRjoKLSAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0OjpSR0JBNDQ0NDoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JB
NTU1MToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgYm9vbCBoYXNDb2xvcihEYXRhRm9ybWF0IGZvcm1hdCkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTg6Ci0gICAg
ICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTE2RjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpS
R0JBMzJGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjg6Ci0gICAgICAgIGNhc2UgRGF0
YUZvcm1hdDo6UkdCMTZGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjMyRjoKLSAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0OjpCR1I4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkJHUkE4
OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSR0I4OgotICAgICAgICBjYXNlIERhdGFGb3Jt
YXQ6OkFCR1I4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE1NTUxOgotICAgICAgICBj
YXNlIERhdGFGb3JtYXQ6OlJHQkE0NDQ0OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjU2
NToKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSODoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0
OjpSMTZGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlIzMkY6Ci0gICAgICAgIGNhc2UgRGF0
YUZvcm1hdDo6UkE4OgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMTZGOgotICAgICAgICBj
YXNlIERhdGFGb3JtYXQ6OlJBMzJGOgotICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSODoKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm1h
dCBpcyBvbmUgb2YgdGhlIGZvcm1hdHMgZnJvbSB0aGUgSW1hZ2VEYXRhIG9yIERPTSBlbGVtZW50
cy4KLSAgICAvLyBUaGUgZm9ybWF0cyBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgUkdCQTguCi0g
ICAgLy8gVGhlIGZvcm1hdHMgZnJvbSBET00gZWxlbWVudHMgdmFyeSB3aXRoIEdyYXBoaWNzIHBv
cnRzLiBJdCBjYW4gb25seSBiZSBSR0JBOCBvciBCR1JBOCBmb3Igbm9uLUNHIHBvcnQgd2hpbGUg
YSBsaXR0bGUgbW9yZSBmb3IgQ0cgcG9ydC4KLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IHNyY0Zvcm1hdENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YShEYXRhRm9ybWF0IFNyY0Zv
cm1hdCkKLSAgICB7Ci0jaWYgVVNFKENHKQotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVy
biBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3Jt
YXQ6OkFSR0I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0I4Ci0gICAgICAgIHx8IFNy
Y0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFS
OCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UjggfHwgU3JjRm9ybWF0ID09IERhdGFGb3Jt
YXQ6OkE4OwotI2Vsc2UKLSAgICAvLyBUaGF0IExJVFRMRV9FTkRJQU4gY2FzZSBoYXMgbW9yZSBw
b3NzaWJsZSBmb3JtYXRzIHRoYW4gQklHX0VORElBTiBjYXNlIGlzIGJlY2F1c2Ugc29tZSBkZWNv
ZGVkIGltYWdlIGRhdGEgaXMgYWN0dWFsbHkgYmlnIGVuZGlhbgotICAgIC8vIGV2ZW4gb24gbGl0
dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmVzLgotICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZv
cm1hdDo6QkdSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFCR1I4IHx8IFNyY0Zvcm1h
dCA9PSBEYXRhRm9ybWF0OjpCR1I4Ci0gICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0
OjpSR0JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QVJHQjggfHwgU3JjRm9ybWF0ID09
IERhdGFGb3JtYXQ6OlJHQjgKLSAgICAgICAgfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlI4
IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBOAotICAgICAgICB8fCBTcmNGb3JtYXQgPT0g
RGF0YUZvcm1hdDo6UkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBUjg7Ci0jZW5kaWYK
LSNlbHNlCi0gICAgcmV0dXJuIFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpCR1JBOCB8fCBTcmNG
b3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCQTg7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBzdHJ1Y3Qg
QWN0aXZlSW5mbyB7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAgICBHQzNEZW51bSB0eXBl
OwotICAgICAgICBHQzNEaW50IHNpemU7Ci0gICAgfTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNE
QmFzZShHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMsIERlc3RpbmF0aW9uID0gRGVzdGluYXRp
b246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0M0RCYXNlKiBzaGFyZWRDb250ZXh0ID0gbnVs
bHB0cik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0RCYXNlKCkgPSBkZWZhdWx0Owot
Ci0gICAgLy8gPT09PT09PT09PSBXZWJHTCAxIGVudHJ5IHBvaW50cy4KLQotICAgIHZpcnR1YWwg
dm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QsIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVyYnVm
ZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBn
cmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFs
cGhhKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBH
QzNEZW51bSBkZmFjdG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0Mz
RGVudW0gZHN0QWxwaGEpID0gMDsKLQotICAgIHZpcnR1YWwgR0MzRGVudW0gY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIo
R0MzRGJpdGZpZWxkIG1hc2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihHQzNE
Y2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBm
IGFscGhhKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0
aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCBzKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdy
ZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9i
amVjdCBjcmVhdGVGcmFtZWJ1ZmZlcigpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmpl
Y3QgY3JlYXRlUHJvZ3JhbSgpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3Jl
YXRlUmVuZGVyYnVmZmVyKCkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVh
dGVTaGFkZXIoR0MzRGVudW0pID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3Jl
YXRlVGV4dHVyZSgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBt
b2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9i
amVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBs
YXRmb3JtM0RPYmplY3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShHQzNEZW51bSBj
YXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEdD
M0RlbnVtIGNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQzNEdWludCBpbmRleCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCBs
ZXZlbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkgPSAw
OwotCi0gICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5k
ZXgsIEFjdGl2ZUluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVp
KiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykgPSAwOwotCi0gICAgdmlydHVhbCBH
QzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7Ci0KLSAgICAv
LyBnZXRQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFt
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEludGVnZXI2
NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgR0MzRGVu
dW0gZ2V0RXJyb3IoKSA9IDA7Ci0KLSAgICAvLyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpID0gMDsKLQotICAgIC8vIGdldFByb2dyYW1QYXJhbWV0ZXIKLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0K
LSAgICAvLyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpID0gMDsKLQotICAgIC8vIGdldFNoYWRlclBhcmFtZXRlcgotICAgIHZpcnR1
YWwgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGdldFNoYWRlckluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgR0Mz
RGludCogcmFuZ2UsIEdDM0RpbnQqIHByZWNpc2lvbikgPSAwOwotCi0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLQotICAgIC8vIGdldFRl
eFBhcmFtZXRlcgotICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKSA9IDA7Ci0KLSAgICAvLyBnZXRVbmlmb3JtCi0gICAgdmlydHVhbCB2
b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFs
dWUpID0gMDsKLQotICAgIHZpcnR1YWwgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZv
cm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7Ci0KLSAgICAvLyBnZXRWZXJ0ZXhB
dHRyaWIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpID0gMDsKLQotICAgIHZpcnR1YWwgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0dHJp
Yk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkgPSAwOwotICAgIHZp
cnR1YWwgR0MzRGJvb2xlYW4gaXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZp
cnR1YWwgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCkgPSAwOwotICAgIHZpcnR1
YWwgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAg
dmlydHVhbCBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAg
IHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAw
OwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAw
OwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVu
aXRzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNs
YW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNj
aXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIHN0cmluZykgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVu
dW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGVu
Y2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNE
ZW51bSB6cGFzcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0
ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFy
YW0pID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBH
QzNEaW50KiB2KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5p
Zm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBHQzNEaW50IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgdW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RpbnQgeikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTRm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVu
aWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZh
bHVlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCB4KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNE
dWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgs
IGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0
dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9h
dCB6KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRl
eCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4
QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEdDM0RmbG9hdCB3KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjRm
dihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNp
emUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJp
ZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlld3BvcnQo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYnVm
ZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhLCBHQzNEZW51bSB1c2FnZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBj
b25zdCB2b2lkKiBkYXRhKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJy
YXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRHNpemVpIHByaW1jb3VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVu
dHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZp
c29yKSA9IDA7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgY29udGV4dEF0dHJp
YnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJzOyB9Ci0gICAgdm9pZCBzZXRDb250ZXh0QXR0
cmlidXRlcyhjb25zdCBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMmIGF0dHJzKSB7IG1fYXR0
cnMgPSBhdHRyczsgfQotCi0gICAgLy8gVmVydGV4QXJyYXlPamVjdCBjYWxscwotICAgIHZpcnR1
YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheSgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwotICAgIHZpcnR1
YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Ci0KLSNp
ZiBVU0UoT1BFTkdMKSAmJiBFTkFCTEUoV0VCR0wyKQotICAgIHZpcnR1YWwgdm9pZCBwcmltaXRp
dmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQpID0gMDsKLSNlbmRpZgotCi0gICAgLy8gU3VwcG9ydCBm
b3IgZXh0ZW5zaW9ucy4gUmV0dXJucyBhIG5vbi1udWxsIG9iamVjdCwgdGhvdWdoIG5vdAotICAg
IC8vIGFsbCBtZXRob2RzIGl0IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0ZWQg
b24gdGhlCi0gICAgLy8gY3VycmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnMzRDo6
c3VwcG9ydHMoKSB0bwotICAgIC8vIGRldGVybWluZSB0aGlzLgotICAgIHZpcnR1YWwgRXh0ZW5z
aW9uczNEJiBnZXRFeHRlbnNpb25zKCkgPSAwOwotCi0gICAgLy8gPT09PT09PT09PSBXZWJHTCAy
IGVudHJ5IHBvaW50cy4KLQotICAgIHZpcnR1YWwgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJp
dGZpZWxkIGFjY2VzcykgPSAwOwotICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gdW5tYXBCdWZmZXIo
R0MzRGVudW0gdGFyZ2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlCdWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJl
YWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0cikgPSAwOwotCi0g
ICAgLy8gZ2V0SW50ZXJuYWxGb3JtYXRQYXJhbWV0ZXIKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50
ZXJuYWxmb3JtYXRpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRHNpemVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB0ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkg
bGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRB
Y3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxHQzNE
dWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+JiBw
YXJhbXMpID0gMDsKLQotICAgIC8vID09PT09PT09PT0gTm9uLVdlYkdMIGJhc2VkIGVudHJ5IHBv
aW50cy4KLQotICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRUeXBl
KEdDM0RlbnVtKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlGb3JtYXQoR0Mz
RGVudW0pOwotCi0gICAgc3RhdGljIHVpbnQ4X3QgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChHQzNE
ZW51bSk7Ci0KLSAgICBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVzdGluYXRpb247IH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0
ZXMgbV9hdHRyczsKLSAgICBEZXN0aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTg2MWRmYmVjMTI5ZjI5NDgwYWI4Nzk3OGIxOGFi
MTU0ODYyMzljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNETWFuYWdl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLSNpZiBIQVZFKEFQUExFX0dSQVBISUNT
X0NPTlRST0wpCi0jaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQotI2luY2x1ZGUgIlN3aXRjaGlu
Z0dQVUNsaWVudC5oIgotI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCi0KLWVu
dW0gewotICAgIGtBR0NPcGVuLAotICAgIGtBR0NDbG9zZQotfTsKLQotc3RhdGljIGlvX2Nvbm5l
Y3RfdCBhdHRhY2hUb0FwcGxlR3JhcGhpY3NDb250cm9sKCkKLXsKLSAgICBtYWNoX3BvcnRfdCBt
YXN0ZXJQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgCi0gICAgaWYgKElPTWFzdGVyUG9ydChN
QUNIX1BPUlRfTlVMTCwgJm1hc3RlclBvcnQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgcmV0
dXJuIE1BQ0hfUE9SVF9OVUxMOwotICAgIAotICAgIENGRGljdGlvbmFyeVJlZiBjbGFzc1RvTWF0
Y2ggPSBJT1NlcnZpY2VNYXRjaGluZygiQXBwbGVHcmFwaGljc0NvbnRyb2wiKTsKLSAgICBpZiAo
IWNsYXNzVG9NYXRjaCkKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOwotICAgIAotICAg
IGtlcm5fcmV0dXJuX3Qga2VyblJlc3VsdDsKLSAgICBpb19pdGVyYXRvcl90IGl0ZXJhdG9yOwot
ICAgIGlmICgoa2VyblJlc3VsdCA9IElPU2VydmljZUdldE1hdGNoaW5nU2VydmljZXMobWFzdGVy
UG9ydCwgY2xhc3NUb01hdGNoLCAmaXRlcmF0b3IpKSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAg
IHJldHVybiBNQUNIX1BPUlRfTlVMTDsKLSAgICAKLSAgICBpb19zZXJ2aWNlX3Qgc2VydmljZU9i
amVjdCA9IElPSXRlcmF0b3JOZXh0KGl0ZXJhdG9yKTsKLSAgICBJT09iamVjdFJlbGVhc2UoaXRl
cmF0b3IpOwotICAgIGlmICghc2VydmljZU9iamVjdCkKLSAgICAgICAgcmV0dXJuIE1BQ0hfUE9S
VF9OVUxMOwotICAgIAotICAgIGlvX2Nvbm5lY3RfdCBkYXRhUG9ydDsKLSAgICBJT09iamVjdFJl
dGFpbihzZXJ2aWNlT2JqZWN0KTsKLSAgICBrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlT3BlbihzZXJ2
aWNlT2JqZWN0LCBtYWNoX3Rhc2tfc2VsZigpLCAwLCAmZGF0YVBvcnQpOwotICAgIElPT2JqZWN0
UmVsZWFzZShzZXJ2aWNlT2JqZWN0KTsKLSAgICAKLSAgICByZXR1cm4gKGtlcm5SZXN1bHQgPT0g
S0VSTl9TVUNDRVNTKSA/IGRhdGFQb3J0IDogTUFDSF9QT1JUX05VTEw7Ci19Ci0KLXN0YXRpYyBi
b29sIGhhc011eENhcGFiaWxpdHkoKQotewotICAgIGlvX2Nvbm5lY3RfdCBkYXRhUG9ydCA9IGF0
dGFjaFRvQXBwbGVHcmFwaGljc0NvbnRyb2woKTsKLSAgICAKLSAgICBpZiAoZGF0YVBvcnQgPT0g
TUFDSF9QT1JUX05VTEwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBib29sIHJl
c3VsdDsKLSAgICBpZiAoSU9Db25uZWN0Q2FsbFNjYWxhck1ldGhvZChkYXRhUG9ydCwga0FHQ09w
ZW4sIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIpID09IEtFUk5fU1VDQ0VTUykgewotICAg
ICAgICBJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0aG9kKGRhdGFQb3J0LCBrQUdDQ2xvc2UsIG51bGxw
dHIsIDAsIG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgPSB0cnVlOwotICAgIH0g
ZWxzZQotICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAKLSAgICBJT1NlcnZpY2VDbG9zZShk
YXRhUG9ydCk7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICAvLyBUaGlzIGlzIGRl
dGVjdGluZyBNYWMgaGFyZHdhcmUgd2l0aCBhbiBJbnRlbCBnNTc1IEdQVSwgd2hpY2gKLSAgICAg
ICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBtYWtlIGF2YWlsYWJsZSB0byBtdXhpbmcuCi0gICAgICAg
IC8vIEJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gQXBwbGUncyBPcGVuR0wgdGVhbSwgc3VjaCBk
ZXZpY2VzCi0gICAgICAgIC8vIGhhdmUgZm91ciBvciBmZXdlciBwcm9jZXNzb3JzLgotICAgICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vMzAwNjAzNzg+Ci0gICAgICAgIGludCBuYW1lc1syXSA9IHsg
Q1RMX0hXLCBIV19OQ1BVIH07Ci0gICAgICAgIGludCBjcHVDb3VudDsKLSAgICAgICAgc2l6ZV90
IGNwdUNvdW50TGVuZ3RoID0gc2l6ZW9mKGNwdUNvdW50KTsKLSAgICAgICAgc3lzY3RsKG5hbWVz
LCAyLCAmY3B1Q291bnQsICZjcHVDb3VudExlbmd0aCwgbnVsbHB0ciwgMCk7Ci0gICAgICAgIHJl
c3VsdCA9IGNwdUNvdW50ID4gNDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotYm9vbCBoYXNMb3dBbmRIaWdoUG93ZXJHUFVzKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBjYW5N
dXggPSBoYXNNdXhDYXBhYmlsaXR5KCk7Ci0gICAgcmV0dXJuIGNhbk11eDsKLX0KLSNlbmRpZiAv
LyBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCi0KLUdyYXBoaWNzQ29udGV4dDNETWFuYWdl
ciYgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8R3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyPiBzX21hbmFnZXI7Ci0g
ICAgcmV0dXJuIHNfbWFuYWdlcjsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKENHRGlyZWN0RGlzcGxh
eUlELCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MgZmxhZ3MsIHZvaWQqKQotewotICAgIExP
RyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6ZGlzcGxheVdhc1JlY29uZmlndXJl
ZCIpOwotICAgIGlmIChmbGFncyAmIGtDR0Rpc3BsYXlTZXRNb2RlRmxhZykKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkudXBkYXRlQWxsQ29udGV4dHMo
KTsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6dXBkYXRlQWxs
Q29udGV4dHMoKQotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShB
TkdMRSkpCi0gICAgZm9yIChjb25zdCBhdXRvJiBjb250ZXh0IDogbV9jb250ZXh0cykgewotICAg
ICAgICBjb250ZXh0LT51cGRhdGVDR0xDb250ZXh0KCk7Ci0gICAgICAgIGNvbnRleHQtPmRpc3Bh
dGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotI2lm
IFBMQVRGT1JNKE1BQykKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzY3JlZW5EaWRD
aGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBjb25zdCBIb3N0V2luZG93KiB3aW5k
b3cpCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjb250ZXh0QW5kV2luZG93IDogbV9jb250ZXh0
V2luZG93TWFwKSB7Ci0gICAgICAgIGlmIChjb250ZXh0QW5kV2luZG93LnZhbHVlID09IHdpbmRv
dykgewotICAgICAgICAgICAgY29udGV4dEFuZFdpbmRvdy5rZXktPnNjcmVlbkRpZENoYW5nZShk
aXNwbGF5SUQpOwotICAgICAgICAgICAgTE9HKFdlYkdMLCAiQ2hhbmdpbmcgY29udGV4dCAoJXAp
IHRvIGRpc3BsYXkgKCVkKS4iLCBjb250ZXh0QW5kV2luZG93LmtleSwgZGlzcGxheUlEKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNETWFuYWdl
cjo6YWRkQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9zdFdpbmRvdyogd2lu
ZG93KQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAg
IHJldHVybjsKLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgIUVOQUJMRShXRUJQUk9DRVNTX1dJTkRP
V1NFUlZFUl9CTE9DS0lORykKLSAgICBpZiAoIW1fY29udGV4dHMuc2l6ZSgpKQotICAgICAgICBD
R0Rpc3BsYXlSZWdpc3RlclJlY29uZmlndXJhdGlvbkNhbGxiYWNrKGRpc3BsYXlXYXNSZWNvbmZp
Z3VyZWQsIG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQoIW1fY29udGV4dHMuY29udGFp
bnMoY29udGV4dCkpOwotICAgIG1fY29udGV4dHMuYXBwZW5kKGNvbnRleHQpOwotICAgIG1fY29u
dGV4dFdpbmRvd01hcC5zZXQoY29udGV4dCwgd2luZG93KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRE1hbmFnZXI6OnJlbW92ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Ci17Ci0gICAgaWYgKCFtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9jb250ZXh0cy5yZW1vdmVGaXJzdChjb250ZXh0KTsKLSAgICBtX2NvbnRleHRX
aW5kb3dNYXAucmVtb3ZlKGNvbnRleHQpOwotICAgIHJlbW92ZUNvbnRleHRSZXF1aXJpbmdIaWdo
UGVyZm9ybWFuY2UoY29udGV4dCk7Ci0gICAgCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhRU5BQkxF
KFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQotICAgIGlmICghbV9jb250ZXh0cy5z
aXplKCkpCi0gICAgICAgIENHRGlzcGxheVJlbW92ZVJlY29uZmlndXJhdGlvbkNhbGxiYWNrKGRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQsIG51bGxwdHIpOwotI2VuZGlmCi19Ci0KLUhvc3RXaW5kb3cq
IEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6aG9zdFdpbmRvd0ZvckNvbnRleHQoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fY29udGV4dFdpbmRvd01h
cC5jb250YWlucyhjb250ZXh0KSk7Ci0gICAgcmV0dXJuIG1fY29udGV4dFdpbmRvd01hcC5nZXQo
Y29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjphZGRDb250ZXh0
UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewot
ICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBBU1NFUlQobV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSk7Ci0gICAgQVNT
RVJUKCFtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLmNvbnRhaW5zKGNvbnRleHQp
KTsKLSAgICAKLSAgICBMT0coV2ViR0wsICJUaGlzIGNvbnRleHQgKCVwKSByZXF1aXJlcyB0aGUg
aGlnaC1wZXJmb3JtYW5jZSBHUFUuIiwgY29udGV4dCk7Ci0gICAgbV9jb250ZXh0c1JlcXVpcmlu
Z0hpZ2hQZXJmb3JtYW5jZS5hZGQoY29udGV4dCk7Ci0gICAgCi0gICAgdXBkYXRlSGlnaFBlcmZv
cm1hbmNlU3RhdGUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnJlbW92
ZUNvbnRleHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCi17Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1f
Y29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29udGFpbnMoY29udGV4dCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBMT0coV2ViR0wsICJUaGlzIGNvbnRleHQgKCVwKSBubyBs
b25nZXIgcmVxdWlyZXMgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIsIGNvbnRleHQpOwotICAg
IG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UucmVtb3ZlKGNvbnRleHQpOwotICAg
IAotICAgIHVwZGF0ZUhpZ2hQZXJmb3JtYW5jZVN0YXRlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RNYW5hZ2VyOjp1cGRhdGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgpCi17Ci0jaWYgUExB
VEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKLSAgICBpZiAoIWhhc0xv
d0FuZEhpZ2hQb3dlckdQVXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChtX2Nv
bnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlLnNpemUoKSkgewotICAgICAgICAKLSAgICAg
ICAgaWYgKG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAg
ICAgICAgICAgIExPRyhXZWJHTCwgIkNhbmNlbCBwZW5kaW5nIHRpbWVyIGZvciB0dXJuaW5nIG9m
ZiBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iKTsKLSAgICAgICAgICAgIG1fZGlzYWJsZUhpZ2hQZXJm
b3JtYW5jZUdQVVRpbWVyLnN0b3AoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9yZXF1
ZXN0aW5nSGlnaFBlcmZvcm1hbmNlKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJSZXF1ZXN0
IHRoZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iKTsKLSAgICAgICAgICAgIG1fcmVxdWVzdGluZ0hp
Z2hQZXJmb3JtYW5jZSA9IHRydWU7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgU3dp
dGNoaW5nR1BVQ2xpZW50OjpzaW5nbGV0b24oKS5yZXF1ZXN0SGlnaFBlcmZvcm1hbmNlR1BVKCk7
Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3QgaW1t
ZWRpYXRlbHkgdHVybiBvZmYgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiBUaGUgdXNlciBtaWdo
dCBiZQotICAgICAgICAvLyBzd2FwcGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRhYnMgb3Ig
d2luZG93cywgYW5kIHdlIGRvbid0IHdhbnQgdG8gY2F1c2UKLSAgICAgICAgLy8gY2h1cm4gaWYg
d2UgY2FuIGF2b2lkIGl0LgotICAgICAgICBpZiAoIW1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQ
VVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIlNldCBhIHRpbWVy
IHRvIHJlbGVhc2UgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOwotICAgICAgICAgICAgLy8g
RklYTUU6IEV4cG9zZSB0aGlzIHZhbHVlIGFzIGEgU2V0dGluZywgd2hpY2ggd291bGQgcmVxdWly
ZSB0aGlzIGNsYXNzCi0gICAgICAgICAgICAvLyB0byByZWZlcmVuY2UgYSBmcmFtZSwgcGFnZSBv
ciBkb2N1bWVudC4KLSAgICAgICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHRpbWVUb0tlZXBI
aWdoUGVyZm9ybWFuY2VHUFVBbGl2ZSB7IDEwX3MgfTsKLSAgICAgICAgICAgIG1fZGlzYWJsZUhp
Z2hQZXJmb3JtYW5jZUdQVVRpbWVyLnN0YXJ0T25lU2hvdCh0aW1lVG9LZWVwSGlnaFBlcmZvcm1h
bmNlR1BVQWxpdmUpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RNYW5hZ2VyOjpkaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXJGaXJlZCgp
Ci17Ci0gICAgaWYgKG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3JlcXVlc3RpbmdIaWdoUGVyZm9ybWFuY2UgPSBmYWxz
ZTsKLSNpZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQotICAg
IFN3aXRjaGluZ0dQVUNsaWVudDo6c2luZ2xldG9uKCkucmVsZWFzZUhpZ2hQZXJmb3JtYW5jZUdQ
VSgpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpyZWN5Y2xl
Q29udGV4dElmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoaGFzVG9vTWFueUNvbnRleHRzKCkpIHsK
LSAgICAgICAgTE9HKFdlYkdMLCAiR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyIHJlY3ljbGVkIGNv
bnRleHQgKCVwKS4iLCBtX2NvbnRleHRzWzBdKTsKLSAgICAgICAgbV9jb250ZXh0c1swXS0+cmVj
eWNsZUNvbnRleHQoKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2ZmE4MjUzZmNmM2MzN2QzYWUxM2VhNzVi
ZDU1NzQ0ZTgxZjNlMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRE1h
bmFnZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0Rpc3BsYXlDb25maWd1cmF0aW9uLmg+Ci0jaW5jbHVkZSA8T3BlbkdM
L0NHTFR5cGVzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCB1bnNp
Z25lZCBNYXhDb250ZXh0cyA9IDE2OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNz
IEhvc3RXaW5kb3c7Ci0KLXVzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7Ci0KLSNp
ZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCi1XRUJDT1JFX0VYUE9SVCBib29sIGhhc0xv
d0FuZEhpZ2hQb3dlckdQVXMoKTsKLSNlbmRpZgotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRE1h
bmFnZXIgewotICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxHcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXI+OwotcHVibGljOgotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXImIHNoYXJl
ZE1hbmFnZXIoKTsKLSAgICAKLSAgICB2b2lkIGFkZENvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Qq
LCBIb3N0V2luZG93Kik7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNE
Kik7Ci0KLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93Rm9yQ29udGV4dChHcmFwaGljc0NvbnRl
eHQzRCopIGNvbnN0OwotICAgIAotICAgIHZvaWQgYWRkQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJm
b3JtYW5jZShHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dFJlcXVp
cmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHQzRCopOwotICAgIAotICAgIHZvaWQg
cmVjeWNsZUNvbnRleHRJZk5lY2Vzc2FyeSgpOwotICAgIGJvb2wgaGFzVG9vTWFueUNvbnRleHRz
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0cy5zaXplKCkgPj0gTWF4Q29udGV4dHM7IH0KLSAg
ICAKLSAgICB2b2lkIHVwZGF0ZUFsbENvbnRleHRzKCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgdm9pZCBzY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQsIGNvbnN0IEhvc3RXaW5k
b3cqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBkaXNwbGF5V2FzUmVjb25maWd1
cmVkKENHRGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MsIHZvaWQq
KTsKLSNlbmRpZgotICAgIAotcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIo
KQotICAgICAgICA6IG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyKCp0aGlzLCAmR3Jh
cGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpkaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXJGaXJl
ZCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCB1cGRhdGVIaWdoUGVyZm9ybWFuY2VTdGF0ZSgp
OwotICAgIHZvaWQgZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyRmlyZWQoKTsKLQotICAg
IFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+IG1fY29udGV4dHM7Ci0gICAgSGFzaE1hcDxHcmFw
aGljc0NvbnRleHQzRCosIEhvc3RXaW5kb3cqPiBtX2NvbnRleHRXaW5kb3dNYXA7Ci0gICAgSGFz
aFNldDxHcmFwaGljc0NvbnRleHQzRCo+IG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFu
Y2U7Ci0gICAgCi0gICAgVGltZXIgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXI7Ci0g
ICAgYm9vbCBtX3JlcXVlc3RpbmdIaWdoUGVyZm9ybWFuY2UgeyBmYWxzZSB9OwotfTsKLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEz
ZTZkMjU4MjE0NWRlOGMxNjA5MGJkMGVjOGMwZmUzNDBmNDJlZGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAq
Ci0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgotI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLQotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2ds
Lmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2luY2x1
ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2Vu
ZGlmCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCosIEdyYXBoaWNzQ29u
dGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKLXsKLSAgICBzd2l0Y2ggKGRlc3RpbmF0
aW9uKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246Ok9mZnNjcmVl
bjoKLSAgICAgICAgbV9nbENvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRl
eHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbjo6RGly
ZWN0bHlUb0hvc3RXaW5kb3c6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSgpID0gZGVmYXVsdDsKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8g
bV9nbENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpIDogZmFsc2U7Ci19Ci0KLVBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwbGF0Zm9ybUNvbnRl
eHQoKQotewotICAgIHJldHVybiBtX2dsQ29udGV4dCA/IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSA6IEdMQ29udGV4dDo6Y3VycmVudCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRF
WFRfM0QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmMzI1NGE4MDU5YjU2MmExNTZhN2M1NmI2YTE4Njg3Y2UzNDdlNzJiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiAgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGVfaAotI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAotCi0jaW5jbHVkZSAi
R0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBCaXRtYXBUZXh0dXJlR0w7Ci0KLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRlc3RpbmF0aW9uKTsKLSAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7
Ci0gICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxHTENvbnRleHQ+IG1fZ2xDb250ZXh0OwotfTsKLQotfQotCi0jZW5kaWYgLy8gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MmNiZWQwNjgxNjFjZDFm
YWE1MjMwMWIyYWFhZjM0ZmJhOTBmMGRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCkBAIC0wLDAgKzEsMTgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1vemlsbGEgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0wu
aCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0dyYXBoaWNzQ29udGV4dEdMOjpHcmFwaGljc0NvbnRleHRH
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMsIERlc3RpbmF0aW9uIGRlc3RpbmF0
aW9uLCBHcmFwaGljc0NvbnRleHRHTCopCisgICAgOiBtX2F0dHJzKGF0dHJzKQorICAgICwgbV9k
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKK3sKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0
R0w6OmdldENsZWFyQml0c0J5QXR0YWNobWVudFR5cGUoR0MzRGVudW0gYXR0YWNobWVudCkKK3sK
KyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpD
T0xPUl9BVFRBQ0hNRU5UMDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVO
VDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UMl9FWFQ6Cisg
ICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQzX0VYVDoKKyAgICBjYXNlIEV4
dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDRfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dM
OjpDT0xPUl9BVFRBQ0hNRU5UNV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FU
VEFDSE1FTlQ2X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDdf
RVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpDT0xPUl9BVFRBQ0hNRU5UOF9FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zR0w6OkNPTE9SX0FUVEFDSE1FTlQ5X0VYVDoKKyAgICBjYXNlIEV4dGVu
c2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDEwX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6
Q09MT1JfQVRUQUNITUVOVDExX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRU
QUNITUVOVDEyX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDEz
X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDE0X0VYVDoKKyAg
ICBjYXNlIEV4dGVuc2lvbnNHTDo6Q09MT1JfQVRUQUNITUVOVDE1X0VYVDoKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpDT0xPUl9CVUZGRVJfQklUOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHRHTDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpT
VEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6U1RF
TkNJTF9CVUZGRVJfQklUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5D
SUxfQVRUQUNITUVOVDoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9C
VUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNz
Q29udGV4dEdMOjpnZXRDbGVhckJpdHNCeUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdM
OjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlI4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlI4X1NOT1JNOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIxNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UjMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSOFVJOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlI4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlIzMlVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlIzMkk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJH
OF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2RjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpSRzMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhV
SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzhJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHMTZVSToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzMyVUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkczMkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCOF9TTk9STToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSMTFGX0cxMUZfQjEwRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0I5X0U1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2RjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjhJOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2VUk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCMTZJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjMyVUk6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJJOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I4X0FMUEhBODoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOF9TTk9STToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0I1X0ExOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjEwX0EyOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkExNkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyRjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBOFVJOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE4SToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMlVJOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkExNlVJOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQkExNkk6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMySToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJVSToKKyAgICBjYXNlIEV4dGVuc2lv
bnNHTDo6U1JHQl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUOgor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UMjQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfQ09NUE9ORU5UMzJGOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRF
UFRIX0NPTVBPTkVOVDoKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9C
VUZGRVJfQklUOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfSU5ERVg4Ogor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEgzMkZfU1RFTkNJTDg6CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6
REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dEdMOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1aW50OF90IEdy
YXBoaWNzQ29udGV4dEdMOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkK
K3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkFM
UEhBOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OkFs
cGhhKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdCKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dEdMOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1aW50OF90PihDaGFubmVsQml0czo6UkdCQSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NToKKyAgICBjYXNl
IEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90PihDaGFubmVsQml0czo6UkdCKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0OgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OlJHQjVfQTE6CisgICAgY2FzZSBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhU
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oQ2hhbm5lbEJpdHM6OlJHQkEp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KENoYW5uZWxCaXRzOjpEZXB0aCk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6U1RFTkNJTF9JTkRFWDg6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50OF90PihDaGFubmVsQml0czo6U3RlbmNpbCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRH
TDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KENo
YW5uZWxCaXRzOjpEZXB0aFN0ZW5jaWwpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM5MzQ4NTQ2OTkzMTkzN2VlZTI0YWRmOGQ3MTg4
MGFjMTFiNzY5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTAsMCArMSwxMDkxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKyNpZiBPUyhXSU5ET1dTKQorLy8gRGVmaW5lZCBpbiB3aW5lcnJvci5o
CisjaWZkZWYgTk9fRVJST1IKKyN1bmRlZiBOT19FUlJPUgorI2VuZGlmCisjZW5kaWYKKwordHlw
ZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMOwordHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheTsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFw
aGljc0NvbnRleHRHTFN1cmZhY2U7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0R0xDb25maWc7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEV4dGVuc2lvbnNHTDsK
K2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsK
KworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0wgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFwaGljc0Nv
bnRleHRHTD4geworcHVibGljOgorICAgIGVudW0geworICAgICAgICAvLyBXZWJHTCAxIGNvbnN0
YW50cy4KKyAgICAgICAgREVQVEhfQlVGRkVSX0JJVCA9IDB4MDAwMDAxMDAsCisgICAgICAgIFNU
RU5DSUxfQlVGRkVSX0JJVCA9IDB4MDAwMDA0MDAsCisgICAgICAgIENPTE9SX0JVRkZFUl9CSVQg
PSAweDAwMDA0MDAwLAorICAgICAgICBQT0lOVFMgPSAweDAwMDAsCisgICAgICAgIExJTkVTID0g
MHgwMDAxLAorICAgICAgICBMSU5FX0xPT1AgPSAweDAwMDIsCisgICAgICAgIExJTkVfU1RSSVAg
PSAweDAwMDMsCisgICAgICAgIFRSSUFOR0xFUyA9IDB4MDAwNCwKKyAgICAgICAgVFJJQU5HTEVf
U1RSSVAgPSAweDAwMDUsCisgICAgICAgIFRSSUFOR0xFX0ZBTiA9IDB4MDAwNiwKKyAgICAgICAg
WkVSTyA9IDAsCisgICAgICAgIE9ORSA9IDEsCisgICAgICAgIFNSQ19DT0xPUiA9IDB4MDMwMCwK
KyAgICAgICAgT05FX01JTlVTX1NSQ19DT0xPUiA9IDB4MDMwMSwKKyAgICAgICAgU1JDX0FMUEhB
ID0gMHgwMzAyLAorICAgICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBID0gMHgwMzAzLAorICAgICAg
ICBEU1RfQUxQSEEgPSAweDAzMDQsCisgICAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgPSAweDAz
MDUsCisgICAgICAgIERTVF9DT0xPUiA9IDB4MDMwNiwKKyAgICAgICAgT05FX01JTlVTX0RTVF9D
T0xPUiA9IDB4MDMwNywKKyAgICAgICAgU1JDX0FMUEhBX1NBVFVSQVRFID0gMHgwMzA4LAorICAg
ICAgICBGVU5DX0FERCA9IDB4ODAwNiwKKyAgICAgICAgQkxFTkRfRVFVQVRJT04gPSAweDgwMDks
CisgICAgICAgIEJMRU5EX0VRVUFUSU9OX1JHQiA9IDB4ODAwOSwKKyAgICAgICAgQkxFTkRfRVFV
QVRJT05fQUxQSEEgPSAweDg4M0QsCisgICAgICAgIEZVTkNfU1VCVFJBQ1QgPSAweDgwMEEsCisg
ICAgICAgIEZVTkNfUkVWRVJTRV9TVUJUUkFDVCA9IDB4ODAwQiwKKyAgICAgICAgQkxFTkRfRFNU
X1JHQiA9IDB4ODBDOCwKKyAgICAgICAgQkxFTkRfU1JDX1JHQiA9IDB4ODBDOSwKKyAgICAgICAg
QkxFTkRfRFNUX0FMUEhBID0gMHg4MENBLAorICAgICAgICBCTEVORF9TUkNfQUxQSEEgPSAweDgw
Q0IsCisgICAgICAgIENPTlNUQU5UX0NPTE9SID0gMHg4MDAxLAorICAgICAgICBPTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1IgPSAweDgwMDIsCisgICAgICAgIENPTlNUQU5UX0FMUEhBID0gMHg4MDAz
LAorICAgICAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgPSAweDgwMDQsCisgICAgICAgIEJM
RU5EX0NPTE9SID0gMHg4MDA1LAorICAgICAgICBBUlJBWV9CVUZGRVIgPSAweDg4OTIsCisgICAg
ICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSID0gMHg4ODkzLAorICAgICAgICBBUlJBWV9CVUZGRVJf
QklORElORyA9IDB4ODg5NCwKKyAgICAgICAgRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyA9
IDB4ODg5NSwKKyAgICAgICAgU1RSRUFNX0RSQVcgPSAweDg4RTAsCisgICAgICAgIFNUQVRJQ19E
UkFXID0gMHg4OEU0LAorICAgICAgICBEWU5BTUlDX0RSQVcgPSAweDg4RTgsCisgICAgICAgIEJV
RkZFUl9TSVpFID0gMHg4NzY0LAorICAgICAgICBCVUZGRVJfVVNBR0UgPSAweDg3NjUsCisgICAg
ICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiA9IDB4ODYyNiwKKyAgICAgICAgRlJPTlQgPSAweDA0
MDQsCisgICAgICAgIEJBQ0sgPSAweDA0MDUsCisgICAgICAgIEZST05UX0FORF9CQUNLID0gMHgw
NDA4LAorICAgICAgICBURVhUVVJFXzJEID0gMHgwREUxLAorICAgICAgICBDVUxMX0ZBQ0UgPSAw
eDBCNDQsCisgICAgICAgIEJMRU5EID0gMHgwQkUyLAorICAgICAgICBESVRIRVIgPSAweDBCRDAs
CisgICAgICAgIFNURU5DSUxfVEVTVCA9IDB4MEI5MCwKKyAgICAgICAgREVQVEhfVEVTVCA9IDB4
MEI3MSwKKyAgICAgICAgU0NJU1NPUl9URVNUID0gMHgwQzExLAorICAgICAgICBQT0xZR09OX09G
RlNFVF9GSUxMID0gMHg4MDM3LAorICAgICAgICBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgPSAw
eDgwOUUsCisgICAgICAgIFNBTVBMRV9DT1ZFUkFHRSA9IDB4ODBBMCwKKyAgICAgICAgTk9fRVJS
T1IgPSAwLAorICAgICAgICBJTlZBTElEX0VOVU0gPSAweDA1MDAsCisgICAgICAgIElOVkFMSURf
VkFMVUUgPSAweDA1MDEsCisgICAgICAgIElOVkFMSURfT1BFUkFUSU9OID0gMHgwNTAyLAorICAg
ICAgICBPVVRfT0ZfTUVNT1JZID0gMHgwNTA1LAorICAgICAgICBDVyA9IDB4MDkwMCwKKyAgICAg
ICAgQ0NXID0gMHgwOTAxLAorICAgICAgICBMSU5FX1dJRFRIID0gMHgwQjIxLAorICAgICAgICBB
TElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgPSAweDg0NkQsCisgICAgICAgIEFMSUFTRURfTElORV9X
SURUSF9SQU5HRSA9IDB4ODQ2RSwKKyAgICAgICAgQ1VMTF9GQUNFX01PREUgPSAweDBCNDUsCisg
ICAgICAgIEZST05UX0ZBQ0UgPSAweDBCNDYsCisgICAgICAgIERFUFRIX1JBTkdFID0gMHgwQjcw
LAorICAgICAgICBERVBUSF9XUklURU1BU0sgPSAweDBCNzIsCisgICAgICAgIERFUFRIX0NMRUFS
X1ZBTFVFID0gMHgwQjczLAorICAgICAgICBERVBUSF9GVU5DID0gMHgwQjc0LAorICAgICAgICBT
VEVOQ0lMX0NMRUFSX1ZBTFVFID0gMHgwQjkxLAorICAgICAgICBTVEVOQ0lMX0ZVTkMgPSAweDBC
OTIsCisgICAgICAgIFNURU5DSUxfRkFJTCA9IDB4MEI5NCwKKyAgICAgICAgU1RFTkNJTF9QQVNT
X0RFUFRIX0ZBSUwgPSAweDBCOTUsCisgICAgICAgIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTID0g
MHgwQjk2LAorICAgICAgICBTVEVOQ0lMX1JFRiA9IDB4MEI5NywKKyAgICAgICAgU1RFTkNJTF9W
QUxVRV9NQVNLID0gMHgwQjkzLAorICAgICAgICBTVEVOQ0lMX1dSSVRFTUFTSyA9IDB4MEI5OCwK
KyAgICAgICAgU1RFTkNJTF9CQUNLX0ZVTkMgPSAweDg4MDAsCisgICAgICAgIFNURU5DSUxfQkFD
S19GQUlMID0gMHg4ODAxLAorICAgICAgICBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMID0g
MHg4ODAyLAorICAgICAgICBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTID0gMHg4ODAzLAor
ICAgICAgICBTVEVOQ0lMX0JBQ0tfUkVGID0gMHg4Q0EzLAorICAgICAgICBTVEVOQ0lMX0JBQ0tf
VkFMVUVfTUFTSyA9IDB4OENBNCwKKyAgICAgICAgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyA9IDB4
OENBNSwKKyAgICAgICAgVklFV1BPUlQgPSAweDBCQTIsCisgICAgICAgIFNDSVNTT1JfQk9YID0g
MHgwQzEwLAorICAgICAgICBDT0xPUl9DTEVBUl9WQUxVRSA9IDB4MEMyMiwKKyAgICAgICAgQ09M
T1JfV1JJVEVNQVNLID0gMHgwQzIzLAorICAgICAgICBVTlBBQ0tfQUxJR05NRU5UID0gMHgwQ0Y1
LAorICAgICAgICBQQUNLX0FMSUdOTUVOVCA9IDB4MEQwNSwKKyAgICAgICAgTUFYX1RFWFRVUkVf
U0laRSA9IDB4MEQzMywKKyAgICAgICAgTUFYX1ZJRVdQT1JUX0RJTVMgPSAweDBEM0EsCisgICAg
ICAgIFNVQlBJWEVMX0JJVFMgPSAweDBENTAsCisgICAgICAgIFJFRF9CSVRTID0gMHgwRDUyLAor
ICAgICAgICBHUkVFTl9CSVRTID0gMHgwRDUzLAorICAgICAgICBCTFVFX0JJVFMgPSAweDBENTQs
CisgICAgICAgIEFMUEhBX0JJVFMgPSAweDBENTUsCisgICAgICAgIERFUFRIX0JJVFMgPSAweDBE
NTYsCisgICAgICAgIFNURU5DSUxfQklUUyA9IDB4MEQ1NywKKyAgICAgICAgUE9MWUdPTl9PRkZT
RVRfVU5JVFMgPSAweDJBMDAsCisgICAgICAgIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiA9IDB4ODAz
OCwKKyAgICAgICAgVEVYVFVSRV9CSU5ESU5HXzJEID0gMHg4MDY5LAorICAgICAgICBTQU1QTEVf
QlVGRkVSUyA9IDB4ODBBOCwKKyAgICAgICAgU0FNUExFUyA9IDB4ODBBOSwKKyAgICAgICAgU0FN
UExFX0NPVkVSQUdFX1ZBTFVFID0gMHg4MEFBLAorICAgICAgICBTQU1QTEVfQ09WRVJBR0VfSU5W
RVJUID0gMHg4MEFCLAorICAgICAgICBOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgPSAw
eDg2QTIsCisgICAgICAgIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTID0gMHg4NkEzLAorICAg
ICAgICBET05UX0NBUkUgPSAweDExMDAsCisgICAgICAgIEZBU1RFU1QgPSAweDExMDEsCisgICAg
ICAgIE5JQ0VTVCA9IDB4MTEwMiwKKyAgICAgICAgR0VORVJBVEVfTUlQTUFQX0hJTlQgPSAweDgx
OTIsCisgICAgICAgIEJZVEUgPSAweDE0MDAsCisgICAgICAgIFVOU0lHTkVEX0JZVEUgPSAweDE0
MDEsCisgICAgICAgIFNIT1JUID0gMHgxNDAyLAorICAgICAgICBVTlNJR05FRF9TSE9SVCA9IDB4
MTQwMywKKyAgICAgICAgSU5UID0gMHgxNDA0LAorICAgICAgICBVTlNJR05FRF9JTlQgPSAweDE0
MDUsCisgICAgICAgIEZMT0FUID0gMHgxNDA2LAorICAgICAgICBIQUxGX0ZMT0FUX09FUyA9IDB4
OEQ2MSwKKyAgICAgICAgRklYRUQgPSAweDE0MEMsCisgICAgICAgIERFUFRIX0NPTVBPTkVOVCA9
IDB4MTkwMiwKKyAgICAgICAgQUxQSEEgPSAweDE5MDYsCisgICAgICAgIFJHQiA9IDB4MTkwNywK
KyAgICAgICAgUkdCQSA9IDB4MTkwOCwKKyAgICAgICAgQkdSQSA9IDB4ODBFMSwKKyAgICAgICAg
TFVNSU5BTkNFID0gMHgxOTA5LAorICAgICAgICBMVU1JTkFOQ0VfQUxQSEEgPSAweDE5MEEsCisg
ICAgICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgPSAweDgwMzMsCisgICAgICAgIFVOU0lHTkVE
X1NIT1JUXzVfNV81XzEgPSAweDgwMzQsCisgICAgICAgIFVOU0lHTkVEX1NIT1JUXzVfNl81ID0g
MHg4MzYzLAorICAgICAgICBGUkFHTUVOVF9TSEFERVIgPSAweDhCMzAsCisgICAgICAgIFZFUlRF
WF9TSEFERVIgPSAweDhCMzEsCisgICAgICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDB4ODg2OSwK
KyAgICAgICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkIsCisgICAgICAgIE1B
WF9WQVJZSU5HX1ZFQ1RPUlMgPSAweDhERkMsCisgICAgICAgIE1BWF9DT01CSU5FRF9URVhUVVJF
X0lNQUdFX1VOSVRTID0gMHg4QjRELAorICAgICAgICBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgPSAweDhCNEMsCisgICAgICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4ODcy
LAorICAgICAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTID0gMHg4REZELAorICAgICAg
ICBTSEFERVJfVFlQRSA9IDB4OEI0RiwKKyAgICAgICAgREVMRVRFX1NUQVRVUyA9IDB4OEI4MCwK
KyAgICAgICAgTElOS19TVEFUVVMgPSAweDhCODIsCisgICAgICAgIFZBTElEQVRFX1NUQVRVUyA9
IDB4OEI4MywKKyAgICAgICAgQVRUQUNIRURfU0hBREVSUyA9IDB4OEI4NSwKKyAgICAgICAgQUNU
SVZFX1VOSUZPUk1TID0gMHg4Qjg2LAorICAgICAgICBBQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RI
ID0gMHg4Qjg3LAorICAgICAgICBBQ1RJVkVfQVRUUklCVVRFUyA9IDB4OEI4OSwKKyAgICAgICAg
QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIID0gMHg4QjhBLAorICAgICAgICBTSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT04gPSAweDhCOEMsCisgICAgICAgIENVUlJFTlRfUFJPR1JBTSA9IDB4OEI4
RCwKKyAgICAgICAgTkVWRVIgPSAweDAyMDAsCisgICAgICAgIExFU1MgPSAweDAyMDEsCisgICAg
ICAgIEVRVUFMID0gMHgwMjAyLAorICAgICAgICBMRVFVQUwgPSAweDAyMDMsCisgICAgICAgIEdS
RUFURVIgPSAweDAyMDQsCisgICAgICAgIE5PVEVRVUFMID0gMHgwMjA1LAorICAgICAgICBHRVFV
QUwgPSAweDAyMDYsCisgICAgICAgIEFMV0FZUyA9IDB4MDIwNywKKyAgICAgICAgS0VFUCA9IDB4
MUUwMCwKKyAgICAgICAgUkVQTEFDRSA9IDB4MUUwMSwKKyAgICAgICAgSU5DUiA9IDB4MUUwMiwK
KyAgICAgICAgREVDUiA9IDB4MUUwMywKKyAgICAgICAgSU5WRVJUID0gMHgxNTBBLAorICAgICAg
ICBJTkNSX1dSQVAgPSAweDg1MDcsCisgICAgICAgIERFQ1JfV1JBUCA9IDB4ODUwOCwKKyAgICAg
ICAgVkVORE9SID0gMHgxRjAwLAorICAgICAgICBSRU5ERVJFUiA9IDB4MUYwMSwKKyAgICAgICAg
VkVSU0lPTiA9IDB4MUYwMiwKKyAgICAgICAgRVhURU5TSU9OUyA9IDB4MUYwMywKKyAgICAgICAg
TkVBUkVTVCA9IDB4MjYwMCwKKyAgICAgICAgTElORUFSID0gMHgyNjAxLAorICAgICAgICBORUFS
RVNUX01JUE1BUF9ORUFSRVNUID0gMHgyNzAwLAorICAgICAgICBMSU5FQVJfTUlQTUFQX05FQVJF
U1QgPSAweDI3MDEsCisgICAgICAgIE5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IDB4MjcwMiwKKyAg
ICAgICAgTElORUFSX01JUE1BUF9MSU5FQVIgPSAweDI3MDMsCisgICAgICAgIFRFWFRVUkVfTUFH
X0ZJTFRFUiA9IDB4MjgwMCwKKyAgICAgICAgVEVYVFVSRV9NSU5fRklMVEVSID0gMHgyODAxLAor
ICAgICAgICBURVhUVVJFX1dSQVBfUyA9IDB4MjgwMiwKKyAgICAgICAgVEVYVFVSRV9XUkFQX1Qg
PSAweDI4MDMsCisgICAgICAgIFRFWFRVUkUgPSAweDE3MDIsCisgICAgICAgIFRFWFRVUkVfQ1VC
RV9NQVAgPSAweDg1MTMsCisgICAgICAgIFRFWFRVUkVfQklORElOR19DVUJFX01BUCA9IDB4ODUx
NCwKKyAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID0gMHg4NTE1LAorICAgICAg
ICBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggPSAweDg1MTYsCisgICAgICAgIFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWSA9IDB4ODUxNywKKyAgICAgICAgVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZID0gMHg4NTE4LAorICAgICAgICBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1og
PSAweDg1MTksCisgICAgICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiA9IDB4ODUxQSwK
KyAgICAgICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA9IDB4ODUxQywKKyAgICAgICAgVEVY
VFVSRTAgPSAweDg0QzAsCisgICAgICAgIFRFWFRVUkUxID0gMHg4NEMxLAorICAgICAgICBURVhU
VVJFMiA9IDB4ODRDMiwKKyAgICAgICAgVEVYVFVSRTMgPSAweDg0QzMsCisgICAgICAgIFRFWFRV
UkU0ID0gMHg4NEM0LAorICAgICAgICBURVhUVVJFNSA9IDB4ODRDNSwKKyAgICAgICAgVEVYVFVS
RTYgPSAweDg0QzYsCisgICAgICAgIFRFWFRVUkU3ID0gMHg4NEM3LAorICAgICAgICBURVhUVVJF
OCA9IDB4ODRDOCwKKyAgICAgICAgVEVYVFVSRTkgPSAweDg0QzksCisgICAgICAgIFRFWFRVUkUx
MCA9IDB4ODRDQSwKKyAgICAgICAgVEVYVFVSRTExID0gMHg4NENCLAorICAgICAgICBURVhUVVJF
MTIgPSAweDg0Q0MsCisgICAgICAgIFRFWFRVUkUxMyA9IDB4ODRDRCwKKyAgICAgICAgVEVYVFVS
RTE0ID0gMHg4NENFLAorICAgICAgICBURVhUVVJFMTUgPSAweDg0Q0YsCisgICAgICAgIFRFWFRV
UkUxNiA9IDB4ODREMCwKKyAgICAgICAgVEVYVFVSRTE3ID0gMHg4NEQxLAorICAgICAgICBURVhU
VVJFMTggPSAweDg0RDIsCisgICAgICAgIFRFWFRVUkUxOSA9IDB4ODREMywKKyAgICAgICAgVEVY
VFVSRTIwID0gMHg4NEQ0LAorICAgICAgICBURVhUVVJFMjEgPSAweDg0RDUsCisgICAgICAgIFRF
WFRVUkUyMiA9IDB4ODRENiwKKyAgICAgICAgVEVYVFVSRTIzID0gMHg4NEQ3LAorICAgICAgICBU
RVhUVVJFMjQgPSAweDg0RDgsCisgICAgICAgIFRFWFRVUkUyNSA9IDB4ODREOSwKKyAgICAgICAg
VEVYVFVSRTI2ID0gMHg4NERBLAorICAgICAgICBURVhUVVJFMjcgPSAweDg0REIsCisgICAgICAg
IFRFWFRVUkUyOCA9IDB4ODREQywKKyAgICAgICAgVEVYVFVSRTI5ID0gMHg4NERELAorICAgICAg
ICBURVhUVVJFMzAgPSAweDg0REUsCisgICAgICAgIFRFWFRVUkUzMSA9IDB4ODRERiwKKyAgICAg
ICAgQUNUSVZFX1RFWFRVUkUgPSAweDg0RTAsCisgICAgICAgIFJFUEVBVCA9IDB4MjkwMSwKKyAg
ICAgICAgQ0xBTVBfVE9fRURHRSA9IDB4ODEyRiwKKyAgICAgICAgTUlSUk9SRURfUkVQRUFUID0g
MHg4MzcwLAorICAgICAgICBGTE9BVF9WRUMyID0gMHg4QjUwLAorICAgICAgICBGTE9BVF9WRUMz
ID0gMHg4QjUxLAorICAgICAgICBGTE9BVF9WRUM0ID0gMHg4QjUyLAorICAgICAgICBJTlRfVkVD
MiA9IDB4OEI1MywKKyAgICAgICAgSU5UX1ZFQzMgPSAweDhCNTQsCisgICAgICAgIElOVF9WRUM0
ID0gMHg4QjU1LAorICAgICAgICBCT09MID0gMHg4QjU2LAorICAgICAgICBCT09MX1ZFQzIgPSAw
eDhCNTcsCisgICAgICAgIEJPT0xfVkVDMyA9IDB4OEI1OCwKKyAgICAgICAgQk9PTF9WRUM0ID0g
MHg4QjU5LAorICAgICAgICBGTE9BVF9NQVQyID0gMHg4QjVBLAorICAgICAgICBGTE9BVF9NQVQz
ID0gMHg4QjVCLAorICAgICAgICBGTE9BVF9NQVQ0ID0gMHg4QjVDLAorICAgICAgICBTQU1QTEVS
XzJEID0gMHg4QjVFLAorICAgICAgICBTQU1QTEVSX0NVQkUgPSAweDhCNjAsCisgICAgICAgIFZF
UlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCA9IDB4ODYyMiwKKyAgICAgICAgVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9TSVpFID0gMHg4NjIzLAorICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NUUklE
RSA9IDB4ODYyNCwKKyAgICAgICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFID0gMHg4NjI1LAor
ICAgICAgICBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgPSAweDg4NkEsCisgICAgICAg
IFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiA9IDB4ODY0NSwKKyAgICAgICAgVkVSVEVYX0FU
VFJJQl9BUlJBWV9CVUZGRVJfQklORElORyA9IDB4ODg5RiwKKyAgICAgICAgSU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9UWVBFID0gMHg4QjlBLAorICAgICAgICBJTVBMRU1FTlRBVElPTl9DT0xP
Ul9SRUFEX0ZPUk1BVCA9IDB4OEI5QiwKKyAgICAgICAgQ09NUElMRV9TVEFUVVMgPSAweDhCODEs
CisgICAgICAgIElORk9fTE9HX0xFTkdUSCA9IDB4OEI4NCwKKyAgICAgICAgU0hBREVSX1NPVVJD
RV9MRU5HVEggPSAweDhCODgsCisgICAgICAgIFNIQURFUl9DT01QSUxFUiA9IDB4OERGQSwKKyAg
ICAgICAgU0hBREVSX0JJTkFSWV9GT1JNQVRTID0gMHg4REY4LAorICAgICAgICBOVU1fU0hBREVS
X0JJTkFSWV9GT1JNQVRTID0gMHg4REY5LAorICAgICAgICBMT1dfRkxPQVQgPSAweDhERjAsCisg
ICAgICAgIE1FRElVTV9GTE9BVCA9IDB4OERGMSwKKyAgICAgICAgSElHSF9GTE9BVCA9IDB4OERG
MiwKKyAgICAgICAgTE9XX0lOVCA9IDB4OERGMywKKyAgICAgICAgTUVESVVNX0lOVCA9IDB4OERG
NCwKKyAgICAgICAgSElHSF9JTlQgPSAweDhERjUsCisgICAgICAgIEZSQU1FQlVGRkVSID0gMHg4
RDQwLAorICAgICAgICBSRU5ERVJCVUZGRVIgPSAweDhENDEsCisgICAgICAgIFJHQkE0ID0gMHg4
MDU2LAorICAgICAgICBSR0I1X0ExID0gMHg4MDU3LAorICAgICAgICBSR0I1NjUgPSAweDhENjIs
CisgICAgICAgIERFUFRIX0NPTVBPTkVOVDE2ID0gMHg4MUE1LAorICAgICAgICBTVEVOQ0lMX0lO
REVYID0gMHgxOTAxLAorICAgICAgICBTVEVOQ0lMX0lOREVYOCA9IDB4OEQ0OCwKKyAgICAgICAg
UkVOREVSQlVGRkVSX1dJRFRIID0gMHg4RDQyLAorICAgICAgICBSRU5ERVJCVUZGRVJfSEVJR0hU
ID0gMHg4RDQzLAorICAgICAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUID0gMHg4RDQ0
LAorICAgICAgICBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgPSAweDhENTAsCisgICAgICAgIFJFTkRF
UkJVRkZFUl9HUkVFTl9TSVpFID0gMHg4RDUxLAorICAgICAgICBSRU5ERVJCVUZGRVJfQkxVRV9T
SVpFID0gMHg4RDUyLAorICAgICAgICBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSA9IDB4OEQ1MywK
KyAgICAgICAgUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgPSAweDhENTQsCisgICAgICAgIFJFTkRF
UkJVRkZFUl9TVEVOQ0lMX1NJWkUgPSAweDhENTUsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfT0JKRUNUX1RZUEUgPSAweDhDRDAsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX05BTUUgPSAweDhDRDEsCisgICAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9MRVZFTCA9IDB4OENEMiwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9U
RVhUVVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhDRDMsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQw
ID0gMHg4Q0UwLAorICAgICAgICBERVBUSF9BVFRBQ0hNRU5UID0gMHg4RDAwLAorICAgICAgICBT
VEVOQ0lMX0FUVEFDSE1FTlQgPSAweDhEMjAsCisgICAgICAgIE5PTkUgPSAwLAorICAgICAgICBG
UkFNRUJVRkZFUl9DT01QTEVURSA9IDB4OENENSwKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UID0gMHg4Q0Q2LAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X01JU1NJTkdfQVRUQUNITUVOVCA9IDB4OENENywKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9ESU1FTlNJT05TID0gMHg4Q0Q5LAorICAgICAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RCA9IDB4OENERCwKKyAgICAgICAgRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBNiwKKyAgICAg
ICAgUkVOREVSQlVGRkVSX0JJTkRJTkcgPSAweDhDQTcsCisgICAgICAgIE1BWF9SRU5ERVJCVUZG
RVJfU0laRSA9IDB4ODRFOCwKKyAgICAgICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04g
PSAweDA1MDYsCisKKyAgICAgICAgLy8gV2ViR0wtc3BlY2lmaWMgZW51bXMKKyAgICAgICAgVU5Q
QUNLX0ZMSVBfWV9XRUJHTCA9IDB4OTI0MCwKKyAgICAgICAgVU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMID0gMHg5MjQxLAorICAgICAgICBDT05URVhUX0xPU1RfV0VCR0wgPSAweDkyNDIs
CisgICAgICAgIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDMsCisg
ICAgICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCA9IDB4OTI0NCwKKyAgICAgICAgVkVSVEVYX0FU
VFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFID0gMHg4OEZFLAorICAgICAgICAKKyAgICAgICAgLy8g
V2ViR0wyIGNvbnN0YW50cworICAgICAgICBSRUFEX0JVRkZFUiA9IDB4MEMwMiwKKyAgICAgICAg
VU5QQUNLX1JPV19MRU5HVEggPSAweDBDRjIsCisgICAgICAgIFVOUEFDS19TS0lQX1JPV1MgPSAw
eDBDRjMsCisgICAgICAgIFVOUEFDS19TS0lQX1BJWEVMUyA9IDB4MENGNCwKKyAgICAgICAgUEFD
S19ST1dfTEVOR1RIID0gMHgwRDAyLAorICAgICAgICBQQUNLX1NLSVBfUk9XUyA9IDB4MEQwMywK
KyAgICAgICAgUEFDS19TS0lQX1BJWEVMUyA9IDB4MEQwNCwKKyAgICAgICAgQ09MT1IgPSAweDE4
MDAsCisgICAgICAgIERFUFRIID0gMHgxODAxLAorICAgICAgICBTVEVOQ0lMID0gMHgxODAyLAor
ICAgICAgICBSRUQgPSAweDE5MDMsCisgICAgICAgIFJHQjggPSAweDgwNTEsCisgICAgICAgIFJH
QkE4ID0gMHg4MDU4LAorICAgICAgICBSR0IxMF9BMiA9IDB4ODA1OSwKKyAgICAgICAgVEVYVFVS
RV9CSU5ESU5HXzNEID0gMHg4MDZBLAorICAgICAgICBVTlBBQ0tfU0tJUF9JTUFHRVMgPSAweDgw
NkQsCisgICAgICAgIFVOUEFDS19JTUFHRV9IRUlHSFQgPSAweDgwNkUsCisgICAgICAgIFRFWFRV
UkVfM0QgPSAweDgwNkYsCisgICAgICAgIFRFWFRVUkVfV1JBUF9SID0gMHg4MDcyLAorICAgICAg
ICBNQVhfM0RfVEVYVFVSRV9TSVpFID0gMHg4MDczLAorICAgICAgICBVTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVYgPSAweDgzNjgsCisgICAgICAgIE1BWF9FTEVNRU5UU19WRVJUSUNFUyA9IDB4
ODBFOCwKKyAgICAgICAgTUFYX0VMRU1FTlRTX0lORElDRVMgPSAweDgwRTksCisgICAgICAgIFRF
WFRVUkVfTUlOX0xPRCA9IDB4ODEzQSwKKyAgICAgICAgVEVYVFVSRV9NQVhfTE9EID0gMHg4MTNC
LAorICAgICAgICBURVhUVVJFX0JBU0VfTEVWRUwgPSAweDgxM0MsCisgICAgICAgIFRFWFRVUkVf
TUFYX0xFVkVMID0gMHg4MTNELAorICAgICAgICBNSU4gPSAweDgwMDcsCisgICAgICAgIE1BWCA9
IDB4ODAwOCwKKyAgICAgICAgREVQVEhfQ09NUE9ORU5UMjQgPSAweDgxQTYsCisgICAgICAgIE1B
WF9URVhUVVJFX0xPRF9CSUFTID0gMHg4NEZELAorICAgICAgICBURVhUVVJFX0NPTVBBUkVfTU9E
RSA9IDB4ODg0QywKKyAgICAgICAgVEVYVFVSRV9DT01QQVJFX0ZVTkMgPSAweDg4NEQsCisgICAg
ICAgIENVUlJFTlRfUVVFUlkgPSAweDg4NjUsCisgICAgICAgIFFVRVJZX1JFU1VMVCA9IDB4ODg2
NiwKKyAgICAgICAgUVVFUllfUkVTVUxUX0FWQUlMQUJMRSA9IDB4ODg2NywKKyAgICAgICAgU1RS
RUFNX1JFQUQgPSAweDg4RTEsCisgICAgICAgIFNUUkVBTV9DT1BZID0gMHg4OEUyLAorICAgICAg
ICBTVEFUSUNfUkVBRCA9IDB4ODhFNSwKKyAgICAgICAgU1RBVElDX0NPUFkgPSAweDg4RTYsCisg
ICAgICAgIERZTkFNSUNfUkVBRCA9IDB4ODhFOSwKKyAgICAgICAgRFlOQU1JQ19DT1BZID0gMHg4
OEVBLAorICAgICAgICBNQVhfRFJBV19CVUZGRVJTID0gMHg4ODI0LAorICAgICAgICBEUkFXX0JV
RkZFUjAgPSAweDg4MjUsCisgICAgICAgIERSQVdfQlVGRkVSMSA9IDB4ODgyNiwKKyAgICAgICAg
RFJBV19CVUZGRVIyID0gMHg4ODI3LAorICAgICAgICBEUkFXX0JVRkZFUjMgPSAweDg4MjgsCisg
ICAgICAgIERSQVdfQlVGRkVSNCA9IDB4ODgyOSwKKyAgICAgICAgRFJBV19CVUZGRVI1ID0gMHg4
ODJBLAorICAgICAgICBEUkFXX0JVRkZFUjYgPSAweDg4MkIsCisgICAgICAgIERSQVdfQlVGRkVS
NyA9IDB4ODgyQywKKyAgICAgICAgRFJBV19CVUZGRVI4ID0gMHg4ODJELAorICAgICAgICBEUkFX
X0JVRkZFUjkgPSAweDg4MkUsCisgICAgICAgIERSQVdfQlVGRkVSMTAgPSAweDg4MkYsCisgICAg
ICAgIERSQVdfQlVGRkVSMTEgPSAweDg4MzAsCisgICAgICAgIERSQVdfQlVGRkVSMTIgPSAweDg4
MzEsCisgICAgICAgIERSQVdfQlVGRkVSMTMgPSAweDg4MzIsCisgICAgICAgIERSQVdfQlVGRkVS
MTQgPSAweDg4MzMsCisgICAgICAgIERSQVdfQlVGRkVSMTUgPSAweDg4MzQsCisgICAgICAgIE1B
WF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFMgPSAweDhCNDksCisgICAgICAgIE1BWF9WRVJU
RVhfVU5JRk9STV9DT01QT05FTlRTID0gMHg4QjRBLAorICAgICAgICBTQU1QTEVSXzNEID0gMHg4
QjVGLAorICAgICAgICBTQU1QTEVSXzJEX1NIQURPVyA9IDB4OEI2MiwKKyAgICAgICAgRlJBR01F
TlRfU0hBREVSX0RFUklWQVRJVkVfSElOVCA9IDB4OEI4QiwKKyAgICAgICAgUElYRUxfUEFDS19C
VUZGRVIgPSAweDg4RUIsCisgICAgICAgIFBJWEVMX1VOUEFDS19CVUZGRVIgPSAweDg4RUMsCisg
ICAgICAgIFBJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkcgPSAweDg4RUQsCisgICAgICAgIFBJWEVM
X1VOUEFDS19CVUZGRVJfQklORElORyA9IDB4ODhFRiwKKyAgICAgICAgRkxPQVRfTUFUMngzID0g
MHg4QjY1LAorICAgICAgICBGTE9BVF9NQVQyeDQgPSAweDhCNjYsCisgICAgICAgIEZMT0FUX01B
VDN4MiA9IDB4OEI2NywKKyAgICAgICAgRkxPQVRfTUFUM3g0ID0gMHg4QjY4LAorICAgICAgICBG
TE9BVF9NQVQ0eDIgPSAweDhCNjksCisgICAgICAgIEZMT0FUX01BVDR4MyA9IDB4OEI2QSwKKyAg
ICAgICAgU1JHQiA9IDB4OEM0MCwKKyAgICAgICAgU1JHQjggPSAweDhDNDEsCisgICAgICAgIFNS
R0JfQUxQSEEgPSAweDhDNDIsCisgICAgICAgIFNSR0I4X0FMUEhBOCA9IDB4OEM0MywKKyAgICAg
ICAgQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSA9IDB4ODg0RSwKKyAgICAgICAgUkdCQTMyRiA9IDB4
ODgxNCwKKyAgICAgICAgUkdCMzJGID0gMHg4ODE1LAorICAgICAgICBSR0JBMTZGID0gMHg4ODFB
LAorICAgICAgICBSR0IxNkYgPSAweDg4MUIsCisgICAgICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlf
SU5URUdFUiA9IDB4ODhGRCwKKyAgICAgICAgTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTID0gMHg4
OEZGLAorICAgICAgICBNSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQgPSAweDg5MDQsCisgICAgICAg
IE1BWF9QUk9HUkFNX1RFWEVMX09GRlNFVCA9IDB4ODkwNSwKKyAgICAgICAgTUFYX1ZBUllJTkdf
Q09NUE9ORU5UUyA9IDB4OEI0QiwKKyAgICAgICAgVEVYVFVSRV8yRF9BUlJBWSA9IDB4OEMxQSwK
KyAgICAgICAgVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZID0gMHg4QzFELAorICAgICAgICBSMTFG
X0cxMUZfQjEwRiA9IDB4OEMzQSwKKyAgICAgICAgVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JF
ViA9IDB4OEMzQiwKKyAgICAgICAgUkdCOV9FNSA9IDB4OEMzRCwKKyAgICAgICAgVU5TSUdORURf
SU5UXzVfOV85XzlfUkVWID0gMHg4QzNFLAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSX01PREUgPSAweDhDN0YsCisgICAgICAgIE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJB
VEVfQ09NUE9ORU5UUyA9IDB4OEM4MCwKKyAgICAgICAgVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJ
TkdTID0gMHg4QzgzLAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUID0g
MHg4Qzg0LAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkUgPSAweDhDODUs
CisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU4gPSAweDhDODgs
CisgICAgICAgIFJBU1RFUklaRVJfRElTQ0FSRCA9IDB4OEM4OSwKKyAgICAgICAgTUFYX1RSQU5T
Rk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTID0gMHg4QzhBLAorICAgICAgICBN
QVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlMgPSAweDhDOEIsCisgICAgICAg
IElOVEVSTEVBVkVEX0FUVFJJQlMgPSAweDhDOEMsCisgICAgICAgIFNFUEFSQVRFX0FUVFJJQlMg
PSAweDhDOEQsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVIgPSAweDhDOEUsCisg
ICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORyA9IDB4OEM4RiwKKyAgICAg
ICAgUkdCQTMyVUkgPSAweDhENzAsCisgICAgICAgIFJHQjMyVUkgPSAweDhENzEsCisgICAgICAg
IFJHQkExNlVJID0gMHg4RDc2LAorICAgICAgICBSR0IxNlVJID0gMHg4RDc3LAorICAgICAgICBS
R0JBOFVJID0gMHg4RDdDLAorICAgICAgICBSR0I4VUkgPSAweDhEN0QsCisgICAgICAgIFJHQkEz
MkkgPSAweDhEODIsCisgICAgICAgIFJHQjMySSA9IDB4OEQ4MywKKyAgICAgICAgUkdCQTE2SSA9
IDB4OEQ4OCwKKyAgICAgICAgUkdCMTZJID0gMHg4RDg5LAorICAgICAgICBSR0JBOEkgPSAweDhE
OEUsCisgICAgICAgIFJHQjhJID0gMHg4RDhGLAorICAgICAgICBSRURfSU5URUdFUiA9IDB4OEQ5
NCwKKyAgICAgICAgUkdCX0lOVEVHRVIgPSAweDhEOTgsCisgICAgICAgIFJHQkFfSU5URUdFUiA9
IDB4OEQ5OSwKKyAgICAgICAgU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDMSwKKyAgICAgICAgU0FN
UExFUl8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQsCisgICAgICAgIFNBTVBMRVJfQ1VCRV9TSEFE
T1cgPSAweDhEQzUsCisgICAgICAgIFVOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAorICAgICAg
ICBVTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgICAgICAgVU5TSUdORURfSU5UX1ZFQzQg
PSAweDhEQzgsCisgICAgICAgIElOVF9TQU1QTEVSXzJEID0gMHg4RENBLAorICAgICAgICBJTlRf
U0FNUExFUl8zRCA9IDB4OERDQiwKKyAgICAgICAgSU5UX1NBTVBMRVJfQ1VCRSA9IDB4OERDQywK
KyAgICAgICAgSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhEQ0YsCisgICAgICAgIFVOU0lHTkVE
X0lOVF9TQU1QTEVSXzJEID0gMHg4REQyLAorICAgICAgICBVTlNJR05FRF9JTlRfU0FNUExFUl8z
RCA9IDB4OEREMywKKyAgICAgICAgVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSA9IDB4OERENCwK
KyAgICAgICAgVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCisgICAgICAg
IERFUFRIX0NPTVBPTkVOVDMyRiA9IDB4OENBQywKKyAgICAgICAgREVQVEgzMkZfU1RFTkNJTDgg
PSAweDhDQUQsCisgICAgICAgIEZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViA9IDB4OERB
RCwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyA9IDB4ODIx
MCwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT01QT05FTlRfVFlQRSA9IDB4ODIx
MSwKKyAgICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURfU0laRSA9IDB4ODIxMiwKKyAg
ICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFID0gMHg4MjEzLAorICAgICAg
ICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRSA9IDB4ODIxNCwKKyAgICAgICAgRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFID0gMHg4MjE1LAorICAgICAgICBGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkUgPSAweDgyMTYsCisgICAgICAgIEZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFID0gMHg4MjE3LAorICAgICAgICBGUkFNRUJVRkZFUl9E
RUZBVUxUID0gMHg4MjE4LAorICAgICAgICBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSAweDgy
MUEsCisgICAgICAgIERFUFRIX1NURU5DSUwgPSAweDg0RjksCisgICAgICAgIFVOU0lHTkVEX0lO
VF8yNF84ID0gMHg4NEZBLAorICAgICAgICBERVBUSDI0X1NURU5DSUw4ID0gMHg4OEYwLAorICAg
ICAgICBVTlNJR05FRF9OT1JNQUxJWkVEID0gMHg4QzE3LAorICAgICAgICBEUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkcgPSAweDhDQTYsIC8qIFNhbWUgYXMgRlJBTUVCVUZGRVJfQklORElORyAqLwor
ICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSID0gMHg4Q0E4LAorICAgICAgICBEUkFXX0ZSQU1FQlVG
RkVSID0gMHg4Q0E5LAorICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQUEs
CisgICAgICAgIFJFTkRFUkJVRkZFUl9TQU1QTEVTID0gMHg4Q0FCLAorICAgICAgICBGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVIgPSAweDhDRDQsCisgICAgICAgIE1BWF9DT0xP
Ul9BVFRBQ0hNRU5UUyA9IDB4OENERiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEgPSAweDhD
RTEsCisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQyID0gMHg4Q0UyLAorICAgICAgICBDT0xPUl9B
VFRBQ0hNRU5UMyA9IDB4OENFMywKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDQgPSAweDhDRTQs
CisgICAgICAgIENPTE9SX0FUVEFDSE1FTlQ1ID0gMHg4Q0U1LAorICAgICAgICBDT0xPUl9BVFRB
Q0hNRU5UNiA9IDB4OENFNiwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDcgPSAweDhDRTcsCisg
ICAgICAgIENPTE9SX0FUVEFDSE1FTlQ4ID0gMHg4Q0U4LAorICAgICAgICBDT0xPUl9BVFRBQ0hN
RU5UOSA9IDB4OENFOSwKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEwID0gMHg4Q0VBLAorICAg
ICAgICBDT0xPUl9BVFRBQ0hNRU5UMTEgPSAweDhDRUIsCisgICAgICAgIENPTE9SX0FUVEFDSE1F
TlQxMiA9IDB4OENFQywKKyAgICAgICAgQ09MT1JfQVRUQUNITUVOVDEzID0gMHg4Q0VELAorICAg
ICAgICBDT0xPUl9BVFRBQ0hNRU5UMTQgPSAweDhDRUUsCisgICAgICAgIENPTE9SX0FUVEFDSE1F
TlQxNSA9IDB4OENFRiwKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBM
RSA9IDB4OEQ1NiwKKyAgICAgICAgTUFYX1NBTVBMRVMgPSAweDhENTcsCisgICAgICAgIEhBTEZf
RkxPQVQgPSAweDE0MEIsCisgICAgICAgIFJHID0gMHg4MjI3LAorICAgICAgICBSR19JTlRFR0VS
ID0gMHg4MjI4LAorICAgICAgICBSOCA9IDB4ODIyOSwKKyAgICAgICAgUkc4ID0gMHg4MjJCLAor
ICAgICAgICBSMTZGID0gMHg4MjJELAorICAgICAgICBSMzJGID0gMHg4MjJFLAorICAgICAgICBS
RzE2RiA9IDB4ODIyRiwKKyAgICAgICAgUkczMkYgPSAweDgyMzAsCisgICAgICAgIFI4SSA9IDB4
ODIzMSwKKyAgICAgICAgUjhVSSA9IDB4ODIzMiwKKyAgICAgICAgUjE2SSA9IDB4ODIzMywKKyAg
ICAgICAgUjE2VUkgPSAweDgyMzQsCisgICAgICAgIFIzMkkgPSAweDgyMzUsCisgICAgICAgIFIz
MlVJID0gMHg4MjM2LAorICAgICAgICBSRzhJID0gMHg4MjM3LAorICAgICAgICBSRzhVSSA9IDB4
ODIzOCwKKyAgICAgICAgUkcxNkkgPSAweDgyMzksCisgICAgICAgIFJHMTZVSSA9IDB4ODIzQSwK
KyAgICAgICAgUkczMkkgPSAweDgyM0IsCisgICAgICAgIFJHMzJVSSA9IDB4ODIzQywKKyAgICAg
ICAgVkVSVEVYX0FSUkFZX0JJTkRJTkcgPSAweDg1QjUsCisgICAgICAgIFI4X1NOT1JNID0gMHg4
Rjk0LAorICAgICAgICBSRzhfU05PUk0gPSAweDhGOTUsCisgICAgICAgIFJHQjhfU05PUk0gPSAw
eDhGOTYsCisgICAgICAgIFJHQkE4X1NOT1JNID0gMHg4Rjk3LAorICAgICAgICBTSUdORURfTk9S
TUFMSVpFRCA9IDB4OEY5QywKKyAgICAgICAgQ09QWV9SRUFEX0JVRkZFUiA9IDB4OEYzNiwKKyAg
ICAgICAgQ09QWV9XUklURV9CVUZGRVIgPSAweDhGMzcsCisgICAgICAgIENPUFlfUkVBRF9CVUZG
RVJfQklORElORyA9IDB4OEYzNiwgLyogU2FtZSBhcyBDT1BZX1JFQURfQlVGRkVSICovCisgICAg
ICAgIENPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkcgPSAweDhGMzcsIC8qIFNhbWUgYXMgQ09QWV9X
UklURV9CVUZGRVIgKi8KKyAgICAgICAgVU5JRk9STV9CVUZGRVIgPSAweDhBMTEsCisgICAgICAg
IFVOSUZPUk1fQlVGRkVSX0JJTkRJTkcgPSAweDhBMjgsCisgICAgICAgIFVOSUZPUk1fQlVGRkVS
X1NUQVJUID0gMHg4QTI5LAorICAgICAgICBVTklGT1JNX0JVRkZFUl9TSVpFID0gMHg4QTJBLAor
ICAgICAgICBNQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTID0gMHg4QTJCLAorICAgICAgICBNQVhf
RlJBR01FTlRfVU5JRk9STV9CTE9DS1MgPSAweDhBMkQsCisgICAgICAgIE1BWF9DT01CSU5FRF9V
TklGT1JNX0JMT0NLUyA9IDB4OEEyRSwKKyAgICAgICAgTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJ
TkdTID0gMHg4QTJGLAorICAgICAgICBNQVhfVU5JRk9STV9CTE9DS19TSVpFID0gMHg4QTMwLAor
ICAgICAgICBNQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4OEEzMSwK
KyAgICAgICAgTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDB4OEEz
MywKKyAgICAgICAgVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVCA9IDB4OEEzNCwKKyAg
ICAgICAgQUNUSVZFX1VOSUZPUk1fQkxPQ0tTID0gMHg4QTM2LAorICAgICAgICBVTklGT1JNX1RZ
UEUgPSAweDhBMzcsCisgICAgICAgIFVOSUZPUk1fU0laRSA9IDB4OEEzOCwKKyAgICAgICAgVU5J
Rk9STV9CTE9DS19JTkRFWCA9IDB4OEEzQSwKKyAgICAgICAgVU5JRk9STV9PRkZTRVQgPSAweDhB
M0IsCisgICAgICAgIFVOSUZPUk1fQVJSQVlfU1RSSURFID0gMHg4QTNDLAorICAgICAgICBVTklG
T1JNX01BVFJJWF9TVFJJREUgPSAweDhBM0QsCisgICAgICAgIFVOSUZPUk1fSVNfUk9XX01BSk9S
ID0gMHg4QTNFLAorICAgICAgICBVTklGT1JNX0JMT0NLX0JJTkRJTkcgPSAweDhBM0YsCisgICAg
ICAgIFVOSUZPUk1fQkxPQ0tfREFUQV9TSVpFID0gMHg4QTQwLAorICAgICAgICBVTklGT1JNX0JM
T0NLX0FDVElWRV9VTklGT1JNUyA9IDB4OEE0MiwKKyAgICAgICAgVU5JRk9STV9CTE9DS19BQ1RJ
VkVfVU5JRk9STV9JTkRJQ0VTID0gMHg4QTQzLAorICAgICAgICBVTklGT1JNX0JMT0NLX1JFRkVS
RU5DRURfQllfVkVSVEVYX1NIQURFUiA9IDB4OEE0NCwKKyAgICAgICAgVU5JRk9STV9CTE9DS19S
RUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUiA9IDB4OEE0NiwKKyAgICAgICAgSU5WQUxJRF9J
TkRFWCA9IDB4RkZGRkZGRkYsCisgICAgICAgIE1BWF9WRVJURVhfT1VUUFVUX0NPTVBPTkVOVFMg
PSAweDkxMjIsCisgICAgICAgIE1BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTID0gMHg5MTI1
LAorICAgICAgICBNQVhfU0VSVkVSX1dBSVRfVElNRU9VVCA9IDB4OTExMSwKKyAgICAgICAgT0JK
RUNUX1RZUEUgPSAweDkxMTIsCisgICAgICAgIFNZTkNfQ09ORElUSU9OID0gMHg5MTEzLAorICAg
ICAgICBTWU5DX1NUQVRVUyA9IDB4OTExNCwKKyAgICAgICAgU1lOQ19GTEFHUyA9IDB4OTExNSwK
KyAgICAgICAgU1lOQ19GRU5DRSA9IDB4OTExNiwKKyAgICAgICAgU1lOQ19HUFVfQ09NTUFORFNf
Q09NUExFVEUgPSAweDkxMTcsCisgICAgICAgIFVOU0lHTkFMRUQgPSAweDkxMTgsCisgICAgICAg
IFNJR05BTEVEID0gMHg5MTE5LAorICAgICAgICBBTFJFQURZX1NJR05BTEVEID0gMHg5MTFBLAor
ICAgICAgICBUSU1FT1VUX0VYUElSRUQgPSAweDkxMUIsCisgICAgICAgIENPTkRJVElPTl9TQVRJ
U0ZJRUQgPSAweDkxMUMsCisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICBXQUlUX0ZBSUxFRF9X
SU4gPSAweDkxMUQsCisjZWxzZQorICAgICAgICBXQUlUX0ZBSUxFRCA9IDB4OTExRCwKKyNlbmRp
ZgorICAgICAgICBTWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCA9IDB4MDAwMDAwMDEsCisgICAgICAg
IFZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUiA9IDB4ODhGRSwKKyAgICAgICAgQU5ZX1NBTVBM
RVNfUEFTU0VEID0gMHg4QzJGLAorICAgICAgICBBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFID0gMHg4RDZBLAorICAgICAgICBTQU1QTEVSX0JJTkRJTkcgPSAweDg5MTksCisgICAgICAg
IFJHQjEwX0EyVUkgPSAweDkwNkYsCisgICAgICAgIFRFWFRVUkVfU1dJWlpMRV9SID0gMHg4RTQy
LAorICAgICAgICBURVhUVVJFX1NXSVpaTEVfRyA9IDB4OEU0MywKKyAgICAgICAgVEVYVFVSRV9T
V0laWkxFX0IgPSAweDhFNDQsCisgICAgICAgIFRFWFRVUkVfU1dJWlpMRV9BID0gMHg4RTQ1LAor
ICAgICAgICBHUkVFTiA9IDB4MTkwNCwKKyAgICAgICAgQkxVRSA9IDB4MTkwNSwKKyAgICAgICAg
SU5UXzJfMTBfMTBfMTBfUkVWID0gMHg4RDlGLAorICAgICAgICBUUkFOU0ZPUk1fRkVFREJBQ0sg
PSAweDhFMjIsCisgICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19QQVVTRUQgPSAweDhFMjMsCisg
ICAgICAgIFRSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkUgPSAweDhFMjQsCisgICAgICAgIFRSQU5T
Rk9STV9GRUVEQkFDS19CSU5ESU5HID0gMHg4RTI1LAorICAgICAgICBDT01QUkVTU0VEX1IxMV9F
QUMgPSAweDkyNzAsCisgICAgICAgIENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgPSAweDkyNzEs
CisgICAgICAgIENPTVBSRVNTRURfUkcxMV9FQUMgPSAweDkyNzIsCisgICAgICAgIENPTVBSRVNT
RURfU0lHTkVEX1JHMTFfRUFDID0gMHg5MjczLAorICAgICAgICBDT01QUkVTU0VEX1JHQjhfRVRD
MiA9IDB4OTI3NCwKKyAgICAgICAgQ09NUFJFU1NFRF9TUkdCOF9FVEMyID0gMHg5Mjc1LAorICAg
ICAgICBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyID0gMHg5Mjc2LAor
ICAgICAgICBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiA9IDB4OTI3
NywKKyAgICAgICAgQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyA9IDB4OTI3OCwKKyAgICAgICAg
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMgPSAweDkyNzksCisgICAgICAgIFRFWFRV
UkVfSU1NVVRBQkxFX0ZPUk1BVCA9IDB4OTEyRiwKKyAgICAgICAgTUFYX0VMRU1FTlRfSU5ERVgg
PSAweDhENkIsCisgICAgICAgIE5VTV9TQU1QTEVfQ09VTlRTID0gMHg5MzgwLAorICAgICAgICBU
RVhUVVJFX0lNTVVUQUJMRV9MRVZFTFMgPSAweDgyREYsCisgICAgICAgIFBSSU1JVElWRV9SRVNU
QVJUX0ZJWEVEX0lOREVYID0gMHg4RDY5LAorICAgICAgICBQUklNSVRJVkVfUkVTVEFSVCA9IDB4
OEY5RCwKKworICAgICAgICAvLyBPcGVuR0wgRVMgMyBjb25zdGFudHMuCisgICAgICAgIE1BUF9S
RUFEX0JJVCA9IDB4MDAwMSwKKworICAgICAgICAvLyBOZWNlc3NhcnkgZGVza3RvcCBPcGVuR0wg
Y29uc3RhbnRzLgorICAgICAgICBURVhUVVJFX1JFQ1RBTkdMRV9BUkIgPSAweDg0RjUKKyAgICB9
OworCisgICAgZW51bSBjbGFzcyBEYXRhRm9ybWF0IDogdWludDhfdCB7CisgICAgICAgIFJHQkE4
ID0gMCwKKyAgICAgICAgUkdCQTE2TGl0dGxlLAorICAgICAgICBSR0JBMTZCaWcsCisgICAgICAg
IFJHQkExNkYsCisgICAgICAgIFJHQkEzMkYsCisgICAgICAgIFJHQjgsCisgICAgICAgIFJHQjE2
TGl0dGxlLAorICAgICAgICBSR0IxNkJpZywKKyAgICAgICAgUkdCMTZGLAorICAgICAgICBSR0Iz
MkYsCisgICAgICAgIEJHUjgsCisgICAgICAgIEJHUkE4LAorICAgICAgICBCR1JBMTZMaXR0bGUs
CisgICAgICAgIEJHUkExNkJpZywKKyAgICAgICAgQVJHQjgsCisgICAgICAgIEFSR0IxNkxpdHRs
ZSwKKyAgICAgICAgQVJHQjE2QmlnLAorICAgICAgICBBQkdSOCwKKyAgICAgICAgUkdCQTU1NTEs
CisgICAgICAgIFJHQkE0NDQ0LAorICAgICAgICBSR0I1NjUsCisgICAgICAgIFI4LAorICAgICAg
ICBSMTZMaXR0bGUsCisgICAgICAgIFIxNkJpZywKKyAgICAgICAgUjE2RiwKKyAgICAgICAgUjMy
RiwKKyAgICAgICAgUkE4LAorICAgICAgICBSQTE2TGl0dGxlLAorICAgICAgICBSQTE2QmlnLAor
ICAgICAgICBSQTE2RiwKKyAgICAgICAgUkEzMkYsCisgICAgICAgIEFSOCwKKyAgICAgICAgQVIx
NkxpdHRsZSwKKyAgICAgICAgQVIxNkJpZywKKyAgICAgICAgQTgsCisgICAgICAgIEExNkxpdHRs
ZSwKKyAgICAgICAgQTE2QmlnLAorICAgICAgICBBMTZGLAorICAgICAgICBBMzJGLAorICAgICAg
ICBOdW1Gb3JtYXRzCisgICAgfTsKKworICAgIGVudW0gY2xhc3MgRGVzdGluYXRpb24gOiB1aW50
OF90IHsKKyAgICAgICAgT2Zmc2NyZWVuLAorICAgICAgICBEaXJlY3RseVRvSG9zdFdpbmRvdywK
KyAgICB9OworCisgICAgZW51bSBjbGFzcyBDaGFubmVsQml0cyA6IHVpbnQ4X3QgeworICAgICAg
ICBSZWQgPSAxLAorICAgICAgICBHcmVlbiA9IDIsCisgICAgICAgIEJsdWUgPSA0LAorICAgICAg
ICBBbHBoYSA9IDgsCisgICAgICAgIERlcHRoID0gMTYsCisgICAgICAgIFN0ZW5jaWwgPSAzMiwK
KyAgICAgICAgUkdCID0gUmVkIHwgR3JlZW4gfCBCbHVlLAorICAgICAgICBSR0JBID0gUkdCIHwg
QWxwaGEsCisgICAgICAgIERlcHRoU3RlbmNpbCA9IERlcHRoIHwgU3RlbmNpbCwKKyAgICB9Owor
CisgICAgLy8gUG9zc2libGUgYWxwaGEgb3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3Vy
IGR1cmluZworICAgIC8vIHBpeGVsIHBhY2tpbmcuIEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkg
aXMgbG9zc3kgYW5kIG11c3QKKyAgICAvLyBiZSByZW1vdmVkLgorICAgIGVudW0gQWxwaGFPcCA6
IHVpbnQ4X3QgeworICAgICAgICBEb05vdGhpbmcsCisgICAgICAgIERvUHJlbXVsdGlwbHksCisg
ICAgICAgIERvVW5tdWx0aXBseSwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBET01Tb3VyY2Ug
OiB1aW50OF90IHsKKyAgICAgICAgSW1hZ2UsCisgICAgICAgIENhbnZhcywKKyAgICAgICAgVmlk
ZW8sCisgICAgICAgIE5vbmUsCisgICAgfTsKKworI2lmIFVTRShBTkdMRSkKKyAgICBlbnVtIHsK
KyAgICAgICAgLy8gVGhlc2UgY29uc3RhbnRzIGFyZSByZWRlZmluZWQgaGVyZSBmcm9tIEFOR0xF
J3MgT3BlbkdMIEVTIGhlYWRlcnMgdG8KKyAgICAgICAgLy8gcHJvdmlkZSBhIHNpbmdsZSBwbGFj
ZSB3aGVyZSBtdWx0aXBsZSBwb3J0aW9ucyBvZiBwbGF0Zm9ybSBjb2RlIGNhbgorICAgICAgICAv
LyByZWZlcmVuY2UgdGhlbS4KKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIElPU3VyZmFjZVRl
eHR1cmVUYXJnZXQgPSBURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIC8vIGFsc28gR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUKKyAgICAgICAgRUdMSU9TdXJmYWNlVGV4dHVyZVRhcmdldCA9IDB4MzQ1
QiwgLy8gRUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFCisjZWxzZQorICAgICAgICBJT1N1cmZh
Y2VUZXh0dXJlVGFyZ2V0ID0gVEVYVFVSRV8yRCwKKyAgICAgICAgRUdMSU9TdXJmYWNlVGV4dHVy
ZVRhcmdldCA9IDB4MzA1RiwgLy8gRUdMX1RFWFRVUkVfMkQKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisgICAgfTsKKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsK
KworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaGFzQWxwaGEoRGF0YUZvcm1hdCBmb3Jt
YXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIERhdGFG
b3JtYXQ6OkE4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkExNkY6CisgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdDo6QTMyRjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSQTg6CisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdDo6QVI4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMTZGOgor
ICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMzJGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6
OlJHQkE4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkJHUkE4OgorICAgICAgICBjYXNlIERh
dGFGb3JtYXQ6OkFSR0I4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFCR1I4OgorICAgICAg
ICBjYXNlIERhdGFGb3JtYXQ6OlJHQkExNkY6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdC
QTMyRjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSR0JBNDQ0NDoKKyAgICAgICAgY2FzZSBE
YXRhRm9ybWF0OjpSR0JBNTU1MToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBoYXNDb2xvcihEYXRhRm9ybWF0IGZvcm1hdCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dDo6UkdCQTg6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCQTE2RjoKKyAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0OjpSR0JBMzJGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQjg6Cisg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkdCMTZGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6
OlJHQjMyRjoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpCR1I4OgorICAgICAgICBjYXNlIERh
dGFGb3JtYXQ6OkJHUkE4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OkFSR0I4OgorICAgICAg
ICBjYXNlIERhdGFGb3JtYXQ6OkFCR1I4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE1
NTUxOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJHQkE0NDQ0OgorICAgICAgICBjYXNlIERh
dGFGb3JtYXQ6OlJHQjU2NToKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0OjpSODoKKyAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0OjpSMTZGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlIzMkY6Cisg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdDo6UkE4OgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJB
MTZGOgorICAgICAgICBjYXNlIERhdGFGb3JtYXQ6OlJBMzJGOgorICAgICAgICBjYXNlIERhdGFG
b3JtYXQ6OkFSODoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hl
Y2sgaWYgdGhlIGZvcm1hdCBpcyBvbmUgb2YgdGhlIGZvcm1hdHMgZnJvbSB0aGUgSW1hZ2VEYXRh
IG9yIERPTSBlbGVtZW50cy4KKyAgICAvLyBUaGUgZm9ybWF0cyBmcm9tIEltYWdlRGF0YSBpcyBh
bHdheXMgUkdCQTguCisgICAgLy8gVGhlIGZvcm1hdHMgZnJvbSBET00gZWxlbWVudHMgdmFyeSB3
aXRoIEdyYXBoaWNzIHBvcnRzLiBJdCBjYW4gb25seSBiZSBSR0JBOCBvciBCR1JBOCBmb3Igbm9u
LUNHIHBvcnQgd2hpbGUgYSBsaXR0bGUgbW9yZSBmb3IgQ0cgcG9ydC4KKyAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIHNyY0Zvcm1hdENvbWVzRnJvbURPTUVsZW1lbnRPckltYWdlRGF0YShE
YXRhRm9ybWF0IFNyY0Zvcm1hdCkKKyAgICB7CisjaWYgVVNFKENHKQorI2lmIENQVShCSUdfRU5E
SUFOKQorICAgIHJldHVybiBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCQTggfHwgU3JjRm9y
bWF0ID09IERhdGFGb3JtYXQ6OkFSR0I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSR0I4
CisgICAgICAgIHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpSQTggfHwgU3JjRm9ybWF0ID09
IERhdGFGb3JtYXQ6OkFSOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UjggfHwgU3JjRm9y
bWF0ID09IERhdGFGb3JtYXQ6OkE4OworI2Vsc2UKKyAgICAvLyBUaGF0IExJVFRMRV9FTkRJQU4g
Y2FzZSBoYXMgbW9yZSBwb3NzaWJsZSBmb3JtYXRzIHRoYW4gQklHX0VORElBTiBjYXNlIGlzIGJl
Y2F1c2Ugc29tZSBkZWNvZGVkIGltYWdlIGRhdGEgaXMgYWN0dWFsbHkgYmlnIGVuZGlhbgorICAg
IC8vIGV2ZW4gb24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmVzLgorICAgIHJldHVybiBTcmNG
b3JtYXQgPT0gRGF0YUZvcm1hdDo6QkdSQTggfHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OkFC
R1I4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpCR1I4CisgICAgICAgIHx8IFNyY0Zvcm1h
dCA9PSBEYXRhRm9ybWF0OjpSR0JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6QVJHQjgg
fHwgU3JjRm9ybWF0ID09IERhdGFGb3JtYXQ6OlJHQjgKKyAgICAgICAgfHwgU3JjRm9ybWF0ID09
IERhdGFGb3JtYXQ6OlI4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0OjpBOAorICAgICAgICB8
fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkE4IHx8IFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0
OjpBUjg7CisjZW5kaWYKKyNlbHNlCisgICAgcmV0dXJuIFNyY0Zvcm1hdCA9PSBEYXRhRm9ybWF0
OjpCR1JBOCB8fCBTcmNGb3JtYXQgPT0gRGF0YUZvcm1hdDo6UkdCQTg7CisjZW5kaWYKKyAgICB9
CisKKyAgICBzdHJ1Y3QgQWN0aXZlSW5mbyB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAg
ICBHQzNEZW51bSB0eXBlOworICAgICAgICBHQzNEaW50IHNpemU7CisgICAgfTsKKworICAgIEdy
YXBoaWNzQ29udGV4dEdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgRGVzdGluYXRpb24g
PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuLCBHcmFwaGljc0NvbnRleHRHTCogc2hhcmVkQ29udGV4
dCA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEdMKCkgPSBkZWZhdWx0
OworCisgICAgLy8gPT09PT09PT09PSBXZWJHTCAxIGVudHJ5IHBvaW50cy4KKworICAgIHZpcnR1
YWwgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBs
YXRmb3JtM0RPYmplY3QsIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9k
ZUFscGhhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9y
LCBHQzNEZW51bSBkZmFjdG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kRnVuY1NlcGFy
YXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwg
R0MzRGVudW0gZHN0QWxwaGEpID0gMDsKKworICAgIHZpcnR1YWwgR0MzRGVudW0gY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoR0MzRGJpdGZpZWxkIG1hc2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb2xvcihH
QzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xh
bXBmIGFscGhhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRGVwdGgoR0MzRGNsYW1wZiBk
ZXB0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCBzKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFu
IGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFBs
YXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm0z
RE9iamVjdCBjcmVhdGVGcmFtZWJ1ZmZlcigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RP
YmplY3QgY3JlYXRlUHJvZ3JhbSgpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3Qg
Y3JlYXRlUmVuZGVyYnVmZmVyKCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBj
cmVhdGVTaGFkZXIoR0MzRGVudW0pID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3Qg
Y3JlYXRlVGV4dHVyZSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjdWxsRmFjZShHQzNEZW51
bSBtb2RlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVQcm9ncmFtKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpG
YXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qs
IFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShHQzNEZW51
bSBjYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0g
bW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxl
KEdDM0RlbnVtIGNhcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShHQzNEdWludCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGZsdXNoKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGlu
dCBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkg
PSAwOworCisgICAgdmlydHVhbCBib29sIGdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEF0dGFjaGVkU2hh
ZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNp
emVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykgPSAwOworCisgICAgdmlydHVh
bCBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7CisKKyAg
ICAvLyBnZXRQYXJhbWV0ZXIKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0g
bmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdD
M0RmbG9hdCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEludGVn
ZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEJvb2xlYW52KEdD
M0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgR0Mz
RGVudW0gZ2V0RXJyb3IoKSA9IDA7CisKKyAgICAvLyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpID0gMDsKKworICAgIC8vIGdldFByb2dyYW1QYXJhbWV0ZXIKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
CisKKyAgICAvLyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpID0gMDsKKworICAgIC8vIGdldFNoYWRlclBhcmFtZXRlcgorICAgIHZp
cnR1YWwgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGdldFNoYWRlckluZm9M
b2coUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRTaGFkZXJQcmVj
aXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwg
R0MzRGludCogcmFuZ2UsIEdDM0RpbnQqIHByZWNpc2lvbikgPSAwOworCisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIC8vIGdl
dFRleFBhcmFtZXRlcgorICAgIHZpcnR1YWwgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKSA9IDA7CisKKyAgICAvLyBnZXRVbmlmb3JtCisgICAgdmlydHVh
bCB2b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9y
bWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCog
dmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxh
dGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKSA9IDA7CisKKyAgICAvLyBnZXRWZXJ0
ZXhBdHRyaWIKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGdldFZlcnRleEF0dHJpYml2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpID0gMDsKKworICAgIHZpcnR1YWwgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0
dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkgPSAwOworICAg
IHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAg
IHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCkgPSAwOworICAgIHZp
cnR1YWwgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Cisg
ICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCkgPSAwOwor
ICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCkg
PSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCkg
PSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0
IHVuaXRzKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0Mz
RGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNoYWRlclNvdXJjZShQbGF0Zm9ybTNE
T2JqZWN0LCBjb25zdCBTdHJpbmcmIHN0cmluZykgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHN0
ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0Mz
RGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
dGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBH
QzNEZW51bSB6cGFzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
cGFyYW0pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlv
biwgR0MzRGZsb2F0IHgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTFmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCB1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25z
dCBHQzNEaW50KiB2KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCog
dikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTJpdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxv
YXQgeSwgR0MzRGZsb2F0IHopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybTNmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RpbnQgeikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2l2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGludCogdikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9y
bTRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RmbG9hdCogdikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFs
dWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2
YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQq
IHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybTNET2Jq
ZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjFmdihH
QzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxv
YXQgeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5k
ZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRl
eEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0Rm
bG9hdCB6KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHosIEdDM0RmbG9hdCB3KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJp
YjRmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiB2YWx1ZXMpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50
IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBz
dHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlld3Bv
cnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lk
KiBkYXRhLCBHQzNEZW51bSB1c2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBidWZmZXJTdWJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXpl
LCBjb25zdCB2b2lkKiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHJlc3NlZFRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCogZGF0YSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKSA9IDA7CisKKyAgICB2aXJ0
dWFsIGJvb2wgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3
QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBj
b3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxl
bWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBk
aXZpc29yKSA9IDA7CisKKyAgICBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgY29udGV4dEF0
dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJzOyB9CisgICAgdm9pZCBzZXRDb250ZXh0
QXR0cmlidXRlcyhjb25zdCBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMmIGF0dHJzKSB7IG1f
YXR0cnMgPSBhdHRyczsgfQorCisgICAgLy8gVmVydGV4QXJyYXlPamVjdCBjYWxscworICAgIHZp
cnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheSgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZp
cnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisK
KyNpZiBVU0UoT1BFTkdMKSAmJiBFTkFCTEUoV0VCR0wyKQorICAgIHZpcnR1YWwgdm9pZCBwcmlt
aXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQpID0gMDsKKyNlbmRpZgorCisgICAgLy8gU3VwcG9y
dCBmb3IgZXh0ZW5zaW9ucy4gUmV0dXJucyBhIG5vbi1udWxsIG9iamVjdCwgdGhvdWdoIG5vdAor
ICAgIC8vIGFsbCBtZXRob2RzIGl0IGNvbnRhaW5zIG1heSBuZWNlc3NhcmlseSBiZSBzdXBwb3J0
ZWQgb24gdGhlCisgICAgLy8gY3VycmVudCBoYXJkd2FyZS4gTXVzdCBjYWxsIEV4dGVuc2lvbnNH
TDo6c3VwcG9ydHMoKSB0bworICAgIC8vIGRldGVybWluZSB0aGlzLgorICAgIHZpcnR1YWwgRXh0
ZW5zaW9uc0dMJiBnZXRFeHRlbnNpb25zKCkgPSAwOworCisgICAgLy8gPT09PT09PT09PSBXZWJH
TCAyIGVudHJ5IHBvaW50cy4KKworICAgIHZpcnR1YWwgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0Mz
RGJpdGZpZWxkIGFjY2VzcykgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gdW5tYXBCdWZm
ZXIoR0MzRGVudW0gdGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlCdWZmZXJTdWJE
YXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRy
IHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0cikgPSAwOwor
CisgICAgLy8gZ2V0SW50ZXJuYWxGb3JtYXRQYXJhbWV0ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
SW50ZXJuYWxmb3JtYXRpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRHNpemVpIGJ1ZlNpemUsIEdDM0RpbnQqIHBhcmFtcykgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RzaXplaSBzYW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgdGV4U3RvcmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCB0ZXhTdG9yYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6
ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxH
QzNEdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+
JiBwYXJhbXMpID0gMDsKKworICAgIC8vID09PT09PT09PT0gTm9uLVdlYkdMIGJhc2VkIGVudHJ5
IHBvaW50cy4KKworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDbGVhckJpdHNCeUF0dGFjaG1lbnRU
eXBlKEdDM0RlbnVtKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2xlYXJCaXRzQnlGb3JtYXQo
R0MzRGVudW0pOworCisgICAgc3RhdGljIHVpbnQ4X3QgZ2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChH
QzNEZW51bSk7CisKKyAgICBEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRHTEF0dHJp
YnV0ZXMgbV9hdHRyczsKKyAgICBEZXN0aW5hdGlvbiBtX2Rlc3RpbmF0aW9uOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTkyNWEzNWNlZjNjOTM0ODhmODgwNGNlMzdiM2UzODI5YzMyZDM4YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dEdMUG93ZXJQcmVmZXJlbmNlIHsKKyAgICBEZWZhdWx0LAorICAgIExvd1Bvd2VyLAorICAg
IEhpZ2hQZXJmb3JtYW5jZQorfTsKKworc3RydWN0IEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyB7CisgICAgLy8gV2ViR0xDb250ZXh0QXR0cmlidXRlcworICAgIGJvb2wgYWxwaGEgeyB0cnVl
IH07CisgICAgYm9vbCBkZXB0aCB7IHRydWUgfTsKKyAgICBib29sIHN0ZW5jaWwgeyBmYWxzZSB9
OworICAgIGJvb2wgYW50aWFsaWFzIHsgdHJ1ZSB9OworICAgIGJvb2wgcHJlbXVsdGlwbGllZEFs
cGhhIHsgdHJ1ZSB9OworICAgIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyIHsgZmFsc2UgfTsK
KyAgICBib29sIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgeyBmYWxzZSB9OworICAgIHVz
aW5nIFBvd2VyUHJlZmVyZW5jZSA9IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVmZXJlbmNlOwor
ICAgIFBvd2VyUHJlZmVyZW5jZSBwb3dlclByZWZlcmVuY2UgeyBQb3dlclByZWZlcmVuY2U6OkRl
ZmF1bHQgfTsKKworICAgIC8vIEFkZGl0aW9uYWwgYXR0cmlidXRlcy4KKyAgICBib29sIHNoYXJl
UmVzb3VyY2VzIHsgdHJ1ZSB9OworICAgIGJvb2wgaXNXZWJHTDIgeyBmYWxzZSB9OworICAgIGJv
b2wgbm9FeHRlbnNpb25zIHsgZmFsc2UgfTsKKyAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvIHsg
MSB9OworICAgIFBvd2VyUHJlZmVyZW5jZSBpbml0aWFsUG93ZXJQcmVmZXJlbmNlIHsgUG93ZXJQ
cmVmZXJlbmNlOjpEZWZhdWx0IH07Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMGU4ZGFmMWVhOTU1ODljNTM0MGUw
MjZlNDQ2ODU1YTUxMTJiYzA1Ni4uMWEwZjgxNmZkYTgwMzAyNzk2YWEzYTNlNTliNmRmOTE5OTVk
MDNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIFBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpw
bGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBJbWFnZUJ1ZmZl
cjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEJiwgR0MzRGVudW0sIFBs
YXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKQorYm9vbCBJbWFnZUJ1ZmZlcjo6
Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0MzRGVudW0s
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKQogewogICAgIHJldHVybiBm
YWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCmluZGV4IDExODgwY2ExODU2ODJlMzQwYTA1ODVkZjFlMDFlNTE1OTlkMDIxNTQuLjUzMzNj
ZjRlYzIyOGY5ZGIzNzNmMjU4ZTZiOWM3YjllZTRmYzhhYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIEludFBvaW50OwpAQCAt
MTM0LDcgKzEzNCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVu
dGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25s
eSB3b3JrCiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQs
IGFuZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0QmLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0s
IGJvb2wsIGJvb2wpOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29s
LCBib29sKTsKIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5n
IHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBj
bGlwcGVyLgogICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6
ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwCmluZGV4IDYzNTU3ODI0YWYzNmIzNDBmYzJhM2I5YTA5YzAxYWU1MTVkYzVlMWMuLjBhMzUz
Y2JjMjE5OGE3YWVjZTI5ZTI5MzQzN2ZkN2FhNjQ3ZjlmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTk1NSw3ICs5NTUsNyBA
QCB2b2lkIE1lZGlhUGxheWVyOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0Nv
bnRleHQmIHAsIGNvbnN0IEZsb2F0UmVjdAogICAgIG1fcHJpdmF0ZS0+cGFpbnRDdXJyZW50RnJh
bWVJbkNvbnRleHQocCwgcik7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1
cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm0z
RE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK2Jvb2wgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1Rl
eHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwg
UGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICByZXR1cm4gbV9wcml2
YXRlLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGV4dHVyZSwg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlB
bHBoYSwgZmxpcFkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmgKaW5kZXggMGM3ZGQ5YjYwZTZlMDBlY2U5YTkwNWIzZDA0ODBlMzM2MDY4YWJh
OS4uNzYxZTUxZGZlNWY4N2ViYzI4OTFiMzM0OTEyMWY5NzIxYjk1YzkyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC02MSw3ICs2MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF1ZGlvU291cmNlUHJvdmlkZXI7CiBjbGFz
cyBDRE1JbnN0YW5jZTsKIGNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CiBjbGFzcyBMZWdhY3lD
RE1TZXNzaW9uQ2xpZW50OwpAQCAtNDIxLDcgKzQyMSw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUg
ZGVzdGluYXRpb24gdGV4dHVyZSBtYXkgbmVlZCB0byBiZSByZXNpemVkIHRvIHRvIHRoZSBkaW1l
bnNpb25zIG9mIHRoZSBzb3VyY2UgdGV4dHVyZSBvciByZS1kZWZpbmVkIHRvIHRoZSByZXF1aXJl
ZCBpbnRlcm5hbEZvcm1hdC4KICAgICAvLyBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWly
ZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwgdHlwZSBzaG91bGQgYmUgVU5TSUdO
RURfQllURSBhbmQgbGV2ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1
dHVyZS4KIAotICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CisgICAg
Ym9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKIAogICAgIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAppbmRleCA2
MmM3ZGQwMmZiZjNmYjFmYWE4MzUzMWUyNzMwZmYxZTUzMjUyN2EzLi5iMDAzYjFjMWE3YjBkNjg4
MTgzMzMwYTFmMDUwZDM0YmYzYjg2ZDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaApAQCAtMTU3LDcgKzE1Nyw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5D
b250ZXh0KEdyYXBoaWNzQ29udGV4dCYgYywgY29uc3QgRmxvYXRSZWN0JiByKSB7IHBhaW50KGMs
IHIpOyB9Ci0gICAgdmlydHVhbCBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50
LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBib29sLCBib29sKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0Mz
RGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dFRpbWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlbG9h
ZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAKaW5kZXggZjc5NzZlNjFkZDg1MjQ2ZDJmNGUyNzYy
YzhjMTg3ZTA5OTgwNGRjNS4uNTI4MGJlZjFlNzMxM2RmNWY2ZDIyNGIzZDZkNTgxODUxZWE3NzJl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hp
bXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1z
LmNwcApAQCAtMTcsNyArMTcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9H
TCkKIAogI2RlZmluZSBESVNBQkxFX1NISU1TCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKQEAg
LTIzMCw0ICsyMzAsNCBAQCBib29sIGluaXRpYWxpemVPcGVuR0xTaGltcygpCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQor
I2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWE0MGNiOTA5OTYyMTcyMmQ2MjI3
MzVmYmZhOGQ0MzQwZjc4YjNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lv
bnMzREFOR0xFLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVT
RShBTkdMRSkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgotCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJf
MF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfM18wX2F1dG9n
ZW4uaD4KLS8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQg
ZW50cnkgcG9pbnRzIGZvciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQK
LSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBH
TGVnbENvbnRleHQ7Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9n
ZW4uaD4KLQotLy8gTm90ZTogdGhpcyBmaWxlIGNhbid0IGJlIGNvbXBpbGVkIGluIHRoZSBzYW1l
IHVuaWZpZWQgc291cmNlIGZpbGUKLS8vIGFzIG90aGVycyB3aGljaCBpbmNsdWRlIHRoZSBzeXN0
ZW0ncyBPcGVuR0wgaGVhZGVycy4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1FeHRlbnNpb25z
M0RBTkdMRTo6RXh0ZW5zaW9uczNEQU5HTEUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGJv
b2wgdXNlSW5kZXhlZEdldFN0cmluZykKLSAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRl
bnNpb25zKGZhbHNlKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lzTlZJRElB
KGZhbHNlKQotICAgICwgbV9pc0FNRChmYWxzZSkKLSAgICAsIG1faXNJbnRlbChmYWxzZSkKLSAg
ICAsIG1faXNJbWFnaW5hdGlvbihmYWxzZSkKLSAgICAsIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rp
b25FbXVsYXRpb24oZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0
dXJlU2l6ZShmYWxzZSkKLSAgICAsIG1fdXNlSW5kZXhlZEdldFN0cmluZyh1c2VJbmRleGVkR2V0
U3RyaW5nKQotewotICAgIC8vIEZJWE1FOiBpZGVhbGx5LCByZW1vdmUgdGhpcyBpbml0aWFsaXph
dGlvbiBhbHRvZ2V0aGVyLiBBTkdMRQotICAgIC8vIHN1YnN1bWVzIHRoZSByZXNwb25zaWJpbGl0
eSBmb3IgZ3JhcGhpY3MgZHJpdmVyIHdvcmthcm91bmRzLgotICAgIG1fdmVuZG9yID0gU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcoR0xfVkVORE9SKSkp
OwotICAgIG1fcmVuZGVyZXIgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
Z2w6OkdldFN0cmluZyhHTF9SRU5ERVJFUikpKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHZlbmRv
ckNvbXBvbmVudHMgPSBtX3ZlbmRvci5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcg
Jyk7Ci0gICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoIm52aWRpYSIpKQotICAgICAg
ICBtX2lzTlZJRElBID0gdHJ1ZTsKLSAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5jb250YWlucygi
YXRpIikgfHwgdmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiYW1kIikpCi0gICAgICAgIG1faXNB
TUQgPSB0cnVlOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbnRlbCIpKQot
ICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOwotICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRh
aW5zKCJpbWFnaW5hdGlvbiIpKQotICAgICAgICBtX2lzSW1hZ2luYXRpb24gPSB0cnVlOwotfQot
Ci1FeHRlbnNpb25zM0RBTkdMRTo6fkV4dGVuc2lvbnMzREFOR0xFKCkgPSBkZWZhdWx0OwotCi1i
b29sIEV4dGVuc2lvbnMzREFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKLSAgICAgICAgaW5pdGlh
bGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQotICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lv
bihuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5v
dCBlbmFibGVkIGFscmVhZHkpLgotICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250
YWlucyhuYW1lKSAmJiAhbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAg
ICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBnbDo6UmVxdWVz
dEV4dGVuc2lvbkFOR0xFKG5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBtX2VuYWJsZWRF
eHRlbnNpb25zLmFkZChuYW1lKTsKLSAgICB9Ci19Ci0KLWJvb2wgRXh0ZW5zaW9uczNEQU5HTEU6
OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSB8fCBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5z
KG5hbWUpOwotfQotCi1pbnQgRXh0ZW5zaW9uczNEQU5HTEU6OmdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci19Ci0K
LVN0cmluZyBFeHRlbnNpb25zM0RBTkdMRTo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwot
ICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9T
T1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291cmNlTGVuZ3RoKTsKLSAgICBpZiAoIXNvdXJjZUxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgVmVjdG9yPEdMY2hhcj4gbmFt
ZShzb3VyY2VMZW5ndGgpOyAvLyBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FO
R0xFIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAgaW50IHJldHVybmVkTGVuZ3RoID0g
MDsKLSAgICBnbDo6R2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlciwgc291cmNl
TGVuZ3RoLCAmcmV0dXJuZWRMZW5ndGgsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIXJldHVybmVk
TGVuZ3RoKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAvLyByZXR1cm5lZExl
bmd0aCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBudWxsIHRlcm1pbmF0b3IuCi0gICAgQVNTRVJUKHJl
dHVybmVkTGVuZ3RoID09IHNvdXJjZUxlbmd0aCAtIDEpOwotICAgIHJldHVybiBTdHJpbmcobmFt
ZS5kYXRhKCksIHJldHVybmVkTGVuZ3RoKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6
aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKQotewotICAgIGlmIChtX3VzZUluZGV4ZWRH
ZXRTdHJpbmcpIHsKLSAgICAgICAgR0xpbnQgbnVtRXh0ZW5zaW9ucyA9IDA7Ci0gICAgICAgIGds
OjpHZXRJbnRlZ2VydihHTF9OVU1fRVhURU5TSU9OUywgJm51bUV4dGVuc2lvbnMpOwotICAgICAg
ICBmb3IgKEdMaW50IGkgPSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsgKytpKQotICAgICAgICAgICAg
bV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChnbDo6R2V0U3RyaW5naShHTF9FWFRFTlNJT05TLCBp
KSk7Ci0gICAgICAgIGdsOjpHZXRJbnRlZ2VydihHTF9OVU1fUkVRVUVTVEFCTEVfRVhURU5TSU9O
U19BTkdMRSwgJm51bUV4dGVuc2lvbnMpOwotICAgICAgICBmb3IgKEdMaW50IGkgPSAwOyBpIDwg
bnVtRXh0ZW5zaW9uczsgKytpKQotICAgICAgICAgICAgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMu
YWRkKGdsOjpHZXRTdHJpbmdpKEdMX1JFUVVFU1RBQkxFX0VYVEVOU0lPTlNfQU5HTEUsIGkpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVu
c2lvbnMoKTsKLSAgICAgICAgZm9yIChhdXRvJiBleHRlbnNpb24gOiBleHRlbnNpb25zU3RyaW5n
LnNwbGl0KCcgJykpCi0gICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGV4dGVu
c2lvbik7Ci0gICAgICAgIGV4dGVuc2lvbnNTdHJpbmcgPSBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhHTF9SRVFVRVNUQUJMRV9FWFRFTlNJT05TX0FO
R0xFKSkpOwotICAgICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNTdHJpbmcu
c3BsaXQoJyAnKSkKLSAgICAgICAgICAgIG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmFkZChleHRl
bnNpb24pOwotICAgIH0KLSAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IHRy
dWU7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OnJlYWRuUGl4ZWxzRVhUKGludCwgaW50
LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIHZv
aWQgKikKLXsKLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6Z2V0blVuaWZvcm1mdkVYVChH
QzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGZsb2F0ICopCi17Ci0gICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9u
czNEQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQsIGludCwgR0MzRHNpemVpLCBpbnQg
KikKLXsKLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RBTkdMRTo6YmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpCi17Ci0gICAgLy8gRklYTUU6IGNvbnNpZGVyIGFkZGluZyBzdXBw
b3J0IGZvciBBUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZS4KLSAgICBnbDo6QmxpdEZyYW1l
YnVmZmVyQU5HTEUoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0
WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjpy
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCi17Ci0gICAgZ2w6OlJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzREFOR0xF
OjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBHTHVpbnQgYXJyYXkgPSAwOwotICAgIGdsOjpHZW5WZXJ0ZXhBcnJheXNP
RVMoMSwgJmFycmF5KTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNE
QU5HTEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0g
ICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RGVsZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7
Ci19Ci0KLUdDM0Rib29sZWFuIEV4dGVuc2lvbnMzREFOR0xFOjppc1ZlcnRleEFycmF5T0VTKFBs
YXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gZ2w6OklzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotfQotCi12b2lkIEV4dGVuc2lvbnMz
REFOR0xFOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCaW5kVmVydGV4QXJy
YXlPRVMoYXJyYXkpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzREFOR0xFOjppbnNlcnRFdmVudE1h
cmtlckVYVChjb25zdCBTdHJpbmcmKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBm
dW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KLSAgICBy
ZXR1cm47Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OnB1c2hHcm91cE1hcmtlckVYVChj
b25zdCBTdHJpbmcmKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBh
bmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KLSAgICByZXR1cm47Ci19
Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVn
X21hcmtlciBpbiBzdXBwb3J0cygpLgotICAgIHJldHVybjsKLX0KLQotYm9vbCBFeHRlbnNpb25z
M0RBTkdMRTo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJl
dHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkgfHwgbV9yZXF1ZXN0YWJs
ZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6
OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVmcykKLXsKLSAg
ICBnbDo6RHJhd0J1ZmZlcnNFWFQobiwgYnVmcyk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5H
TEU6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNEQU5HTEU6
OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RHJhd0VsZW1lbnRz
SW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwotfQotCi12b2lk
IEV4dGVuc2lvbnMzREFOR0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBH
QzNEdWludCBkaXZpc29yKQotewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgZ2w6OlZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0K
LVN0cmluZyBFeHRlbnNpb25zM0RBTkdMRTo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgcmV0dXJu
IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdMX0VY
VEVOU0lPTlMpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoQU5HTEUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zM0RBTkdMRS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uczNEQU5HTEUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY0NTg1OTUzZjRlNWY5ZGE4Y2Q1N2Vj
ZTk5Y2U5MzA1NzY1ZTc5OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25z
M0RBTkdMRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgRXh0ZW5zaW9uczNEQU5HTEUgOiBwdWJsaWMgRXh0ZW5zaW9u
czNEIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICAvLyBUaGlz
IGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNE
IGltcGxlbWVudGF0aW9ucy4KLSAgICBFeHRlbnNpb25zM0RBTkdMRShHcmFwaGljc0NvbnRleHQz
RCosIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZyA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zM0RBTkdMRSgpOwotCi0gICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCi0gICAgYm9v
bCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGVuc3VyZUVuYWJs
ZWQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSBvdmVy
cmlkZTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOwotICAgIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpLCBjb25zdCBHQzNEZW51bSopIG92ZXJyaWRl
OwotCi0gICAgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAs
IGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0
WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQg
bG9uZyBmaWx0ZXIpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2ln
bmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmlt
Y291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKLQotICAgIC8v
IEVYVCBSb2J1c3RuZXNzIC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKLSAgICB2
b2lkIHJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZT
aXplLCB2b2lkICpkYXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0Mz
RHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBh
cmFtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dy
YW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlk
ZTsKLQotICAgIGJvb2wgaXNOVklESUEoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzTlZJRElBOyB9
Ci0gICAgYm9vbCBpc0FNRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNBTUQ7IH0KLSAgICBib29s
IGlzSW50ZWwoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzSW50ZWw7IH0KLSAgICBib29sIGlzSW1h
Z2luYXRpb24oKSBvdmVycmlkZSB7IHJldHVybiBtX2lzSW1hZ2luYXRpb247IH0KLSAgICBTdHJp
bmcgdmVuZG9yKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV92ZW5kb3I7IH0KLQotICAgIGJvb2wgcmVx
dWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24oKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVp
cmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uOyB9Ci0gICAgYm9vbCByZXF1aXJlc1Jlc3RyaWN0
ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVpcmVzUmVzdHJp
Y3RlZE1heGltdW1UZXh0dXJlU2l6ZTsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgc3VwcG9ydHNF
eHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygp
OwotCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7Ci0g
ICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKLSAgICBIYXNoU2V0PFN0
cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwotICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlcXVl
c3RhYmxlRXh0ZW5zaW9uczsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9u
czsKLQotICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNELgotICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0KLSAgICBib29sIG1faXNOVklESUE7Ci0g
ICAgYm9vbCBtX2lzQU1EOwotICAgIGJvb2wgbV9pc0ludGVsOwotICAgIGJvb2wgbV9pc0ltYWdp
bmF0aW9uOwotICAgIGJvb2wgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbjsKLSAg
ICBib29sIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplOwotCi0gICAgYm9v
bCBtX3VzZUluZGV4ZWRHZXRTdHJpbmcgeyBmYWxzZSB9OwotCi0gICAgU3RyaW5nIG1fdmVuZG9y
OwotICAgIFN0cmluZyBtX3JlbmRlcmVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5z
aW9uc0dMQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
RXh0ZW5zaW9uc0dMQU5HTEUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3NTEzYWJlZDk4YmY0ZTc0MjQ1OTA5
ZTIzZjY0MTY2MGU2NjU5NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKQEAgLTAsMCArMSwyNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09O
VEVYVF9HTCkgJiYgVVNFKEFOR0xFKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaW5jbHVkZSA8QU5HTEUv
ZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9w
b2ludHNfZ2xlc18zXzBfYXV0b2dlbi5oPgorLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xF
J3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4KKyNkZWZpbmUgR0xfQU5H
TEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2ds
ZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9w
b2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorCisvLyBOb3RlOiB0aGlzIGZpbGUgY2FuJ3QgYmUg
Y29tcGlsZWQgaW4gdGhlIHNhbWUgdW5pZmllZCBzb3VyY2UgZmlsZQorLy8gYXMgb3RoZXJzIHdo
aWNoIGluY2x1ZGUgdGhlIHN5c3RlbSdzIE9wZW5HTCBoZWFkZXJzLgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0V4dGVuc2lvbnNHTEFOR0xFOjpFeHRlbnNpb25zR0xBTkdMRShHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDog
bV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKKyAgICAsIG1faXNOVklESUEoZmFsc2UpCisgICAgLCBtX2lzQU1EKGZhbHNlKQor
ICAgICwgbV9pc0ludGVsKGZhbHNlKQorICAgICwgbV9pc0ltYWdpbmF0aW9uKGZhbHNlKQorICAg
ICwgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbihmYWxzZSkKKyAgICAsIG1fcmVx
dWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplKGZhbHNlKQorICAgICwgbV91c2VJbmRl
eGVkR2V0U3RyaW5nKHVzZUluZGV4ZWRHZXRTdHJpbmcpCit7CisgICAgLy8gRklYTUU6IGlkZWFs
bHksIHJlbW92ZSB0aGlzIGluaXRpYWxpemF0aW9uIGFsdG9nZXRoZXIuIEFOR0xFCisgICAgLy8g
c3Vic3VtZXMgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBncmFwaGljcyBkcml2ZXIgd29ya2Fyb3Vu
ZHMuCisgICAgbV92ZW5kb3IgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
Z2w6OkdldFN0cmluZyhHTF9WRU5ET1IpKSk7CisgICAgbV9yZW5kZXJlciA9IFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdMX1JFTkRFUkVSKSkpOwor
CisgICAgVmVjdG9yPFN0cmluZz4gdmVuZG9yQ29tcG9uZW50cyA9IG1fdmVuZG9yLmNvbnZlcnRU
b0FTQ0lJTG93ZXJjYXNlKCkuc3BsaXQoJyAnKTsKKyAgICBpZiAodmVuZG9yQ29tcG9uZW50cy5j
b250YWlucygibnZpZGlhIikpCisgICAgICAgIG1faXNOVklESUEgPSB0cnVlOworICAgIGlmICh2
ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJhdGkiKSB8fCB2ZW5kb3JDb21wb25lbnRzLmNvbnRh
aW5zKCJhbWQiKSkKKyAgICAgICAgbV9pc0FNRCA9IHRydWU7CisgICAgaWYgKHZlbmRvckNvbXBv
bmVudHMuY29udGFpbnMoImludGVsIikpCisgICAgICAgIG1faXNJbnRlbCA9IHRydWU7CisgICAg
aWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImltYWdpbmF0aW9uIikpCisgICAgICAgIG1f
aXNJbWFnaW5hdGlvbiA9IHRydWU7Cit9CisKK0V4dGVuc2lvbnNHTEFOR0xFOjp+RXh0ZW5zaW9u
c0dMQU5HTEUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgRXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBvcnRz
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zKQorICAgICAgICBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworCisg
ICAgcmV0dXJuIHN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUpOworfQorCit2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICAvLyBFbmFi
bGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkuCisgICAgaWYgKG1f
cmVxdWVzdGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpICYmICFtX2VuYWJsZWRFeHRlbnNp
b25zLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIG1fZW5hYmxlZEV4dGVuc2lvbnMuYWRkKG5hbWUpOworICAgIH0KK30K
KworYm9vbCBFeHRlbnNpb25zR0xBTkdMRTo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpIHx8IG1f
ZW5hYmxlZEV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Cit9CisKK2ludCBFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dEdMOjpOT19FUlJPUjsKK30KKworU3RyaW5nIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7Cisg
ICAgaW50IHNvdXJjZUxlbmd0aCA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFk
ZXIsIEdMX1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUsICZzb3VyY2VMZW5n
dGgpOworICAgIGlmICghc291cmNlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKKyAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKHNvdXJjZUxlbmd0aCk7IC8vIEdMX1RSQU5TTEFU
RURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4K
KyAgICBpbnQgcmV0dXJuZWRMZW5ndGggPSAwOworICAgIGdsOjpHZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoc2hhZGVyLCBzb3VyY2VMZW5ndGgsICZyZXR1cm5lZExlbmd0aCwgbmFtZS5k
YXRhKCkpOworICAgIGlmICghcmV0dXJuZWRMZW5ndGgpCisgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworICAgIC8vIHJldHVybmVkTGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIG51bGwg
dGVybWluYXRvci4KKyAgICBBU1NFUlQocmV0dXJuZWRMZW5ndGggPT0gc291cmNlTGVuZ3RoIC0g
MSk7CisgICAgcmV0dXJuIFN0cmluZyhuYW1lLmRhdGEoKSwgcmV0dXJuZWRMZW5ndGgpOworfQor
Cit2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygp
Cit7CisgICAgaWYgKG1fdXNlSW5kZXhlZEdldFN0cmluZykgeworICAgICAgICBHTGludCBudW1F
eHRlbnNpb25zID0gMDsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX05VTV9FWFRFTlNJT05T
LCAmbnVtRXh0ZW5zaW9ucyk7CisgICAgICAgIGZvciAoR0xpbnQgaSA9IDA7IGkgPCBudW1FeHRl
bnNpb25zOyArK2kpCisgICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGdsOjpH
ZXRTdHJpbmdpKEdMX0VYVEVOU0lPTlMsIGkpKTsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdM
X05VTV9SRVFVRVNUQUJMRV9FWFRFTlNJT05TX0FOR0xFLCAmbnVtRXh0ZW5zaW9ucyk7CisgICAg
ICAgIGZvciAoR0xpbnQgaSA9IDA7IGkgPCBudW1FeHRlbnNpb25zOyArK2kpCisgICAgICAgICAg
ICBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5hZGQoZ2w6OkdldFN0cmluZ2koR0xfUkVRVUVTVEFC
TEVfRVhURU5TSU9OU19BTkdMRSwgaSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFN0cmluZyBl
eHRlbnNpb25zU3RyaW5nID0gZ2V0RXh0ZW5zaW9ucygpOworICAgICAgICBmb3IgKGF1dG8mIGV4
dGVuc2lvbiA6IGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoJyAnKSkKKyAgICAgICAgICAgIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsKKyAgICAgICAgZXh0ZW5zaW9uc1N0cmlu
ZyA9IFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKEdM
X1JFUVVFU1RBQkxFX0VYVEVOU0lPTlNfQU5HTEUpKSk7CisgICAgICAgIGZvciAoYXV0byYgZXh0
ZW5zaW9uIDogZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgnICcpKQorICAgICAgICAgICAgbV9yZXF1
ZXN0YWJsZUV4dGVuc2lvbnMuYWRkKGV4dGVuc2lvbik7CisgICAgfQorICAgIG1faW5pdGlhbGl6
ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6cmVhZG5QaXhlbHNFWFQoaW50LCBpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51
bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgdm9pZCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50LCBpbnQsIEdDM0RzaXplaSwgZmxvYXQg
KikKK3sKKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0blVuaWZvcm1pdkVYVChHQzNE
dWludCwgaW50LCBHQzNEc2l6ZWksIGludCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwg
bG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZ
MSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKK3sKKyAgICAvLyBG
SVhNRTogY29uc2lkZXIgYWRkaW5nIHN1cHBvcnQgZm9yIEFQUExFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlLgorICAgIGdsOjpCbGl0RnJhbWVidWZmZXJBTkdMRShzcmNYMCwgc3JjWTAsIHNyY1gx
LCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUodGFyZ2V0
LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK1BsYXRmb3Jt
M0RPYmplY3QgRXh0ZW5zaW9uc0dMQU5HTEU6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBhcnJheSA9IDA7
CisgICAgZ2w6OkdlblZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOworICAgIHJldHVybiBhcnJh
eTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZWxldGVW
ZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKK30KKworR0MzRGJvb2xlYW4gRXh0ZW5zaW9uc0dM
QU5HTEU6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBp
ZiAoIWFycmF5KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheU9FUyhhcnJh
eSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OkJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7Cit9CisKK3ZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6Omluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21h
cmtlciBpbiBzdXBwb3J0cygpLgorICAgIHJldHVybjsKK30KKwordm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6cHVzaEdyb3VwTWFya2VyRVhUKGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBz
dXBwb3J0cygpLgorICAgIHJldHVybjsKK30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cG9w
R3JvdXBNYXJrZXJFWFQodm9pZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVu
Y3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVidWdfbWFya2VyIGluIHN1cHBvcnRzKCkuCisgICAgcmV0
dXJuOworfQorCitib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4dGVuc2lvbihjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucyhuYW1lKSB8fCBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKK30K
Kwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpIG4sIGNv
bnN0IEdDM0RlbnVtKiBidWZzKQoreworICAgIGdsOjpEcmF3QnVmZmVyc0VYVChuLCBidWZzKTsK
K30KKwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51
bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291
bnQpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RHJh
d0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKK30K
Kwordm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSksIHByaW1jb3VudCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnZlcnRleEF0dHJp
YkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7CisgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliRGl2aXNvckFO
R0xFKGluZGV4LCBkaXZpc29yKTsKK30KKworU3RyaW5nIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRF
eHRlbnNpb25zKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGdsOjpHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVT
RShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0V4dGVuc2lvbnNHTEFOR0xFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExMTRkNDhmNzhmN2M3Mzlm
NDdkOTE2NjhhMDhmYzZkNmYyNjMwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5oCkBAIC0wLDAgKzEs
MTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lv
bnNHTEFOR0xFIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3Rh
bnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMuCisgICAg
RXh0ZW5zaW9uc0dMQU5HTEUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBib29sIHVzZUluZGV4
ZWRHZXRTdHJpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dMQU5HTEUoKTsK
KworICAgIC8vIEV4dGVuc2lvbnNHTCBtZXRob2RzLgorICAgIGJvb2wgc3VwcG9ydHMoY29uc3Qg
U3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOworICAgIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwor
ICAgIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgb3ZlcnJpZGU7CisKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNE
Ym9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAg
IHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAg
IHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJz
RVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsKKworICAgIFN0cmluZyBn
ZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25n
IHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBs
b25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGlu
dCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KSBvdmVycmlkZTsK
KyAgICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291
bnQpIG92ZXJyaWRlOworICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRl
eCwgR0MzRHVpbnQgZGl2aXNvcikgb3ZlcnJpZGU7CisKKyAgICAvLyBFWFQgUm9idXN0bmVzcyAt
IHVzZXMgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCisgICAgdm9pZCByZWFkblBpeGVsc0VY
VChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0sIGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7CisKKyAgICBib29sIGlz
TlZJRElBKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc05WSURJQTsgfQorICAgIGJvb2wgaXNBTUQo
KSBvdmVycmlkZSB7IHJldHVybiBtX2lzQU1EOyB9CisgICAgYm9vbCBpc0ludGVsKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9pc0ludGVsOyB9CisgICAgYm9vbCBpc0ltYWdpbmF0aW9uKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9pc0ltYWdpbmF0aW9uOyB9CisgICAgU3RyaW5nIHZlbmRvcigpIG92ZXJy
aWRlIHsgcmV0dXJuIG1fdmVuZG9yOyB9CisKKyAgICBib29sIHJlcXVpcmVzQnVpbHRJbkZ1bmN0
aW9uRW11bGF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlv
bkVtdWxhdGlvbjsgfQorICAgIGJvb2wgcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVT
aXplKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVy
ZVNpemU7IH0KKworcHJpdmF0ZToKKyAgICBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFdU
Rjo6U3RyaW5nJik7CisgICAgU3RyaW5nIGdldEV4dGVuc2lvbnMoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAgIGJvb2wgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxl
RXh0ZW5zaW9uczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnM7
CisgICAgSGFzaFNldDxTdHJpbmc+IG1fZW5hYmxlZEV4dGVuc2lvbnM7CisKKyAgICAvLyBXZWFr
IHBvaW50ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC4KKyAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogbV9jb250ZXh0OworCisgICAgYm9vbCBtX2lzTlZJRElBOworICAgIGJv
b2wgbV9pc0FNRDsKKyAgICBib29sIG1faXNJbnRlbDsKKyAgICBib29sIG1faXNJbWFnaW5hdGlv
bjsKKyAgICBib29sIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247CisgICAgYm9v
bCBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZTsKKworICAgIGJvb2wgbV91
c2VJbmRleGVkR2V0U3RyaW5nIHsgZmFsc2UgfTsKKworICAgIFN0cmluZyBtX3ZlbmRvcjsKKyAg
ICBTdHJpbmcgbV9yZW5kZXJlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29u
dGV4dDNEQU5HTEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGZmNDVhOWY0NWMwZTJhMjI0YmM4MmVmMjY3NGUyMTg3YmZhYjRjOTYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0M0RBTkdMRS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxODM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkgJiYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
SU9TLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVj
dC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJUZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYK
LQotLy8gU2tpcCB0aGUgaW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRy
eSBwb2ludHMgZm9yIG5vdy4KLSNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAotI2Rl
ZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0X2dsZXMxCi10eXBlZGVmIHZvaWQqIEdMZWds
Q29udGV4dDsKLSNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5o
PgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzNfMF9hdXRvZ2VuLmg+Ci0jaW5j
bHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxB
TkdMRS9nbDJleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLQotLy8gTm90
ZTogdGhpcyBmaWxlIGNhbid0IGJlIGNvbXBpbGVkIGluIHRoZSBzYW1lIHVuaWZpZWQgc291cmNl
IGZpbGUKLS8vIGFzIG90aGVycyB3aGljaCBpbmNsdWRlIHRoZSBzeXN0ZW0ncyBPcGVuR0wgaGVh
ZGVycy4KLQotLy8gVGhpcyBvbmUgZGVmaW5pdGlvbiBzaG9ydC1jaXJjdWl0cyB0aGUgbmVlZCBm
b3IgZ2wyZXh0LmgsIHdoaWNoCi0vLyB3b3VsZCBuZWVkIG1vcmUgd29yayB0byBiZSBpbmNsdWRl
ZCBmcm9tIFdlYkNvcmUuCi0jZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAweDhENTcKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotI2RlZmlu
ZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgMHg4Q0UwCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X0VYVCAweDhENDAKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25OYW1lID0gIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCI7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJD
b21waWxlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLXN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5u
ZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxz
KQotewotICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhpcyBkb2Vzbid0IG92ZXJmbG93IGJlY2F1c2Ug
dGhlIGNhbGxpbmcgZnVuY3Rpb25zCi0gICAgLy8gdXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KLSAg
ICBpbnQgdG90YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICogNDsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgcGl4ZWxzW2kgKyAzXSA9IDI1NTsK
LX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVy
dFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1
bnNpZ25lZCBjaGFyKiBwaXhlbHMpCi17Ci0gICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2ZSBhIGJ1
ZyB3aGVyZSBjYWxsaW5nIHJlYWRQaXhlbHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3cm9uZyB2
YWx1ZXMgZm9yIHRoZSBhbHBoYSBjaGFubmVsIHdoZW4gdGhlIGFscGhhIGlzIG9mZiBmb3IgdGhl
IGNvbnRleHQuCi0gICAgZ2w6OlJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICB2
SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy53aWR0
aCA9IHdpZHRoOwotICAgIHNyYy5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBzcmMuZGF0YSA9
IHBpeGVsczsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LmhlaWdodCA9IGhl
aWdodDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRo
ICogNDsKLSAgICBkZXN0LmRhdGEgPSBwaXhlbHM7Ci0KLSAgICAvLyBTd2FwIHBpeGVsIGNoYW5u
ZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAx
LCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0
aCAqIGhlaWdodCAqIDQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9
IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFjb250ZXh0QXR0cmlidXRlcygpLmFscGhh
KQotICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhl
bHMpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmli
dXRlcygpCi17Ci0gICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uTmFtZSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNv
bnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVz
KCk7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGludCBo
ZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIEdMdWludCBjb2xvckZvcm1hdCwgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOwotICAgIGlmIChhdHRycy5hbHBoYSkgewotICAgICAgICBt
X2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBODsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBH
TF9SR0JBOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdM
X1JHQjg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOwotICAgIH0KLSAgICBpZiAoYXR0
cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkgewotICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0
aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAg
ICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLQotICAg
ICAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgICAg
IC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0Lgot
ICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b25OYW1lKSkKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgfQotCi0gICAgLy8g
UmVzaXplIG11bHRpc2FtcGxlIEZCTy4KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAg
ICAgIEdMaW50IG1heFNhbXBsZUNvdW50OwotICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfTUFY
X1NBTVBMRVNfQU5HTEUsICZtYXhTYW1wbGVDb3VudCk7Ci0gICAgICAgIC8vIFVzaW5nIG1vcmUg
dGhhbiA0IHNhbXBsZXMgaXMgc2xvdyBvbiBzb21lIGhhcmR3YXJlIGFuZCBpcyB1bmxpa2VseSB0
bwotICAgICAgICAvLyBwcm9kdWNlIGEgc2lnbmlmaWNhbnRseSBiZXR0ZXIgcmVzdWx0LgotICAg
ICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKLSAg
ICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZC
Tyk7Ci0gICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBnbDo6RnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5E
RVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChhdHRycy5z
dGVuY2lsIHx8IGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZl
cihHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
TF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAvLyBXZWJHTCAxLjAncyBydWxlcyBzdGF0ZSB0
aGF0IGNvbWJpbmVkIGRlcHRoL3N0ZW5jaWwgcmVuZGVyYnVmZmVycwotICAgICAgICAgICAgLy8g
aGF2ZSB0byBiZSBhdHRhY2hlZCB0byB0aGUgc3ludGhldGljIERFUFRIX1NURU5DSUxfQVRUQUNI
TUVOVCBwb2ludC4KLSAgICAgICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0ID09IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTKQotICAgICAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgREVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGF0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJC
VUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAg
IGlmIChhdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJC
VUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwg
MCk7Ci0gICAgICAgIGlmIChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZF
UikgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBj
bGVhbnVwLgotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTwotICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlKEludFNpemUod2lk
dGgsIGhlaWdodCkpOwotICAgIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVyZUJhY2tpbmdTdG9yZUZy
b21MYXllcigpOwotICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpJT1N1cmZhY2VUZXh0dXJl
VGFyZ2V0LCBtX3RleHR1cmUsIDApOwotI2VsaWYgUExBVEZPUk0oR1RLKQotICAgIGdsOjpCaW5k
VGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0dXJlKTsKLSAgICBnbDo6
VGV4SW1hZ2UyRChHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCwgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
MCk7Ci0gICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4dHVyZSwgMCk7
Ci0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICAg
ICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDAsIG1faW50ZXJu
YWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVE
X0JZVEUsIDApOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QU5HTEUsIDApOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QU5HTEUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7Ci0gICAgICAgIGdsOjpUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICAgICAg
Z2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwKTsKLSAgICB9Ci0j
ZWxzZQotI2Vycm9yIEZJWE1FOiBQb3J0IHRvIG5vbi1Db2NvYSBwbGF0Zm9ybXMuCi0jZW5kaWYg
Ly8gUExBVEZPUk0oQ09DT0EpCi0KLSAgICBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5l
ZWRlZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBi
b29sIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0g
ICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOwotICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQot
ICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX2ZibykKLSAgICAgICAgICAgIG11c3RSZXN0b3Jl
RkJPID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG11c3RSZXN0b3JlRkJPOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRl
ZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmICgh
YXR0cnMuYW50aWFsaWFzICYmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSkgewotICAg
ICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVS
LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIC8v
IFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRoYXQgY29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5k
ZXJidWZmZXJzCi0gICAgICAgIC8vIGhhdmUgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHN5bnRoZXRp
YyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgcG9pbnQuCi0gICAgICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpICYmIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID09IEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTKQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChhdHRy
cy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdM
X0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgICAgICB9Ci0gICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZF
UiwgMCk7Ci0gICAgfQotCi0gICAgaWYgKGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMX0ZS
QU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAvLyBGSVhN
RTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWRTY2lzc29y
KEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeUFOR0xFU2V0dGluZyBz
Y29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxTRSk7Ci0KLSAgICBHTGludCBib3VuZEZyYW1l
QnVmZmVyOwotICAgIGdsOjpHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmYm91
bmRGcmFtZUJ1ZmZlcik7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVG
RkVSX0FOR0xFLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdM
X0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUsIG1fZmJvKTsKLQotICAgIC8vIEZJWE1FOiBmaWd1cmUg
b3V0IG1vcmUgZWZmaWNpZW50IHNvbHV0aW9uIGZvciBpT1MuCi0gICAgSW50UmVjdCByZXNvbHZl
UmVjdCA9IHJlY3Q7Ci0gICAgLy8gV2hlbiB1c2luZyBhbiBFUyAyLjAgY29udGV4dCwgdGhlIGZ1
bGwgZnJhbWVidWZmZXIgbXVzdCBhbHdheXMgYmUKLSAgICAvLyByZXNvbHZlZDsgcGFydGlhbCBi
bGl0cyBhcmUgbm90IGFsbG93ZWQuCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgfHwgcmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc29sdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJl
bnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKLQotICAgIGdsOjpCbGl0RnJhbWVidWZmZXJBTkdM
RShyZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCBy
ZXNvbHZlUmVjdC5tYXhZKCksIHJlc29sdmVSZWN0LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNv
bHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1heFkoKSwgR0xfQ09MT1JfQlVGRkVSX0JJVCwg
R0xfTkVBUkVTVCk7Ci0gICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYm91
bmRGcmFtZUJ1ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgTUFYX1RFWFRVUkVfU0laRToKLSAg
ICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKLSAgICAgICAg
aWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUo
KSkKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWluKDQwOTYsICp2YWx1ZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAgICAgICAgZ2w6
OkdldEludGVnZXJ2KE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKLSAgICAgICAg
aWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUo
KSkKLSAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWluKDEwMjQsICp2YWx1ZSk7Ci0gICAgICAg
IGJyZWFrOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBTb21lIG9sZGVyIGhhcmR3YXJlIGFk
dmVydGlzZXMgYSBsYXJnZXIgbWF4aW11bSB0aGFuIHRoZXkKLSAgICAvLyBjYW4gYWN0dWFsbHkg
aGFuZGxlLiBSYXRoZXIgdGhhbiBkZXRlY3Rpbmcgc3VjaCBkZXZpY2VzLCBzaW1wbHkKLSAgICAv
LyBjbGFtcCB0aGUgbWF4aW11bSB0byA4MTkyLCB3aGljaCBpcyBiaWcgZW5vdWdoIGZvciBhIDVL
IGRpc3BsYXkuCi0gICAgY2FzZSBNQVhfUkVOREVSQlVGRkVSX1NJWkU6Ci0gICAgICAgIGdsOjpH
ZXRJbnRlZ2VydihNQVhfUkVOREVSQlVGRkVSX1NJWkUsIHZhbHVlKTsKLSAgICAgICAgKnZhbHVl
ID0gc3RkOjptaW4oODE5MiwgKnZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhf
VklFV1BPUlRfRElNUzoKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9WSUVXUE9SVF9ESU1T
LCB2YWx1ZSk7Ci0gICAgICAgIHZhbHVlWzBdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMF0pOwot
ICAgICAgICB2YWx1ZVsxXSA9IHN0ZDo6bWluKDgxOTIsIHZhbHVlWzFdKTsKLSAgICAgICAgYnJl
YWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBnbDo6R2V0SW50ZWdlcnYocG5hbWUs
IHZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBl
LCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQotewotICAgIFVOVVNFRF9QQVJB
TShzaGFkZXJUeXBlKTsKLSAgICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVChwcmVjaXNpb24p
OwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5
cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SElHSF9JTlQ6Ci0gICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGEgMzItYml0IHR3b3Mt
Y29tcGxlbWVudCBpbnRlZ2VyIGZvcm1hdC4KLSAgICAgICAgcmFuZ2VbMF0gPSAzMTsKLSAgICAg
ICAgcmFuZ2VbMV0gPSAzMDsKLSAgICAgICAgcHJlY2lzaW9uWzBdID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0ZMT0FUOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpISUdIX0ZMT0FUOgotICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGZvciBhbiBJRUVFIHNp
bmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LgotICAgICAgICByYW5nZVswXSA9
IDEyNzsKLSAgICAgICAgcmFuZ2VbMV0gPSAxMjc7Ci0gICAgICAgIHByZWNpc2lvblswXSA9IDIz
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
KQotewotICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFt
cGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBnbDo6RGVwdGhSYW5nZWYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHpGYXIpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aChHQzNEY2xhbXBmIGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpDbGVhckRlcHRoZihzdGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsKLX0KLQotRXh0ZW5zaW9u
czNEJiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4
dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNE
QU5HTEU+KHRoaXMpOwotICAgIHJldHVybiAqbV9leHRlbnNpb25zOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
dm9pZCogZGF0YSkKLXsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxs
cyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAotICAgIC8vIGFsbCBwcmV2aW91
cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpGbHVzaCgpOwotICAgIGF1dG8gYXR0
cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9z
dGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0
aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7Ci0gICAg
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgICAgIGdsOjpGbHVzaCgpOwotICAgIH0KLSAgICBnbDo6UmVhZFBpeGVscyh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAg
ICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKCFhdHRycy5hbHBo
YSAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QkdSQSkgJiYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8gfHwgKGF0
dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkK
LSAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpKTsKLSNlbmRpZgotfQotCi0KLS8vIFRoZSBjb250
ZW50cyBvZiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbiBmb2xsb3csIHBvcnRlZCB0byB1
c2UgQU5HTEUuCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2ls
KGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKLXsKLSAgICBFeHRlbnNp
b25zM0QmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgYXV0byBhdHRycyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBp
ZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7Ci0g
ICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uKTsKLSAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4K
LSAgICAgICAgICAgIGF0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBhdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVz
KGF0dHJzKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewotICAgICAgICAvLyBG
SVhNRTogbXVzdCBhZGp1c3QgdGhpcyB3aGVuIHVwZ3JhZGluZyB0byBXZWJHTCAyLjAgLyBPcGVu
R0wgRVMgMy4wIHN1cHBvcnQuCi0gICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xf
QU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSB8fCAhZXh0ZW5zaW9ucy5zdXBwb3J0cygi
R0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpIHx8ICFleHRlbnNpb25zLnN1cHBvcnRzKCJHTF9P
RVNfcmdiOF9yZ2JhOCIpKSB7Ci0gICAgICAgICAgICBhdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsK
LSAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUiKTsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxl
ZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpOwotICAgICAgICAgICAgZXh0ZW5zaW9ucy5l
bnN1cmVFbmFibGVkKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJ
bWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCi17Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJm
bG93PiByb3dCeXRlcyA9IENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50V2lk
dGgpICogNDsKLSAgICBpZiAocm93Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2Vk
ID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7Ci0gICAgaWYgKHRvdGFsQnl0ZXNDaGVja2Vk
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCB0b3RhbEJ5dGVzID0g
dG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7Ci0KLSAgICBhdXRvIHBpeGVscyA9IG1ha2VV
bmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPih0b3RhbEJ5dGVzKTsKLSAgICBpZiAoIXBpeGVscykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVhZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgp
LCB0b3RhbEJ5dGVzKTsKLQotICAgIGlmICghY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBs
aWVkQWxwaGEpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9
IDQpIHsKLSAgICAgICAgICAgIC8vIFByZW11bHRpcGx5IGFscGhhLgotICAgICAgICAgICAgcGl4
ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10g
LyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxz
W2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwotICAgICAgICAgICAgcGl4ZWxzW2kgKyAy
XSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNp
emUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVmZmVyLT5pbnRlcm5h
bFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkg
JiYgVVNFKE9QRU5HTF9FUykKLSAgICAvLyBGSVhNRTogd29yayBvbiBpT1MgaW50ZWdyYXRpb24u
Ci0gICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOwotI2VuZGlmCi19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCi17
Ci0gICAgLy8gTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50LCBzbyByZXR1cm4gdGhhdCBub3RoaW5n
IHdhcyBkb25lLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotUmVmUHRyPEltYWdlRGF0YT4gR3Jh
cGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAg
ICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRp
cGx5aW5nLCB3aGljaCBpcwotICAgIC8vIGxvc3N5LgotICAgIGlmIChjb250ZXh0QXR0cmlidXRl
cygpLnByZW11bHRpcGxpZWRBbHBoYSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0
YS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0b3Rh
bEJ5dGVzQ2hlY2tlZCA9IDQgKiBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVu
dFdpZHRoKSAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50SGVpZ2h0KTsK
LSAgICBpZiAodG90YWxCeXRlc0NoZWNrZWQuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gaW1hZ2VEYXRhOwotICAgIGludCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5z
YWZlR2V0KCk7Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFsQnl0ZXMp
OwotCi0gICAgLy8gQ29udmVydCB0byBSR0JBLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90
YWxCeXRlczsgaSArPSA0KQotICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSAr
IDJdKTsKLQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnByZXBhcmVUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKQotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgc3RkOjpz
d2FwKG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgc3RkOjpzd2FwKG1fdGV4
dHVyZSwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZS
QU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5H
TEUsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2w6OkZsdXNoKCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5i
b3VuZEZCTyAhPSBtX2ZibykKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOwotICAgIGVsc2UKLSAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKLSNlbHNlCi0gICAgZ2w6OkZsdXNoKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBp
bnQgcGl4ZWxzU2l6ZSkKLXsKLSAgICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICog
bV9jdXJyZW50SGVpZ2h0ICogNCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKGNv
bnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBs
aW5nSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0
cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJv
KSB7Ci0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICBnbDo6
QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7Ci0gICAgYm9v
bCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBnbDo6R2V0SW50ZWdlcnYo
R0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKLSAgICBpZiAocGFja0FsaWdubWVu
dCA+IDQpIHsKLSAgICAgICAgZ2w6OlBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsK
LSAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KDAsIDAsIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQsIHBpeGVscyk7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxp
Z25tZW50KQotICAgICAgICBnbDo6UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tB
bGlnbm1lbnQpOwotCi0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICBnbDo6QmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZC
Tyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQotewotICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09
IG1fY3VycmVudEhlaWdodCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHdpZHRoID49
IDAgJiYgaGVpZ2h0ID49IDApOwotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBtX2N1cnJl
bnRXaWR0aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgVGVt
cG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxT
RSk7Ci0gICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdM
X0ZBTFNFKTsKLQotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsK
LQotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxvYXQgY2xl
YXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGludCBjbGVh
clN0ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9U
UlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBHTHVpbnQg
c3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZmOwot
ICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAgICBnbDo6
R2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICBnbDo6Q2xl
YXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBnbDo6R2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVN
QVNLLCBjb2xvck1hc2spOwotICAgIGdsOjpDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRSwgR0xfVFJVRSk7Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIGdsOjpHZXRG
bG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoMSk7Ci0gICAgICAgIGdsOjpHZXRCb29sZWFudihHTF9E
RVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwotICAgICAgICBnbDo6RGVwdGhNYXNrKEdMX1RS
VUUpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0g
ICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5D
SUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAgICAgICBnbDo6Q2xlYXJTdGVuY2ls
KDApOwotICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50
ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKLSAgICAgICAgZ2w6OkdldEludGVn
ZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigm
c3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZS
T05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFD
SywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQ7Ci0gICAgfQotCi0gICAgZ2w6OkNsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICBnbDo6Q2xlYXJD
b2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNv
bG9yWzNdKTsKLSAgICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBj
b2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICBn
bDo6RGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2lsKSB7
Ci0gICAgICAgIGdsOjpDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgZ2w6OlN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgZ2w6OlN0
ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0KLSAg
ICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLQotICAgIGdsOjpG
bHVzaCgpOwotfQotCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRl
eHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKLSAgICBnbDo6QWN0aXZlVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGdsOjpBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBB
U1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGds
OjpCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGZibzsKLSAgICBp
ZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAgZWxzZQotICAgICAgICBmYm8g
PSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9m
Ym8pOwotICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZEZCTykgewotICAgICAgICBnbDo6Qmlu
ZEZyYW1lYnVmZmVyKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IGZi
bzsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJl
bmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUo
R0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3Rp
dmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKLSAgICBnbDo6QmluZFRleHR1cmUodGFy
Z2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihH
QzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xh
bXBmIGFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCbGVuZENv
bG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGdsOjpCbGVuZEVxdWF0aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0g
bW9kZUFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpCbGVuZEVx
dWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3Is
IGRmYWN0b3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0
ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdD
M0RlbnVtIGRzdEFscGhhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpC
bGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRh
dGEsIHVzYWdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6QnVm
ZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQqIEdyYXBo
aWNzQ29udGV4dDNEOjptYXBCdWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIg
b2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2UodGFy
Z2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0M0Q6OnVubWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdldCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtIHJlYWRUYXJn
ZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQsIEdDM0RpbnRw
dHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGdsOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdl
dCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0MzRGludCog
cGFyYW1zKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRJbnRlcm5h
bGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
c2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpU
ZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5k
VGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3RvcmFnZTNEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpUZXhTdG9yYWdlM0QodGFyZ2V0LCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Ci0gICAgbV9zdGF0
ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdD
M0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4mIHBhcmFtcykKLXsKLSAgICBBU1NFUlQocHJv
Z3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbDo6R2V0QWN0aXZlVW5p
Zm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRh
dGEoKSwgcG5hbWUsIHBhcmFtcy5kYXRhKCkpOwotfQotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRl
eHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNs
YW1wZiByLCBHQzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q2xlYXIobWFzayk7Ci0gICAgY2hl
Y2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2ls
KEdDM0RpbnQgcykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q2xlYXJT
dGVuY2lsKHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJv
b2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xl
YW4gYWxwaGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNvbG9yTWFz
ayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNo
YWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgLy8gV2UgbmVlZCB0aGlzIGV4
dGVuc2lvbiB0byBzdXBwb3J0IElPU3VyZmFjZSBiYWNrYnVmZmVycywgYnV0IHdlCi0gICAgLy8g
ZG9uJ3Qgd2FudCBpdCBleHBvc2VkIHRvIFdlYkdMIHVzZXIgc2hhZGVycy4gVGVtcG9yYXJpbHkg
ZGlzYWJsZQotICAgIC8vIGl0IGR1cmluZyBzaGFkZXIgY29tcGlsYXRpb24uCi0gICAgZ2w6OkRp
c2FibGVFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiKTsKLSAgICBn
bDo6Q29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUo
IkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAg
QVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkNvbXBp
bGVTaGFkZXIoc2hhZGVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
YXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cnMuYW50aWFs
aWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICBy
ZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdo
dCkpOwotICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICBnbDo6Q29weVRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAg
aWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pCi0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAg
ICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7Ci0gICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotICAgIGdsOjpDb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykKLSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsOjpDdWxsRmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVw
dGhGdW5jKEdDM0RlbnVtIGZ1bmMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2w6OkRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhN
YXNrKEdDM0Rib29sZWFuIGZsYWcpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
Z2w6OkRlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNo
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Ci17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRpc2FibGUoY2FwKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGlu
ZGV4KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3QXJy
YXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwg
Y291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVt
IHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsOjpEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKLSAgICBjaGVja0dQVVN0
YXR1cygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2Fw
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpFbmFibGUoY2FwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVp
bnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmlu
aXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6RmluaXNoKCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbDo6Rmx1c2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50
LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgZ2w6OkZyb250RmFjZShtb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgaWYgKCFw
cm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7Ci0g
ICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FU
VFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCi0gICAgR0xzaXpl
aSBuYW1lTGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9
IDA7Ci0gICAgZ2w6OkdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRl
U2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOwotICAgIGlmICgh
bmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW5mby5uYW1lID0gU3Ry
aW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAg
IGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIHJldHVybiBnZXRBY3RpdmVBdHRy
aWJJbXBsKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBtYXhVbmlm
b3JtU2l6ZSA9IDA7Ci0gICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotCi0gICAgVmVjdG9yPEdMY2hhcj4g
bmFtZShtYXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5j
bHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAg
IEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICBnbDo6R2V0QWN0aXZl
VW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6
ZSwgJnR5cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxl
bmd0aCk7Ci0gICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlm
b3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
IGluZm8pCi17Ci0gICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGluZGV4
LCBpbmZvKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJz
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkq
IGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQotewotICAgIGlmICghcHJvZ3JhbSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0QXR0YWNo
ZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Ci19Ci0KLWludCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICBy
ZXR1cm4gLTE7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHJldHVybiBnbDo6
R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotaW50
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIFNldCBhbiBhcmJp
dHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCi0gICAg
Ly8gYSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xl
YXIgdGhlIGVycm9yLgotICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGls
IHdlIGdvdCBOT19FUlJPUi4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kp
IHsKLSAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBnbDo6R2V0RXJyb3IoKTsKLSAgICAgICAgaWYg
KGVycm9yID09IE5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3ludGhl
dGljRXJyb3JzLmFkZChlcnJvcik7Ci0gICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEVycm9yKCkKLXsKLSAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHko
KSkgewotICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBz
eW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCi0gICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxy
ZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKLSAgICAgICAg
Ly8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBj
b2RlIG9uY2UuCi0gICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
ICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7Ci0gICAgfQotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpHZXRFcnJvcigpOwotfQotCi1T
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6SGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1H
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVmZmVy
KTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChHQzNEZW51
bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc0Vu
YWJsZWQoY2FwKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVm
ZmVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICByZXR1cm4gZ2w6OklzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHByb2dy
YW0pOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIo
UGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQotR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KQotewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OklzU2hhZGVyKHNoYWRlcik7Ci19
Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGdsOjpJc1RleHR1
cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNE
ZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkxpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkxpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6UGl4ZWxTdG9y
ZWkocG5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9m
ZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUs
IEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6U2Np
c3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4KCk7
Ci0gICAgY29uc3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5k
YXRhKCk7Ci0gICAgaW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgZ2w6OlNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3VyY2VQ
dHIsICZzaGFkZXJTb3VyY2VMZW5ndGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6U3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFz
aykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6U3RlbmNpbEZ1bmNTZXBh
cmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpTdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKGZh
Y2UsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3AoR0MzRGVu
dW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBm
YWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJh
bWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJn
ZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFt
ZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2YWx1ZSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0YXJnZXQs
IHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBj
b25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9y
bTJmKGxvY2F0aW9uLCB2MCwgdjEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQq
IGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiAyLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0
aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0z
ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0
IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtM2YobG9j
YXRpb24sIHYwLCB2MSwgdjIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYy
LCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVu
aWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25z
dCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlm
b3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgdjAsIEdDM0RpbnQgdjEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6
OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0Mz
RGludCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0yaXYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdDM0RpbnQg
djIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm0zaShsb2Nh
dGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0z
aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RpbnQqIGFycmF5
KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtM2l2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00aShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50
IHYzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3JtNGkobG9j
YXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5p
Zm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCog
YXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlVuaWZvcm00aXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1h
dHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsOjpVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
QzNEZmxvYXQqIGFycmF5KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA5LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVbmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5
KQotewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGdsOjpVc2VQcm9ncmFtKHByb2dyYW0pOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
KQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYjFmKGluZGV4LCB2
MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBh
cnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmli
MmZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZs
b2F0IHYyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpWZXJ0ZXhBdHRy
aWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmliM2Z2KGluZGV4
LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBH
QzNEZmxvYXQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRl
eEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBh
cnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6VmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0
dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwg
R0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZz
ZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlZlcnRleEF0dHJpYlBv
aW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGdsOjpWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVmVydGV4QXJyYXkoKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBhcnJheSA9IDA7Ci0gICAgZ2w6OkdlblZl
cnRleEFycmF5cygxLCAmYXJyYXkpOwotICAgIHJldHVybiBhcnJheTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkK
LXsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgZ2w6OkRlbGV0ZVZlcnRleEFycmF5cygxLCAmYXJyYXkpOwotfQotCi1HQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OklzVmVydGV4QXJyYXkoYXJy
YXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZv
cm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
QmluZFZlcnRleEFycmF5KGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsOjpHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKLX0KLSAgICAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICAqdmFsdWUgPSAwOwotICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRo
aXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcg
YW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCi0g
ICAgLy8gZ2w6OkdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGF0dGFjaG1lbnQgPT0g
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRU
QUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCi0gICAgZ2w6
OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwg
cG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJv
Z3JhbSwgcG5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRV
bm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwgR0MzRHNpemVpIGNv
dW50LCBjb25zdCBTdHJpbmcmIGxvZykKLXsKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVycyk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSAgICBMT0coV2ViR0wsICJPcmlnaW5hbCBTaGFkZXJJ
bmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHBy
b2Nlc3NlZExvZzsKLQotICAgIC8vIEFOR0xFIGluc2VydHMgYSAiI2V4dGVuc2lvbiIgbGluZSBp
bnRvIHRoZSBzaGFkZXIgc291cmNlIHRoYXQKLSAgICAvLyBjYXVzZXMgYSB3YXJuaW5nIGluIHNv
bWUgY29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5nCi0gICAgLy8gdGhpcyB3YXJu
aW5nIHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRlIHRoZSBjb2RlIHRoYXQKLSAg
ICAvLyBpcyBjYXVzaW5nIGl0LgotICAgIHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVuc2lvbiAnR0xfQVJCX2dwdV9z
aGFkZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKLSAgICBpbnQgc3RhcnRGcm9tID0gbG9n
LnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2FybmluZy5nZXQoKS5sZW5ndGgoKSA6
IDA7Ci0gICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwgbG9n
Lmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7Ci0KLSAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQgU2hh
ZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwotfQotCi1TdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkK
LXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBHTGludCBsZW5ndGggPSAwOwotICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5G
T19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4g
aW5mbyhsZW5ndGgpOwotICAgIGdsOjpHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgs
ICZzaXplLCBpbmZvLmRhdGEoKSk7Ci0KLSAgICBHQzNEc2l6ZWkgY291bnQ7Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXJzWzJdOwotICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAy
LCAmY291bnQsIHNoYWRlcnMpOwotCi0gICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hh
ZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwg
dmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6Okdl
dFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKLX0KLQotU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQg
bGVuZ3RoID0gMDsKLSAgICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5H
VEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0
aCk7Ci0gICAgZ2w6OkdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZv
LmRhdGEoKSk7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwg
MCB9OwotICAgIHJldHVybiBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhp
bmZvLmRhdGEoKSwgc2l6ZSkpOwotfQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KQotewotICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1m
dihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCog
dmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFVuaWZvcm1m
dihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9u
LCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6
R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0RpbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkdldFZl
cnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpH
ZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotR0MzRHNpemVpcHRy
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBuYW1lKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0x2
b2lkKiBwb2ludGVyID0gMDsKLSAgICBnbDo6R2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgs
IHBuYW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2ZmLCBHQzNEaW50IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBGSVhNRTogd2Ugd2lsbCBu
ZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFn
ZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUuCi0gICAgZ2w6OlRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9z
dGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpDb21wcmVzc2VkVGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBp
bWFnZVNpemUsIGRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbDo6Q29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi1QbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvID0gMDsKLSAgICBnbDo6R2VuQnVmZmVycygxLCAm
byk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbyk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVBy
b2dyYW0oKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbDo6Q3Jl
YXRlUHJvZ3JhbSgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdM
dWludCBvID0gMDsKLSAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbyk7Ci0gICAgcmV0dXJu
IG87Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRl
cihHQzNEZW51bSB0eXBlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVy
biBnbDo6Q3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVO
VF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbyk7Ci0gICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEZWxldGVCdWZmZXJzKDEs
ICZidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZl
cihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRkJPKSB7Ci0gICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9y
IGRyYXdpbmcKLSAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCi0g
ICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotICAgIGdsOjpE
ZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OkRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBn
bDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsOjpEZWxldGVTaGFkZXIoc2hhZGVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zdGF0ZS5i
b3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewotICAg
ICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKLSAgICB9KTsKLSAg
ICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwotICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQotewotICAgIC8vIE5lZWQgdG8gbW92
ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCi0gICAg
Ly8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Ig
d2lsbCBnZXQKLSAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2w6OkVycm9yIGJlZm9yZSB0aGUgZXJy
b3Igd2UgYXJlIHN5bnRoZXNpemluZy4KLSAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLSAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3Np
dGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBv
c2l0ZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKLQotICAgIGZvciAoYXV0
byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlk
Q29tcG9zaXRlKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpmb3JjZUNvbnRleHRMb3N0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNs
aWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmZvcmNlQ29u
dGV4dExvc3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVjeWNsZUNvbnRleHQo
KQotewotICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0g
ICAgICAgIGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgZm9yIChh
dXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5k
aXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25z
dCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgZ2w6OlRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJv
cmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3Vu
dC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBnZXRFeHRl
bnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3Vu
dCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0g
ICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlw
ZSwgb2Zmc2V0LCBwcmltY291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdD
M0R1aW50IGRpdmlzb3IpCi17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlz
b3IoaW5kZXgsIGRpdmlzb3IpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jNTFhNTIxYzRiOGE0YzJlZWRlYTg2M2FlZGFkNWE0ZTEwZWJhMTIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAKQEAgLTAsMCArMSwxODM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShBTkdMRSkKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYK
KyNpbmNsdWRlICJFeHRlbnNpb25zR0xBTkdMRS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJUZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU3BlY2lmaWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisj
aW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworLy8gU2tpcCB0aGUg
aW5jbHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5v
dy4KKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9l
eHBsaWNpdF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbmNs
dWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFO
R0xFL2VudHJ5X3BvaW50c19nbGVzXzNfMF9hdXRvZ2VuLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50
cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9nbDJleHQuaD4K
KyNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KKworLy8gTm90ZTogdGhpcyBmaWxlIGNh
bid0IGJlIGNvbXBpbGVkIGluIHRoZSBzYW1lIHVuaWZpZWQgc291cmNlIGZpbGUKKy8vIGFzIG90
aGVycyB3aGljaCBpbmNsdWRlIHRoZSBzeXN0ZW0ncyBPcGVuR0wgaGVhZGVycy4KKworLy8gVGhp
cyBvbmUgZGVmaW5pdGlvbiBzaG9ydC1jaXJjdWl0cyB0aGUgbmVlZCBmb3IgZ2wyZXh0LmgsIHdo
aWNoCisvLyB3b3VsZCBuZWVkIG1vcmUgd29yayB0byBiZSBpbmNsdWRlZCBmcm9tIFdlYkNvcmUu
CisjZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAweDhENTcKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2RlZmluZSBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQgMHg4Q0UwCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCAweDhENDAKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb25OYW1lID0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCI7
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VTaGFkZXJDb21waWxlcigp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworI2lmIFBMQVRGT1JNKE1BQykKK3N0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4
ZWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQoreworICAg
IC8vIFdlIGNhbiBhc3N1bWUgdGhpcyBkb2Vzbid0IG92ZXJmbG93IGJlY2F1c2UgdGhlIGNhbGxp
bmcgZnVuY3Rpb25zCisgICAgLy8gdXNlIGNoZWNrZWQgYXJpdGhtZXRpYy4KKyAgICBpbnQgdG90
YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRv
dGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgcGl4ZWxzW2kgKyAzXSA9IDI1NTsKK30KKyNlbmRp
ZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNp
Z25lZCBjaGFyKiBwaXhlbHMpCit7CisgICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2ZSBhIGJ1ZyB3
aGVyZSBjYWxsaW5nIHJlYWRQaXhlbHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3cm9uZyB2YWx1
ZXMgZm9yIHRoZSBhbHBoYSBjaGFubmVsIHdoZW4gdGhlIGFscGhhIGlzIG9mZiBmb3IgdGhlIGNv
bnRleHQuCisgICAgZ2w6OlJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICB2SW1h
Z2VfQnVmZmVyIHNyYzsKKyAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHNyYy53aWR0aCA9
IHdpZHRoOworICAgIHNyYy5yb3dCeXRlcyA9IHdpZHRoICogNDsKKyAgICBzcmMuZGF0YSA9IHBp
eGVsczsKKworICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICBkZXN0LmhlaWdodCA9IGhlaWdo
dDsKKyAgICBkZXN0LndpZHRoID0gd2lkdGg7CisgICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICog
NDsKKyAgICBkZXN0LmRhdGEgPSBwaXhlbHM7CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IGZyb20gUkdCQSB0byBCR1JBLgorICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAw
LCAzIH07CisgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBt
YXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyNlbHNlCisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAq
IGhlaWdodCAqIDQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQp
CisgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOworI2VuZGlmCisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFjb250ZXh0QXR0cmlidXRlcygpLmFscGhhKQor
ICAgICAgICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMp
OworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0
cmlidXRlcygpCit7CisgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwocGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uTmFtZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hh
cGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7CisgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGNv
bnN0IGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIEdMdWludCBjb2xvckZvcm1hdCwg
aW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOworICAgIGlmIChhdHRycy5hbHBoYSkgewor
ICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBODsKKyAgICAgICAgY29sb3JG
b3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZv
cm1hdCA9IEdMX1JHQjg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAg
ICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24n
dCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMg
bm90LgorICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlQXR0
cmlidXRlcy4KKworICAgICAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNp
b25zKCk7CisgICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25v
dyB3ZSBoYXZlIGl0LgorICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25OYW1lKSkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7Cisg
ICAgfQorCisgICAgLy8gUmVzaXplIG11bHRpc2FtcGxlIEZCTy4KKyAgICBpZiAoYXR0cnMuYW50
aWFsaWFzKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICBnbDo6R2V0
SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfQU5HTEUsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAg
IC8vIFVzaW5nIG1vcmUgdGhhbiA0IHNhbXBsZXMgaXMgc2xvdyBvbiBzb21lIGhhcmR3YXJlIGFu
ZCBpcyB1bmxpa2VseSB0bworICAgICAgICAvLyBwcm9kdWNlIGEgc2lnbmlmaWNhbnRseSBiZXR0
ZXIgcmVzdWx0LgorICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQsIG1heFNh
bXBsZUNvdW50KTsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRF
UkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgZ2V0RXh0ZW5zaW9u
cygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBs
ZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBn
bDo6RnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICBnbDo6
QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRo
U3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAvLyBXZWJHTCAxLjAn
cyBydWxlcyBzdGF0ZSB0aGF0IGNvbWJpbmVkIGRlcHRoL3N0ZW5jaWwgcmVuZGVyYnVmZmVycwor
ICAgICAgICAgICAgLy8gaGF2ZSB0byBiZSBhdHRhY2hlZCB0byB0aGUgc3ludGhldGljIERFUFRI
X1NURU5DSUxfQVRUQUNITUVOVCBwb2ludC4KKyAgICAgICAgICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpICYmIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID09IEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTKQorICAgICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgIGdsOjpG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgICAgICAgICAgICAgIGlmIChhdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hN
RU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgMCk7CisgICAgICAgIGlmIChnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHTF9GUkFNRUJVRkZFUikgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTworICAgIGdsOjpCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICBBU1NFUlQobV90ZXh0dXJl
KTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0
b3JlKEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIHVwZGF0ZUZyYW1lYnVmZmVyVGV4dHVy
ZUJhY2tpbmdTdG9yZUZyb21MYXllcigpOworICAgIGdsOjpGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dEdMOjpJ
T1N1cmZhY2VUZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUsIDApOworI2VsaWYgUExBVEZPUk0oR1RL
KQorICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90ZXh0
dXJlKTsKKyAgICBnbDo6VGV4SW1hZ2UyRChHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCwg
bV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xf
VU5TSUdORURfQllURSwgMCk7CisgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IG1fdGV4dHVyZSwgMCk7CisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAg
Z2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX2NvbXBvc2l0b3JU
ZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleEltYWdlMkQoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5H
TEUsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3Jt
YXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOworICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAgICAgIGds
OjpUZXhJbWFnZTJEKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwLCBtX2ludGVybmFsQ29s
b3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRF
LCAwKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xF
LCAwKTsKKyAgICB9CisjZWxzZQorI2Vycm9yIEZJWE1FOiBQb3J0IHRvIG5vbi1Db2NvYSBwbGF0
Zm9ybXMuCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCisKKyAgICBhdHRhY2hEZXB0aEFuZFN0
ZW5jaWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICBpZiAoYXR0cnMu
YW50aWFsaWFzKSB7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKQorICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX2ZibykKKyAgICAgICAg
ICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG11c3RSZXN0
b3JlRkJPOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hEZXB0aEFu
ZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQs
IGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKKworICAgIGlmICghYXR0cnMuYW50aWFsaWFzICYmIChhdHRycy5zdGVuY2lsIHx8
IGF0dHJzLmRlcHRoKSkgeworICAgICAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJC
VUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRoYXQgY29tYmlu
ZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCisgICAgICAgIC8vIGhhdmUgdG8gYmUgYXR0
YWNoZWQgdG8gdGhlIHN5bnRoZXRpYyBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgcG9pbnQuCisg
ICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID09IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTKQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQs
IEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGdsOjpGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
LCBHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlm
IChhdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwg
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGdsOjpCaW5kUmVuZGVy
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgfQorCisgICAgaWYgKGdsOjpDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSkgeworICAgICAgICAvLyBGSVhNRTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFRlbXBvcmFy
eUFOR0xFU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwor
ICAgIFRlbXBvcmFyeUFOR0xFU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxT
RSk7CisKKyAgICBHTGludCBib3VuZEZyYW1lQnVmZmVyOworICAgIGdsOjpHZXRJbnRlZ2VydihH
TF9GUkFNRUJVRkZFUl9CSU5ESU5HLCAmYm91bmRGcmFtZUJ1ZmZlcik7CisgICAgZ2w6OkJpbmRG
cmFtZWJ1ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFLCBtX211bHRpc2FtcGxlRkJPKTsK
KyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVJfQU5HTEUsIG1fZmJv
KTsKKworICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IG1vcmUgZWZmaWNpZW50IHNvbHV0aW9uIGZv
ciBpT1MuCisgICAgSW50UmVjdCByZXNvbHZlUmVjdCA9IHJlY3Q7CisgICAgLy8gV2hlbiB1c2lu
ZyBhbiBFUyAyLjAgY29udGV4dCwgdGhlIGZ1bGwgZnJhbWVidWZmZXIgbXVzdCBhbHdheXMgYmUK
KyAgICAvLyByZXNvbHZlZDsgcGFydGlhbCBibGl0cyBhcmUgbm90IGFsbG93ZWQuCisgICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkgfHwgcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc29sdmVS
ZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKwor
ICAgIGdsOjpCbGl0RnJhbWVidWZmZXJBTkdMRShyZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0
LnkoKSwgcmVzb2x2ZVJlY3QubWF4WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIHJlc29sdmVSZWN0
LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCksIHJlc29sdmVSZWN0Lm1h
eFkoKSwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTkVBUkVTVCk7CisgICAgZ2w6OkJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYm91bmRGcmFtZUJ1ZmZlcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgc3dpdGNoIChw
bmFtZSkgeworICAgIGNhc2UgTUFYX1RFWFRVUkVfU0laRToKKyAgICAgICAgZ2w6OkdldEludGVn
ZXJ2KE1BWF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMo
KS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKKyAgICAgICAgICAgICp2
YWx1ZSA9IHN0ZDo6bWluKDQwOTYsICp2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgaWYgKGdldEV4dGVuc2lvbnMo
KS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUoKSkKKyAgICAgICAgICAgICp2
YWx1ZSA9IHN0ZDo6bWluKDEwMjQsICp2YWx1ZSk7CisgICAgICAgIGJyZWFrOworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICAvLyBTb21lIG9sZGVyIGhhcmR3YXJlIGFkdmVydGlzZXMgYSBsYXJnZXIg
bWF4aW11bSB0aGFuIHRoZXkKKyAgICAvLyBjYW4gYWN0dWFsbHkgaGFuZGxlLiBSYXRoZXIgdGhh
biBkZXRlY3Rpbmcgc3VjaCBkZXZpY2VzLCBzaW1wbHkKKyAgICAvLyBjbGFtcCB0aGUgbWF4aW11
bSB0byA4MTkyLCB3aGljaCBpcyBiaWcgZW5vdWdoIGZvciBhIDVLIGRpc3BsYXkuCisgICAgY2Fz
ZSBNQVhfUkVOREVSQlVGRkVSX1NJWkU6CisgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfUkVO
REVSQlVGRkVSX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgKnZhbHVlID0gc3RkOjptaW4oODE5Miwg
KnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNQVhfVklFV1BPUlRfRElNUzoKKyAg
ICAgICAgZ2w6OkdldEludGVnZXJ2KE1BWF9WSUVXUE9SVF9ESU1TLCB2YWx1ZSk7CisgICAgICAg
IHZhbHVlWzBdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMF0pOworICAgICAgICB2YWx1ZVsxXSA9
IHN0ZDo6bWluKDgxOTIsIHZhbHVlWzFdKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBk
ZWZhdWx0OgorICAgICAgICBnbDo6R2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1h
dChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiBy
YW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQoreworICAgIFVOVVNFRF9QQVJBTShzaGFkZXJUeXBl
KTsKKyAgICBBU1NFUlQocmFuZ2UpOworICAgIEFTU0VSVChwcmVjaXNpb24pOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9JTlQ6Cisg
ICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGEgMzItYml0IHR3b3MtY29tcGxlbWVudCBp
bnRlZ2VyIGZvcm1hdC4KKyAgICAgICAgcmFuZ2VbMF0gPSAzMTsKKyAgICAgICAgcmFuZ2VbMV0g
PSAzMDsKKyAgICAgICAgcHJlY2lzaW9uWzBdID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TE9XX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6Ok1FRElVTV9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpISUdIX0ZMT0FU
OgorICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGZvciBhbiBJRUVFIHNpbmdsZS1wcmVjaXNp
b24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LgorICAgICAgICByYW5nZVswXSA9IDEyNzsKKyAgICAg
ICAgcmFuZ2VbMV0gPSAxMjc7CisgICAgICAgIHByZWNpc2lvblswXSA9IDIzOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQorewor
ICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aFJhbmdlKEdDM0RjbGFt
cGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6RGVwdGhSYW5nZWYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHpGYXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsOjpDbGVhckRlcHRoZihzdGF0aWNfY2FzdDxmbG9hdD4oZGVwdGgpKTsKK30KKworRXh0
ZW5zaW9uc0dMJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7Cisg
ICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8
RXh0ZW5zaW9uc0dMQU5HTEU+KHRoaXMpOworICAgIHJldHVybiAqbV9leHRlbnNpb25zOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
ZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAor
ICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3Jl
IHJlYWRpbmcgcGl4ZWxzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpGbHVz
aCgpOworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworICAgIGlmIChhdHRy
cy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0
aCwgaGVpZ2h0KSk7CisgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIGdsOjpGbHVzaCgpOworICAgIH0KKyAg
ICBnbDo6UmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKQorICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgaWYgKCFhdHRycy5hbHBoYSAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JB
IHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHRHTDo6QkdSQSkgJiYgKG1fc3RhdGUuYm91bmRG
Qk8gPT0gbV9mYm8gfHwgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pKSkKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lk
dGgsIGhlaWdodCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpKTsKKyNlbmRpZgor
fQorCisKKy8vIFRoZSBjb250ZW50cyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbiBm
b2xsb3csIHBvcnRlZCB0byB1c2UgQU5HTEUuCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvbikKK3sKKyAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25z
KCk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0
cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoZXh0ZW5zaW9ucy5zdXBwb3J0cyhwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJs
ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIC8vIEZvcmNlIGRl
cHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KKyAgICAgICAgICAgIGF0dHJzLmRlcHRoID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAg
ICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKKyAgICB9CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICAvLyBGSVhNRTogbXVzdCBhZGp1c3QgdGhpcyB3aGVuIHVwZ3Jh
ZGluZyB0byBXZWJHTCAyLjAgLyBPcGVuR0wgRVMgMy4wIHN1cHBvcnQuCisgICAgICAgIGlmICgh
ZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSB8
fCAhZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpIHx8ICFl
eHRlbnNpb25zLnN1cHBvcnRzKCJHTF9PRVNfcmdiOF9yZ2JhOCIpKSB7CisgICAgICAgICAgICBh
dHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVz
KGF0dHJzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJl
RW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpOwor
ICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcmdiOF9yZ2JhOCIp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIpCit7
CisgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiByb3dCeXRlcyA9IENoZWNrZWQ8aW50
LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50V2lkdGgpICogNDsKKyAgICBpZiAocm93Qnl0ZXMu
aGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDaGVja2VkPGludCwgUmVj
b3JkT3ZlcmZsb3c+IHRvdGFsQnl0ZXNDaGVja2VkID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWln
aHQ7CisgICAgaWYgKHRvdGFsQnl0ZXNDaGVja2VkLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGludCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0
KCk7CisKKyAgICBhdXRvIHBpeGVscyA9IG1ha2VVbmlxdWVBcnJheTx1bnNpZ25lZCBjaGFyPih0
b3RhbEJ5dGVzKTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVh
ZFJlbmRlcmluZ1Jlc3VsdHMocGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzKTsKKworICAgIGlmICgh
Y29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEpIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpIHsKKyAgICAgICAgICAgIC8vIFByZW11
bHRpcGx5IGFscGhhLgorICAgICAgICAgICAgcGl4ZWxzW2kgKyAwXSA9IHN0ZDo6bWluKDI1NSwg
cGl4ZWxzW2kgKyAwXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICAgICAgcGl4ZWxz
W2kgKyAxXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kgKyAxXSAqIHBpeGVsc1tpICsgM10gLyAy
NTUpOworICAgICAgICAgICAgcGl4ZWxzW2kgKyAyXSA9IHN0ZDo6bWluKDI1NSwgcGl4ZWxzW2kg
KyAyXSAqIHBpeGVsc1tpICsgM10gLyAyNTUpOworICAgICAgICB9CisgICAgfQorCisgICAgcGFp
bnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCksIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICAvLyBG
SVhNRTogd29yayBvbiBpT1MgaW50ZWdyYXRpb24uCisgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigp
OworI2VuZGlmCit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9z
aXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCit7CisgICAgLy8gTm90IG5lZWRlZCBh
dCB0aGUgbW9tZW50LCBzbyByZXR1cm4gdGhhdCBub3RoaW5nIHdhcyBkb25lLgorICAgIHJldHVy
biBmYWxzZTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICAvLyBSZWFkaW5nIHBy
ZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBp
cworICAgIC8vIGxvc3N5LgorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxp
ZWRBbHBoYSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlRGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRh
KCk7CisgICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9
IDQgKiBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIENoZWNr
ZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4obV9jdXJyZW50SGVpZ2h0KTsKKyAgICBpZiAodG90YWxC
eXRlc0NoZWNrZWQuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwor
ICAgIGludCB0b3RhbEJ5dGVzID0gdG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7CisKKyAg
ICByZWFkUmVuZGVyaW5nUmVzdWx0cyhwaXhlbHMsIHRvdGFsQnl0ZXMpOworCisgICAgLy8gQ29u
dmVydCB0byBSR0JBLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0
KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJl
dHVybiBpbWFnZURhdGE7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBh
cmVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzKCkuYW50aWFsaWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgc3RkOjpzd2FwKG1fdGV4
dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgc3RkOjpzd2FwKG1fdGV4dHVyZSwgbV9p
bnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBtX2Zibyk7CisgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVS
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIG1fdGV4
dHVyZSwgMCk7CisgICAgZ2w6OkZsdXNoKCk7CisKKyAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAh
PSBtX2ZibykKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6
RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOworICAgIGVsc2UKKyAgICAgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyNl
bHNlCisgICAgZ2w6OkZsdXNoKCk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQg
cGl4ZWxzU2l6ZSkKK3sKKyAgICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9j
dXJyZW50SGVpZ2h0ICogNCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgaWYgKGNvbnRl
eHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFzKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVl
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7
CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICBnbDo6Qmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
ICAgICB9CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBt
dXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBnbDo6R2V0SW50ZWdlcnYoR0xf
UEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+
IDQpIHsKKyAgICAgICAgZ2w6OlBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAg
ICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZWFk
UGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KDAsIDAsIG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQsIHBpeGVscyk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50KQorICAgICAgICBnbDo6UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGln
bm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICBnbDo6QmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQoreworICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0
ID09IG1fY3VycmVudEhlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHdpZHRo
ID49IDAgJiYgaGVpZ2h0ID49IDApOworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisKKyAgICBtX2N1
cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAg
VGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9G
QUxTRSk7CisgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIs
IEdMX0ZBTFNFKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNoYXBlRkJPcyhJbnRT
aXplKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMo
KTsKKworICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQg
Y2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBj
bGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBH
TF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVp
bnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmLCBzdGVuY2lsTWFza0JhY2sgPSAweGZmZmZmZmZm
OworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBn
bDo6R2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICBnbDo6
Q2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBnbDo6R2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJ
VEVNQVNLLCBjb2xvck1hc2spOworICAgIGdsOjpDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwg
R0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYgKGF0dHJzLmRlcHRoKSB7CisgICAgICAgIGdsOjpH
ZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoMSk7CisgICAgICAgIGdsOjpHZXRCb29s
ZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAgICBnbDo6RGVwdGhN
YXNrKEdMX1RSVUUpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsK
KyAgICB9CisgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgZ2w6OkdldEludGVnZXJ2
KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOworICAgICAgICBnbDo6Q2xl
YXJTdGVuY2lsKDApOworICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1B
U0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgZ2w6
OkdldEludGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8
R0xpbnQqPigmc3RlbmNpbE1hc2tCYWNrKSk7CisgICAgICAgIGdsOjpTdGVuY2lsTWFza1NlcGFy
YXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJh
dGUoR0xfQkFDSywgMHhmZmZmZmZmZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lM
X0JVRkZFUl9CSVQ7CisgICAgfQorCisgICAgZ2w6OkNsZWFyKGNsZWFyTWFzayk7CisKKyAgICBn
bDo6Q2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJd
LCBjbGVhckNvbG9yWzNdKTsKKyAgICBnbDo6Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JN
YXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKGF0dHJzLmRlcHRo
KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKGNsZWFyRGVw
dGgpOworICAgICAgICBnbDo6RGVwdGhNYXNrKGRlcHRoTWFzayk7CisgICAgfQorICAgIGlmIChh
dHRycy5zdGVuY2lsKSB7CisgICAgICAgIGdsOjpDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsK
KyAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsK
KyAgICAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgc3RlbmNpbE1hc2tCYWNr
KTsKKyAgICB9CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIGdsOjpCaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJP
KTsKKworICAgIGdsOjpGbHVzaCgpOworfQorCitJbnRTaXplIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElu
dFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0g
dGV4dHVyZTsKKyAgICBnbDo6QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAg
IEFTU0VSVChzaGFkZXIpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpBdHRh
Y2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCaW5kQnVmZmVy
KHRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Ymlu
ZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IGZibzsKKyAgICBpZiAoYnVm
ZmVyKQorICAgICAgICBmYm8gPSBidWZmZXI7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAoY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwor
ICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5ib3VuZEZCTykgeworICAgICAgICBnbDo6QmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgZmJvKTsKKyAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IGZibzsKKyAg
ICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJl
bmRlcmJ1ZmZlcik7Cit9CisKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0
ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKKyAgICBnbDo6QmluZFRleHR1
cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBi
bHVlLCBHQzNEY2xhbXBmIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGdsOjpCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCbGVuZEVxdWF0aW9uKG1vZGUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0Mz
RGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsOjpCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhh
KTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0MzRGVu
dW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdD
M0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNS
R0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXpl
LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBz
aXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Cit9CisKK3ZvaWQqIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRw
dHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBHQzNEYml0ZmllbGQgYWNjZXNzKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6TWFwQnVmZmVyUmFuZ2Uo
dGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OlVubWFwQnVmZmVyKHRhcmdldCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRP
ZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFy
Z2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6
ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBu
YW1lLCBidWZTaXplLCBwYXJhbXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6
ZWkgc2FtcGxlcywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsOjpUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50
LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1l
LCBWZWN0b3I8R0MzRGludD4mIHBhcmFtcykKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybXNpdihwcm9n
cmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUs
IHBhcmFtcy5kYXRhKCkpOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdl
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0MzRGNs
YW1wZiByLCBHQzNEY2xhbXBmIGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQzNEYml0ZmllbGQgbWFz
aykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Q2xlYXIobWFzayk7Cisg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6Q2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xl
YW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2w6OkNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgLy8gV2UgbmVlZCB0aGlzIGV4dGVuc2lvbiB0byBzdXBwb3J0IElPU3VyZmFjZSBiYWNr
YnVmZmVycywgYnV0IHdlCisgICAgLy8gZG9uJ3Qgd2FudCBpdCBleHBvc2VkIHRvIFdlYkdMIHVz
ZXIgc2hhZGVycy4gVGVtcG9yYXJpbHkgZGlzYWJsZQorICAgIC8vIGl0IGR1cmluZyBzaGFkZXIg
Y29tcGlsYXRpb24uCisgICAgZ2w6OkRpc2FibGVFeHRlbnNpb25BTkdMRSgiR0xfQU5HTEVfdGV4
dHVyZV9yZWN0YW5nbGUiKTsKKyAgICBnbDo6Q29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIGds
OjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUoIkdMX0FOR0xFX3RleHR1cmVfcmVjdGFuZ2xlIik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgICAgICBnbDo6Qmlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IH0KKyAgICBnbDo6Q29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgaWYgKGF0dHJzLmFudGlhbGlhcyAm
JiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIGdsOjpCaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxl
RkJPKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBhdXRvIGF0dHJz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9z
dGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0
aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAg
ICAgIGdsOjpCaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7CisgICAgfQorICAgIGdsOjpDb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoYXR0cnMuYW50
aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAg
Z2w6OkJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFj
ZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpD
dWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhG
dW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OkRlcHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2w6OkRlcHRoTWFzayhmbGFnKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIEFTU0VSVChzaGFkZXIpOwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwg
c2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQzNE
ZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRpc2FibGUo
Y2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGdsOjpEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBn
bDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVzKCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEcmF3RWxlbWVudHMobW9k
ZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KG9mZnNldCkpKTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RmluaXNoKCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBnbDo6Rmx1c2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVm
ZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBtX3N0YXRlLnRl
eHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0g
dGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZW5lcmF0ZU1p
cG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heEF0dHJpYnV0ZVNpemUgPSAw
OworICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhf
TEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhB
dHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIGluY2x1ZGVz
IG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGlu
dCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7CisgICAgZ2w6OkdldEFjdGl2ZUF0dHJp
Yihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAm
dHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3Ro
KTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZUF0
dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZv
JiBpbmZvKQoreworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGluZGV4
LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5p
Zm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZl
SW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7Cisg
ICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RI
LCAmbWF4VW5pZm9ybVNpemUpOworCisgICAgVmVjdG9yPEdMY2hhcj4gbmFtZShtYXhVbmlmb3Jt
U2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJt
aW5hdGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdMaW50IHNpemUgPSAw
OworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybShwcm9ncmFt
LCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUu
ZGF0YSgpKTsKKyAgICBpZiAoIW5hbWVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7CisgICAgaW5m
by50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7
CisgICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIGluZGV4LCBpbmZvKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNv
dW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQoreworICAgIGlmICghcHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Cit9CisKK2ludCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gLTE7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHJldHVybiBn
bDo6R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwor
aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4g
Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxzZTsKKworICAg
IC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQgY3JlYXRpbmcg
YSBoYW5nIGlmCisgICAgLy8gYSBwcm9ibGVtIGRyaXZlciBoYXMgYSBidWcgdGhhdCBjYXVzZXMg
aXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgorICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQg
anVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBnbDo6R2V0RXJyb3Io
KTsKKyAgICAgICAgaWYgKGVycm9yID09IE5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIG1fc3ludGhldGljRXJyb3JzLmFkZChlcnJvcik7CisgICAgICAgIG1vdmVkQW5FcnJv
ciA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKK30KKworR0MzRGVu
dW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKK3sKKyAgICBpZiAoIW1fc3lu
dGhldGljRXJyb3JzLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1
cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0aWMgZXJyb3IgbGlzdCBpbiBjYXNlCisgICAgICAg
IC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2
aW9yIG9mIGJvdGgKKyAgICAgICAgLy8gZ2xHZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25s
eSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9uY2UuCisgICAgICAgIG1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOworICAgICAgICByZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZp
cnN0KCk7CisgICAgfQorCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGds
OjpHZXRFcnJvcigpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0
cmluZyhHQzNEZW51bSBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJl
dHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2w6OkdldFN0cmluZyhu
YW1lKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpoaW50KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6SGludCh0YXJnZXQsIG1vZGUpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVmZmVyKTsKK30KKworR0MzRGJvb2xl
YW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQzNEZW51bSBjYXApCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIGdsOjpJc0VuYWJsZWQoY2FwKTsK
K30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIo
UGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gZ2w6OklzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHByb2dy
YW0pOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJi
dWZmZXIoUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJi
dWZmZXIpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIHJldHVybiBnbDo6SXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKK30KKwor
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU2hhZGVyKFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6OklzU2hhZGVy
KHNoYWRlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1Rl
eHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
cmV0dXJuIGdsOjpJc1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OkxpbmtQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQg
ZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29s
ZWFuIGludmVydCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U2FtcGxl
Q292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U2Npc3Nv
cih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0
cmluZykKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgY29uc3QgQ1N0cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IHN0cmluZy51dGY4
KCk7CisgICAgY29uc3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmlu
Zy5kYXRhKCk7CisgICAgaW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJp
bmcubGVuZ3RoKCk7CisgICAgZ2w6OlNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTb3Vy
Y2VQdHIsICZzaGFkZXJTb3VyY2VMZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQg
bWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6U3RlbmNpbEZ1bmMo
ZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3Rl
bmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJl
ZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6
U3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpTdGVuY2lsTWFzayhtYXNrKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpT
dGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3Mp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmko
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2YWx1ZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6VW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAyLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
ZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVuaWZvcm00Zihsb2NhdGlvbiwgdjAs
IHYxLCB2MiwgdjMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0
LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtNGZ2KGxvY2F0aW9u
LCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGdsOjpVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgZ2w6OlVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQgdjAsIEdDM0RpbnQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2w6OlVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwg
Y29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDIuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlVu
aWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0Rp
bnQgdjEsIEdDM0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6
OlVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IGNvbnN0IEdDM0RpbnQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpV
bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNE
aW50IHYxLCBHQzNEaW50IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNE
ZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiA0LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5
LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQorewor
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpVc2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtKQoreworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJp
YjFmKGluZGV4LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2
Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihH
QzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQg
djMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJpYjRm
KGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJh
eSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6VmVydGV4QXR0cmliNGZ2
KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlw
ZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBv
ZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OlZlcnRleEF0dHJp
YlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnBy
ZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGdsOjpWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwor
UGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJy
YXkoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBhcnJheSA9IDA7
CisgICAgZ2w6OkdlblZlcnRleEFycmF5cygxLCAmYXJyYXkpOworICAgIHJldHVybiBhcnJheTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlbGV0ZVZlcnRleEFycmF5cygx
LCAmYXJyYXkpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNW
ZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBy
ZXR1cm4gZ2w6OklzVmVydGV4QXJyYXkoYXJyYXkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6QmluZFZlcnRleEFycmF5KGFycmF5KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0g
cG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBnbDo6R2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgZ2w6OkdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGds
OjpHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICAqdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRo
aXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcg
YW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCisg
ICAgLy8gZ2w6OkdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGF0dGFjaG1l
bnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2htZW50ID0gREVQ
VEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCisg
ICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNo
bWVudCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
c1syXSwgR0MzRHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2hhZGVycyk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICBMT0coV2ViR0ws
ICJPcmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsKKworICAgIC8vIEFOR0xFIGluc2VydHMgYSAi
I2V4dGVuc2lvbiIgbGluZSBpbnRvIHRoZSBzaGFkZXIgc291cmNlIHRoYXQKKyAgICAvLyBjYXVz
ZXMgYSB3YXJuaW5nIGluIHNvbWUgY29tcGlsZXJzLiBUaGVyZSBpcyBubyBwb2ludCBzaG93aW5n
CisgICAgLy8gdGhpcyB3YXJuaW5nIHRvIHRoZSB1c2VyIHNpbmNlIHRoZXkgZGlkbid0IHdyaXRl
IHRoZSBjb2RlIHRoYXQKKyAgICAvLyBpcyBjYXVzaW5nIGl0LgorICAgIHN0YXRpYyBjb25zdCBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFuZ2xlV2FybmluZyB7ICJXQVJOSU5HOiAwOjE6IGV4dGVu
c2lvbiAnR0xfQVJCX2dwdV9zaGFkZXI1JyBpcyBub3Qgc3VwcG9ydGVkXG4iX3MgfTsKKyAgICBp
bnQgc3RhcnRGcm9tID0gbG9nLnN0YXJ0c1dpdGgoYW5nbGVXYXJuaW5nKSA/IGFuZ2xlV2Fybmlu
Zy5nZXQoKS5sZW5ndGgoKSA6IDA7CisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3Ry
aW5nKHN0YXJ0RnJvbSwgbG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2Vi
R0wsICJVbm1hbmdsZWQgU2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOwor
fQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIGdsOjpHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAo
IWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9
IDA7CisgICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIGdsOjpHZXRQcm9ncmFt
SW5mb0xvZyhwcm9ncmFtLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQzNE
c2l6ZWkgY291bnQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0
dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJu
IGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwg
c2l6ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6R2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5h
bWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFk
ZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbGVuZ3RoID0gMDsKKyAg
ICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgR0xzaXpl
aSBzaXplID0gMDsKKyAgICBWZWN0b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7CisgICAgZ2w6Okdl
dFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OworICAgIHJldHVy
biBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6
ZSkpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJj
ZShQbGF0Zm9ybTNET2JqZWN0KQoreworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRl
cml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdih0YXJn
ZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6Okdl
dFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbDo6R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9
CisKK0dDM0RpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NF
UlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2w6
OkdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgZ2w6OkdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFs
dWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJp
dihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwg
cG5hbWUsIHZhbHVlKTsKK30KKworR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgR0x2b2lkKiBwb2ludGVyID0gMDsK
KyAgICBnbDo6R2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4ocG9pbnRlcikpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
LCBHQzNEaW50IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwg
d2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRo
YXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUuCisgICAgZ2w6OlRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNp
emUsIGRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJy
ZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbDo6Q29tcHJlc3Nl
ZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRD
b3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCitQbGF0Zm9ybTNE
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbDo6R2VuQnVmZmVy
cygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBHTHVpbnQgbyA9IDA7CisgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAm
byk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBnbDo6Q3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbDo6R2VuUmVuZGVyYnVm
ZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBnbDo6Q3JlYXRlU2hhZGVyKCh0eXBlID09
IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVS
KTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRl
VGV4dHVyZSgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0x1aW50IG8gPSAw
OworICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbyk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRkJPKSB7CisgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcK
KyAgICAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCisgICAgICAgIGJp
bmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorICAgIGdsOjpEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgZ2w6OkRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGdsOjpEZWxldGVTaGFkZXIo
c2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVy
ZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBr
ZXlWYWx1ZSkgeworICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVy
ZTsKKyAgICB9KTsKKyAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQor
eworICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVudCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRp
YyBlcnJvciBsaXN0IHRvCisgICAgLy8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIGVycm9ycywgc28g
YSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKKyAgICAvLyBhbnkgZXJyb3JzIGZyb20gZ2w6
OkVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRoZXNpemluZy4KKyAgICBtb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJy
b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXJrQ29udGV4dENoYW5n
ZWQoKQoreworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG1fbGF5ZXJD
b21wb3NpdGVkID0gdHJ1ZTsKKworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9y
KG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+ZGlkQ29tcG9zaXRlKCk7Cit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpmb3JjZUNvbnRleHRMb3N0KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlU
b1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVjeWNsZUNvbnRleHQoKQorewor
ICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCisgICAgICAg
IGNsaWVudC0+cmVjeWNsZUNvbnRleHQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCit7CisgICAgZm9yIChh
dXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50LT5k
aXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2w6OlRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3sK
KyAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291
bnQsIHByaW1jb3VudCk7CisgICAgY2hlY2tHUFVTdGF0dXMoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXpl
aSBwcmltY291bnQpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdFbGVtZW50c0luc3RhbmNl
ZChtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3Rh
dHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRp
dmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0RXh0ZW5z
aW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKEFOR0xFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvVGVtcG9yYXJ5QU5H
TEVTZXR0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL1Rl
bXBvcmFyeUFOR0xFU2V0dGluZy5jcHAKaW5kZXggYmI5NThkYTAyYTBkNjRmOWQ0MzJkM2JiYmMx
ZjlmYWRhNGU4YmYyYi4uNjE5OTQzZGEyYjMyZDkzMDBkZWFmZDEwNzNiNDJmMDVkZDBmNWViZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvVGVtcG9y
YXJ5QU5HTEVTZXR0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hbmdsZS9UZW1wb3JhcnlBTkdMRVNldHRpbmcuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBV
U0UoQU5HTEUpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShBTkdMRSkK
ICNpbmNsdWRlICJUZW1wb3JhcnlBTkdMRVNldHRpbmcuaCIKIAogI2luY2x1ZGUgPEFOR0xFL2Vu
dHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+CkBAIC02MCw0ICs2MCw0IEBAIFRlbXBvcmFy
eUFOR0xFU2V0dGluZzo6flRlbXBvcmFyeUFOR0xFU2V0dGluZygpCiAKIH0KIAotI2VuZGlmIC8v
IEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoQU5HTEUpCisjZW5kaWYgLy8gRU5B
QkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShBTkdMRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
aAppbmRleCBmOGJmZWNiZjYzOTZhZDJiN2RiM2M2ODVhYzY5YWRiNTgyYTM4OTNlLi41YmQ0ZTFm
YjBkZjI5YjU3ODEzNmJhZDA1MTNmODZhZTdkZGU2ZTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5o
CkBAIC0yNzEsNyArMjcxLDcgQEAgcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRUaW1lKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3YWl0Rm9yVmlkZW9PdXRw
dXRNZWRpYURhdGFXaWxsQ2hhbmdlKCk7CiAKLSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZs
aXBZKSBvdmVycmlkZTsKKyAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBv
dmVycmlkZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCA1MTI5NDNmNWUxMjdlMmQ0Yjc3YTU0Mjk0OGFhZDM1
NDNlMjA1MmYwLi4xYmVhY2Q0MzNjNGM3YzVjNzUwNDFiYjQ3Njg1Y2M1OTY4OWJkY2NmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTM4LDExICszOCwxMSBAQAogI2ltcG9ydCAiQ0RNU2Vz
c2lvbkFWRm91bmRhdGlvbk9iakMuaCIKICNpbXBvcnQgIkNvb2tpZS5oIgogI2ltcG9ydCAiRGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzLmgiCi0jaW1wb3J0ICJFeHRlbnNpb25zM0QuaCIKKyNpbXBv
cnQgIkV4dGVuc2lvbnNHTC5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW1wb3J0
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuaCIKICNpbXBvcnQgIkltYWdlUm90YXRpb25TZXNzaW9uVlQuaCIKICNpbXBvcnQgIkluYmFu
ZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRi5oIgogI2ltcG9ydCAiSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRk9iakMuaCIKQEAgLTIyOTUsNyArMjI5NSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoVmlkZW9PdXRwdXQoR3JhcGhpY3NDb250
ZXh0JiBjCiAKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpj
b3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCitib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0z
RE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICBBU1NFUlQoY29u
dGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKaW5kZXggNTMxNDA5YmQzNmI4NjRjNGQ1
MmExMDZhOWYxYTI2ZTQ5YjE0NWZhYi4uMDUwMDFlNzNmMzE2ZjJhNzM1NTdiYTk1NzZmMTk0MmE5
ZDE3MDlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKQEAgLTIyMyw3ICsyMjMsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgdXBkYXRlTGFzdEltYWdlKCk7CiAgICAgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIHBhaW50
Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwotICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOwor
ICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKiwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ly8gY2FsbGVkIHdoZW4gdGhlIHJlbmRlcmluZyBzeXN0ZW0gZmxpcHMgdGhlIGludG8gb3Igb3V0
IG9mIGFjY2VsZXJhdGVkIHJlbmRlcmluZyBtb2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1t
CmluZGV4IDMwYTIwNjUwZGMxNWQ3MDZiZTI3OTgwZjY0NTdkZGM0MmIzOTU5MmIuLjc1NWY1YmU0
Mzk5ZjhjNGVhNjAxMzFiYjIyZDhjYTAyZmRjMzhhZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9i
akMubW0KQEAgLTYyNyw3ICs2MjcsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDbwogICAgIGNv
bnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVJlY3Quc2l6ZSgpLCBvdXRwdXRSZWN0
LCBpbWFnZVJlY3QpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQzo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1
dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZ
KQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmNvcHlWaWRlb1Rl
eHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwg
UGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKIHsKICAgICAv
LyBXZSBoYXZlIGJlZW4gYXNrZWQgdG8gcGFpbnQgaW50byBhIFdlYkdMIGNhbnZhcywgc28gdGFr
ZSB0aGF0IGFzIGEgc2lnbmFsIHRvIGNyZWF0ZQogICAgIC8vIGEgZGVjb21wcmVzc2lvbiBzZXNz
aW9uLCBldmVuIGlmIHRoYXQgbWVhbnMgdGhlIG5hdGl2ZSB2aWRlbyBjYW4ndCBhbHNvIGJlIGRp
c3BsYXllZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDg4OTU3ZTJlNTdjODA2NjcwMTgzMWIzMDdjZDk3OGMxZGQzOTcxNi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lm
IEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VTb3Vy
Y2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0
ckNhaXJvLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1H
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6On5JbWFnZUV4dHJhY3RvcigpID0gZGVm
YXVsdDsKLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJ
bWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUpCi17Ci0gICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8g
V2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGltYWdlIGlz
IGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCi0gICAgQWxwaGFPcHRpb24gYWxwaGFP
cHRpb24gPSBwcmVtdWx0aXBseUFscGhhID8gQWxwaGFPcHRpb246OlByZW11bHRpcGxpZWQgOiBB
bHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZDsKLSAgICBHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlID8gR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb246Oklnbm9yZWQgOiBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbjo6QXBwbGllZDsKLSAgICBhdXRvIHNvdXJjZSA9IEltYWdlU291cmNlOjpj
cmVhdGUobnVsbHB0ciwgYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsK
LSAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb05vdGhpbmc7Ci0KLSAgICBpZiAobV9pbWFnZS0+
ZGF0YSgpKSB7Ci0gICAgICAgIHNvdXJjZS0+c2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUp
OwotICAgICAgICBpZiAoIXNvdXJjZS0+ZnJhbWVDb3VudCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IHNvdXJjZS0+Y3JlYXRlRnJhbWVJbWFn
ZUF0SW5kZXgoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBtX2lt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICAvLyAxLiBGb3IgdGV4
SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5
QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVh
Y2ggcGl4ZWwsCi0gICAgICAgIC8vIHdoaWNoIGlzIHRydWUgYXQgcHJlc2VudCBhbmQgbWF5IGJl
IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBhbmQgbmVlZHMgYWRqdXN0bWVudCBhY2NvcmRpbmdseS4K
LSAgICAgICAgLy8gMi4gRm9yIHRleEltYWdlMkQgd2l0aCBIVE1MQ2FudmFzRWxlbWVudCBpbnB1
dCBpbiB3aGljaCBBbHBoYSBpcyBhbHJlYWR5IFByZW11bHRpcGxpZWQgaW4gdGhpcyBwb3J0LCAK
LSAgICAgICAgLy8gZG8gQWxwaGFEb1VubXVsdGlwbHkgaWYgVU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMIGlzIHNldCB0byBmYWxzZS4KLSAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhh
ICYmIG1faW1hZ2VIdG1sRG9tU291cmNlICE9IERPTVNvdXJjZTo6VmlkZW8pCi0gICAgICAgICAg
ICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1VubXVsdGlwbHk7Ci0KLSAgICAgICAgLy8gaWYgbV9p
bWFnZVN1cmZhY2UgaXMgbm90IGFuIGltYWdlLCBleHRyYWN0IGEgY29weSBvZiB0aGUgc3VyZmFj
ZQotICAgICAgICBpZiAobV9pbWFnZVN1cmZhY2UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZSht
X2ltYWdlU3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAg
ICAgICAgICBJbnRTaXplIHN1cmZhY2VTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlU3Vy
ZmFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBhdXRvIHRtcFN1cmZhY2UgPSBhZG9wdFJlZihjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBzdXJmYWNlU2l6ZS53
aWR0aCgpLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29weVJlY3RGcm9t
T25lU3VyZmFjZVRvQW5vdGhlcihtX2ltYWdlU3VyZmFjZS5nZXQoKSwgdG1wU3VyZmFjZS5nZXQo
KSwgSW50U2l6ZSgpLCBJbnRSZWN0KEludFBvaW50KCksIHN1cmZhY2VTaXplKSwgSW50U2l6ZSgp
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgICAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBX
VEZNb3ZlKHRtcFN1cmZhY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2ltYWdl
U3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGNhaXJvX3N1cmZh
Y2VfZ2V0X3R5cGUobV9pbWFnZVN1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9J
TUFHRSk7Ci0KLSAgICBJbnRTaXplIGltYWdlU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFn
ZVN1cmZhY2UuZ2V0KCkpOwotICAgIG1faW1hZ2VXaWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOwot
ICAgIG1faW1hZ2VIZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7Ci0gICAgaWYgKCFtX2ltYWdl
V2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQobV9pbWFnZVN1cmZhY2UuZ2V0KCkpICE9
IENBSVJPX0ZPUk1BVF9BUkdCMzIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2ln
bmVkIGludCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAxOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7Ci0g
ICAgc2l6ZV90IGJpdHNQZXJQaXhlbCA9IDMyOwotICAgIHVuc2lnbmVkIHBhZGRpbmcgPSBieXRl
c1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDggKiBtX2ltYWdlV2lkdGg7Ci0gICAgaWYgKHBhZGRp
bmcpIHsKLSAgICAgICAgc3JjVW5wYWNrQWxpZ25tZW50ID0gcGFkZGluZyArIDE7Ci0gICAgICAg
IHdoaWxlIChieXRlc1BlclJvdyAlIHNyY1VucGFja0FsaWdubWVudCkKLSAgICAgICAgICAgICsr
c3JjVW5wYWNrQWxpZ25tZW50OwotICAgIH0KLQotICAgIG1faW1hZ2VQaXhlbERhdGEgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICBtX2lt
YWdlU291cmNlRm9ybWF0ID0gRGF0YUZvcm1hdDo6QkdSQTg7Ci0gICAgbV9pbWFnZVNvdXJjZVVu
cGFja0FsaWdubWVudCA9IHNyY1VucGFja0FsaWdubWVudDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXpl
JiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKCFpbWFn
ZVBpeGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQt
PmNyKCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LT5zYXZlKCk7Ci0KLSAgICBjYWlyb19yZWN0YW5n
bGUoY3IsIDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fp
cm9fcGFpbnQoY3IpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNl
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAg
IGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGltYWdlUGl4ZWxzKSwgQ0FJUk9fRk9STUFUX0FS
R0IzMiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgaW1hZ2VTaXplLndp
ZHRoKCkgKiA0KSk7Ci0KLSAgICAvLyBPcGVuR0wga2VlcHMgdGhlIHBpeGVscyBzdG9yZWQgYm90
dG9tIHVwLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGltYWdlIGhlcmUuCi0gICAgY2Fpcm9fdHJh
bnNsYXRlKGNyLCAwLCBpbWFnZVNpemUuaGVpZ2h0KCkpOwotICAgIGNhaXJvX3NjYWxlKGNyLCAx
LCAtMSk7Ci0KLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIp
OwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgaW1hZ2VTdXJmYWNlLmdldCgpLCAw
LCAwKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwg
LWNhbnZhc1NpemUuaGVpZ2h0KCkpOwotCi0gICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgcGxhdGZv
cm1Db250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRHTENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhNWNjOWQ2MTU1ZmZhODcyZDNk
MTBiMGFmNmRhOWVjN2M1ZjIzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcApAQCAtMCww
ICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkgJiYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CisK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1h
Z2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxl
KQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFdl
IG5lZWQgdGhpcyB0byBzdGF5IGluIHNjb3BlIGJlY2F1c2UgdGhlIG5hdGl2ZSBpbWFnZSBpcyBq
dXN0IGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBkYXRhLgorICAgIEFscGhhT3B0aW9uIGFscGhhT3B0
aW9uID0gcHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhT3B0aW9uOjpQcmVtdWx0aXBsaWVkIDogQWxw
aGFPcHRpb246Ok5vdFByZW11bHRpcGxpZWQ7CisgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gPSBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSA/IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpJZ25vcmVkIDogR2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb246OkFwcGxpZWQ7CisgICAgYXV0byBzb3VyY2UgPSBJbWFnZVNvdXJjZTo6Y3Jl
YXRlKG51bGxwdHIsIGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Cisg
ICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9Ob3RoaW5nOworCisgICAgaWYgKG1faW1hZ2UtPmRh
dGEoKSkgeworICAgICAgICBzb3VyY2UtPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsK
KyAgICAgICAgaWYgKCFzb3VyY2UtPmZyYW1lQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgbV9pbWFnZVN1cmZhY2UgPSBzb3VyY2UtPmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KDApOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gbV9pbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgLy8gMS4gRm9yIHRleElt
YWdlMkQgd2l0aCBIVE1MVmlkZW9FbG1lbnQgaW5wdXQsIGFzc3VtZSBubyBQcmVtdWx0aXBseUFs
cGhhIGhhZCBiZWVuIGFwcGxpZWQgYW5kIHRoZSBhbHBoYSB2YWx1ZSBpcyAweEZGIGZvciBlYWNo
IHBpeGVsLAorICAgICAgICAvLyB3aGljaCBpcyB0cnVlIGF0IHByZXNlbnQgYW5kIG1heSBiZSBj
aGFuZ2VkIGluIHRoZSBmdXR1cmUgYW5kIG5lZWRzIGFkanVzdG1lbnQgYWNjb3JkaW5nbHkuCisg
ICAgICAgIC8vIDIuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1lbnQgaW5wdXQg
aW4gd2hpY2ggQWxwaGEgaXMgYWxyZWFkeSBQcmVtdWx0aXBsaWVkIGluIHRoaXMgcG9ydCwgCisg
ICAgICAgIC8vIGRvIEFscGhhRG9Vbm11bHRpcGx5IGlmIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBI
QV9XRUJHTCBpcyBzZXQgdG8gZmFsc2UuCisgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSAm
JiBtX2ltYWdlSHRtbERvbVNvdXJjZSAhPSBET01Tb3VyY2U6OlZpZGVvKQorICAgICAgICAgICAg
bV9hbHBoYU9wID0gQWxwaGFPcDo6RG9Vbm11bHRpcGx5OworCisgICAgICAgIC8vIGlmIG1faW1h
Z2VTdXJmYWNlIGlzIG5vdCBhbiBpbWFnZSwgZXh0cmFjdCBhIGNvcHkgb2YgdGhlIHN1cmZhY2UK
KyAgICAgICAgaWYgKG1faW1hZ2VTdXJmYWNlICYmIGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9p
bWFnZVN1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgeworICAgICAg
ICAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZVN1cmZh
Y2UuZ2V0KCkpOworICAgICAgICAgICAgYXV0byB0bXBTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgc3VyZmFjZVNpemUud2lk
dGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvcHlSZWN0RnJvbU9u
ZVN1cmZhY2VUb0Fub3RoZXIobV9pbWFnZVN1cmZhY2UuZ2V0KCksIHRtcFN1cmZhY2UuZ2V0KCks
IEludFNpemUoKSwgSW50UmVjdChJbnRQb2ludCgpLCBzdXJmYWNlU2l6ZSksIEludFNpemUoKSwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gV1RG
TW92ZSh0bXBTdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9pbWFnZVN1
cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChjYWlyb19zdXJmYWNl
X2dldF90eXBlKG1faW1hZ2VTdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1B
R0UpOworCisgICAgSW50U2l6ZSBpbWFnZVNpemUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2VT
dXJmYWNlLmdldCgpKTsKKyAgICBtX2ltYWdlV2lkdGggPSBpbWFnZVNpemUud2lkdGgoKTsKKyAg
ICBtX2ltYWdlSGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdodCgpOworICAgIGlmICghbV9pbWFnZVdp
ZHRoIHx8ICFtX2ltYWdlSGVpZ2h0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KG1faW1hZ2VTdXJmYWNlLmdldCgpKSAhPSBD
QUlST19GT1JNQVRfQVJHQjMyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25l
ZCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAxOworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2ltYWdlU3VyZmFjZS5nZXQoKSk7CisgICAgc2l6
ZV90IGJpdHNQZXJQaXhlbCA9IDMyOworICAgIHVuc2lnbmVkIHBhZGRpbmcgPSBieXRlc1BlclJv
dyAtIGJpdHNQZXJQaXhlbCAvIDggKiBtX2ltYWdlV2lkdGg7CisgICAgaWYgKHBhZGRpbmcpIHsK
KyAgICAgICAgc3JjVW5wYWNrQWxpZ25tZW50ID0gcGFkZGluZyArIDE7CisgICAgICAgIHdoaWxl
IChieXRlc1BlclJvdyAlIHNyY1VucGFja0FsaWdubWVudCkKKyAgICAgICAgICAgICsrc3JjVW5w
YWNrQWxpZ25tZW50OworICAgIH0KKworICAgIG1faW1hZ2VQaXhlbERhdGEgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBtX2ltYWdlU291
cmNlRm9ybWF0ID0gRGF0YUZvcm1hdDo6QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZVVucGFja0Fs
aWdubWVudCA9IHNyY1VucGFja0FsaWdubWVudDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBj
aGFyKiBpbWFnZVBpeGVscywgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBJbnRTaXpl
JiBjYW52YXNTaXplLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKCFpbWFn
ZVBpeGVscyB8fCBpbWFnZVNpemUuaXNFbXB0eSgpIHx8IGNhbnZhc1NpemUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIXBsYXRmb3JtQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQt
PmNyKCk7CisgICAgcGxhdGZvcm1Db250ZXh0LT5zYXZlKCk7CisKKyAgICBjYWlyb19yZWN0YW5n
bGUoY3IsIDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fp
cm9fcGFpbnQoY3IpOworCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNl
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAg
IGNvbnN0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGltYWdlUGl4ZWxzKSwgQ0FJUk9fRk9STUFUX0FS
R0IzMiwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwgaW1hZ2VTaXplLndp
ZHRoKCkgKiA0KSk7CisKKyAgICAvLyBPcGVuR0wga2VlcHMgdGhlIHBpeGVscyBzdG9yZWQgYm90
dG9tIHVwLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIGltYWdlIGhlcmUuCisgICAgY2Fpcm9fdHJh
bnNsYXRlKGNyLCAwLCBpbWFnZVNpemUuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NjYWxlKGNyLCAx
LCAtMSk7CisKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIp
OworICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgaW1hZ2VTdXJmYWNlLmdldCgpLCAw
LCAwKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwg
LWNhbnZhc1NpemUuaGVpZ2h0KCkpOworCisgICAgY2Fpcm9fZmlsbChjcik7CisgICAgcGxhdGZv
cm1Db250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCmluZGV4IDZiNjdmNTVkYzk4YjA3NjZhMDMxYzNhNGU3YjkwNjBmZGI4YjUw
NGUuLjlkZTkwNDQ4MDdiOTE3NjllNGYzNGQzNWNiMTZlNjM0NTNlNmJkMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCkBAIC03MjMsNyArNzIzLDcgQEAgUGxhdGZvcm1MYXllciogSW1hZ2VCdWZm
ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1ib29sIEltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
JiwgR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKIHsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZh
cyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5
cyAxLiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmM5MzhiNDQyYjgxMThhYWJhM2Y0MzMxMDZiMTc3ZDBmODI3NWQyMy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDU0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0Qp
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgotCi0jaWYgSEFWRShBUk1fTkVP
Tl9JTlRSSU5TSUNTKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNETkVPTi5oIgotI2VuZGlm
Ci0KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0RhdGFQ
cm92aWRlci5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+Ci0KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gU291cmNlRGF0YUZvcm1hdEJhc2UgewotICAgIFNvdXJj
ZUZvcm1hdEJhc2VSID0gMCwKLSAgICBTb3VyY2VGb3JtYXRCYXNlQSwKLSAgICBTb3VyY2VGb3Jt
YXRCYXNlUkEsCi0gICAgU291cmNlRm9ybWF0QmFzZUFSLAotICAgIFNvdXJjZUZvcm1hdEJhc2VS
R0IsCi0gICAgU291cmNlRm9ybWF0QmFzZVJHQkEsCi0gICAgU291cmNlRm9ybWF0QmFzZUFSR0Is
Ci0gICAgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMKLX07Ci0KLWVudW0gQWxwaGFGb3JtYXQg
ewotICAgIEFscGhhRm9ybWF0Tm9uZSA9IDAsCi0gICAgQWxwaGFGb3JtYXRGaXJzdCwKLSAgICBB
bHBoYUZvcm1hdExhc3QsCi0gICAgQWxwaGFGb3JtYXROdW1Gb3JtYXRzCi19OwotCi0vLyBUaGlz
IHJldHVybnMgU291cmNlRm9ybWF0TnVtRm9ybWF0cyBpZiB0aGUgY29tYmluYXRpb24gb2YgaW5w
dXQgcGFyYW1ldGVycyBpcyB1bnN1cHBvcnRlZC4KLXN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdCBnZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhl
bCwgQWxwaGFGb3JtYXQgYWxwaGFGb3JtYXQsIGJvb2wgaXMxNkJpdEZvcm1hdCwgYm9vbCBiaWdF
bmRpYW4pCi17Ci0gICAgY29uc3Qgc3RhdGljIFNvdXJjZURhdGFGb3JtYXRCYXNlIGZvcm1hdFRh
YmxlQmFzZVs0XVtBbHBoYUZvcm1hdE51bUZvcm1hdHNdID0geyAvLyBjb21wb25lbnRzUGVyUGl4
ZWwgeCBBbHBoYUZvcm1hdAotICAgICAgICAvLyBBbHBoYUZvcm1hdE5vbmUgICAgICAgICAgICBB
bHBoYUZvcm1hdEZpcnN0ICAgICAgICAgICAgQWxwaGFGb3JtYXRMYXN0Ci0gICAgICAgIHsgU291
cmNlRm9ybWF0QmFzZVIsICAgICAgICAgIFNvdXJjZUZvcm1hdEJhc2VBLCAgICAgICAgICBTb3Vy
Y2VGb3JtYXRCYXNlQSAgICAgICAgICB9LCAvLyAxIGNvbXBvbmVudHNQZXJQaXhlbAotICAgICAg
ICB7IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNlQVIsICAgICAg
ICAgU291cmNlRm9ybWF0QmFzZVJBICAgICAgICAgfSwgLy8gMiBjb21wb25lbnRzUGVyUGl4ZWwK
LSAgICAgICAgeyBTb3VyY2VGb3JtYXRCYXNlUkdCLCAgICAgICAgU291cmNlRm9ybWF0QmFzZU51
bUZvcm1hdHMsIFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzIH0sIC8vIDMgY29tcG9uZW50c1Bl
clBpeGVsCi0gICAgICAgIHsgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNvdXJjZUZvcm1h
dEJhc2VBUkdCLCAgICAgICBTb3VyY2VGb3JtYXRCYXNlUkdCQSAgICAgICAgfSAvLyA0IGNvbXBv
bmVudHNQZXJQaXhlbAotICAgIH07Ci0gICAgY29uc3Qgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IGZvcm1hdFRhYmxlW1NvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzXVs0XSA9
IHsgLy8gU291cmNlRGF0YUZvcm1hdDo6QmFzZSB4IGJpdHNQZXJDb21wb25lbnQgeCBlbmRpYW4K
LSAgICAgICAgLy8gOGJpdHMsIGxpdHRsZSBlbmRpYW4gICAgICAgICAgICAgICAgIDhiaXRzLCBi
aWcgZW5kaWFuICAgICAgICAgICAgICAgICAgICAgMTZiaXRzLCBsaXR0bGUgZW5kaWFuICAgICAg
ICAgICAgICAgICAgICAgICAgMTZiaXRzLCBiaWcgZW5kaWFuCi0gICAgICAgIHsgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlI4LCAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6UjgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZMaXR0bGUsICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZCaWcgfSwKLSAgICAgICAgeyBHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QTgsICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0OjpBOCwgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkxpdHRsZSwgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkExNkJpZyB9LAotICAgICAgICB7IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjgsICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJBOCwgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkxpdHRsZSwg
ICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkJpZyB9LAotICAgICAgICB7IEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTgsICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRh
dGFGb3JtYXQ6OkFSOCwgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVIxNkxpdHRs
ZSwgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVIxNkJpZyB9LAotICAgICAgICB7
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1I4LCAgR3JhcGhpY3NDb250ZXh0M0Q6
OkRhdGFGb3JtYXQ6OlJHQjgsICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZM
aXR0bGUsICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcgfSwKLSAgICAg
ICAgeyBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QUJHUjgsIEdyYXBoaWNzQ29udGV4
dDNEOjpEYXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJH
QkExNkxpdHRsZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkJpZyB9LAot
ICAgICAgICB7IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpCR1JBOCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0I4LCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dDo6QVJHQjE2TGl0dGxlLCBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjE2Qmln
IH0KLSAgICB9OwotCi0gICAgQVNTRVJUKGNvbXBvbmVudHNQZXJQaXhlbCA8PSA0ICYmIGNvbXBv
bmVudHNQZXJQaXhlbCA+IDApOwotICAgIFNvdXJjZURhdGFGb3JtYXRCYXNlIGZvcm1hdEJhc2Ug
PSBmb3JtYXRUYWJsZUJhc2VbY29tcG9uZW50c1BlclBpeGVsIC0gMV1bYWxwaGFGb3JtYXRdOwot
ICAgIGlmIChmb3JtYXRCYXNlID09IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzKQotICAgICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6Ok51bUZvcm1hdHM7Ci0gICAg
cmV0dXJuIGZvcm1hdFRhYmxlW2Zvcm1hdEJhc2VdWyhpczE2Qml0Rm9ybWF0ID8gMiA6IDApICsg
KGJpZ0VuZGlhbiA/IDEgOiAwKV07Ci19Ci0KLW5hbWVzcGFjZSB7Ci11aW50OF90IGNvbnZlcnRD
b2xvcjE2TGl0dGxlVG84KHVpbnQxNl90IHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZSA+PiA4
OwotfQotCi11aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhbHVlKQotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSAmIDB4MDBGRik7Ci19Ci0KLXRl
bXBsYXRlPEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IGZvcm1hdCwgdHlwZW5hbWUgU291
cmNlVHlwZSwgdHlwZW5hbWUgRHN0VHlwZT4KLUFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZC
aXRGb3JtYXRUb1JHQkE4KGNvbnN0IFNvdXJjZVR5cGUqLCBEc3RUeXBlKiwgdW5zaWduZWQpCi17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElO
RSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFG
b3JtYXQ6OlJHQkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0j
aWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotICAgIFNJTUQ6OnVucGFja09uZVJvd09mUkdC
QTE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwotI2Vu
ZGlmCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBd
KTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3Vy
Y2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84
KHNvdXJjZVsyXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0
bGVUbzgoc291cmNlWzNdKTsKLSAgICAgICAgc291cmNlICs9IDQ7Ci0gICAgICAgIGRlc3RpbmF0
aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252
ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0JB
MTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblsw
XSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9u
WzFdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRp
b25bMl0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMl0pOwotICAgICAgICBkZXN0aW5h
dGlvblszXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVszXSk7Ci0gICAgICAgIHNvdXJj
ZSArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25z
dCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxz
UGVyUm93KQotewotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAgICBTSU1EOjp1bnBh
Y2tPbmVSb3dPZlJHQjE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQ
ZXJSb3cpOwotI2VuZGlmCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJv
dzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVU
bzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxp
dHRsZVRvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xv
cjE2TGl0dGxlVG84KHNvdXJjZVsyXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsK
LSAgICAgICAgc291cmNlICs9IDM7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JH
QkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSR0IxNkJpZywgdWludDE2X3QsIHVp
bnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNp
Z25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVs
c1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZC
aWdUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3Ix
NkJpZ1RvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVsyXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKLSAg
ICAgICAgc291cmNlICs9IDM7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4
PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1
aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgcGl4ZWxzUGVyUm93KQotewotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLSAg
ICBTSU1EOjp1bnBhY2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgoc291cmNlLCBkZXN0aW5h
dGlvbiwgcGl4ZWxzUGVyUm93KTsKLSNlbmRpZgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwaXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9IGNvbnZlcnRD
b2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gY29u
dmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzJdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMl0g
PSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbM10pOwotICAgICAgICBkZXN0aW5hdGlv
blszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIHNvdXJj
ZSArPSA0OwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8
PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QVJHQjE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3Qg
dWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1Bl
clJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kp
IHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2Vb
MV0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJj
ZVsyXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291
cmNlWzNdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChz
b3VyY2VbMF0pOwotICAgICAgICBzb3VyY2UgKz0gNDsKLSAgICAgICAgZGVzdGluYXRpb24gKz0g
NDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJp
dEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlIxNkxpdHRsZSwg
dWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29u
dmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0g
PSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlv
blsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uWzNdID0gMHhGRjsKLSAgICAgICAgc291cmNlICs9IDE7Ci0gICAgICAgIGRlc3RpbmF0
aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252
ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZC
aWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblswXSA9
IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFd
ID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25b
Ml0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlv
blszXSA9IDB4RkY7Ci0gICAgICAgIHNvdXJjZSArPSAxOwotICAgICAgICBkZXN0aW5hdGlvbiAr
PSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2
Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkExNkxpdHRs
ZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0g
Y29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25b
MV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5h
dGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIGRl
c3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAgICAg
ICAgc291cmNlICs9IDI7Ci0gICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4o
Y29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBp
eGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChz
b3VyY2VbMF0pOwotICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84
KHNvdXJjZVswXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZCaWdU
bzgoc291cmNlWzBdKTsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJp
Z1RvOChzb3VyY2VbMV0pOwotICAgICAgICBzb3VyY2UgKz0gMjsKLSAgICAgICAgZGVzdGluYXRp
b24gKz0gNDsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNvbnZl
cnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSMTZM
aXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlvblsw
XSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0
aW9uWzFdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVz
dGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOwotICAgICAg
ICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0g
ICAgICAgIHNvdXJjZSArPSAyOwotICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwotICAgIH0KLX0K
LQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JB
ODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6QVIxNkJpZywgdWludDE2X3QsIHVpbnQ4
X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCBwaXhlbHNQZXJSb3cpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1Bl
clJvdzsgKytpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZCaWdU
bzgoc291cmNlWzFdKTsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkJp
Z1RvOChzb3VyY2VbMV0pOwotICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2
QmlnVG84KHNvdXJjZVsxXSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9y
MTZCaWdUbzgoc291cmNlWzBdKTsKLSAgICAgICAgc291cmNlICs9IDI7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uICs9IDQ7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBj
b252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpB
MTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQotewotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgewotICAgICAgICBkZXN0aW5hdGlv
blswXSA9IDB4MDsKLSAgICAgICAgZGVzdGluYXRpb25bMV0gPSAweDA7Ci0gICAgICAgIGRlc3Rp
bmF0aW9uWzJdID0gMHgwOwotICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVswXSk7Ci0gICAgICAgIHNvdXJjZSArPSAxOwotICAgICAgICBkZXN0
aW5hdGlvbiArPSA0OwotICAgIH0KLX0KLQotdGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6
QTE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKLXsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZGVzdGluYXRpb25b
MF0gPSAweDA7Ci0gICAgICAgIGRlc3RpbmF0aW9uWzFdID0gMHgwOwotICAgICAgICBkZXN0aW5h
dGlvblsyXSA9IDB4MDsKLSAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3IxNkJp
Z1RvOChzb3VyY2VbMF0pOwotICAgICAgICBzb3VyY2UgKz0gMTsKLSAgICAgICAgZGVzdGluYXRp
b24gKz0gNDsKLSAgICB9Ci19Ci0KLXZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBOChHcmFw
aGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIGNvbnN0IHVpbnQxNl90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCi17Ci0jZGVm
aW5lIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoU3JjRm9ybWF0KSBcCi0gICAgY2FzZSBTcmNG
b3JtYXQ6IFwKLSAgICAgICAgcmV0dXJuIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8U3JjRm9y
bWF0Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOwotCi0gICAgc3dpdGNoIChz
cmNGb3JtYXQpIHsKLSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6UjE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JN
QVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSMTZCaWcpCi0gICAgICAg
IENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6
OkExNkxpdHRsZSkKLSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdDo6QTE2QmlnKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRU
T1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpSQTE2TGl0dGxlKQotICAgICAg
ICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSQTE2QmlnKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0OjpBUjE2TGl0dGxlKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JN
QVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUjE2QmlnKQotICAgICAg
ICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
OjpSR0IxNkxpdHRsZSkKLSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGlj
c0NvbnRleHQzRDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcpCi0gICAgICAgIENPTlZFUlQxNkJJVEZP
Uk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OlJHQkExNkxpdHRsZSkK
LSAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRleHQzRDo6RGF0
YUZvcm1hdDo6UkdCQTE2QmlnKQotICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdy
YXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUpCi0gICAgICAgIENPTlZF
UlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQ6OkFSR0Ix
NkJpZykKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0jdW5kZWYgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOAotfQotCi19Ci0KLUdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkgPSBkZWZhdWx0OwotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKLXsKLSAg
ICBpZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIGhhc0FscGhh
ID0gIW1faW1hZ2UtPmN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpOwotICAgIGlmICgoaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhh
KSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7Ci0gICAgICAgIGF1dG8gc291cmNlID0gSW1hZ2VTb3Vy
Y2U6OmNyZWF0ZShudWxscHRyLCBBbHBoYU9wdGlvbjo6Tm90UHJlbXVsdGlwbGllZCwgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUgPyBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjo6SWdub3Jl
ZCA6IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBsaWVkKTsKLSAgICAgICAgc291cmNl
LT5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghc291cmNlLT5m
cmFtZUNvdW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9kZWNv
ZGVkSW1hZ2UgPSBzb3VyY2UtPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KDApOwotICAgICAgICBt
X2NnSW1hZ2UgPSBtX2RlY29kZWRJbWFnZTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9jZ0ltYWdl
ID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIW1fY2dJ
bWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9pbWFnZVdpZHRoID0gQ0dJbWFn
ZUdldFdpZHRoKG1fY2dJbWFnZS5nZXQoKSk7Ci0gICAgbV9pbWFnZUhlaWdodCA9IENHSW1hZ2VH
ZXRIZWlnaHQobV9jZ0ltYWdlLmdldCgpKTsKLSAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9p
bWFnZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2VlIHdoZXRoZXIg
dGhlIGltYWdlIGlzIHVzaW5nIGFuIGluZGV4ZWQgY29sb3Igc3BhY2UsIGFuZCBpZgotICAgIC8v
IHNvLCByZS1yZW5kZXIgaXQgaW50byBhbiBSR0IgY29sb3Igc3BhY2UuIFRoZSBpbWFnZSByZS1w
YWNraW5nCi0gICAgLy8gY29kZSByZXF1aXJlcyBjb2xvciBkYXRhLCBub3QgY29sb3IgdGFibGUg
aW5kaWNlcywgZm9yIHRoZQotICAgIC8vIGltYWdlIGRhdGEuCi0gICAgQ0dDb2xvclNwYWNlUmVm
IGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZShtX2NnSW1hZ2UuZ2V0KCkpOwotICAg
IENHQ29sb3JTcGFjZU1vZGVsIG1vZGVsID0gQ0dDb2xvclNwYWNlR2V0TW9kZWwoY29sb3JTcGFj
ZSk7Ci0gICAgaWYgKG1vZGVsID09IGtDR0NvbG9yU3BhY2VNb2RlbEluZGV4ZWQpIHsKLSAgICAg
ICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gYml0bWFwQ29udGV4dDsKLSAgICAgICAgLy8gRklY
TUU6IHdlIHNob3VsZCBwcm9iYWJseSBtYW51YWxseSBjb252ZXJ0IHRoZSBpbWFnZSBieSBpbmRl
eGluZyBpbnRvCi0gICAgICAgIC8vIHRoZSBjb2xvciB0YWJsZSwgd2hpY2ggd291bGQgYWxsb3cg
dXMgdG8gYXZvaWQgcHJlbXVsdGlwbHlpbmcgdGhlCi0gICAgICAgIC8vIGFscGhhIGNoYW5uZWwu
IENyZWF0aW9uIG9mIGEgYml0bWFwIGNvbnRleHQgd2l0aCBhbiBhbHBoYSBjaGFubmVsCi0gICAg
ICAgIC8vIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHVubGVzcyBpdCdzIHByZW11bHRpcGxpZWQuCi0g
ICAgICAgIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBt
X2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1faW1hZ2VXaWR0aCAqIDQsCi0gICAgICAg
ICAgICBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0
IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7Ci0gICAgICAgIGlmICghYml0bWFwQ29udGV4
dCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENH
Q29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0lu
dGVycG9sYXRpb25Ob25lKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbV9pbWFnZVdpZHRoLCBtX2ltYWdlSGVpZ2h0KSwg
bV9jZ0ltYWdlLmdldCgpKTsKLQotICAgICAgICAvLyBOb3cgZGlzY2FyZCB0aGUgb3JpZ2luYWwg
Q0cgaW1hZ2UgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIGNvcHkgZnJvbSB0aGUgYml0bWFwIGNvbnRl
eHQuCi0gICAgICAgIG1fZGVjb2RlZEltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7Ci0gICAgICAgIG1fY2dJbWFnZSA9IG1fZGVj
b2RlZEltYWdlLmdldCgpOwotICAgIH0KLQotICAgIHNpemVfdCBiaXRzUGVyQ29tcG9uZW50ID0g
Q0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQobV9jZ0ltYWdlLmdldCgpKTsKLSAgICBzaXplX3Qg
Yml0c1BlclBpeGVsID0gQ0dJbWFnZUdldEJpdHNQZXJQaXhlbChtX2NnSW1hZ2UuZ2V0KCkpOwot
ICAgIGlmIChiaXRzUGVyQ29tcG9uZW50ICE9IDggJiYgYml0c1BlckNvbXBvbmVudCAhPSAxNikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChiaXRzUGVyUGl4ZWwgJSBiaXRzUGVyQ29t
cG9uZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2l6ZV90IGNvbXBvbmVudHNQZXJQ
aXhlbCA9IGJpdHNQZXJQaXhlbCAvIGJpdHNQZXJDb21wb25lbnQ7Ci0KLSAgICBDR0JpdG1hcElu
Zm8gYml0SW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKG1fY2dJbWFnZS5nZXQoKSk7Ci0gICAg
Ym9vbCBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKLSAgICAvLyBUaGVzZSBjb3VsZCB0ZWNobmlj
YWxseSBiZSBjb21iaW5lZCBpbnRvIG9uZSBsYXJnZSBzd2l0Y2gKLSAgICAvLyBzdGF0ZW1lbnQs
IGJ1dCB3ZSBwcmVmZXIgbm90IHRvIHNvIHRoYXQgd2UgZmFpbCBmYXN0IGlmIHdlCi0gICAgLy8g
ZW5jb3VudGVyIGFuIHVuZXhwZWN0ZWQgaW1hZ2UgY29uZmlndXJhdGlvbi4KLSAgICBpZiAoYml0
c1BlckNvbXBvbmVudCA9PSAxNikgewotICAgICAgICBzd2l0Y2ggKGJpdEluZm8gJiBrQ0dCaXRt
YXBCeXRlT3JkZXJNYXNrKSB7Ci0gICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMTZCaWc6
Ci0gICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMTZMaXR0bGU6Ci0gICAgICAgICAgICBi
aWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgYnVn
IGluIGVhcmxpZXIgdmVyc2lvbiBvZiBjZyB3aGVyZSB0aGUgZGVmYXVsdCBlbmRpYW4KLSAgICAg
ICAgICAgIC8vIGlzIGxpdHRsZSB3aGVyZWFzIHRoZSBkZWNvZGVkIDE2LWJpdCBwbmcgaW1hZ2Ug
ZGF0YSBpcyBhY3R1YWxseQotICAgICAgICAgICAgLy8gQmlnLiBMYXRlciB2ZXJzaW9uICgxMC42
LjQpIG5vIGxvbmdlciByZXR1cm5zIEJ5dGVPcmRlckRlZmF1bHQuCi0gICAgICAgICAgICBiaWdF
bmRpYW5Tb3VyY2UgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBzd2l0Y2ggKGJpdEluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXJNYXNrKSB7Ci0gICAgICAg
IGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWc6Ci0gICAgICAgICAgICBiaWdFbmRpYW5Tb3Vy
Y2UgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Uga0NHQml0bWFwQnl0
ZU9yZGVyMzJMaXR0bGU6Ci0gICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQ6
Ci0gICAgICAgICAgICAvLyBJdCBhcHBlYXJzIHRoYXQgdGhlIGRlZmF1bHQgYnl0ZSBvcmRlciBp
cyBhY3R1YWxseSBiaWcKLSAgICAgICAgICAgIC8vIGVuZGlhbiBldmVuIG9uIGxpdHRsZSBlbmRp
YW4gYXJjaGl0ZWN0dXJlcy4KLSAgICAgICAgICAgIGJpZ0VuZGlhblNvdXJjZSA9IHRydWU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRvTm90
aGluZzsKLSAgICBBbHBoYUZvcm1hdCBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Tm9uZTsKLSAg
ICBzd2l0Y2ggKENHSW1hZ2VHZXRBbHBoYUluZm8obV9jZ0ltYWdlLmdldCgpKSkgewotICAgIGNh
c2Uga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdDoKLSAgICAgICAgaWYgKCFwcmVtdWx0
aXBseUFscGhhKQotICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9Vbm11bHRpcGx5
OwotICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2Uga0NHSW1hZ2VBbHBoYUZpcnN0OgotICAgICAgICAvLyBUaGlzIHBhdGggaXMg
b25seSBhY2Nlc3NpYmxlIGZvciBNYWNPUyBlYXJsaWVyIHRoYW4gMTAuNi40LgotICAgICAgICBp
ZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhT3A6OkRv
UHJlbXVsdGlwbHk7Ci0gICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRGaXJzdDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdDoKLSAgICAg
ICAgLy8gVGhpcyBwYXRoIGlzIG9ubHkgYWNjZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFu
IDEwLjYuNC4KLSAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDoKLSAgICAg
ICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFP
cDo6RG9Vbm11bHRpcGx5OwotICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrQ0dJbWFnZUFscGhhTGFzdDoKLSAgICAgICAgaWYg
KHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYU9wOjpEb1By
ZW11bHRpcGx5OwotICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OgotICAgICAgICBh
bHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBr
Q0dJbWFnZUFscGhhTm9uZToKLSAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdE5vbmU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21w
b25lbnRzUGVyUGl4ZWwsIGFscGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdF
bmRpYW5Tb3VyY2UpOwotICAgIGlmIChtX2ltYWdlU291cmNlRm9ybWF0ID09IERhdGFGb3JtYXQ6
Ok51bUZvcm1hdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcGl4ZWxEYXRhID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIobV9j
Z0ltYWdlLmdldCgpKSkpOwotICAgIGlmICghbV9waXhlbERhdGEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1faW1hZ2VQaXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHZv
aWQqPihDRkRhdGFHZXRCeXRlUHRyKG1fcGl4ZWxEYXRhLmdldCgpKSk7Ci0KLSAgICB1bnNpZ25l
ZCBpbnQgc3JjVW5wYWNrQWxpZ25tZW50ID0gMDsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBD
R0ltYWdlR2V0Qnl0ZXNQZXJSb3cobV9jZ0ltYWdlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBwYWRk
aW5nID0gYnl0ZXNQZXJSb3cgLSBiaXRzUGVyUGl4ZWwgLyA4ICogbV9pbWFnZVdpZHRoOwotICAg
IGlmIChwYWRkaW5nKSB7Ci0gICAgICAgIHNyY1VucGFja0FsaWdubWVudCA9IHBhZGRpbmcgKyAx
OwotICAgICAgICB3aGlsZSAoYnl0ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCi0gICAg
ICAgICAgICArK3NyY1VucGFja0FsaWdubWVudDsKLSAgICB9Ci0KLSAgICBtX2ltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OwotICAgIC8vIFVzaW5nIGEgYml0
bWFwIGNvbnRleHQgY3JlYXRlZCBhY2NvcmRpbmcgdG8gZGVzdGluYXRpb24gZm9ybWF0IGFuZCBk
cmF3aW5nIHRoZSBDR0ltYWdlIHRvIHRoZSBiaXRtYXAgY29udGV4dCBjYW4gYWxzbyBkbyB0aGUg
Zm9ybWF0IGNvbnZlcnNpb24sCi0gICAgLy8gYnV0IGl0IHdvdWxkIHByZW11bHRpcGx5IHRoZSBh
bHBoYSBjaGFubmVsIGFzIGEgc2lkZSBlZmZlY3QuCi0gICAgLy8gUHJlZmVyIHRvIG1hbm51YWxs
eSBDb252ZXJ0IDE2Yml0IHBlci1jb21wb25lbnQgZm9ybWF0cyB0byBSR0JBOCBmb3JtYXRzIGlu
c3RlYWQuCi0gICAgaWYgKGJpdHNQZXJDb21wb25lbnQgPT0gMTYpIHsKLSAgICAgICAgbV9mb3Jt
YWxpemVkUkdCQThEYXRhID0gbWFrZVVuaXF1ZUFycmF5PHVpbnQ4X3Q+KChDaGVja2VkPHNpemVf
dD4obV9pbWFnZVdpZHRoKSAqIG1faW1hZ2VIZWlnaHQgKiA0VSkudW5zYWZlR2V0KCkpOwotICAg
ICAgICBjb25zdCB1aW50MTZfdCogc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MTZfdCo+KG1faW1hZ2VQaXhlbERhdGEpOwotICAgICAgICB1aW50OF90KiBkZXN0aW5hdGlvbiA9
IG1fZm9ybWFsaXplZFJHQkE4RGF0YS5nZXQoKTsKLSAgICAgICAgY29uc3QgcHRyZGlmZl90IHNy
Y1N0cmlkZUluRWxlbWVudHMgPSBieXRlc1BlclJvdyAvIHNpemVvZih1aW50MTZfdCk7Ci0gICAg
ICAgIGNvbnN0IHB0cmRpZmZfdCBkc3RTdHJpZGVJbkVsZW1lbnRzID0gNCAqIG1faW1hZ2VXaWR0
aDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0wOyBpIDwgbV9pbWFnZUhlaWdodDsgaSsrKSB7
Ci0gICAgICAgICAgICBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KG1faW1hZ2VTb3VyY2VGb3Jt
YXQsIHNvdXJjZSwgZGVzdGluYXRpb24sIG1faW1hZ2VXaWR0aCk7Ci0gICAgICAgICAgICBzb3Vy
Y2UgKz0gc3JjU3RyaWRlSW5FbGVtZW50czsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IGRz
dFN0cmlkZUluRWxlbWVudHM7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbWFnZVBpeGVsRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KG1fZm9ybWFsaXplZFJHQkE4RGF0YS5nZXQo
KSk7Ci0gICAgICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBEYXRhRm9ybWF0OjpSR0JBODsKLSAg
ICAgICAgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCA9IDE7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlSW1hZ2VEYXRhKHZvaWQqLCBjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3QpCi17Ci0gICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0
YSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBp
ZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZVNpemUud2lk
dGgoKSAqIDQ7Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7
Ci0KLSAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIqIGNvcGllZFBpeGVsczsKLQotICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2Mo
aW1hZ2VTaXplLmhlaWdodCgpLCByb3dCeXRlcykuZ2V0VmFsdWUoY29waWVkUGl4ZWxzKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtZW1jcHkoY29waWVkUGl4ZWxzLCBpbWFnZVBp
eGVscywgcm93Qnl0ZXMgKiBpbWFnZVNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIHNpemVfdCBk
YXRhU2l6ZSA9IHJvd0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJ
bWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvcGllZFBpeGVscywgZGF0YVNpemUpOwotICAgICAgICBk
YXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgY29w
aWVkUGl4ZWxzLCBkYXRhU2l6ZSwgcmVsZWFzZUltYWdlRGF0YSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IHJvd0J5dGVzICogaW1hZ2VTaXplLmhlaWdodCgpOwot
ICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGltYWdlUGl4ZWxzLCBkYXRhU2l6
ZSk7Ci0gICAgICAgIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgwLCBpbWFnZVBpeGVscywgZGF0YVNpemUsIDApKTsKLSAgICB9Ci0KLSAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCAzMiwgcm93Qnl0ZXMsIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkhvc3QsCi0gICAgICAgIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLQotICAgIC8vIENTUyBzdHlsaW5nIG1heSBjYXVz
ZSB0aGUgY2FudmFzJ3MgY29udGVudCB0byBiZSByZXNpemVkIG9uCi0gICAgLy8gdGhlIHBhZ2Uu
IEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0Ci0gICAgLy8g
d2lkdGggYW5kIGhlaWdodCB0byBkcmF3LgotICAgIEZsb2F0UmVjdCBjYW52YXNSZWN0KEZsb2F0
UG9pbnQoKSwgY2FudmFzU2l6ZSk7Ci0gICAgLy8gV2Ugd2FudCB0byBjb21wbGV0ZWx5IG92ZXJ3
cml0ZSB0aGUgcHJldmlvdXMgZnJhbWUncwotICAgIC8vIHJlbmRlcmluZyByZXN1bHRzLgotCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgIGNv
bnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dC50cmFuc2xhdGUoMCwg
LWltYWdlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dC5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlKTsKLSAgICBjb250
ZXh0LmRyYXdOYXRpdmVJbWFnZShjZ0ltYWdlLCBpbWFnZVNpemUsIGNhbnZhc1JlY3QsIEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGltYWdlU2l6ZSksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkg
fSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQ
SElDU19DT05URVhUXzNEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjAzMGUw
OGE1YzY2YjkzODU2YWEwYTk1YTM3YmMyNWMyZmY0ZDliCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAK
QEAgLTAsMCArMSw1NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF9HTCkKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q0cuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUg
IkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorCisjaWYgSEFW
RShBUk1fTkVPTl9JTlRSSU5TSUNTKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMTkVPTi5o
IgorI2VuZGlmCisKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+Cisj
aW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0RhdGFQcm92aWRlci5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CisK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gU291cmNlRGF0YUZvcm1hdEJhc2Ugewor
ICAgIFNvdXJjZUZvcm1hdEJhc2VSID0gMCwKKyAgICBTb3VyY2VGb3JtYXRCYXNlQSwKKyAgICBT
b3VyY2VGb3JtYXRCYXNlUkEsCisgICAgU291cmNlRm9ybWF0QmFzZUFSLAorICAgIFNvdXJjZUZv
cm1hdEJhc2VSR0IsCisgICAgU291cmNlRm9ybWF0QmFzZVJHQkEsCisgICAgU291cmNlRm9ybWF0
QmFzZUFSR0IsCisgICAgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMKK307CisKK2VudW0gQWxw
aGFGb3JtYXQgeworICAgIEFscGhhRm9ybWF0Tm9uZSA9IDAsCisgICAgQWxwaGFGb3JtYXRGaXJz
dCwKKyAgICBBbHBoYUZvcm1hdExhc3QsCisgICAgQWxwaGFGb3JtYXROdW1Gb3JtYXRzCit9Owor
CisvLyBUaGlzIHJldHVybnMgU291cmNlRm9ybWF0TnVtRm9ybWF0cyBpZiB0aGUgY29tYmluYXRp
b24gb2YgaW5wdXQgcGFyYW1ldGVycyBpcyB1bnN1cHBvcnRlZC4KK3N0YXRpYyBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdCBnZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGNvbXBvbmVu
dHNQZXJQaXhlbCwgQWxwaGFGb3JtYXQgYWxwaGFGb3JtYXQsIGJvb2wgaXMxNkJpdEZvcm1hdCwg
Ym9vbCBiaWdFbmRpYW4pCit7CisgICAgY29uc3Qgc3RhdGljIFNvdXJjZURhdGFGb3JtYXRCYXNl
IGZvcm1hdFRhYmxlQmFzZVs0XVtBbHBoYUZvcm1hdE51bUZvcm1hdHNdID0geyAvLyBjb21wb25l
bnRzUGVyUGl4ZWwgeCBBbHBoYUZvcm1hdAorICAgICAgICAvLyBBbHBoYUZvcm1hdE5vbmUgICAg
ICAgICAgICBBbHBoYUZvcm1hdEZpcnN0ICAgICAgICAgICAgQWxwaGFGb3JtYXRMYXN0CisgICAg
ICAgIHsgU291cmNlRm9ybWF0QmFzZVIsICAgICAgICAgIFNvdXJjZUZvcm1hdEJhc2VBLCAgICAg
ICAgICBTb3VyY2VGb3JtYXRCYXNlQSAgICAgICAgICB9LCAvLyAxIGNvbXBvbmVudHNQZXJQaXhl
bAorICAgICAgICB7IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzLCBTb3VyY2VGb3JtYXRCYXNl
QVIsICAgICAgICAgU291cmNlRm9ybWF0QmFzZVJBICAgICAgICAgfSwgLy8gMiBjb21wb25lbnRz
UGVyUGl4ZWwKKyAgICAgICAgeyBTb3VyY2VGb3JtYXRCYXNlUkdCLCAgICAgICAgU291cmNlRm9y
bWF0QmFzZU51bUZvcm1hdHMsIFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRzIH0sIC8vIDMgY29t
cG9uZW50c1BlclBpeGVsCisgICAgICAgIHsgU291cmNlRm9ybWF0QmFzZU51bUZvcm1hdHMsIFNv
dXJjZUZvcm1hdEJhc2VBUkdCLCAgICAgICBTb3VyY2VGb3JtYXRCYXNlUkdCQSAgICAgICAgfSAv
LyA0IGNvbXBvbmVudHNQZXJQaXhlbAorICAgIH07CisgICAgY29uc3Qgc3RhdGljIEdyYXBoaWNz
Q29udGV4dEdMOjpEYXRhRm9ybWF0IGZvcm1hdFRhYmxlW1NvdXJjZUZvcm1hdEJhc2VOdW1Gb3Jt
YXRzXVs0XSA9IHsgLy8gU291cmNlRGF0YUZvcm1hdDo6QmFzZSB4IGJpdHNQZXJDb21wb25lbnQg
eCBlbmRpYW4KKyAgICAgICAgLy8gOGJpdHMsIGxpdHRsZSBlbmRpYW4gICAgICAgICAgICAgICAg
IDhiaXRzLCBiaWcgZW5kaWFuICAgICAgICAgICAgICAgICAgICAgMTZiaXRzLCBsaXR0bGUgZW5k
aWFuICAgICAgICAgICAgICAgICAgICAgICAgMTZiaXRzLCBiaWcgZW5kaWFuCisgICAgICAgIHsg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4LCAgICBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UjgsICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZMaXR0
bGUsICAgIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZCaWcgfSwKKyAgICAgICAg
eyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTgsICAgIEdyYXBoaWNzQ29udGV4dEdM
OjpEYXRhRm9ybWF0OjpBOCwgICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkxp
dHRsZSwgICAgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkExNkJpZyB9LAorICAgICAg
ICB7IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjgsICAgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJBOCwgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkEx
NkxpdHRsZSwgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkExNkJpZyB9LAorICAg
ICAgICB7IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTgsICAgR3JhcGhpY3NDb250
ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSOCwgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QVIxNkxpdHRsZSwgICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVIxNkJpZyB9LAor
ICAgICAgICB7IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1I4LCAgR3JhcGhpY3ND
b250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjgsICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1h
dDo6UkdCMTZMaXR0bGUsICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcg
fSwKKyAgICAgICAgeyBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QUJHUjgsIEdyYXBo
aWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBOCwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFG
b3JtYXQ6OlJHQkExNkxpdHRsZSwgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEx
NkJpZyB9LAorICAgICAgICB7IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpCR1JBOCwg
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0I4LCBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6QVJHQjE2TGl0dGxlLCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
QVJHQjE2QmlnIH0KKyAgICB9OworCisgICAgQVNTRVJUKGNvbXBvbmVudHNQZXJQaXhlbCA8PSA0
ICYmIGNvbXBvbmVudHNQZXJQaXhlbCA+IDApOworICAgIFNvdXJjZURhdGFGb3JtYXRCYXNlIGZv
cm1hdEJhc2UgPSBmb3JtYXRUYWJsZUJhc2VbY29tcG9uZW50c1BlclBpeGVsIC0gMV1bYWxwaGFG
b3JtYXRdOworICAgIGlmIChmb3JtYXRCYXNlID09IFNvdXJjZUZvcm1hdEJhc2VOdW1Gb3JtYXRz
KQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6Ok51bUZvcm1h
dHM7CisgICAgcmV0dXJuIGZvcm1hdFRhYmxlW2Zvcm1hdEJhc2VdWyhpczE2Qml0Rm9ybWF0ID8g
MiA6IDApICsgKGJpZ0VuZGlhbiA/IDEgOiAwKV07Cit9CisKK25hbWVzcGFjZSB7Cit1aW50OF90
IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiB2
YWx1ZSA+PiA4OworfQorCit1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZh
bHVlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSAmIDB4MDBGRik7
Cit9CisKK3RlbXBsYXRlPEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGZvcm1hdCwgdHlw
ZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRHN0VHlwZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBj
b252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4KGNvbnN0IFNvdXJjZVR5cGUqLCBEc3RUeXBlKiwgdW5z
aWduZWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3RlbXBsYXRlPD4gQUxX
QVlTX0lOTElORSB2b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVp
bnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJS
b3cpCit7CisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQorICAgIFNJTUQ6OnVucGFja09u
ZVJvd09mUkdCQTE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJS
b3cpOworI2VuZGlmCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsg
KytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgo
c291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRs
ZVRvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2
TGl0dGxlVG84KHNvdXJjZVsyXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENv
bG9yMTZMaXR0bGVUbzgoc291cmNlWzNdKTsKKyAgICAgICAgc291cmNlICs9IDQ7CisgICAgICAg
IGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0
aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRl
c3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzFdKTsKKyAgICAgICAg
ZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMl0pOworICAgICAg
ICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVszXSk7CisgICAg
ICAgIHNvdXJjZSArPSA0OworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50
OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWdu
ZWQgcGl4ZWxzUGVyUm93KQoreworI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKKyAgICBT
SU1EOjp1bnBhY2tPbmVSb3dPZlJHQjE2TGl0dGxlVG9SR0JBOChzb3VyY2UsIGRlc3RpbmF0aW9u
LCBwaXhlbHNQZXJSb3cpOworI2VuZGlmCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBp
eGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENvbG9y
MTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0
Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNv
bnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsyXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNd
ID0gMHhGRjsKKyAgICAgICAgc291cmNlICs9IDM7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7
CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRG
b3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IxNkJpZywgdWlu
dDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVy
dENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252
ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNv
bnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVsyXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0g
MHhGRjsKKyAgICAgICAgc291cmNlICs9IDM7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3Jt
YXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUsIHVp
bnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKKyAgICBTSU1EOjp1bnBhY2tPbmVSb3dPZkFSR0IxNkxpdHRsZVRvUkdCQTgoc291cmNl
LCBkZXN0aW5hdGlvbiwgcGl4ZWxzUGVyUm93KTsKKyNlbmRpZgorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5hdGlvblswXSA9
IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9u
WzFdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzJdKTsKKyAgICAgICAgZGVzdGlu
YXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbM10pOworICAgICAgICBk
ZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAg
ICAgIHNvdXJjZSArPSA0OworICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwor
dGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVJHQjE2QmlnLCB1aW50MTZfdCwgdWludDhf
dD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVk
IHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVy
Um93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3IxNkJpZ1Rv
OChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xvcjE2Qmln
VG84KHNvdXJjZVsyXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENvbG9yMTZC
aWdUbzgoc291cmNlWzNdKTsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0Q29sb3Ix
NkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBzb3VyY2UgKz0gNDsKKyAgICAgICAgZGVzdGlu
YXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2b2lkIGNv
bnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIx
NkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9u
WzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGlu
YXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAgICBk
ZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gMHhGRjsKKyAgICAgICAgc291cmNlICs9IDE7CisgICAgICAg
IGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUg
dm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSMTZCaWcsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0aW5h
dGlvblswXSA9IGNvbnZlcnRDb2xvcjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3Rp
bmF0aW9uWzFdID0gY29udmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVz
dGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBk
ZXN0aW5hdGlvblszXSA9IDB4RkY7CisgICAgICAgIHNvdXJjZSArPSAxOworICAgICAgICBkZXN0
aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6
UkExNkxpdHRsZSwgdWludDE2X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0
aW9uWzBdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVz
dGluYXRpb25bMV0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMF0pOworICAgICAg
ICBkZXN0aW5hdGlvblsyXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7Cisg
ICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFd
KTsKKyAgICAgICAgc291cmNlICs9IDI7CisgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAg
fQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJTkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRU
b1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2QmlnLCB1aW50MTZfdCwg
dWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVu
c2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4
ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVzdGluYXRpb25bMF0gPSBjb252ZXJ0Q29sb3Ix
NkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBkZXN0aW5hdGlvblsxXSA9IGNvbnZlcnRDb2xv
cjE2QmlnVG84KHNvdXJjZVswXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0
Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOworICAgICAgICBzb3VyY2UgKz0gMjsKKyAgICAgICAg
ZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4gQUxXQVlTX0lOTElORSB2
b2lkIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTg8R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkFSMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBkZXN0
aW5hdGlvblswXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVsxXSk7CisgICAgICAg
IGRlc3RpbmF0aW9uWzFdID0gY29udmVydENvbG9yMTZMaXR0bGVUbzgoc291cmNlWzFdKTsKKyAg
ICAgICAgZGVzdGluYXRpb25bMl0gPSBjb252ZXJ0Q29sb3IxNkxpdHRsZVRvOChzb3VyY2VbMV0p
OworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZlcnRDb2xvcjE2TGl0dGxlVG84KHNvdXJj
ZVswXSk7CisgICAgICAgIHNvdXJjZSArPSAyOworICAgICAgICBkZXN0aW5hdGlvbiArPSA0Owor
ICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5MSU5FIHZvaWQgY29udmVydDE2Qml0Rm9y
bWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QVIxNkJpZywgdWludDE2
X3QsIHVpbnQ4X3Q+KGNvbnN0IHVpbnQxNl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9u
LCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHBpeGVsc1BlclJvdzsgKytpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gY29udmVydENv
bG9yMTZCaWdUbzgoc291cmNlWzFdKTsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSBjb252ZXJ0
Q29sb3IxNkJpZ1RvOChzb3VyY2VbMV0pOworICAgICAgICBkZXN0aW5hdGlvblsyXSA9IGNvbnZl
cnRDb2xvcjE2QmlnVG84KHNvdXJjZVsxXSk7CisgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gY29u
dmVydENvbG9yMTZCaWdUbzgoc291cmNlWzBdKTsKKyAgICAgICAgc291cmNlICs9IDI7CisgICAg
ICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+IEFMV0FZU19JTkxJ
TkUgdm9pZCBjb252ZXJ0MTZCaXRGb3JtYXRUb1JHQkE4PEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpBMTZMaXR0bGUsIHVpbnQxNl90LCB1aW50OF90Pihjb25zdCB1aW50MTZfdCogc291
cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgcGl4ZWxzUGVyUm93KQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbHNQZXJSb3c7ICsraSkgeworICAgICAgICBk
ZXN0aW5hdGlvblswXSA9IDB4MDsKKyAgICAgICAgZGVzdGluYXRpb25bMV0gPSAweDA7CisgICAg
ICAgIGRlc3RpbmF0aW9uWzJdID0gMHgwOworICAgICAgICBkZXN0aW5hdGlvblszXSA9IGNvbnZl
cnRDb2xvcjE2TGl0dGxlVG84KHNvdXJjZVswXSk7CisgICAgICAgIHNvdXJjZSArPSAxOworICAg
ICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgIH0KK30KKwordGVtcGxhdGU8PiBBTFdBWVNfSU5M
SU5FIHZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9SR0JBODxHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6QTE2QmlnLCB1aW50MTZfdCwgdWludDhfdD4oY29uc3QgdWludDE2X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24sIHVuc2lnbmVkIHBpeGVsc1BlclJvdykKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKKyAgICAgICAgZGVz
dGluYXRpb25bMF0gPSAweDA7CisgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gMHgwOworICAgICAg
ICBkZXN0aW5hdGlvblsyXSA9IDB4MDsKKyAgICAgICAgZGVzdGluYXRpb25bM10gPSBjb252ZXJ0
Q29sb3IxNkJpZ1RvOChzb3VyY2VbMF0pOworICAgICAgICBzb3VyY2UgKz0gMTsKKyAgICAgICAg
ZGVzdGluYXRpb24gKz0gNDsKKyAgICB9Cit9CisKK3ZvaWQgY29udmVydDE2Qml0Rm9ybWF0VG9S
R0JBOChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBzcmNGb3JtYXQsIGNvbnN0IHVpbnQx
Nl90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBwaXhlbHNQZXJSb3cp
Cit7CisjZGVmaW5lIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoU3JjRm9ybWF0KSBcCisgICAg
Y2FzZSBTcmNGb3JtYXQ6IFwKKyAgICAgICAgcmV0dXJuIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdC
QTg8U3JjRm9ybWF0Pihzb3VyY2UsIGRlc3RpbmF0aW9uLCBwaXhlbHNQZXJSb3cpOworCisgICAg
c3dpdGNoIChzcmNGb3JtYXQpIHsKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UjE2TGl0dGxlKQorICAgICAgICBDT05WRVJU
MTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZCaWcp
CisgICAgICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OkExNkxpdHRsZSkKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChH
cmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2QmlnKQorICAgICAgICBDT05WRVJUMTZC
SVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2TGl0dGxl
KQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSQTE2QmlnKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdy
YXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjE2TGl0dGxlKQorICAgICAgICBDT05WRVJU
MTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUjE2Qmln
KQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRUT1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0IxNkxpdHRsZSkKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JB
OChHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZCaWcpCisgICAgICAgIENPTlZF
UlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkEx
NkxpdHRsZSkKKyAgICAgICAgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOChHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2QmlnKQorICAgICAgICBDT05WRVJUMTZCSVRGT1JNQVRU
T1JHQkE4KEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBUkdCMTZMaXR0bGUpCisgICAg
ICAgIENPTlZFUlQxNkJJVEZPUk1BVFRPUkdCQTgoR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3Jt
YXQ6OkFSR0IxNkJpZykKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisjdW5kZWYgQ09OVkVSVDE2QklURk9STUFUVE9SR0JBOAorfQorCit9CisKK0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6fkltYWdlRXh0cmFjdG9yKCkg
PSBkZWZhdWx0OworCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rv
cjo6ZXh0cmFjdEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZSkKK3sKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBib29sIGhhc0FscGhhID0gIW1faW1hZ2UtPmN1cnJlbnRGcmFtZUtub3duVG9CZU9w
YXF1ZSgpOworICAgIGlmICgoaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhh
ICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7CisgICAgICAgIGF1
dG8gc291cmNlID0gSW1hZ2VTb3VyY2U6OmNyZWF0ZShudWxscHRyLCBBbHBoYU9wdGlvbjo6Tm90
UHJlbXVsdGlwbGllZCwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPyBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbjo6SWdub3JlZCA6IEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOjpBcHBs
aWVkKTsKKyAgICAgICAgc291cmNlLT5zZXREYXRhKG1faW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7Cisg
ICAgICAgIGlmICghc291cmNlLT5mcmFtZUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgbV9kZWNvZGVkSW1hZ2UgPSBzb3VyY2UtPmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KDApOworICAgICAgICBtX2NnSW1hZ2UgPSBtX2RlY29kZWRJbWFnZTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9jZ0ltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKKyAgICBpZiAoIW1fY2dJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9pbWFnZVdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKG1fY2dJbWFnZS5nZXQoKSk7CisgICAgbV9p
bWFnZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQobV9jZ0ltYWdlLmdldCgpKTsKKyAgICBpZiAo
IW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gU2VlIHdoZXRoZXIgdGhlIGltYWdlIGlzIHVzaW5nIGFuIGluZGV4ZWQgY29sb3Ig
c3BhY2UsIGFuZCBpZgorICAgIC8vIHNvLCByZS1yZW5kZXIgaXQgaW50byBhbiBSR0IgY29sb3Ig
c3BhY2UuIFRoZSBpbWFnZSByZS1wYWNraW5nCisgICAgLy8gY29kZSByZXF1aXJlcyBjb2xvciBk
YXRhLCBub3QgY29sb3IgdGFibGUgaW5kaWNlcywgZm9yIHRoZQorICAgIC8vIGltYWdlIGRhdGEu
CisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZSht
X2NnSW1hZ2UuZ2V0KCkpOworICAgIENHQ29sb3JTcGFjZU1vZGVsIG1vZGVsID0gQ0dDb2xvclNw
YWNlR2V0TW9kZWwoY29sb3JTcGFjZSk7CisgICAgaWYgKG1vZGVsID09IGtDR0NvbG9yU3BhY2VN
b2RlbEluZGV4ZWQpIHsKKyAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gYml0bWFwQ29u
dGV4dDsKKyAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBwcm9iYWJseSBtYW51YWxseSBjb252
ZXJ0IHRoZSBpbWFnZSBieSBpbmRleGluZyBpbnRvCisgICAgICAgIC8vIHRoZSBjb2xvciB0YWJs
ZSwgd2hpY2ggd291bGQgYWxsb3cgdXMgdG8gYXZvaWQgcHJlbXVsdGlwbHlpbmcgdGhlCisgICAg
ICAgIC8vIGFscGhhIGNoYW5uZWwuIENyZWF0aW9uIG9mIGEgYml0bWFwIGNvbnRleHQgd2l0aCBh
biBhbHBoYSBjaGFubmVsCisgICAgICAgIC8vIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHVubGVzcyBp
dCdzIHByZW11bHRpcGxpZWQuCisgICAgICAgIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZSgwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1faW1h
Z2VXaWR0aCAqIDQsCisgICAgICAgICAgICBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0KSk7CisgICAg
ICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRN
b2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGJpdG1h
cENvbnRleHQuZ2V0KCksIGtDR0ludGVycG9sYXRpb25Ob25lKTsKKyAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbV9pbWFnZVdp
ZHRoLCBtX2ltYWdlSGVpZ2h0KSwgbV9jZ0ltYWdlLmdldCgpKTsKKworICAgICAgICAvLyBOb3cg
ZGlzY2FyZCB0aGUgb3JpZ2luYWwgQ0cgaW1hZ2UgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIGNvcHkg
ZnJvbSB0aGUgYml0bWFwIGNvbnRleHQuCisgICAgICAgIG1fZGVjb2RlZEltYWdlID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7CisgICAg
ICAgIG1fY2dJbWFnZSA9IG1fZGVjb2RlZEltYWdlLmdldCgpOworICAgIH0KKworICAgIHNpemVf
dCBiaXRzUGVyQ29tcG9uZW50ID0gQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQobV9jZ0ltYWdl
LmdldCgpKTsKKyAgICBzaXplX3QgYml0c1BlclBpeGVsID0gQ0dJbWFnZUdldEJpdHNQZXJQaXhl
bChtX2NnSW1hZ2UuZ2V0KCkpOworICAgIGlmIChiaXRzUGVyQ29tcG9uZW50ICE9IDggJiYgYml0
c1BlckNvbXBvbmVudCAhPSAxNikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChiaXRz
UGVyUGl4ZWwgJSBiaXRzUGVyQ29tcG9uZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
c2l6ZV90IGNvbXBvbmVudHNQZXJQaXhlbCA9IGJpdHNQZXJQaXhlbCAvIGJpdHNQZXJDb21wb25l
bnQ7CisKKyAgICBDR0JpdG1hcEluZm8gYml0SW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKG1f
Y2dJbWFnZS5nZXQoKSk7CisgICAgYm9vbCBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKKyAgICAv
LyBUaGVzZSBjb3VsZCB0ZWNobmljYWxseSBiZSBjb21iaW5lZCBpbnRvIG9uZSBsYXJnZSBzd2l0
Y2gKKyAgICAvLyBzdGF0ZW1lbnQsIGJ1dCB3ZSBwcmVmZXIgbm90IHRvIHNvIHRoYXQgd2UgZmFp
bCBmYXN0IGlmIHdlCisgICAgLy8gZW5jb3VudGVyIGFuIHVuZXhwZWN0ZWQgaW1hZ2UgY29uZmln
dXJhdGlvbi4KKyAgICBpZiAoYml0c1BlckNvbXBvbmVudCA9PSAxNikgeworICAgICAgICBzd2l0
Y2ggKGJpdEluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXJNYXNrKSB7CisgICAgICAgIGNhc2Uga0NH
Qml0bWFwQnl0ZU9yZGVyMTZCaWc6CisgICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMTZM
aXR0bGU6CisgICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQ6CisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGEgYnVnIGluIGVhcmxpZXIgdmVyc2lvbiBvZiBjZyB3aGVyZSB0aGUg
ZGVmYXVsdCBlbmRpYW4KKyAgICAgICAgICAgIC8vIGlzIGxpdHRsZSB3aGVyZWFzIHRoZSBkZWNv
ZGVkIDE2LWJpdCBwbmcgaW1hZ2UgZGF0YSBpcyBhY3R1YWxseQorICAgICAgICAgICAgLy8gQmln
LiBMYXRlciB2ZXJzaW9uICgxMC42LjQpIG5vIGxvbmdlciByZXR1cm5zIEJ5dGVPcmRlckRlZmF1
bHQuCisgICAgICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGJpdEluZm8gJiBrQ0dCaXRtYXBCeXRl
T3JkZXJNYXNrKSB7CisgICAgICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWc6CisgICAg
ICAgICAgICBiaWdFbmRpYW5Tb3VyY2UgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2Uga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGU6CisgICAgICAgICAgICBiaWdFbmRp
YW5Tb3VyY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtDR0Jp
dG1hcEJ5dGVPcmRlckRlZmF1bHQ6CisgICAgICAgICAgICAvLyBJdCBhcHBlYXJzIHRoYXQgdGhl
IGRlZmF1bHQgYnl0ZSBvcmRlciBpcyBhY3R1YWxseSBiaWcKKyAgICAgICAgICAgIC8vIGVuZGlh
biBldmVuIG9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlcy4KKyAgICAgICAgICAgIGJpZ0Vu
ZGlhblNvdXJjZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fYWxw
aGFPcCA9IEFscGhhT3A6OkRvTm90aGluZzsKKyAgICBBbHBoYUZvcm1hdCBhbHBoYUZvcm1hdCA9
IEFscGhhRm9ybWF0Tm9uZTsKKyAgICBzd2l0Y2ggKENHSW1hZ2VHZXRBbHBoYUluZm8obV9jZ0lt
YWdlLmdldCgpKSkgeworICAgIGNhc2Uga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdDoK
KyAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgbV9hbHBoYU9wID0g
QWxwaGFPcDo6RG9Vbm11bHRpcGx5OworICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0
Rmlyc3Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga0NHSW1hZ2VBbHBoYUZpcnN0OgorICAg
ICAgICAvLyBUaGlzIHBhdGggaXMgb25seSBhY2Nlc3NpYmxlIGZvciBNYWNPUyBlYXJsaWVyIHRo
YW4gMTAuNi40LgorICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgIG1f
YWxwaGFPcCA9IEFscGhhT3A6OkRvUHJlbXVsdGlwbHk7CisgICAgICAgIGFscGhhRm9ybWF0ID0g
QWxwaGFGb3JtYXRGaXJzdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhh
Tm9uZVNraXBGaXJzdDoKKyAgICAgICAgLy8gVGhpcyBwYXRoIGlzIG9ubHkgYWNjZXNzaWJsZSBm
b3IgTWFjT1MgZWFybGllciB0aGFuIDEwLjYuNC4KKyAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBo
YUZvcm1hdEZpcnN0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdDoKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAg
ICAgbV9hbHBoYU9wID0gQWxwaGFPcDo6RG9Vbm11bHRpcGx5OworICAgICAgICBhbHBoYUZvcm1h
dCA9IEFscGhhRm9ybWF0TGFzdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFs
cGhhTGFzdDoKKyAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBtX2Fs
cGhhT3AgPSBBbHBoYU9wOjpEb1ByZW11bHRpcGx5OworICAgICAgICBhbHBoYUZvcm1hdCA9IEFs
cGhhRm9ybWF0TGFzdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9u
ZVNraXBMYXN0OgorICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0TGFzdDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBrQ0dJbWFnZUFscGhhTm9uZToKKyAgICAgICAgYWxwaGFGb3Jt
YXQgPSBBbHBoYUZvcm1hdE5vbmU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gZ2V0
U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4ZWwsIGFscGhhRm9ybWF0LCBiaXRzUGVy
Q29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2UpOworICAgIGlmIChtX2ltYWdlU291cmNl
Rm9ybWF0ID09IERhdGFGb3JtYXQ6Ok51bUZvcm1hdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fcGl4ZWxEYXRhID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1h
Z2VHZXREYXRhUHJvdmlkZXIobV9jZ0ltYWdlLmdldCgpKSkpOworICAgIGlmICghbV9waXhlbERh
dGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faW1hZ2VQaXhlbERhdGEgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHZvaWQqPihDRkRhdGFHZXRCeXRlUHRyKG1fcGl4ZWxEYXRhLmdl
dCgpKSk7CisKKyAgICB1bnNpZ25lZCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAwOworICAgIHNpemVf
dCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhtX2NnSW1hZ2UuZ2V0KCkpOwor
ICAgIHVuc2lnbmVkIHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDggKiBt
X2ltYWdlV2lkdGg7CisgICAgaWYgKHBhZGRpbmcpIHsKKyAgICAgICAgc3JjVW5wYWNrQWxpZ25t
ZW50ID0gcGFkZGluZyArIDE7CisgICAgICAgIHdoaWxlIChieXRlc1BlclJvdyAlIHNyY1VucGFj
a0FsaWdubWVudCkKKyAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25tZW50OworICAgIH0KKwor
ICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSBzcmNVbnBhY2tBbGlnbm1lbnQ7Cisg
ICAgLy8gVXNpbmcgYSBiaXRtYXAgY29udGV4dCBjcmVhdGVkIGFjY29yZGluZyB0byBkZXN0aW5h
dGlvbiBmb3JtYXQgYW5kIGRyYXdpbmcgdGhlIENHSW1hZ2UgdG8gdGhlIGJpdG1hcCBjb250ZXh0
IGNhbiBhbHNvIGRvIHRoZSBmb3JtYXQgY29udmVyc2lvbiwKKyAgICAvLyBidXQgaXQgd291bGQg
cHJlbXVsdGlwbHkgdGhlIGFscGhhIGNoYW5uZWwgYXMgYSBzaWRlIGVmZmVjdC4KKyAgICAvLyBQ
cmVmZXIgdG8gbWFubnVhbGx5IENvbnZlcnQgMTZiaXQgcGVyLWNvbXBvbmVudCBmb3JtYXRzIHRv
IFJHQkE4IGZvcm1hdHMgaW5zdGVhZC4KKyAgICBpZiAoYml0c1BlckNvbXBvbmVudCA9PSAxNikg
eworICAgICAgICBtX2Zvcm1hbGl6ZWRSR0JBOERhdGEgPSBtYWtlVW5pcXVlQXJyYXk8dWludDhf
dD4oKENoZWNrZWQ8c2l6ZV90PihtX2ltYWdlV2lkdGgpICogbV9pbWFnZUhlaWdodCAqIDRVKS51
bnNhZmVHZXQoKSk7CisgICAgICAgIGNvbnN0IHVpbnQxNl90KiBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4obV9pbWFnZVBpeGVsRGF0YSk7CisgICAgICAgIHVpbnQ4
X3QqIGRlc3RpbmF0aW9uID0gbV9mb3JtYWxpemVkUkdCQThEYXRhLmdldCgpOworICAgICAgICBj
b25zdCBwdHJkaWZmX3Qgc3JjU3RyaWRlSW5FbGVtZW50cyA9IGJ5dGVzUGVyUm93IC8gc2l6ZW9m
KHVpbnQxNl90KTsKKyAgICAgICAgY29uc3QgcHRyZGlmZl90IGRzdFN0cmlkZUluRWxlbWVudHMg
PSA0ICogbV9pbWFnZVdpZHRoOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPTA7IGkgPCBtX2lt
YWdlSGVpZ2h0OyBpKyspIHsKKyAgICAgICAgICAgIGNvbnZlcnQxNkJpdEZvcm1hdFRvUkdCQTgo
bV9pbWFnZVNvdXJjZUZvcm1hdCwgc291cmNlLCBkZXN0aW5hdGlvbiwgbV9pbWFnZVdpZHRoKTsK
KyAgICAgICAgICAgIHNvdXJjZSArPSBzcmNTdHJpZGVJbkVsZW1lbnRzOworICAgICAgICAgICAg
ZGVzdGluYXRpb24gKz0gZHN0U3RyaWRlSW5FbGVtZW50czsKKyAgICAgICAgfQorICAgICAgICBt
X2ltYWdlUGl4ZWxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obV9mb3JtYWxp
emVkUkdCQThEYXRhLmdldCgpKTsKKyAgICAgICAgbV9pbWFnZVNvdXJjZUZvcm1hdCA9IERhdGFG
b3JtYXQ6OlJHQkE4OworICAgICAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gMTsK
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VJbWFnZURh
dGEodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkKK3sKKyAgICBmYXN0RnJlZShjb25z
dF9jYXN0PHZvaWQqPihkYXRhKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGNvbnN0IElu
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VTaXplLmlzRW1w
dHkoKSB8fCBjYW52YXNTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBy
b3dCeXRlcyA9IGltYWdlU2l6ZS53aWR0aCgpICogNDsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJv
dmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKKworICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciogY29waWVkUGl4ZWxzOworCisgICAg
ICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbWFnZVNpemUuaGVpZ2h0KCksIHJvd0J5dGVzKS5nZXRW
YWx1ZShjb3BpZWRQaXhlbHMpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1lbWNw
eShjb3BpZWRQaXhlbHMsIGltYWdlUGl4ZWxzLCByb3dCeXRlcyAqIGltYWdlU2l6ZS5oZWlnaHQo
KSk7CisKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcm93Qnl0ZXMgKiBpbWFnZVNpemUuaGVp
Z2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29waWVkUGl4ZWxz
LCBkYXRhU2l6ZSk7CisgICAgICAgIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlk
ZXJDcmVhdGVXaXRoRGF0YSgwLCBjb3BpZWRQaXhlbHMsIGRhdGFTaXplLCByZWxlYXNlSW1hZ2VE
YXRhKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcm93Qnl0ZXMg
KiBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91
Z2goaW1hZ2VQaXhlbHMsIGRhdGFTaXplKTsKKyAgICAgICAgZGF0YVByb3ZpZGVyID0gYWRvcHRD
RihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGltYWdlUGl4ZWxzLCBkYXRhU2l6ZSwg
MCkpOworICAgIH0KKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlKGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgs
IDMyLCByb3dCeXRlcywgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKKyAgICAgICAgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAg
Ly8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6
ZWQgb24KKyAgICAvLyB0aGUgcGFnZS4gR28gYmFjayB0byB0aGUgQ2FudmFzIHRvIGZpZ3VyZSBv
dXQgdGhlIGNvcnJlY3QKKyAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IHRvIGRyYXcuCisgICAgRmxv
YXRSZWN0IGNhbnZhc1JlY3QoRmxvYXRQb2ludCgpLCBjYW52YXNTaXplKTsKKyAgICAvLyBXZSB3
YW50IHRvIGNvbXBsZXRlbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmcmFtZSdzCisgICAgLy8g
cmVuZGVyaW5nIHJlc3VsdHMuCisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAg
ICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtaW1hZ2VTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0
LnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90
SW50ZXJwb2xhdGUpOworICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNnSW1hZ2UsIGltYWdl
U2l6ZSwgY2FudmFzUmVjdCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKSwgeyBD
b21wb3NpdGVPcGVyYXRvcjo6Q29weSB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHQzRENvY29h
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0M0RDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjY2I0NDU1YWE1
Y2I3ZmNhNzZiYzRkM2ViZjg3MWFlZjc1MDZkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHQzRENvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsODUyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAm
JiAhVVNFKEFOR0xFKQotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKLSNlbmRpZgot
Ci0jaW1wb3J0ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dDNETWFuYWdlci5oIgotI2ltcG9ydCAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKLSNpbXBvcnQgIklt
YWdlQnVmZmVyLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJHTExheWVyLmgi
Ci0jaW1wb3J0ICJXZWJHTE9iamVjdC5oIgotI2ltcG9ydCAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oIgotI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4dC5oPgotI2ltcG9y
dCA8c3lzL3N5c2N0bC5oPgotI2ltcG9ydCA8c3lzZXhpdHMuaD4KLSNpbXBvcnQgPHd0Zi9CbG9j
a09iakNFeGNlcHRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBV
U0UoT1BFTkdMX0VTKQotI2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgotI2ltcG9ydCA8T3BlbkdM
RVMvRUFHTERyYXdhYmxlLmg+Ci0jaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+Ci0j
aW1wb3J0IDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgotI2ltcG9ydCA8cGFsL3NwaS9pb3MvT3BlbkdMRVNTUEkuaD4KLSNlbGlmIFVTRShP
UEVOR0wpCi0jaW1wb3J0IDxJT0tpdC9JT0tpdExpYi5oPgotI2ltcG9ydCA8T3BlbkdML2dsLmg+
Ci0jZWxpZiBVU0UoQU5HTEUpCi0jZGVmaW5lIEVHTF9FR0xfUFJPVE9UWVBFUyAwCi0vLyBTa2lw
IHRoZSBpbmNsdXNpb24gb2YgQU5HTEUncyBleHBsaWNpdCBjb250ZXh0IGVudHJ5IHBvaW50cyBm
b3Igbm93LgotI2RlZmluZSBHTF9BTkdMRV9leHBsaWNpdF9jb250ZXh0Ci0jZGVmaW5lIEdMX0FO
R0xFX2V4cGxpY2l0X2NvbnRleHRfZ2xlczEKLXR5cGVkZWYgdm9pZCogR0xlZ2xDb250ZXh0Owot
I2luY2x1ZGUgPEFOR0xFL2VnbC5oPgotI2luY2x1ZGUgPEFOR0xFL2VnbGV4dC5oPgotI2luY2x1
ZGUgPEFOR0xFL2VnbGV4dF9hbmdsZS5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19l
Z2wuaD4KLSNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsX2V4dC5oPgotI2luY2x1ZGUg
PEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+Ci0jaW5jbHVkZSA8QU5HTEUv
ZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHQu
aD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKE9Q
RU5HTF9FUykgfHwgVVNFKE9QRU5HTCkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIK
LSNlbGlmIFVTRShBTkdMRSkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW1wb3J0ICJTY3JlZW5Qcm9wZXJ0aWVzLmgiCi0jaWYg
VVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQotI2ltcG9ydCA8T3BlbkdML0NHTFJlbmRlcmVycy5o
PgotI2VuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgc3RhdHVzQ2hlY2tUaHJlc2hvbGQgPSA1OwotCi0vLyBGSVhNRTogVGhpcyBjbGFz
cyBpcyBjdXJyZW50bHkgZW1wdHkgb24gTWFjLCBidXQgd2lsbCBnZXQgcG9wdWxhdGVkIGFzCi0v
LyB0aGUgcmVzdHJ1Y3R1cmluZyBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjY5MDMgaXMgZG9uZQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqKSB7IH0KLSAgICAKLSAgICB+R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKCkgeyB9Ci19OwotCi1SZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVz
dGluYXRpb24pCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRs
eSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRvdy4KLSAgICBpZiAo
ZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIE1ha2Ugc3BhY2UgZm9yIHRoZSBpbmNvbWluZyBj
b250ZXh0IGlmIHdlJ3JlIGZ1bGwuCi0gICAgR3JhcGhpY3NDb250ZXh0M0RNYW5hZ2VyOjpzaGFy
ZWRNYW5hZ2VyKCkucmVjeWNsZUNvbnRleHRJZk5lY2Vzc2FyeSgpOwotICAgIGlmIChHcmFwaGlj
c0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5oYXNUb29NYW55Q29udGV4dHMoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMsIGhvc3RXaW5k
b3csIGRlc3RpbmF0aW9uKSk7Ci0KLSAgICBpZiAoIWNvbnRleHQtPm1fY29udGV4dE9iaikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5hZGRDb250ZXh0KGNvbnRleHQuZ2V0KCksIGhvc3RXaW5kb3cpOwotCi0g
ICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0KLVJlZjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3ND
b250ZXh0M0Q6OmNyZWF0ZVNoYXJlZChHcmFwaGljc0NvbnRleHQzRCYgc2hhcmVkQ29udGV4dCkK
LXsKLSAgICBhdXRvIGhvc3RXaW5kb3cgPSBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJl
ZE1hbmFnZXIoKS5ob3N0V2luZG93Rm9yQ29udGV4dCgmc2hhcmVkQ29udGV4dCk7Ci0gICAgYXV0
byBjb250ZXh0ID0gYWRvcHRSZWYoKm5ldyBHcmFwaGljc0NvbnRleHQzRChzaGFyZWRDb250ZXh0
LmNvbnRleHRBdHRyaWJ1dGVzKCksIGhvc3RXaW5kb3csIHNoYXJlZENvbnRleHQuZGVzdGluYXRp
b24oKSwgJnNoYXJlZENvbnRleHQpKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNETWFuYWdlcjo6
c2hhcmVkTWFuYWdlcigpLmFkZENvbnRleHQoY29udGV4dC5wdHIoKSwgaG9zdFdpbmRvdyk7Ci0K
LSAgICByZXR1cm4gY29udGV4dDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVO
R0wpIHx8IFVTRShBTkdMRSkpIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBiZSBqdXN0
IChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKSAtIHNlZSA8cmRhcjovLzUzMDYyNzk0Pi4KLQot
c3RhdGljIHZvaWQgc2V0R1BVQnlSZWdpc3RyeUlEKENHTENvbnRleHRPYmogY29udGV4dE9iaiwg
Q0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmosIElPUmVnaXN0cnlHUFVJRCBwcmVmZXJy
ZWRHUFVJRCkKLXsKLSAgICAvLyBXaGVuIHRoZSBXZWJQcm9jZXNzIGRvZXMgbm90IGhhdmUgYWNj
ZXNzIHRvIHRoZSBXaW5kb3dTZXJ2ZXIsIHRoZXJlIGlzIG5vIHdheSBmb3IgT3BlbkdMIHRvIHRl
bGwgd2hpY2ggR1BVIGlzIGNvbm5lY3RlZCB0byBhIGRpc3BsYXkuCi0gICAgLy8gT24gMTAuMTMr
LCBmaW5kIHRoZSB2aXJ0dWFsIHNjcmVlbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcmVmZXJy
ZWQgR1BVIGJ5IGl0cyByZWdpc3RyeUlELgotICAgIC8vIENHTFNldFZpcnR1YWxTY3JlZW4gY2Fu
IHRoZW4gYmUgdXNlZCB0byB0ZWxsIE9wZW5HTCB3aGljaCBHUFUgaXQgc2hvdWxkIGJlIHVzaW5n
LgotCi0gICAgaWYgKCFjb250ZXh0T2JqIHx8ICFwcmVmZXJyZWRHUFVJRCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR0xpbnQgdmlydHVhbFNjcmVlbkNvdW50ID0gMDsKLSAgICBDR0xFcnJvciBl
cnJvciA9IENHTERlc2NyaWJlUGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXRPYmosIDAsIGtDR0xQRkFW
aXJ0dWFsU2NyZWVuQ291bnQsICZ2aXJ0dWFsU2NyZWVuQ291bnQpOwotICAgIEFTU0VSVChlcnJv
ciA9PSBrQ0dMTm9FcnJvcik7Ci0KLSAgICBHTGludCBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuID0g
LTE7Ci0KLSAgICBmb3IgKEdMaW50IHZpcnR1YWxTY3JlZW4gPSAwOyB2aXJ0dWFsU2NyZWVuIDwg
dmlydHVhbFNjcmVlbkNvdW50OyArK3ZpcnR1YWxTY3JlZW4pIHsKLSAgICAgICAgR0xpbnQgZGlz
cGxheU1hc2sgPSAwOwotICAgICAgICBlcnJvciA9IENHTERlc2NyaWJlUGl4ZWxGb3JtYXQocGl4
ZWxGb3JtYXRPYmosIHZpcnR1YWxTY3JlZW4sIGtDR0xQRkFEaXNwbGF5TWFzaywgJmRpc3BsYXlN
YXNrKTsKLSAgICAgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9yKTsKLQotICAgICAgICBh
dXRvIGdwdUlEID0gZ3B1SURGb3JEaXNwbGF5TWFzayhkaXNwbGF5TWFzayk7Ci0KLSAgICAgICAg
aWYgKGdwdUlEID09IHByZWZlcnJlZEdQVUlEKSB7Ci0gICAgICAgICAgICBlcnJvciA9IENHTFNl
dFZpcnR1YWxTY3JlZW4oY29udGV4dE9iaiwgdmlydHVhbFNjcmVlbik7Ci0gICAgICAgICAgICBB
U1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOwotICAgICAgICAgICAgTE9HKFdlYkdMLCAiQ29u
dGV4dCAoJXApIHNldCB0byBHUFUgd2l0aCBJRDogKCVsbGQpLiIsIGNvbnRleHRPYmosIGdwdUlE
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmaXJzdEFj
Y2VsZXJhdGVkU2NyZWVuIDwgMCkgewotICAgICAgICAgICAgR0xpbnQgaXNBY2NlbGVyYXRlZCA9
IDA7Ci0gICAgICAgICAgICBlcnJvciA9IENHTERlc2NyaWJlUGl4ZWxGb3JtYXQocGl4ZWxGb3Jt
YXRPYmosIHZpcnR1YWxTY3JlZW4sIGtDR0xQRkFBY2NlbGVyYXRlZCwgJmlzQWNjZWxlcmF0ZWQp
OwotICAgICAgICAgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9yKTsKLSAgICAgICAgICAg
IGlmIChpc0FjY2VsZXJhdGVkKQotICAgICAgICAgICAgICAgIGZpcnN0QWNjZWxlcmF0ZWRTY3Jl
ZW4gPSB2aXJ0dWFsU2NyZWVuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm8gcmVnaXN0
cnlJRCBtYXRjaCBmb3VuZDsgc2V0IHRvIGZpcnN0IGhhcmR3YXJlLWFjY2VsZXJhdGVkIHZpcnR1
YWwgc2NyZWVuLgotICAgIGlmIChmaXJzdEFjY2VsZXJhdGVkU2NyZWVuID49IDApIHsKLSAgICAg
ICAgZXJyb3IgPSBDR0xTZXRWaXJ0dWFsU2NyZWVuKGNvbnRleHRPYmosIGZpcnN0QWNjZWxlcmF0
ZWRTY3JlZW4pOwotICAgICAgICBBU1NFUlQoZXJyb3IgPT0ga0NHTE5vRXJyb3IpOwotICAgICAg
ICBMT0coV2ViR0wsICJSZWdpc3RyeUlEICglbGxkKSBub3QgbWF0Y2hlZDsgQ29udGV4dCAoJXAp
IHNldCB0byB2aXJ0dWFsIHNjcmVlbiAoJWQpLiIsIHByZWZlcnJlZEdQVUlELCBjb250ZXh0T2Jq
LCBmaXJzdEFjY2VsZXJhdGVkU2NyZWVuKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9S
TShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQotCi1HcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVz
dGluYXRpb24sIEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRDb250ZXh0KQotICAgIDogR3JhcGhp
Y3NDb250ZXh0M0RCYXNlKGF0dHJzLCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKLSAgICAs
IG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4odGhpcykpCi17
Ci0gICAgQVNTRVJUKEFOR0xFV2ViS2l0QnJpZGdlOjphbmdsZUF2YWlsYWJsZSgpKTsKLSAgICBp
ZiAoIUFOR0xFV2ViS2l0QnJpZGdlOjphbmdsZUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2lzRm9yV2ViR0wyID0gYXR0cnMuaXNXZWJHTDI7Ci0KLSNpZiBIQVZFKEFQUExF
X0dSQVBISUNTX0NPTlRST0wpCi0gICAgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24g
PSAoaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpICYmIGF0dHJzLnBvd2VyUHJlZmVyZW5jZSA9PSBH
cmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSA/IEdyYXBo
aWNzQ29udGV4dDNEUG93ZXJQcmVmZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UgOiBHcmFwaGljc0Nv
bnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdDsKLSNlbHNlCi0gICAgbV9wb3dlclByZWZl
cmVuY2VVc2VkRm9yQ3JlYXRpb24gPSBHcmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6
RGVmYXVsdDsKLSNlbmRpZgotCi0jaWYgIVVTRShBTkdMRSkKLSNpZiBVU0UoT1BFTkdMX0VTKQot
ICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRC
cmlkZ2UoU0hfRVNTTF9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fY29tcGlsZXIgPSBBTkdMRVdlYktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCk7Ci0jZWxzZQot
ICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRC
cmlkZ2UoU0hfR0xTTF80MTBfQ09SRV9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKLSNlbmRpZiAv
LyBVU0UoT1BFTkdMX0VTKQotI2VuZGlmIC8vICFVU0UoQU5HTEUpCi0KLSNpZiBVU0UoT1BFTkdM
X0VTKQotICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSAgICBFQUdMUmVuZGVyaW5nQVBJ
IGFwaSA9IG1faXNGb3JXZWJHTDIgPyBrRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMyA6IGtFQUdM
UmVuZGVyaW5nQVBJT3BlbkdMRVMyOwotICAgIEVBR0xDb250ZXh0ICpjb250ZXh0T2JqOwotICAg
IGlmICghc2hhcmVkQ29udGV4dCkKLSAgICAgICAgY29udGV4dE9iaiA9IFtbRUFHTENvbnRleHQg
YWxsb2NdIGluaXRXaXRoQVBJOmFwaV07Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0T2JqID0g
W1tFQUdMQ29udGV4dCBhbGxvY10gaW5pdFdpdGhBUEk6YXBpIHNoYXJlZ3JvdXA6c3RhdGljX2Nh
c3Q8RUFHTENvbnRleHQgKj4oc2hhcmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKS5zaGFyZWdyb3Vw
XTsKLQotICAgIG1fY29udGV4dE9iaiA9IHN0YXRpY19jYXN0PHZvaWQgKj4oY29udGV4dE9iaik7
Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX2lzRm9yV2ViR0wyKQot
ICAgICAgICA6OmdsRW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpQUklNSVRJVkVfUkVTVEFSVF9G
SVhFRF9JTkRFWCk7Ci0jZWxpZiBVU0UoT1BFTkdMKQotCi0gICAgYm9vbCB1c2VNdWx0aXNhbXBs
aW5nID0gYXR0cnMuYW50aWFsaWFzOwotCi0gICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlPiBhdHRyaWJzOwotICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsK
LSAgICBHTGludCBudW1QaXhlbEZvcm1hdHMgPSAwOwotCi0gICAgYXR0cmlicy5hcHBlbmQoa0NH
TFBGQUFjY2VsZXJhdGVkKTsKLSAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsK
LSAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4o
MzIpKTsKLSAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBRGVwdGhTaXplKTsKLSAgICBhdHRyaWJz
LmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpKTsKLQotICAg
IC8vIFRoaXMgYXR0cmlidXRlLCB3aGlsZSBtZW50aW9uaW5nIG9mZmxpbmUgcmVuZGVyZXJzLCBp
cyBhY3R1YWxseQotICAgIC8vIGFsbG93aW5nIHVzIHRvIHJlcXVlc3QgdGhlIGludGVncmF0ZWQg
Z3JhcGhpY3Mgb24gYSBkdWFsIEdQVQotICAgIC8vIHN5c3RlbSwgYW5kIG5vdCBmb3JjZSB0aGUg
ZGlzY3JldGUgR1BVLgotICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGli
cmFyeS9tYWMvdGVjaG5vdGVzL3RuMjIyOS9faW5kZXguaHRtbAotICAgIGlmIChhbGxvd09mZmxp
bmVSZW5kZXJlcnMoKSkKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFsbG93T2ZmbGlu
ZVJlbmRlcmVycyk7Ci0KLSAgICBpZiAodXNlTXVsdGlzYW1wbGluZykgewotICAgICAgICBhdHRy
aWJzLmFwcGVuZChrQ0dMUEZBTXVsdGlzYW1wbGUpOwotICAgICAgICBhdHRyaWJzLmFwcGVuZChr
Q0dMUEZBU2FtcGxlQnVmZmVycyk7Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0
PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigxKSk7Ci0gICAgICAgIGF0dHJpYnMuYXBwZW5kKGtD
R0xQRkFTYW1wbGVzKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGU+KDQpKTsKLSAgICB9Ci0KLSAgICBpZiAobV9pc0ZvcldlYkdMMikg
ewotICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBiYWNraW5nIGEgV2ViR0wyIEdyYXBoaWNz
Q29udGV4dDNEIHdpdGggYSBPcGVuR0wgNCBjb250ZXh0LCB3ZSBzaG91bGQgaW5zdGVhZCBiYWNr
IGl0IHdpdGggQU5HTEUuCi0gICAgICAgIC8vIFVzZSBhbiBPcGVuR0wgNCBjb250ZXh0IGZvciBu
b3cgdW50aWwgdGhlIEFOR0xFIGJhY2tlbmQgaXMgcmVhZHkuCi0gICAgICAgIGF0dHJpYnMuYXBw
ZW5kKGtDR0xQRkFPcGVuR0xQcm9maWxlKTsKLSAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGtDR0xPR0xQVmVyc2lvbl9HTDRfQ29yZSkp
OwotICAgIH0KLQotICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlPigwKSk7Ci0KLSAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEo
KSwgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKLQotICAgIGlmICghbnVtUGl4
ZWxGb3JtYXRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRl
eHQgPSBudWxscHRyOwotICAgIENHTENvbnRleHRPYmogc2hhcmVkQ0dMQ29udGV4dCA9IHNoYXJl
ZENvbnRleHQgPyBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihzaGFyZWRDb250ZXh0LT5tX2Nv
bnRleHRPYmopIDogbnVsbHB0cjsKLQotICAgIENHTEVycm9yIGVyciA9IENHTENyZWF0ZUNvbnRl
eHQocGl4ZWxGb3JtYXRPYmosIHNoYXJlZENHTENvbnRleHQsICZjZ2xDb250ZXh0KTsKLSAgICBH
TGludCBhYm9ydE9uQmxhY2tsaXN0ID0gMDsKLSAgICBDR0xTZXRQYXJhbWV0ZXIoY2dsQ29udGV4
dCwga0NHTENQQWJvcnRPbkdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCwgJmFib3J0T25CbGFj
a2xpc3QpOwotCi0jaWYgUExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91
bGQgYmUgVVNFKE9QRU5HTCkgLSBzZWUgPHJkYXI6Ly81MzA2Mjc5ND4uCi0KLSAgICBhdXRvIGdw
dUlEID0gKGhvc3RXaW5kb3cgJiYgaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpID8gZ3B1SURGb3JE
aXNwbGF5KGhvc3RXaW5kb3ctPmRpc3BsYXlJRCgpKSA6IHByaW1hcnlHUFVJRCgpOwotICAgIHNl
dEdQVUJ5UmVnaXN0cnlJRChjZ2xDb250ZXh0LCBwaXhlbEZvcm1hdE9iaiwgZ3B1SUQpOwotCi0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZgotCi0gICAgQ0dMRGVz
dHJveVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqKTsKLQotICAgIG1fY29udGV4dE9iaiA9IGNn
bENvbnRleHQ7Ci0KLSAgICBpZiAoZXJyICE9IGtDR0xOb0Vycm9yIHx8ICFtX2NvbnRleHRPYmop
IHsKLSAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gY3JlYXRlIHRoZSBjb250ZXh0LgotICAg
ICAgICBtX2NvbnRleHRPYmogPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9j
b250ZXh0T2JqID0gY2dsQ29udGV4dDsKLQotICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENv
bnRleHQpOwotCi0gICAgLy8gV2ViR0wgMiBleHBlY3RzIEVTIDMtb25seSBQUklNSVRJVkVfUkVT
VEFSVF9GSVhFRF9JTkRFWCB0byBiZSBlbmFibGVkOyB3ZSBtdXN0IGVtdWxhdGUgdGhpcyBvbiBu
b24tRVMgMyBzeXN0ZW1zLgotICAgIGlmIChtX2lzRm9yV2ViR0wyKQotICAgICAgICA6OmdsRW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpQUklNSVRJVkVfUkVTVEFSVCk7Ci0KLSNlbGlmIFVTRShB
TkdMRSkKLQotICAgIG1fZGlzcGxheU9iaiA9IEVHTF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJ
U1BMQVkpOwotICAgIGlmIChtX2Rpc3BsYXlPYmogPT0gRUdMX05PX0RJU1BMQVkpCi0gICAgICAg
IHJldHVybjsKLSAgICBFR0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247Ci0gICAgaWYg
KEVHTF9Jbml0aWFsaXplKG1fZGlzcGxheU9iaiwgJm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lv
bikgPT0gRUdMX0ZBTFNFKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVHTERpc3BsYXkgSW5pdGlh
bGl6YXRpb24gZmFpbGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIExPRyhXZWJH
TCwgIkFOR0xFIGluaXRpYWxpc2VkIE1ham9yOiAlZCBNaW5vcjogJWQiLCBtYWpvclZlcnNpb24s
IG1pbm9yVmVyc2lvbik7Ci0gICAgY29uc3QgY2hhciAqZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xf
UXVlcnlTdHJpbmcobV9kaXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7Ci0gICAgTE9HKFdlYkdM
LCAiRXh0ZW5zaW9uczogJXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7Ci0KLSAgICBFR0xpbnQgY29u
ZmlnQXR0cmlidXRlc1tdID0gewotICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BF
TkdMX0VTMl9CSVQsCi0gICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgRUdMX0dSRUVO
X1NJWkUsIDgsCi0gICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgICAgIEVHTF9BTFBIQV9T
SVpFLCA4LAotICAgICAgICBFR0xfTk9ORQotICAgIH07Ci0gICAgRUdMaW50IG51bWJlckNvbmZp
Z3NSZXR1cm5lZCA9IDA7Ci0gICAgRUdMX0Nob29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZp
Z0F0dHJpYnV0ZXMsICZtX2NvbmZpZ09iaiwgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7Ci0g
ICAgaWYgKG51bWJlckNvbmZpZ3NSZXR1cm5lZCAhPSAxKSB7Ci0gICAgICAgIExPRyhXZWJHTCwg
IkVHTENvbmZpZyBJbml0aWFsaXphdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgTE9HKFdlYkdMLCAiR290IEVHTENvbmZpZyIpOwotCi0gICAgRUdMX0JpbmRBUEko
RUdMX09QRU5HTF9FU19BUEkpOwotICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VT
UykgewotICAgICAgICBMT0coV2ViR0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJ
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8RUdMaW50PiBlZ2xDb250
ZXh0QXR0cmlidXRlczsKLSAgICBpZiAobV9pc0ZvcldlYkdMMikgewotICAgICAgICBlZ2xDb250
ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOwotICAgICAg
ICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoMyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsK
LSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKDIpOwotICAgICAgICAvLyBBTkdM
RSB3aWxsIHVwZ3JhZGUgdGhlIGNvbnRleHQgdG8gRVMzIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHRo
aXMgaXMgc3BlY2lmaWVkLgotICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdM
X0NPTlRFWFRfT1BFTkdMX0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFKTsKLSAgICAgICAgZWds
Q29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9GQUxTRSk7Ci0gICAgfQotICAgIGVnbENvbnRl
eHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xF
KTsKLSAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOwotCi0gICAgaWYg
KHN0cnN0cihkaXNwbGF5RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikp
IHsKLSAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJF
TkNFX0FOR0xFKTsKLSAgICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVs
dC4gQ2hhbmdlIHRvCi0gICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQu
Ci0gICAgICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTE9XX1BPV0VSX0FOR0xF
KTsKLSAgICB9Ci0gICAgZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKLQot
ICAgIG1fY29udGV4dE9iaiA9IEVHTF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb25m
aWdPYmosIHNoYXJlZENvbnRleHQgPyBzdGF0aWNfY2FzdDxFR0xDb250ZXh0PihzaGFyZWRDb250
ZXh0LT5tX2NvbnRleHRPYmopIDogRUdMX05PX0NPTlRFWFQsIGVnbENvbnRleHRBdHRyaWJ1dGVz
LmRhdGEoKSk7Ci0gICAgaWYgKG1fY29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkgewotICAg
ICAgICBMT0coV2ViR0wsICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOwot
Ci0gICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9O
T19TVVJGQUNFLCBtX2NvbnRleHRPYmopOwotCi0gICAgaWYgKG1faXNGb3JXZWJHTDIpCi0gICAg
ICAgIGdsOjpFbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlBSSU1JVElWRV9SRVNUQVJUX0ZJWEVE
X0lOREVYKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBFeHRlbnNpb25zM0QmIGV4dGVuc2lv
bnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIq
IHJlcXVpcmVkRXh0ZW5zaW9uc1tdID0gewotICAgICAgICAiR0xfQU5HTEVfdGV4dHVyZV9yZWN0
YW5nbGUiLCAvLyBGb3IgSU9TdXJmYWNlLWJhY2tlZCB0ZXh0dXJlcy4KLSAgICAgICAgIkdMX0VY
VF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIsIC8vIEZvciBjcmVhdGluZyB0aGUgRUdMIHN1cmZh
Y2UgZnJvbSBhbiBJT1N1cmZhY2UuCi0gICAgfTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV1RGX0FSUkFZX0xFTkdUSChyZXF1aXJlZEV4dGVuc2lvbnMpOyArK2kpIHsKLSAgICAgICAg
aWYgKCFleHRlbnNpb25zLnN1cHBvcnRzKHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSkpIHsKLSAgICAg
ICAgICAgIExPRyhXZWJHTCwgIk1pc3NpbmcgcmVxdWlyZWQgZXh0ZW5zaW9uLiAlcyIsIHJlcXVp
cmVkRXh0ZW5zaW9uc1tpXSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBleHRlbnNpb25zLmVuc3VyZUVuYWJsZWQocmVxdWlyZWRFeHRlbnNpb25zW2ldKTsKLSAg
ICB9Ci0KLSAgICBFR0xEZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKLSAgICBFR0xfUXVlcnlE
aXNwbGF5QXR0cmliRVhUKG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0
X2Nhc3Q8RUdMQXR0cmliKj4oJmRldmljZSkpOwotICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4
dCA9IG51bGxwdHI7Ci0gICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQgPSBudWxscHRy
OwotICAgIEVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfQ09OVEVYVF9B
TkdMRSwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmY2dsQ29udGV4dCkpOwotICAgIEVH
TF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FOR0xF
LCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOwotICAgIGF1dG8g
Z3B1SUQgPSAoaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5kaXNwbGF5SUQoKSkgPyBncHVJREZv
ckRpc3BsYXkoaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpIDogcHJpbWFyeUdQVUlEKCk7Ci0gICAg
c2V0R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRleHQsIHBpeGVsRm9ybWF0LCBncHVJRCk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZiAvLyBQTEFURk9STShNQUMp
Ci0KLSNlbmRpZiAvLyAjZWxpZiBVU0UoQU5HTEUpCi0KLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMo
KTsKLSAgICBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgot
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBtX3dlYkdMTGF5ZXIgPSBh
ZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDp0aGlz
XSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBbbV93ZWJHTExheWVyIHNldE5hbWU6QCJXZWJH
TCBMYXllciJdOwotI2VuZGlmCi0jaWYgVVNFKEFOR0xFKQotICAgICAgICBbbV93ZWJHTExheWVy
IHNldEVHTERpc3BsYXk6bV9kaXNwbGF5T2JqIGNvbmZpZzptX2NvbmZpZ09ial07Ci0jZW5kaWYK
LSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0KLSNpZiBVU0UoT1BFTkdMKQotICAgIGlm
ICh1c2VNdWx0aXNhbXBsaW5nKQotICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJU0FNUExFKTsK
LSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1c2VkIGZv
ciB0aGUgZnJhbWVidWZmZXIuCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsR2VuUmVuZGVy
YnVmZmVycygxLCAmbV90ZXh0dXJlKTsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgOjpnbEdlblRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIC8vIFdlIGJpbmQgdG8gR0xfVEVYVFVSRV9SRUNU
QU5HTEVfRVhUIHJhdGhlciB0aGFuIFRFWFRVUkVfMkQgYmVjYXVzZQotICAgIC8vIHRoYXQncyB3
aGF0IGlzIHJlcXVpcmVkIGZvciBhIHRleHR1cmUgYmFja2VkIGJ5IElPU3VyZmFjZS4KLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBtX3RleHR1cmUpOwotICAg
IDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
UkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
UkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIDApOwotCi0jZWxpZiBV
U0UoQU5HTEUpCi0KLSAgICBHTGVudW0gdGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDNE
OjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0OwotCi0gICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3Rl
eHR1cmUpOwotICAgIGdsOjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOwot
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4
dHVyZVRhcmdldCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGds
OjpUZXhQYXJhbWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLSAgICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7Ci0jZWxz
ZQotI2Vycm9yIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24KLSNlbmRpZgotCi0jaWYgVVNFKE9Q
RU5HTCkgfHwgVVNFKE9QRU5HTF9FUykKLSAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9i
amVjdC4KLSAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7Ci0gICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLQotICAgIG1fc3Rh
dGUuYm91bmRGQk8gPSBtX2ZibzsKLSAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMu
c3RlbmNpbCB8fCBhdHRycy5kZXB0aCkpCi0gICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhU
KDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0KLSAgICAvLyBJZiBuZWNlc3NhcnksIGNyZWF0
ZSBhbm90aGVyIGZyYW1lYnVmZmVyIGZvciB0aGUgbXVsdGlzYW1wbGUgcmVzdWx0cy4KLSAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmRG
Qk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgx
LCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwg
fHwgYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotI2VsaWYgVVNFKEFOR0xF
KQotICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICBnbDo6QmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1f
ZmJvOwotCi0gICAgaWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0
cnMuZGVwdGgpKQotICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOwotCi0gICAgLy8gSWYgbmVjZXNzYXJ5LCBjcmVhdGUgYW5vdGhlciBmcmFtZWJ1
ZmZlciBmb3IgdGhlIG11bHRpc2FtcGxlIHJlc3VsdHMuCi0gICAgaWYgKGF0dHJzLmFudGlhbGlh
cykgewotICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsK
LSAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAg
ICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBn
bDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgfQotCi0jZW5kaWYgLy8gVVNFKEFOR0xFKQotCi0jaWYgIVVTRShBTkdMRSkKLSAgICAv
LyBBTkdMRSBzaGFkZXIgY29tcGlsZXIgaW5pdGlhbGl6YXRpb24uCi0KLSAgICBTaEJ1aWx0SW5S
ZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7Ci0gICAgc2g6OkluaXRCdWlsdEluUmVzb3VyY2VzKCZB
TkdMRVJlc291cmNlcyk7Ci0KLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAg
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUlt
YWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVj
dG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KLSAgICBBTkdM
RVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgCi0gICAgR0MzRGludCByYW5nZVsy
XSwgcHJlY2lzaW9uOwotICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVCwgcmFu
Z2UsICZwcmVjaXNpb24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGln
aCA9IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0gICAgbV9jb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotI2VuZGlmIC8vICFVU0UoQU5HTEUpCi0g
ICAgCi0jaWYgVVNFKE9QRU5HTCkKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BP
SU5UX1NJWkUpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICA6OmdsRW5h
YmxlKEdMX1BPSU5UX1NQUklURSk7Ci0jZW5kaWYKLQotI2lmIFVTRShPUEVOR0wpIHx8IFVTRShP
UEVOR0xfRVMpCi0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0jZWxpZiBVU0UoQU5H
TEUpCi0gICAgZ2w6OkNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0jZW5kaWYKLQotICAgIExPRyhX
ZWJHTCwgIkNyZWF0ZWQgYSBHcmFwaGljc0NvbnRleHQzRCAoJXApLiIsIHRoaXMpOwotfQotCi1H
cmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRoaXMpOwotCi0g
ICAgaWYgKG1fY29udGV4dE9iaikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0
ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAg
ICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIFtzdGF0aWNfY2FzdDxFQUdMQ29u
dGV4dCAqPihtX2NvbnRleHRPYmopIHJlbmRlcmJ1ZmZlclN0b3JhZ2U6R0xfUkVOREVSQlVGRkVS
IGZyb21EcmF3YWJsZTpuaWxdOwotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
bV90ZXh0dXJlKTsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgICAgIENHTENvbnRleHRPYmogY2ds
Q29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9iaik7Ci0gICAg
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENvbnRleHQpOwotICAgICAgICA6OmdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgICAgIEVHTF9N
YWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
bV9jb250ZXh0T2JqKTsKLSAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotI2VuZGlmCi0KLSNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQotICAgICAgICBp
ZiAoYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVy
c0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRy
cy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAg
ICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMu
ZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICA6OmdsRGVsZXRlRnJhbWVi
dWZmZXJzRVhUKDEsICZtX2Zibyk7Ci0jZWxpZiBVU0UoQU5HTEUpCi0gICAgICAgIGlmIChhdHRy
cy5hbnRpYWxpYXMpIHsKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwg
fHwgYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMo
MSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgZ2w6OkRl
bGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkKLSAgICAgICAg
ICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgICAgICB9Ci0gICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsK
LSNlbmRpZgotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAgICAgW0VBR0xDb250ZXh0IHNldEN1
cnJlbnRDb250ZXh0OjBdOwotICAgICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4obV9j
b250ZXh0T2JqKSByZWxlYXNlXTsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgICAgIENHTFNldEN1
cnJlbnRDb250ZXh0KDApOwotICAgICAgICBDR0xEZXN0cm95Q29udGV4dChjZ2xDb250ZXh0KTsK
LSNlbGlmIFVTRShBTkdMRSkKLSAgICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAg
IEVHTF9EZXN0cm95Q29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaik7Ci0jZW5kaWYK
LSAgICAgICAgW21fd2ViR0xMYXllciBzZXRDb250ZXh0Om51bGxwdHJdOwotICAgIH0KLQotICAg
IExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dDNEICglcCkuIiwgdGhpcyk7
Ci19Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0UmVu
ZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgY2FsbCB0byBzZXRCb3VuZHMgYmVs
b3cgdG8gdXBkYXRlIHRoZSBiYWNraW5nIHN0b3JlIHNpemUgYnV0IHdlIGFsc28KLSAgICAvLyBk
byBub3Qgd2FudCB0byBjbG9iYmVyIHRoZSBib3VuZHMgc2V0IGR1cmluZyBsYXlvdXQuCi0gICAg
Q0dSZWN0IHByZXZpb3VzQm91bmRzID0gW21fd2ViR0xMYXllci5nZXQoKSBib3VuZHNdOwotCi0g
ICAgW21fd2ViR0xMYXllciBzZXRCb3VuZHM6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0
KV07Ci0gICAgW21fd2ViR0xMYXllciBzZXRPcGFxdWU6IWNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGFdOwotCi0gICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0ICo+KG1fY29udGV4dE9iaikgcmVu
ZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJCVUZGRVIgZnJvbURyYXdhYmxlOnN0YXRpY19jYXN0
PGlkPEVBR0xEcmF3YWJsZT4+KG1fd2ViR0xMYXllci5nZXQoKSldOwotCi0gICAgW21fd2ViR0xM
YXllciBzZXRCb3VuZHM6cHJldmlvdXNCb3VuZHNdOwotfQotI2VuZGlmCi0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgaWYgKCFtX2NvbnRleHRP
YmopCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgaWYg
KFtFQUdMQ29udGV4dCBjdXJyZW50Q29udGV4dF0gIT0gbV9jb250ZXh0T2JqKQotICAgICAgICBy
ZXR1cm4gW0VBR0xDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250
ZXh0Kj4obV9jb250ZXh0T2JqKV07Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgIENHTENvbnRleHRP
YmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJyZW50Q29udGV4dCgpOwotICAgIGlmIChjdXJy
ZW50Q29udGV4dCAhPSBtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybiBDR0xTZXRDdXJyZW50
Q29udGV4dChzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRleHRPYmopKSA9PSBrQ0dM
Tm9FcnJvcjsKLSNlbGlmIFVTRShBTkdMRSkKLSAgICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0
KCkgIT0gbV9jb250ZXh0T2JqKQotICAgICAgICByZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlz
cGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2NvbnRleHRPYmopOwot
I2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNo
ZWNrR1BVU3RhdHVzKCkKLXsKLSAgICBpZiAobV9mYWlsTmV4dFN0YXR1c0NoZWNrKSB7Ci0gICAg
ICAgIExPRyhXZWJHTCwgIlByZXRlbmRpbmcgdGhlIEdQVSBoYXMgcmVzZXQgKCVwKS4gTG9zZSB0
aGUgY29udGV4dC4iLCB0aGlzKTsKLSAgICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gZmFs
c2U7Ci0gICAgICAgIGZvcmNlQ29udGV4dExvc3QoKTsKLSNpZiBVU0UoT1BFTkdMKQotICAgICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dCgwKTsKLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0gICAgICAg
IFtFQUdMQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDowXTsKLSNlbGlmIFVTRShBTkdMRSkKLSAg
ICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9O
T19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIE9ubHkgZG8gdGhlIGNoZWNrIGV2ZXJ5IHN0YXR1c0NoZWNrVGhyZXNob2xk
IGNhbGxzLgotICAgIGlmIChtX3N0YXR1c0NoZWNrQ291bnQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc3RhdHVzQ2hlY2tDb3VudCA9IChtX3N0YXR1c0NoZWNrQ291bnQgKyAxKSAlIHN0YXR1
c0NoZWNrVGhyZXNob2xkOwotCi0gICAgR0xpbnQgcmVzdGFydFN0YXR1cyA9IDA7Ci0jaWYgVVNF
KE9QRU5HTCkKLSAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xD
b250ZXh0T2JqPihwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgIENHTEdldFBhcmFt
ZXRlcihjZ2xDb250ZXh0LCBrQ0dMQ1BHUFVSZXN0YXJ0U3RhdHVzLCAmcmVzdGFydFN0YXR1cyk7
Ci0gICAgaWYgKHJlc3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlz
dGVkKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIlRoZSBHUFUgaGFzIGJsYWNrbGlzdGVkIHVzICgl
cCkuIFRlcm1pbmF0aW5nLiIsIHRoaXMpOwotICAgICAgICBleGl0KEVYX09TRVJSKTsKLSAgICB9
Ci0gICAgaWYgKHJlc3RhcnRTdGF0dXMgPT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0NhdXNlZCkg
ewotICAgICAgICBMT0coV2ViR0wsICJUaGUgR1BVIGhhcyByZXNldCB1cyAoJXApLiBMb3NlIHRo
ZSBjb250ZXh0LiIsIHRoaXMpOwotICAgICAgICBmb3JjZUNvbnRleHRMb3N0KCk7Ci0gICAgICAg
IENHTFNldEN1cnJlbnRDb250ZXh0KDApOwotICAgIH0KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0g
ICAgRUFHTENvbnRleHQqIGN1cnJlbnRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQq
PihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgIFtjdXJyZW50Q29udGV4dCBnZXRQ
YXJhbWV0ZXI6a0VBR0xDUEdQVVJlc3RhcnRTdGF0dXMgdG86JnJlc3RhcnRTdGF0dXNdOwotICAg
IGlmIChyZXN0YXJ0U3RhdHVzID09IGtFQUdMQ1BHUFVSZXN0YXJ0U3RhdHVzQ2F1c2VkIHx8IHJl
c3RhcnRTdGF0dXMgPT0ga0VBR0xDUEdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgewotICAg
ICAgICBMT0coV2ViR0wsICJUaGUgR1BVIGhhcyBlaXRoZXIgcmVzZXQgb3IgYmxhY2tsaXN0ZWQg
dXMgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKLSAgICAgICAgZm9yY2VDb250ZXh0
TG9zdCgpOwotICAgICAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6MF07Ci0gICAg
fQotI2VsaWYgVVNFKEFOR0xFKQotICAgIC8vIEZJWE1FOiBjaGVjayB2aWEgS0hSX3JvYnVzdG5l
c3MuCi0gICAgcmVzdGFydFN0YXR1cyA9IDA7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShPUEVOR0xf
RVMpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVzZW50UmVuZGVyYnVmZmVyKCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRp
YWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQotICAg
IDo6Z2xGbHVzaCgpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwg
bV90ZXh0dXJlKTsKLSAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihtX2NvbnRleHRPYmop
IHByZXNlbnRSZW5kZXJidWZmZXI6R0xfUkVOREVSQlVGRkVSXTsKLSAgICBbRUFHTENvbnRleHQg
c2V0Q3VycmVudENvbnRleHQ6bmlsXTsKLX0KLSNlbmRpZgotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZUlPU3VyZmFjZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0MzRHVpbnQgcGxhbmUp
Ci17Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0
aWNfY2FzdDxDR0xDb250ZXh0T2JqPihwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAg
IHJldHVybiBrQ0dMTm9FcnJvciA9PSBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKGNnbENvbnRleHQs
IHRhcmdldCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3Vy
ZmFjZSwgcGxhbmUpOwotI2VsaWYgVVNFKE9QRU5HTF9FUykgJiYgIVBMQVRGT1JNKElPU19GQU1J
TFlfU0lNVUxBVE9SKQotICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4ocGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKSB0ZXhJbWFnZUlPU3VyZmFjZTpzdXJmYWNlIHRhcmdl
dDp0YXJnZXQgaW50ZXJuYWxGb3JtYXQ6aW50ZXJuYWxGb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0
OmhlaWdodCBmb3JtYXQ6Zm9ybWF0IHR5cGU6dHlwZSBwbGFuZTpwbGFuZV07Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAg
ICBVTlVTRURfUEFSQU0oZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHN1cmZhY2UpOwotICAgIFVOVVNFRF9QQVJBTShwbGFuZSk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0KLSNpZiBVU0UoT1BFTkdMKQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSBzaXplKQotewotICAg
IExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdT
dG9yZSBhdCAlZCB4ICVkLiAoJXApIiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB0aGlz
KTsKLSAgICBbbV93ZWJHTExheWVyIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNp
emU6c2l6ZSB1c2luZ0FscGhhOmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVG
cm9tTGF5ZXIoKQotewotICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVG
cmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOwot
ICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVwZGF0ZUNHTENvbnRleHQoKQotewotICAg
IGlmICghbV9jb250ZXh0T2JqKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coV2ViR0wsICJE
ZXRlY3RlZCBhIG11eCBzd2l0Y2ggb3IgZGlzcGxheSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dM
VXBkYXRlQ29udGV4dC4gKCVwKSIsIHRoaXMpOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgQ0dMVXBkYXRlQ29udGV4dChzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX2NvbnRl
eHRPYmopKTsKLSAgICBtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUgPSB0cnVlOwot
fQotCi0jZW5kaWYgLy8gVVNFKE9QRU5HTCkKLQotI2lmIFVTRShPUEVOR0wpIHx8IFVTRShBTkdM
RSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRWaXNpYmlsaXR5KGJvb2wgaXNW
aXNpYmxlKQotewotICAgIGlmIChtX3Bvd2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiA9PSBH
cmFwaGljc0NvbnRleHQzRFBvd2VyUHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSB7Ci0gICAg
ICAgIGlmIChpc1Zpc2libGUpCi0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6
OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMp
OwotICAgIH0KLX0KLSNlbmRpZiAvLyBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCi0KLSNpZiBV
U0UoQU5HTEUpCi0KLSNpZiBQTEFURk9STShNQUMpCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
cGRhdGVDR0xDb250ZXh0KCkKLXsKLSAgICBpZiAoIW1fY29udGV4dE9iaikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTE9HKFdlYkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3BsYXkg
cmVjb25maWd1cmF0aW9uLiBDYWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBudWxs
cHRyOwotICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xfREVW
SUNFX0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7Ci0gICAgQ0dM
Q29udGV4dE9iaiBjZ2xDb250ZXh0ID0gbnVsbHB0cjsKLSAgICBFR0xfUXVlcnlEZXZpY2VBdHRy
aWJFWFQoZGV2aWNlLCBFR0xfQ0dMX0NPTlRFWFRfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdM
QXR0cmliKj4oJmNnbENvbnRleHQpKTsKLQotICAgIENHTFVwZGF0ZUNvbnRleHQoY2dsQ29udGV4
dCk7Ci0gICAgbV9oYXNTd2l0Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1ZTsKLX0KLSNl
bmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdT
dG9yZShJbnRTaXplIHNpemUpCi17Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgTE9HKFdlYkdM
LCAiR3JhcGhpY3NDb250ZXh0M0Q6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlIGF0ICVk
IHggJWQuICglcCkiLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHRoaXMpOwotICAgIFtt
X3dlYkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVz
aW5nQWxwaGE6Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYV07Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzaXplKTsKLSNlbmRpZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVG
cmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQotewotI2lmIEhBVkUoSU9T
VVJGQUNFKQotICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dDNEOjp1cGRhdGVGcmFtZWJ1
ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMpOwotICAgIFtt
X3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFjZV07Ci0jZW5k
aWYKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
R0xFUzJDb21wbGlhbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2lzRm9yV2ViR0wyOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKLXsKLSAg
ICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250
ZXh0cygpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjphbGxvd09mZmxpbmVSZW5kZXJl
cnMoKSBjb25zdAotewotI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxFKFdFQlBST0NFU1NfV0lO
RE9XU0VSVkVSX0JMT0NLSU5HKQotICAgIC8vIFdoZW4gV2luZG93U2VydmVyIGFjY2VzcyBpcyBi
bG9ja2VkIGluIHRoZSBXZWJQcm9jZXNzLCB0aGVyZSBpcyBubyB3YXkKLSAgICAvLyBmb3IgT3Bl
bkdMIHRvIGRlY2lkZSB3aGljaCBHUFUgaXMgY29ubmVjdGVkIHRvIGEgZGlzcGxheSAob25saW5l
L29mZmxpbmUpLgotICAgIC8vIE9wZW5HTCB3aWxsIHRoZW4gY29uc2lkZXIgYWxsIEdQVXMsIG9y
IHJlbmRlcmVycywgYXMgb2ZmbGluZSwgd2hpY2ggbWVhbnMKLSAgICAvLyBhbGwgb2ZmbGluZSBy
ZW5kZXJlcnMgbmVlZCB0byBiZSBjb25zaWRlcmVkIHdoZW4gZmluZGluZyBhIHBpeGVsIGZvcm1h
dC4KLSAgICAvLyBJbiBXZWJLaXQgbGVnYWN5LCB0aGVyZSB3aWxsIHN0aWxsIGJlIGEgV2luZG93
U2VydmVyIGNvbm5lY3Rpb24sIGFuZAotICAgIC8vIG1fZGlzcGxheU1hc2sgd2lsbCBub3QgYmUg
c2V0IGluIHRoaXMgY2FzZS4KLSAgICBpZiAocHJpbWFyeU9wZW5HTERpc3BsYXlNYXNrKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotI2VsaWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCi0gICAgLy8g
RklYTUU6IDxyZGFyOi8vNTMwNjI3OTQ+IFdlJ3JlIHZlcnkgaW5jb25zaXN0ZW50IGFib3V0IFdF
QlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HCi0gICAgLy8gYW5kIE1BQy9NQUNDQVRBTFlT
VCBhbmQgT1BFTkdML09QRU5HTEVTLgotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCi0gICAgICAg
IAotI2lmIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKLSAgICBpZiAoaGFzTG93QW5kSGln
aFBvd2VyR1BVcygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIAotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCi17Ci0gICAg
aWYgKCFtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybjsKLSNpZiBVU0UoQU5HTEUpCi0gICAg
aWYgKCFtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUpIHsKLSAgICAgICAgRUdMRGV2
aWNlRVhUIGRldmljZSA9IG51bGxwdHI7Ci0gICAgICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJF
WFQobV9kaXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRy
aWIqPigmZGV2aWNlKSk7Ci0gICAgICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxw
dHI7Ci0gICAgICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0ID0gbnVsbHB0cjsKLSAg
ICAgICAgRUdMX1F1ZXJ5RGV2aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9DT05URVhUX0FO
R0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZjZ2xDb250ZXh0KSk7Ci0gICAgICAg
IEVHTF9RdWVyeURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FO
R0xFLCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOwotICAgICAg
ICBzZXRHUFVCeVJlZ2lzdHJ5SUQoY2dsQ29udGV4dCwgcGl4ZWxGb3JtYXQsIGdwdUlERm9yRGlz
cGxheShkaXNwbGF5SUQpKTsKLSAgICB9Ci0jZWxzZQotI2lmIFVTRShPUEVOR0wpCi0gICAgaWYg
KCFtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9ybWFuY2VHUFUpIHsKLSAgICAgICAgQ0dMQ29udGV4
dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250ZXh0T2Jq
KTsKLSAgICAgICAgc2V0R1BVQnlSZWdpc3RyeUlEKGNnbENvbnRleHQsIENHTEdldFBpeGVsRm9y
bWF0KGNnbENvbnRleHQpLCBncHVJREZvckRpc3BsYXkoZGlzcGxheUlEKSk7Ci0gICAgfQotI2Vu
ZGlmCi0jZW5kaWYgLy8gVVNFKEFOR0xFKQotfQotI2VuZGlmIC8vICFQTEFURk9STShNQUMpCi0K
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI3NWNmOTVmYmY2MGU5
YjgyYzExNzA0MzY3ZDgwZTZhMjlmYzE5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2Eu
bW0KQEAgLTAsMCArMSw4NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiAhVVNFKEFOR0xFKQorI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xFU0lPUy5oIgorI2VuZGlmCisKKyNpbXBvcnQgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCisjaW1wb3J0ICJIVE1MQ2FudmFzRWxlbWVudC5o
IgorI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgorI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIldlYkdMTGF5ZXIuaCIKKyNpbXBvcnQgIldlYkdMT2Jq
ZWN0LmgiCisjaW1wb3J0ICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW1wb3J0IDxD
b3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250ZXh0Lmg+CisjaW1wb3J0IDxzeXMvc3lzY3RsLmg+Cisj
aW1wb3J0IDxzeXNleGl0cy5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
KyNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFVTRShPUEVOR0xfRVMpCisjaW1w
b3J0IDxPcGVuR0xFUy9FQUdMLmg+CisjaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4K
KyNpbXBvcnQgPE9wZW5HTEVTL0VBR0xJT1N1cmZhY2UuaD4KKyNpbXBvcnQgPE9wZW5HTEVTL0VT
Mi9nbGV4dC5oPgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxw
YWwvc3BpL2lvcy9PcGVuR0xFU1NQSS5oPgorI2VsaWYgVVNFKE9QRU5HTCkKKyNpbXBvcnQgPElP
S2l0L0lPS2l0TGliLmg+CisjaW1wb3J0IDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFVTRShBTkdMRSkK
KyNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKKy8vIFNraXAgdGhlIGluY2x1c2lvbiBvZiBB
TkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRzIGZvciBub3cuCisjZGVmaW5lIEdM
X0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKKyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4
dF9nbGVzMQordHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7CisjaW5jbHVkZSA8QU5HTEUvZWds
Lmg+CisjaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+CisjaW5jbHVkZSA8QU5HTEUvZWdsZXh0X2Fu
Z2xlLmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2VnbC5oPgorI2luY2x1ZGUgPEFO
R0xFL2VudHJ5X3BvaW50c19lZ2xfZXh0Lmg+CisjaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRz
X2dsZXNfMl8wX2F1dG9nZW4uaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19l
eHRfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dC5oPgorI2luY2x1ZGUgPEFOR0xF
L2dsMmV4dF9hbmdsZS5oPgorI2VuZGlmCisKKyNpZiBVU0UoT1BFTkdMX0VTKSB8fCBVU0UoT1BF
TkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTC5oIgorI2VsaWYgVVNFKEFOR0xFKQor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1B
QykKKyNpbXBvcnQgIlNjcmVlblByb3BlcnRpZXMuaCIKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0Uo
QU5HTEUpCisjaW1wb3J0IDxPcGVuR0wvQ0dMUmVuZGVyZXJzLmg+CisjZW5kaWYKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzdGF0dXNDaGVj
a1RocmVzaG9sZCA9IDU7CisKKy8vIEZJWE1FOiBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSBlbXB0
eSBvbiBNYWMsIGJ1dCB3aWxsIGdldCBwb3B1bGF0ZWQgYXMKKy8vIHRoZSByZXN0cnVjdHVyaW5n
IGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjkwMyBpcyBkb25l
CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopIHsgfQorICAgIAorICAgIH5HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTFByaXZhdGUoKSB7IH0KK307CisKK1JlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTEF0
dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dEdM
OjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9u
IGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0
V2luZG93LgorICAgIGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6RGlyZWN0bHlUb0hv
c3RXaW5kb3cpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gTWFrZSBzcGFjZSBm
b3IgdGhlIGluY29taW5nIGNvbnRleHQgaWYgd2UncmUgZnVsbC4KKyAgICBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZWN5Y2xlQ29udGV4dElmTmVjZXNz
YXJ5KCk7CisgICAgaWYgKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFu
YWdlcigpLmhhc1Rvb01hbnlDb250ZXh0cygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gY29udGV4dCA9IGFkb3B0UmVmKG5l
dyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChhdHRycywgaG9zdFdpbmRvdywgZGVzdGluYXRpb24p
KTsKKworICAgIGlmICghY29udGV4dC0+bV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdl
cigpLmFkZENvbnRleHQoY29udGV4dC5nZXQoKSwgaG9zdFdpbmRvdyk7CisKKyAgICByZXR1cm4g
Y29udGV4dDsKK30KKworUmVmPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlU2hhcmVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBzaGFyZWRD
b250ZXh0KQoreworICAgIGF1dG8gaG9zdFdpbmRvdyA9IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
TWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLmhvc3RXaW5kb3dGb3JDb250ZXh0KCZzaGFyZWRDb250
ZXh0KTsKKyAgICBhdXRvIGNvbnRleHQgPSBhZG9wdFJlZigqbmV3IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKHNoYXJlZENvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMoKSwgaG9zdFdpbmRvdywgc2hh
cmVkQ29udGV4dC5kZXN0aW5hdGlvbigpLCAmc2hhcmVkQ29udGV4dCkpOworCisgICAgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuYWRkQ29udGV4dChjb250
ZXh0LnB0cigpLCBob3N0V2luZG93KTsKKworICAgIHJldHVybiBjb250ZXh0OworfQorCisjaWYg
UExBVEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkgLy8gRklYTUU6IFRo
aXMgcHJvYmFibHkgc2hvdWxkIGJlIGp1c3QgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkpIC0g
c2VlIDxyZGFyOi8vNTMwNjI3OTQ+LgorCitzdGF0aWMgdm9pZCBzZXRHUFVCeVJlZ2lzdHJ5SUQo
Q0dMQ29udGV4dE9iaiBjb250ZXh0T2JqLCBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9i
aiwgSU9SZWdpc3RyeUdQVUlEIHByZWZlcnJlZEdQVUlEKQoreworICAgIC8vIFdoZW4gdGhlIFdl
YlByb2Nlc3MgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIFdpbmRvd1NlcnZlciwgdGhlcmUg
aXMgbm8gd2F5IGZvciBPcGVuR0wgdG8gdGVsbCB3aGljaCBHUFUgaXMgY29ubmVjdGVkIHRvIGEg
ZGlzcGxheS4KKyAgICAvLyBPbiAxMC4xMyssIGZpbmQgdGhlIHZpcnR1YWwgc2NyZWVuIHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhlIHByZWZlcnJlZCBHUFUgYnkgaXRzIHJlZ2lzdHJ5SUQuCisgICAg
Ly8gQ0dMU2V0VmlydHVhbFNjcmVlbiBjYW4gdGhlbiBiZSB1c2VkIHRvIHRlbGwgT3BlbkdMIHdo
aWNoIEdQVSBpdCBzaG91bGQgYmUgdXNpbmcuCisKKyAgICBpZiAoIWNvbnRleHRPYmogfHwgIXBy
ZWZlcnJlZEdQVUlEKQorICAgICAgICByZXR1cm47CisKKyAgICBHTGludCB2aXJ0dWFsU2NyZWVu
Q291bnQgPSAwOworICAgIENHTEVycm9yIGVycm9yID0gQ0dMRGVzY3JpYmVQaXhlbEZvcm1hdChw
aXhlbEZvcm1hdE9iaiwgMCwga0NHTFBGQVZpcnR1YWxTY3JlZW5Db3VudCwgJnZpcnR1YWxTY3Jl
ZW5Db3VudCk7CisgICAgQVNTRVJUKGVycm9yID09IGtDR0xOb0Vycm9yKTsKKworICAgIEdMaW50
IGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4gPSAtMTsKKworICAgIGZvciAoR0xpbnQgdmlydHVhbFNj
cmVlbiA9IDA7IHZpcnR1YWxTY3JlZW4gPCB2aXJ0dWFsU2NyZWVuQ291bnQ7ICsrdmlydHVhbFNj
cmVlbikgeworICAgICAgICBHTGludCBkaXNwbGF5TWFzayA9IDA7CisgICAgICAgIGVycm9yID0g
Q0dMRGVzY3JpYmVQaXhlbEZvcm1hdChwaXhlbEZvcm1hdE9iaiwgdmlydHVhbFNjcmVlbiwga0NH
TFBGQURpc3BsYXlNYXNrLCAmZGlzcGxheU1hc2spOworICAgICAgICBBU1NFUlQoZXJyb3IgPT0g
a0NHTE5vRXJyb3IpOworCisgICAgICAgIGF1dG8gZ3B1SUQgPSBncHVJREZvckRpc3BsYXlNYXNr
KGRpc3BsYXlNYXNrKTsKKworICAgICAgICBpZiAoZ3B1SUQgPT0gcHJlZmVycmVkR1BVSUQpIHsK
KyAgICAgICAgICAgIGVycm9yID0gQ0dMU2V0VmlydHVhbFNjcmVlbihjb250ZXh0T2JqLCB2aXJ0
dWFsU2NyZWVuKTsKKyAgICAgICAgICAgIEFTU0VSVChlcnJvciA9PSBrQ0dMTm9FcnJvcik7Cisg
ICAgICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0ICglcCkgc2V0IHRvIEdQVSB3aXRoIElEOiAo
JWxsZCkuIiwgY29udGV4dE9iaiwgZ3B1SUQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4gPCAwKSB7CisgICAgICAg
ICAgICBHTGludCBpc0FjY2VsZXJhdGVkID0gMDsKKyAgICAgICAgICAgIGVycm9yID0gQ0dMRGVz
Y3JpYmVQaXhlbEZvcm1hdChwaXhlbEZvcm1hdE9iaiwgdmlydHVhbFNjcmVlbiwga0NHTFBGQUFj
Y2VsZXJhdGVkLCAmaXNBY2NlbGVyYXRlZCk7CisgICAgICAgICAgICBBU1NFUlQoZXJyb3IgPT0g
a0NHTE5vRXJyb3IpOworICAgICAgICAgICAgaWYgKGlzQWNjZWxlcmF0ZWQpCisgICAgICAgICAg
ICAgICAgZmlyc3RBY2NlbGVyYXRlZFNjcmVlbiA9IHZpcnR1YWxTY3JlZW47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBObyByZWdpc3RyeUlEIG1hdGNoIGZvdW5kOyBzZXQgdG8gZmlyc3Qg
aGFyZHdhcmUtYWNjZWxlcmF0ZWQgdmlydHVhbCBzY3JlZW4uCisgICAgaWYgKGZpcnN0QWNjZWxl
cmF0ZWRTY3JlZW4gPj0gMCkgeworICAgICAgICBlcnJvciA9IENHTFNldFZpcnR1YWxTY3JlZW4o
Y29udGV4dE9iaiwgZmlyc3RBY2NlbGVyYXRlZFNjcmVlbik7CisgICAgICAgIEFTU0VSVChlcnJv
ciA9PSBrQ0dMTm9FcnJvcik7CisgICAgICAgIExPRyhXZWJHTCwgIlJlZ2lzdHJ5SUQgKCVsbGQp
IG5vdCBtYXRjaGVkOyBDb250ZXh0ICglcCkgc2V0IHRvIHZpcnR1YWwgc2NyZWVuICglZCkuIiwg
cHJlZmVycmVkR1BVSUQsIGNvbnRleHRPYmosIGZpcnN0QWNjZWxlcmF0ZWRTY3JlZW4pOworICAg
IH0KK30KKworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShB
TkdMRSkpCisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIEdyYXBoaWNzQ29udGV4dEdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChh
dHRycywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCit7CisgICAgQVNTRVJUKEFOR0xFV2Vi
S2l0QnJpZGdlOjphbmdsZUF2YWlsYWJsZSgpKTsKKyAgICBpZiAoIUFOR0xFV2ViS2l0QnJpZGdl
OjphbmdsZUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzRm9yV2ViR0wy
ID0gYXR0cnMuaXNXZWJHTDI7CisKKyNpZiBIQVZFKEFQUExFX0dSQVBISUNTX0NPTlRST0wpCisg
ICAgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24gPSAoaGFzTG93QW5kSGlnaFBvd2Vy
R1BVcygpICYmIGF0dHJzLnBvd2VyUHJlZmVyZW5jZSA9PSBHcmFwaGljc0NvbnRleHRHTFBvd2Vy
UHJlZmVyZW5jZTo6SGlnaFBlcmZvcm1hbmNlKSA/IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVm
ZXJlbmNlOjpIaWdoUGVyZm9ybWFuY2UgOiBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5j
ZTo6RGVmYXVsdDsKKyNlbHNlCisgICAgbV9wb3dlclByZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24g
PSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6RGVmYXVsdDsKKyNlbmRpZgorCisj
aWYgIVVTRShBTkdMRSkKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIGlmIChtX2lzRm9yV2ViR0wy
KQorICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQs
IFNIX1dFQkdMMl9TUEVDKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29tcGlsZXIgPSBBTkdMRVdl
YktpdEJyaWRnZShTSF9FU1NMX09VVFBVVCk7CisjZWxzZQorICAgIGlmIChtX2lzRm9yV2ViR0wy
KQorICAgICAgICBtX2NvbXBpbGVyID0gQU5HTEVXZWJLaXRCcmlkZ2UoU0hfR0xTTF80MTBfQ09S
RV9PVVRQVVQsIFNIX1dFQkdMMl9TUEVDKTsKKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQorI2Vu
ZGlmIC8vICFVU0UoQU5HTEUpCisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIFVOVVNFRF9QQVJB
TShob3N0V2luZG93KTsKKyAgICBFQUdMUmVuZGVyaW5nQVBJIGFwaSA9IG1faXNGb3JXZWJHTDIg
PyBrRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTMyA6IGtFQUdMUmVuZGVyaW5nQVBJT3BlbkdMRVMy
OworICAgIEVBR0xDb250ZXh0ICpjb250ZXh0T2JqOworICAgIGlmICghc2hhcmVkQ29udGV4dCkK
KyAgICAgICAgY29udGV4dE9iaiA9IFtbRUFHTENvbnRleHQgYWxsb2NdIGluaXRXaXRoQVBJOmFw
aV07CisgICAgZWxzZQorICAgICAgICBjb250ZXh0T2JqID0gW1tFQUdMQ29udGV4dCBhbGxvY10g
aW5pdFdpdGhBUEk6YXBpIHNoYXJlZ3JvdXA6c3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4oc2hh
cmVkQ29udGV4dC0+bV9jb250ZXh0T2JqKS5zaGFyZWdyb3VwXTsKKworICAgIG1fY29udGV4dE9i
aiA9IHN0YXRpY19jYXN0PHZvaWQgKj4oY29udGV4dE9iaik7CisKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICA6OmdsRW5hYmxlKEdy
YXBoaWNzQ29udGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCk7CisjZWxpZiBV
U0UoT1BFTkdMKQorCisgICAgYm9vbCB1c2VNdWx0aXNhbXBsaW5nID0gYXR0cnMuYW50aWFsaWFz
OworCisgICAgVmVjdG9yPENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPiBhdHRyaWJzOworICAgIENH
TFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqID0gMDsKKyAgICBHTGludCBudW1QaXhlbEZv
cm1hdHMgPSAwOworCisgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFjY2VsZXJhdGVkKTsKKyAg
ICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ29sb3JTaXplKTsKKyAgICBhdHRyaWJzLmFwcGVuZChz
dGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpKTsKKyAgICBhdHRyaWJzLmFw
cGVuZChrQ0dMUEZBRGVwdGhTaXplKTsKKyAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMzIpKTsKKworICAgIC8vIFRoaXMgYXR0cmlidXRlLCB3
aGlsZSBtZW50aW9uaW5nIG9mZmxpbmUgcmVuZGVyZXJzLCBpcyBhY3R1YWxseQorICAgIC8vIGFs
bG93aW5nIHVzIHRvIHJlcXVlc3QgdGhlIGludGVncmF0ZWQgZ3JhcGhpY3Mgb24gYSBkdWFsIEdQ
VQorICAgIC8vIHN5c3RlbSwgYW5kIG5vdCBmb3JjZSB0aGUgZGlzY3JldGUgR1BVLgorICAgIC8v
IFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvdGVjaG5vdGVzL3Ru
MjIyOS9faW5kZXguaHRtbAorICAgIGlmIChhbGxvd09mZmxpbmVSZW5kZXJlcnMoKSkKKyAgICAg
ICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUFsbG93T2ZmbGluZVJlbmRlcmVycyk7CisKKyAgICBp
ZiAodXNlTXVsdGlzYW1wbGluZykgeworICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBTXVs
dGlzYW1wbGUpOworICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBU2FtcGxlQnVmZmVycyk7
CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmli
dXRlPigxKSk7CisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFTYW1wbGVzKTsKKyAgICAg
ICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KDQp
KTsKKyAgICB9CisKKyAgICBpZiAobV9pc0ZvcldlYkdMMikgeworICAgICAgICAvLyBGSVhNRTog
SW5zdGVhZCBvZiBiYWNraW5nIGEgV2ViR0wyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIHdpdGgg
YSBPcGVuR0wgNCBjb250ZXh0LCB3ZSBzaG91bGQgaW5zdGVhZCBiYWNrIGl0IHdpdGggQU5HTEUu
CisgICAgICAgIC8vIFVzZSBhbiBPcGVuR0wgNCBjb250ZXh0IGZvciBub3cgdW50aWwgdGhlIEFO
R0xFIGJhY2tlbmQgaXMgcmVhZHkuCisgICAgICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFPcGVu
R0xQcm9maWxlKTsKKyAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxG
b3JtYXRBdHRyaWJ1dGU+KGtDR0xPR0xQVmVyc2lvbl9HTDRfQ29yZSkpOworICAgIH0KKworICAg
IGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPigwKSk7
CisKKyAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0
T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKworICAgIGlmICghbnVtUGl4ZWxGb3JtYXRzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOwor
ICAgIENHTENvbnRleHRPYmogc2hhcmVkQ0dMQ29udGV4dCA9IHNoYXJlZENvbnRleHQgPyBzdGF0
aWNfY2FzdDxDR0xDb250ZXh0T2JqPihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRPYmopIDogbnVs
bHB0cjsKKworICAgIENHTEVycm9yIGVyciA9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXRP
YmosIHNoYXJlZENHTENvbnRleHQsICZjZ2xDb250ZXh0KTsKKyAgICBHTGludCBhYm9ydE9uQmxh
Y2tsaXN0ID0gMDsKKyAgICBDR0xTZXRQYXJhbWV0ZXIoY2dsQ29udGV4dCwga0NHTENQQWJvcnRP
bkdQVVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCwgJmFib3J0T25CbGFja2xpc3QpOworCisjaWYg
UExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgYmUgVVNFKE9QRU5H
TCkgLSBzZWUgPHJkYXI6Ly81MzA2Mjc5ND4uCisKKyAgICBhdXRvIGdwdUlEID0gKGhvc3RXaW5k
b3cgJiYgaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCkpID8gZ3B1SURGb3JEaXNwbGF5KGhvc3RXaW5k
b3ctPmRpc3BsYXlJRCgpKSA6IHByaW1hcnlHUFVJRCgpOworICAgIHNldEdQVUJ5UmVnaXN0cnlJ
RChjZ2xDb250ZXh0LCBwaXhlbEZvcm1hdE9iaiwgZ3B1SUQpOworCisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShob3N0V2luZG93KTsKKyNlbmRpZgorCisgICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0
KHBpeGVsRm9ybWF0T2JqKTsKKworICAgIG1fY29udGV4dE9iaiA9IGNnbENvbnRleHQ7CisKKyAg
ICBpZiAoZXJyICE9IGtDR0xOb0Vycm9yIHx8ICFtX2NvbnRleHRPYmopIHsKKyAgICAgICAgLy8g
V2Ugd2VyZSB1bmFibGUgdG8gY3JlYXRlIHRoZSBjb250ZXh0LgorICAgICAgICBtX2NvbnRleHRP
YmogPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0T2JqID0gY2ds
Q29udGV4dDsKKworICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENvbnRleHQpOworCisgICAg
Ly8gV2ViR0wgMiBleHBlY3RzIEVTIDMtb25seSBQUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRF
WCB0byBiZSBlbmFibGVkOyB3ZSBtdXN0IGVtdWxhdGUgdGhpcyBvbiBub24tRVMgMyBzeXN0ZW1z
LgorICAgIGlmIChtX2lzRm9yV2ViR0wyKQorICAgICAgICA6OmdsRW5hYmxlKEdyYXBoaWNzQ29u
dGV4dEdMOjpQUklNSVRJVkVfUkVTVEFSVCk7CisKKyNlbGlmIFVTRShBTkdMRSkKKworICAgIG1f
ZGlzcGxheU9iaiA9IEVHTF9HZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworICAgIGlm
IChtX2Rpc3BsYXlPYmogPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJldHVybjsKKyAgICBF
R0xpbnQgbWFqb3JWZXJzaW9uLCBtaW5vclZlcnNpb247CisgICAgaWYgKEVHTF9Jbml0aWFsaXpl
KG1fZGlzcGxheU9iaiwgJm1ham9yVmVyc2lvbiwgJm1pbm9yVmVyc2lvbikgPT0gRUdMX0ZBTFNF
KSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVk
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIExPRyhXZWJHTCwgIkFOR0xFIGluaXRp
YWxpc2VkIE1ham9yOiAlZCBNaW5vcjogJWQiLCBtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbik7
CisgICAgY29uc3QgY2hhciAqZGlzcGxheUV4dGVuc2lvbnMgPSBFR0xfUXVlcnlTdHJpbmcobV9k
aXNwbGF5T2JqLCBFR0xfRVhURU5TSU9OUyk7CisgICAgTE9HKFdlYkdMLCAiRXh0ZW5zaW9uczog
JXMiLCBkaXNwbGF5RXh0ZW5zaW9ucyk7CisKKyAgICBFR0xpbnQgY29uZmlnQXR0cmlidXRlc1td
ID0geworICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisg
ICAgICAgIEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAg
ICAgIEVHTF9CTFVFX1NJWkUsIDgsCisgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAg
ICBFR0xfTk9ORQorICAgIH07CisgICAgRUdMaW50IG51bWJlckNvbmZpZ3NSZXR1cm5lZCA9IDA7
CisgICAgRUdMX0Nob29zZUNvbmZpZyhtX2Rpc3BsYXlPYmosIGNvbmZpZ0F0dHJpYnV0ZXMsICZt
X2NvbmZpZ09iaiwgMSwgJm51bWJlckNvbmZpZ3NSZXR1cm5lZCk7CisgICAgaWYgKG51bWJlckNv
bmZpZ3NSZXR1cm5lZCAhPSAxKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkVHTENvbmZpZyBJbml0
aWFsaXphdGlvbiBmYWlsZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgTE9HKFdl
YkdMLCAiR290IEVHTENvbmZpZyIpOworCisgICAgRUdMX0JpbmRBUEkoRUdMX09QRU5HTF9FU19B
UEkpOworICAgIGlmIChFR0xfR2V0RXJyb3IoKSAhPSBFR0xfU1VDQ0VTUykgeworICAgICAgICBM
T0coV2ViR0wsICJVbmFibGUgdG8gYmluZCB0byBPUEVOR0xfRVNfQVBJIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8RUdMaW50PiBlZ2xDb250ZXh0QXR0cmlidXRlczsK
KyAgICBpZiAobV9pc0ZvcldlYkdMMikgeworICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5h
cHBlbmQoRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pOworICAgICAgICBlZ2xDb250ZXh0QXR0
cmlidXRlcy5hcHBlbmQoMyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJp
YnV0ZXMuYXBwZW5kKEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OKTsKKyAgICAgICAgZWdsQ29u
dGV4dEF0dHJpYnV0ZXMuYXBwZW5kKDIpOworICAgICAgICAvLyBBTkdMRSB3aWxsIHVwZ3JhZGUg
dGhlIGNvbnRleHQgdG8gRVMzIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHRoaXMgaXMgc3BlY2lmaWVk
LgorICAgICAgICBlZ2xDb250ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX0NPTlRFWFRfT1BFTkdM
X0JBQ0tXQVJEU19DT01QQVRJQkxFX0FOR0xFKTsKKyAgICAgICAgZWdsQ29udGV4dEF0dHJpYnV0
ZXMuYXBwZW5kKEVHTF9GQUxTRSk7CisgICAgfQorICAgIGVnbENvbnRleHRBdHRyaWJ1dGVzLmFw
cGVuZChFR0xfQ09OVEVYVF9XRUJHTF9DT01QQVRJQklMSVRZX0FOR0xFKTsKKyAgICBlZ2xDb250
ZXh0QXR0cmlidXRlcy5hcHBlbmQoRUdMX1RSVUUpOworCisgICAgaWYgKHN0cnN0cihkaXNwbGF5
RXh0ZW5zaW9ucywgIkVHTF9BTkdMRV9wb3dlcl9wcmVmZXJlbmNlIikpIHsKKyAgICAgICAgZWds
Q29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9QT1dFUl9QUkVGRVJFTkNFX0FOR0xFKTsKKyAg
ICAgICAgLy8gRUdMX0xPV19QT1dFUl9BTkdMRSBpcyB0aGUgZGVmYXVsdC4gQ2hhbmdlIHRvCisg
ICAgICAgIC8vIEVHTF9ISUdIX1BPV0VSX0FOR0xFIGlmIGRlc2lyZWQuCisgICAgICAgIGVnbENv
bnRleHRBdHRyaWJ1dGVzLmFwcGVuZChFR0xfTE9XX1BPV0VSX0FOR0xFKTsKKyAgICB9CisgICAg
ZWdsQ29udGV4dEF0dHJpYnV0ZXMuYXBwZW5kKEVHTF9OT05FKTsKKworICAgIG1fY29udGV4dE9i
aiA9IEVHTF9DcmVhdGVDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb25maWdPYmosIHNoYXJlZENv
bnRleHQgPyBzdGF0aWNfY2FzdDxFR0xDb250ZXh0PihzaGFyZWRDb250ZXh0LT5tX2NvbnRleHRP
YmopIDogRUdMX05PX0NPTlRFWFQsIGVnbENvbnRleHRBdHRyaWJ1dGVzLmRhdGEoKSk7CisgICAg
aWYgKG1fY29udGV4dE9iaiA9PSBFR0xfTk9fQ09OVEVYVCkgeworICAgICAgICBMT0coV2ViR0ws
ICJFR0xDb250ZXh0IEluaXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBMT0coV2ViR0wsICJHb3QgRUdMQ29udGV4dCIpOworCisgICAgRUdMX01ha2VD
dXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBtX2Nv
bnRleHRPYmopOworCisgICAgaWYgKG1faXNGb3JXZWJHTDIpCisgICAgICAgIGdsOjpFbmFibGUo
R3JhcGhpY3NDb250ZXh0R0w6OlBSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYKTsKKworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBFeHRlbnNpb25zR0wmIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNp
b25zKCk7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHJlcXVpcmVkRXh0ZW5z
aW9uc1tdID0geworICAgICAgICAiR0xfQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUiLCAvLyBGb3Ig
SU9TdXJmYWNlLWJhY2tlZCB0ZXh0dXJlcy4KKyAgICAgICAgIkdMX0VYVF90ZXh0dXJlX2Zvcm1h
dF9CR1JBODg4OCIsIC8vIEZvciBjcmVhdGluZyB0aGUgRUdMIHN1cmZhY2UgZnJvbSBhbiBJT1N1
cmZhY2UuCisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xF
TkdUSChyZXF1aXJlZEV4dGVuc2lvbnMpOyArK2kpIHsKKyAgICAgICAgaWYgKCFleHRlbnNpb25z
LnN1cHBvcnRzKHJlcXVpcmVkRXh0ZW5zaW9uc1tpXSkpIHsKKyAgICAgICAgICAgIExPRyhXZWJH
TCwgIk1pc3NpbmcgcmVxdWlyZWQgZXh0ZW5zaW9uLiAlcyIsIHJlcXVpcmVkRXh0ZW5zaW9uc1tp
XSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBleHRlbnNpb25z
LmVuc3VyZUVuYWJsZWQocmVxdWlyZWRFeHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICBFR0xE
ZXZpY2VFWFQgZGV2aWNlID0gbnVsbHB0cjsKKyAgICBFR0xfUXVlcnlEaXNwbGF5QXR0cmliRVhU
KG1fZGlzcGxheU9iaiwgRUdMX0RFVklDRV9FWFQsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmli
Kj4oJmRldmljZSkpOworICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxwdHI7Cisg
ICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXQgPSBudWxscHRyOworICAgIEVHTF9RdWVy
eURldmljZUF0dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfQ09OVEVYVF9BTkdMRSwgcmVpbnRlcnBy
ZXRfY2FzdDxFR0xBdHRyaWIqPigmY2dsQ29udGV4dCkpOworICAgIEVHTF9RdWVyeURldmljZUF0
dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FOR0xFLCByZWludGVycHJldF9j
YXN0PEVHTEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOworICAgIGF1dG8gZ3B1SUQgPSAoaG9zdFdp
bmRvdyAmJiBob3N0V2luZG93LT5kaXNwbGF5SUQoKSkgPyBncHVJREZvckRpc3BsYXkoaG9zdFdp
bmRvdy0+ZGlzcGxheUlEKCkpIDogcHJpbWFyeUdQVUlEKCk7CisgICAgc2V0R1BVQnlSZWdpc3Ry
eUlEKGNnbENvbnRleHQsIHBpeGVsRm9ybWF0LCBncHVJRCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShob3N0V2luZG93KTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCisKKyNlbmRpZiAvLyAj
ZWxpZiBVU0UoQU5HTEUpCisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKyAgICBhdHRycyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFs
aWRhdGlvbi4KKworICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgorICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgICAgICBtX3dlYkdMTGF5ZXIgPSBhZG9wdE5TKFtbV2ViR0xM
YXllciBhbGxvY10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHRHTDp0aGlzXSk7CisjaWZuZGVmIE5E
RUJVRworICAgICAgICBbbV93ZWJHTExheWVyIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOworI2Vu
ZGlmCisjaWYgVVNFKEFOR0xFKQorICAgICAgICBbbV93ZWJHTExheWVyIHNldEVHTERpc3BsYXk6
bV9kaXNwbGF5T2JqIGNvbmZpZzptX2NvbmZpZ09ial07CisjZW5kaWYKKyAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TCisKKyNpZiBVU0UoT1BFTkdMKQorICAgIGlmICh1c2VNdWx0aXNhbXBs
aW5nKQorICAgICAgICA6OmdsRW5hYmxlKEdMX01VTFRJU0FNUExFKTsKKyNlbmRpZgorCisgICAg
Ly8gQ3JlYXRlIHRoZSB0ZXh0dXJlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgZnJhbWVidWZm
ZXIuCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV90
ZXh0dXJlKTsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3Rl
eHR1cmUpOworICAgIC8vIFdlIGJpbmQgdG8gR0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhUIHJhdGhl
ciB0aGFuIFRFWFRVUkVfMkQgYmVjYXVzZQorICAgIC8vIHRoYXQncyB3aGF0IGlzIHJlcXVpcmVk
IGZvciBhIHRleHR1cmUgYmFja2VkIGJ5IElPU3VyZmFjZS4KKyAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfRVhULCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwg
R0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0VYVCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9FWFQsIDApOworCisjZWxpZiBVU0UoQU5HTEUpCisKKyAg
ICBHTGVudW0gdGV4dHVyZVRhcmdldCA9IEdyYXBoaWNzQ29udGV4dEdMOjpJT1N1cmZhY2VUZXh0
dXJlVGFyZ2V0OworCisgICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGds
OjpCaW5kVGV4dHVyZSh0ZXh0dXJlVGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
KyAgICBnbDo6VGV4UGFyYW1ldGVyaSh0ZXh0dXJlVGFyZ2V0LCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2w6OlRleFBhcmFtZXRlcmkodGV4dHVyZVRhcmdldCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsOjpUZXhQYXJhbWV0ZXJp
KHRleHR1cmVUYXJnZXQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICBnbDo6QmluZFRleHR1cmUodGV4dHVyZVRhcmdldCwgMCk7CisjZWxzZQorI2Vycm9yIFVuc3Vw
cG9ydGVkIGNvbmZpZ3VyYXRpb24KKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTCkgfHwgVVNFKE9Q
RU5HTF9FUykKKyAgICAvLyBDcmVhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdC4KKyAgICA6Omds
R2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKworICAgIG1fc3RhdGUuYm91bmRGQk8gPSBt
X2ZibzsKKyAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRy
cy5kZXB0aCkpCisgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisKKyAgICAvLyBJZiBuZWNlc3NhcnksIGNyZWF0ZSBhbm90aGVyIGZyYW1l
YnVmZmVyIGZvciB0aGUgbXVsdGlzYW1wbGUgcmVzdWx0cy4KKyAgICBpZiAoYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2Ft
cGxlRkJPOworICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgp
CisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorI2VsaWYgVVNFKEFOR0xFKQorICAgIGdsOjpHZW5G
cmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKKyAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX2Zibyk7CisgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOworCisgICAgaWYg
KCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpKQorICAg
ICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworCisg
ICAgLy8gSWYgbmVjZXNzYXJ5LCBjcmVhdGUgYW5vdGhlciBmcmFtZWJ1ZmZlciBmb3IgdGhlIG11
bHRpc2FtcGxlIHJlc3VsdHMuCisgICAgaWYgKGF0dHJzLmFudGlhbGlhcykgeworICAgICAgICBn
bDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2w6OkJp
bmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAg
IG1fc3RhdGUuYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICBnbDo6R2VuUmVu
ZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0
dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorCisjZW5k
aWYgLy8gVVNFKEFOR0xFKQorCisjaWYgIVVTRShBTkdMRSkKKyAgICAvLyBBTkdMRSBzaGFkZXIg
Y29tcGlsZXIgaW5pdGlhbGl6YXRpb24uCisKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVS
ZXNvdXJjZXM7CisgICAgc2g6OkluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7
CisKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0R0w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dEdMOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1Zl
Y3RvcnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9DT01CSU5FRF9U
RVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CisKKyAgICAv
LyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICBBTkdMRVJlc291cmNlcy5NYXhE
cmF3QnVmZmVycyA9IDE7CisgICAgCisgICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwor
ICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRf
U0hBREVSLCBHcmFwaGljc0NvbnRleHRHTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24p
OworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8
fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOworI2VuZGlmIC8vICFVU0UoQU5HTEUpCisgICAgCisjaWYgVVNFKE9Q
RU5HTCkKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOworICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQ
UklURSk7CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpCisgICAg
OjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgZ2w6OkNs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisjZW5kaWYKKworICAgIExPRyhXZWJHTCwgIkNyZWF0ZWQg
YSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCAoJXApLiIsIHRoaXMpOworfQorCitHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKK3sKKyAgICBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVDb250ZXh0KHRo
aXMpOworCisgICAgaWYgKG1fY29udGV4dE9iaikgeworICAgICAgICBHcmFwaGljc0NvbnRleHRH
TEF0dHJpYnV0ZXMgYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisjaWYgVVNFKE9QRU5H
TF9FUykKKyAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIFtzdGF0aWNfY2Fz
dDxFQUdMQ29udGV4dCAqPihtX2NvbnRleHRPYmopIHJlbmRlcmJ1ZmZlclN0b3JhZ2U6R0xfUkVO
REVSQlVGRkVSIGZyb21EcmF3YWJsZTpuaWxdOworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVm
ZmVycygxLCAmbV90ZXh0dXJlKTsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgICAgIENHTENvbnRl
eHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1fY29udGV4dE9i
aik7CisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNnbENvbnRleHQpOworICAgICAgICA6
OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisjZWxpZiBVU0UoQU5HTEUpCisgICAg
ICAgIEVHTF9NYWtlQ3VycmVudChtX2Rpc3BsYXlPYmosIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9f
U1VSRkFDRSwgbV9jb250ZXh0T2JqKTsKKyAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOworI2VuZGlmCisKKyNpZiBVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKQor
ICAgICAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAg
IGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwg
fHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICA6OmdsRGVs
ZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CisjZWxpZiBVU0UoQU5HTEUpCisgICAgICAg
IGlmIChhdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJz
LnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2w6OkRlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAg
ICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkK
KyAgICAgICAgICAgICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwg
Jm1fZmJvKTsKKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgW0VBR0xDb250
ZXh0IHNldEN1cnJlbnRDb250ZXh0OjBdOworICAgICAgICBbc3RhdGljX2Nhc3Q8RUFHTENvbnRl
eHQgKj4obV9jb250ZXh0T2JqKSByZWxlYXNlXTsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgICAg
IENHTFNldEN1cnJlbnRDb250ZXh0KDApOworICAgICAgICBDR0xEZXN0cm95Q29udGV4dChjZ2xD
b250ZXh0KTsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlz
cGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7
CisgICAgICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaik7
CisjZW5kaWYKKyAgICAgICAgW21fd2ViR0xMYXllciBzZXRDb250ZXh0Om51bGxwdHJdOworICAg
IH0KKworICAgIExPRyhXZWJHTCwgIkRlc3Ryb3llZCBhIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
ICglcCkuIiwgdGhpcyk7Cit9CisKKyNpZiBVU0UoT1BFTkdMX0VTKQordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEg
Y2FsbCB0byBzZXRCb3VuZHMgYmVsb3cgdG8gdXBkYXRlIHRoZSBiYWNraW5nIHN0b3JlIHNpemUg
YnV0IHdlIGFsc28KKyAgICAvLyBkbyBub3Qgd2FudCB0byBjbG9iYmVyIHRoZSBib3VuZHMgc2V0
IGR1cmluZyBsYXlvdXQuCisgICAgQ0dSZWN0IHByZXZpb3VzQm91bmRzID0gW21fd2ViR0xMYXll
ci5nZXQoKSBib3VuZHNdOworCisgICAgW21fd2ViR0xMYXllciBzZXRCb3VuZHM6Q0dSZWN0TWFr
ZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07CisgICAgW21fd2ViR0xMYXllciBzZXRPcGFxdWU6IWNv
bnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOworCisgICAgW3N0YXRpY19jYXN0PEVBR0xDb250ZXh0
ICo+KG1fY29udGV4dE9iaikgcmVuZGVyYnVmZmVyU3RvcmFnZTpHTF9SRU5ERVJCVUZGRVIgZnJv
bURyYXdhYmxlOnN0YXRpY19jYXN0PGlkPEVBR0xEcmF3YWJsZT4+KG1fd2ViR0xMYXllci5nZXQo
KSldOworCisgICAgW21fd2ViR0xMYXllciBzZXRCb3VuZHM6cHJldmlvdXNCb3VuZHNdOworfQor
I2VuZGlmCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVu
dCgpCit7CisgICAgaWYgKCFtX2NvbnRleHRPYmopCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
I2lmIFVTRShPUEVOR0xfRVMpCisgICAgaWYgKFtFQUdMQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
IT0gbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm4gW0VBR0xDb250ZXh0IHNldEN1cnJlbnRD
b250ZXh0OnN0YXRpY19jYXN0PEVBR0xDb250ZXh0Kj4obV9jb250ZXh0T2JqKV07CisjZWxpZiBV
U0UoT1BFTkdMKQorICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJy
ZW50Q29udGV4dCgpOworICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBtX2NvbnRleHRPYmopCisg
ICAgICAgIHJldHVybiBDR0xTZXRDdXJyZW50Q29udGV4dChzdGF0aWNfY2FzdDxDR0xDb250ZXh0
T2JqPihtX2NvbnRleHRPYmopKSA9PSBrQ0dMTm9FcnJvcjsKKyNlbGlmIFVTRShBTkdMRSkKKyAg
ICBpZiAoRUdMX0dldEN1cnJlbnRDb250ZXh0KCkgIT0gbV9jb250ZXh0T2JqKQorICAgICAgICBy
ZXR1cm4gRUdMX01ha2VDdXJyZW50KG1fZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9O
T19TVVJGQUNFLCBtX2NvbnRleHRPYmopOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVzKCkKK3sKKyAgICBp
ZiAobV9mYWlsTmV4dFN0YXR1c0NoZWNrKSB7CisgICAgICAgIExPRyhXZWJHTCwgIlByZXRlbmRp
bmcgdGhlIEdQVSBoYXMgcmVzZXQgKCVwKS4gTG9zZSB0aGUgY29udGV4dC4iLCB0aGlzKTsKKyAg
ICAgICAgbV9mYWlsTmV4dFN0YXR1c0NoZWNrID0gZmFsc2U7CisgICAgICAgIGZvcmNlQ29udGV4
dExvc3QoKTsKKyNpZiBVU0UoT1BFTkdMKQorICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dCgw
KTsKKyNlbGlmIFVTRShPUEVOR0xfRVMpCisgICAgICAgIFtFQUdMQ29udGV4dCBzZXRDdXJyZW50
Q29udGV4dDowXTsKKyNlbGlmIFVTRShBTkdMRSkKKyAgICAgICAgRUdMX01ha2VDdXJyZW50KG1f
ZGlzcGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVY
VCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE9ubHkgZG8gdGhl
IGNoZWNrIGV2ZXJ5IHN0YXR1c0NoZWNrVGhyZXNob2xkIGNhbGxzLgorICAgIGlmIChtX3N0YXR1
c0NoZWNrQ291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdHVzQ2hlY2tDb3VudCA9
IChtX3N0YXR1c0NoZWNrQ291bnQgKyAxKSAlIHN0YXR1c0NoZWNrVGhyZXNob2xkOworCisgICAg
R0xpbnQgcmVzdGFydFN0YXR1cyA9IDA7CisjaWYgVVNFKE9QRU5HTCkKKyAgICBDR0xDb250ZXh0
T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dEdMKCkpOworICAgIENHTEdldFBhcmFtZXRlcihjZ2xDb250ZXh0LCBrQ0dMQ1BH
UFVSZXN0YXJ0U3RhdHVzLCAmcmVzdGFydFN0YXR1cyk7CisgICAgaWYgKHJlc3RhcnRTdGF0dXMg
PT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0JsYWNrbGlzdGVkKSB7CisgICAgICAgIExPRyhXZWJH
TCwgIlRoZSBHUFUgaGFzIGJsYWNrbGlzdGVkIHVzICglcCkuIFRlcm1pbmF0aW5nLiIsIHRoaXMp
OworICAgICAgICBleGl0KEVYX09TRVJSKTsKKyAgICB9CisgICAgaWYgKHJlc3RhcnRTdGF0dXMg
PT0ga0NHTENQR1BVUmVzdGFydFN0YXR1c0NhdXNlZCkgeworICAgICAgICBMT0coV2ViR0wsICJU
aGUgR1BVIGhhcyByZXNldCB1cyAoJXApLiBMb3NlIHRoZSBjb250ZXh0LiIsIHRoaXMpOworICAg
ICAgICBmb3JjZUNvbnRleHRMb3N0KCk7CisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDAp
OworICAgIH0KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisgICAgRUFHTENvbnRleHQqIGN1cnJlbnRD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMKCkpOworICAgIFtjdXJyZW50Q29udGV4dCBnZXRQYXJhbWV0ZXI6a0VBR0xDUEdQVVJlc3Rh
cnRTdGF0dXMgdG86JnJlc3RhcnRTdGF0dXNdOworICAgIGlmIChyZXN0YXJ0U3RhdHVzID09IGtF
QUdMQ1BHUFVSZXN0YXJ0U3RhdHVzQ2F1c2VkIHx8IHJlc3RhcnRTdGF0dXMgPT0ga0VBR0xDUEdQ
VVJlc3RhcnRTdGF0dXNCbGFja2xpc3RlZCkgeworICAgICAgICBMT0coV2ViR0wsICJUaGUgR1BV
IGhhcyBlaXRoZXIgcmVzZXQgb3IgYmxhY2tsaXN0ZWQgdXMgKCVwKS4gTG9zZSB0aGUgY29udGV4
dC4iLCB0aGlzKTsKKyAgICAgICAgZm9yY2VDb250ZXh0TG9zdCgpOworICAgICAgICBbRUFHTENv
bnRleHQgc2V0Q3VycmVudENvbnRleHQ6MF07CisgICAgfQorI2VsaWYgVVNFKEFOR0xFKQorICAg
IC8vIEZJWE1FOiBjaGVjayB2aWEgS0hSX3JvYnVzdG5lc3MuCisgICAgcmVzdGFydFN0YXR1cyA9
IDA7CisjZW5kaWYKK30KKworI2lmIFVTRShPUEVOR0xfRVMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpwcmVzZW50UmVuZGVyYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpCisgICAgICAgIHJl
c29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKKworICAgIDo6Z2xGbHVzaCgpOworICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICBb
c3RhdGljX2Nhc3Q8RUFHTENvbnRleHQqPihtX2NvbnRleHRPYmopIHByZXNlbnRSZW5kZXJidWZm
ZXI6R0xfUkVOREVSQlVGRkVSXTsKKyAgICBbRUFHTENvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6
bmlsXTsKK30KKyNlbmRpZgorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFn
ZUlPU3VyZmFjZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBJT1N1cmZhY2VSZWYgc3VyZmFjZSwgR0MzRHVpbnQgcGxhbmUpCit7CisjaWYgVVNF
KE9QRU5HTCkKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0xD
b250ZXh0T2JqPihwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpOworICAgIHJldHVybiBrQ0dM
Tm9FcnJvciA9PSBDR0xUZXhJbWFnZUlPU3VyZmFjZTJEKGNnbENvbnRleHQsIHRhcmdldCwgaW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgc3VyZmFjZSwgcGxhbmUp
OworI2VsaWYgVVNFKE9QRU5HTF9FUykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9S
KQorICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8RUFHTENvbnRleHQgKj4ocGxhdGZvcm1HcmFwaGlj
c0NvbnRleHRHTCgpKSB0ZXhJbWFnZUlPU3VyZmFjZTpzdXJmYWNlIHRhcmdldDp0YXJnZXQgaW50
ZXJuYWxGb3JtYXQ6aW50ZXJuYWxGb3JtYXQgd2lkdGg6d2lkdGggaGVpZ2h0OmhlaWdodCBmb3Jt
YXQ6Zm9ybWF0IHR5cGU6dHlwZSBwbGFuZTpwbGFuZV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbEZvcm1hdCk7CisgICAgVU5VU0VE
X1BBUkFNKHdpZHRoKTsKKyAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKKyAgICBVTlVTRURfUEFS
QU0oZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKHN1
cmZhY2UpOworICAgIFVOVVNFRF9QQVJBTShwbGFuZSk7CisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKKyNpZiBVU0UoT1BFTkdMKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmUoSW50U2l6ZSBzaXplKQoreworICAgIExPRyhX
ZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdT
dG9yZSBhdCAlZCB4ICVkLiAoJXApIiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCB0aGlz
KTsKKyAgICBbbV93ZWJHTExheWVyIGFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlV2l0aFNp
emU6c2l6ZSB1c2luZ0FscGhhOmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGFdOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5n
U3RvcmVGcm9tTGF5ZXIoKQoreworICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVw
KSIsIHRoaXMpOworICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxh
YmxlU3VyZmFjZV07Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVwZGF0ZUNH
TENvbnRleHQoKQoreworICAgIGlmICghbV9jb250ZXh0T2JqKQorICAgICAgICByZXR1cm47CisK
KyAgICBMT0coV2ViR0wsICJEZXRlY3RlZCBhIG11eCBzd2l0Y2ggb3IgZGlzcGxheSByZWNvbmZp
Z3VyYXRpb24uIENhbGwgQ0dMVXBkYXRlQ29udGV4dC4gKCVwKSIsIHRoaXMpOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgQ0dMVXBkYXRlQ29udGV4dChzdGF0aWNfY2FzdDxDR0xD
b250ZXh0T2JqPihtX2NvbnRleHRPYmopKTsKKyAgICBtX2hhc1N3aXRjaGVkVG9IaWdoUGVyZm9y
bWFuY2VHUFUgPSB0cnVlOworfQorCisjZW5kaWYgLy8gVVNFKE9QRU5HTCkKKworI2lmIFVTRShP
UEVOR0wpIHx8IFVTRShBTkdMRSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNldENv
bnRleHRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKQoreworICAgIGlmIChtX3Bvd2VyUHJlZmVy
ZW5jZVVzZWRGb3JDcmVhdGlvbiA9PSBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZTo6
SGlnaFBlcmZvcm1hbmNlKSB7CisgICAgICAgIGlmIChpc1Zpc2libGUpCisgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRDb250ZXh0
UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5yZW1vdmVD
b250ZXh0UmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlKHRoaXMpOworICAgIH0KK30KKyNlbmRpZiAv
LyBVU0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpCisKKyNpZiBVU0UoQU5HTEUpCisKKyNpZiBQTEFU
Rk9STShNQUMpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVDR0xDb250ZXh0
KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9H
KFdlYkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9yIGRpc3BsYXkgcmVjb25maWd1cmF0aW9u
LiBDYWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0aGlzKTsKKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIEVHTERldmljZUVYVCBkZXZpY2UgPSBudWxscHRyOworICAgIEVHTF9R
dWVyeURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBFR0xfREVWSUNFX0VYVCwgcmVpbnRl
cnByZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7CisgICAgQ0dMQ29udGV4dE9iaiBjZ2xD
b250ZXh0ID0gbnVsbHB0cjsKKyAgICBFR0xfUXVlcnlEZXZpY2VBdHRyaWJFWFQoZGV2aWNlLCBF
R0xfQ0dMX0NPTlRFWFRfQU5HTEUsIHJlaW50ZXJwcmV0X2Nhc3Q8RUdMQXR0cmliKj4oJmNnbENv
bnRleHQpKTsKKworICAgIENHTFVwZGF0ZUNvbnRleHQoY2dsQ29udGV4dCk7CisgICAgbV9oYXNT
d2l0Y2hlZFRvSGlnaFBlcmZvcm1hbmNlR1BVID0gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjphbGxvY2F0ZUlPU3VyZmFjZUJhY2tpbmdTdG9yZShJbnRT
aXplIHNpemUpCit7CisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgTE9HKFdlYkdMLCAiR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmFsbG9jYXRlSU9TdXJmYWNlQmFja2luZ1N0b3JlIGF0ICVkIHgg
JWQuICglcCkiLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHRoaXMpOworICAgIFttX3dl
YkdMTGF5ZXIgYWxsb2NhdGVJT1N1cmZhY2VCYWNraW5nU3RvcmVXaXRoU2l6ZTpzaXplIHVzaW5n
QWxwaGE6Y29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYV07CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzaXplKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRh
dGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKQoreworI2lmIEhBVkUo
SU9TVVJGQUNFKQorICAgIExPRyhXZWJHTCwgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRh
dGVGcmFtZWJ1ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKS4gKCVwKSIsIHRoaXMp
OworICAgIFttX3dlYkdMTGF5ZXIgYmluZEZyYW1lYnVmZmVyVG9OZXh0QXZhaWxhYmxlU3VyZmFj
ZV07CisjZW5kaWYKK30KKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lz
Rm9yV2ViR0wyOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUNv
bnRleHRDaGFuZ2VkKCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnNo
YXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250ZXh0cygpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjphbGxvd09mZmxpbmVSZW5kZXJlcnMoKSBjb25zdAoreworI2lmIFBMQVRG
T1JNKE1BQykgJiYgRU5BQkxFKFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQorICAg
IC8vIFdoZW4gV2luZG93U2VydmVyIGFjY2VzcyBpcyBibG9ja2VkIGluIHRoZSBXZWJQcm9jZXNz
LCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyBmb3IgT3BlbkdMIHRvIGRlY2lkZSB3aGljaCBHUFUg
aXMgY29ubmVjdGVkIHRvIGEgZGlzcGxheSAob25saW5lL29mZmxpbmUpLgorICAgIC8vIE9wZW5H
TCB3aWxsIHRoZW4gY29uc2lkZXIgYWxsIEdQVXMsIG9yIHJlbmRlcmVycywgYXMgb2ZmbGluZSwg
d2hpY2ggbWVhbnMKKyAgICAvLyBhbGwgb2ZmbGluZSByZW5kZXJlcnMgbmVlZCB0byBiZSBjb25z
aWRlcmVkIHdoZW4gZmluZGluZyBhIHBpeGVsIGZvcm1hdC4KKyAgICAvLyBJbiBXZWJLaXQgbGVn
YWN5LCB0aGVyZSB3aWxsIHN0aWxsIGJlIGEgV2luZG93U2VydmVyIGNvbm5lY3Rpb24sIGFuZAor
ICAgIC8vIG1fZGlzcGxheU1hc2sgd2lsbCBub3QgYmUgc2V0IGluIHRoaXMgY2FzZS4KKyAgICBp
ZiAocHJpbWFyeU9wZW5HTERpc3BsYXlNYXNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vs
aWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCisgICAgLy8gRklYTUU6IDxyZGFyOi8vNTMwNjI3OTQ+
IFdlJ3JlIHZlcnkgaW5jb25zaXN0ZW50IGFib3V0IFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JM
T0NLSU5HCisgICAgLy8gYW5kIE1BQy9NQUNDQVRBTFlTVCBhbmQgT1BFTkdML09QRU5HTEVTLgor
ICAgIHJldHVybiB0cnVlOworI2VuZGlmCisgICAgICAgIAorI2lmIEhBVkUoQVBQTEVfR1JBUEhJ
Q1NfQ09OVFJPTCkKKyAgICBpZiAoaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIFBM
QVRGT1JNKE1BQykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjcmVlbkRpZENoYW5n
ZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCit7CisgICAgaWYgKCFtX2NvbnRleHRPYmop
CisgICAgICAgIHJldHVybjsKKyNpZiBVU0UoQU5HTEUpCisgICAgaWYgKCFtX2hhc1N3aXRjaGVk
VG9IaWdoUGVyZm9ybWFuY2VHUFUpIHsKKyAgICAgICAgRUdMRGV2aWNlRVhUIGRldmljZSA9IG51
bGxwdHI7CisgICAgICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2JqLCBF
R0xfREVWSUNFX0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7Cisg
ICAgICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9IG51bGxwdHI7CisgICAgICAgIENHTFBp
eGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0ID0gbnVsbHB0cjsKKyAgICAgICAgRUdMX1F1ZXJ5RGV2
aWNlQXR0cmliRVhUKGRldmljZSwgRUdMX0NHTF9DT05URVhUX0FOR0xFLCByZWludGVycHJldF9j
YXN0PEVHTEF0dHJpYio+KCZjZ2xDb250ZXh0KSk7CisgICAgICAgIEVHTF9RdWVyeURldmljZUF0
dHJpYkVYVChkZXZpY2UsIEVHTF9DR0xfUElYRUxfRk9STUFUX0FOR0xFLCByZWludGVycHJldF9j
YXN0PEVHTEF0dHJpYio+KCZwaXhlbEZvcm1hdCkpOworICAgICAgICBzZXRHUFVCeVJlZ2lzdHJ5
SUQoY2dsQ29udGV4dCwgcGl4ZWxGb3JtYXQsIGdwdUlERm9yRGlzcGxheShkaXNwbGF5SUQpKTsK
KyAgICB9CisjZWxzZQorI2lmIFVTRShPUEVOR0wpCisgICAgaWYgKCFtX2hhc1N3aXRjaGVkVG9I
aWdoUGVyZm9ybWFuY2VHUFUpIHsKKyAgICAgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0g
c3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9jb250ZXh0T2JqKTsKKyAgICAgICAgc2V0R1BV
QnlSZWdpc3RyeUlEKGNnbENvbnRleHQsIENHTEdldFBpeGVsRm9ybWF0KGNnbENvbnRleHQpLCBn
cHVJREZvckRpc3BsYXkoZGlzcGxheUlEKSk7CisgICAgfQorI2VuZGlmCisjZW5kaWYgLy8gVVNF
KEFOR0xFKQorfQorI2VuZGlmIC8vICFQTEFURk9STShNQUMpCisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IGRhZTE4N2RhNjVkMjBiMjgwNmYy
YmQzOWU4YzNiMDY5Mzk3YzRiYWIuLmMyMTI1YzNlZjE2MGMwODEwMTA5ODIzYjRiOTAzNmRkZjZm
YmNmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9JT1N1cmZhY2UubW0KQEAgLTI4LDggKzI4LDggQEAKIAogI2lmIEhBVkUoSU9TVVJGQUNFKQog
Ci0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW1wb3J0ICJIb3N0
V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZl
ci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR0xMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
R0xMYXllci5oCmluZGV4IGU2YzQ1ZmI1NzA1ZDYyMDQ5ZTRiYjE5NzZlZGE4ODMwNzliODcyMzMu
LmY3Njc5MDk3NDdmZWZmNDg3MTRiMWJhZDA5ZjEzMmJkZWI4YmY2NWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLmgKQEAgLTMx
LDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NMYXllcjsK
LWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7
CiB9CiAKIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCkBAIC00Niw3ICs0Niw3
IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCiAjZXJyb3IgVW5zdXBwb3J0
ZWQgcGxhdGZvcm0KICNlbmRpZgogewotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiBf
Y29udGV4dDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogX2NvbnRleHQ7
CiAgICAgZmxvYXQgX2RldmljZVBpeGVsUmF0aW87CiAjaWYgSEFWRShJT1NVUkZBQ0UpICYmIChV
U0UoT1BFTkdMKSB8fCBVU0UoQU5HTEUpKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJ
T1N1cmZhY2U+IF9jb250ZW50c0J1ZmZlcjsKQEAgLTY1LDkgKzY1LDkgQEAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KICNlbmRpZgogfQogCi1AcHJvcGVydHkgKG5vbmF0b21p
YykgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQ7CitAcHJvcGVydHkgKG5vbmF0
b21pYykgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQ7CiAKLS0gKGlk
KWluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKilj
b250ZXh0OworLSAoaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHRHTDooV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqKWNvbnRleHQ7CiAKIC0gKENHSW1hZ2VSZWYpY29weUltYWdlU25h
cHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1t
CmluZGV4IDc1ODhmOTExNWM1YzM4ZWI5ODYxMDUwYmViMjYzMmNlM2I0MGYwZDkuLjI5MjAxNmFj
MTRlYWMyYWE4ZmU0ZDE1ZDI4Zjk0YjAyZTJkNjc1Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQpAQCAtMjgsOCArMjgs
OCBAQAogI2lmIEVOQUJMRShXRUJHTCkKICNpbXBvcnQgIldlYkdMTGF5ZXIuaCIKIAotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCisj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXll
ci5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmgiCkBAIC02MSw3ICs2MSw3IEBACiAKIEBzeW50aGVzaXplIGNvbnRleHQ9X2Nv
bnRleHQ7CiAKLS0oaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDooV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0QqKWNvbnRleHQKKy0oaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHRHTDooV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKWNvbnRleHQKIHsKICAgICBfY29udGV4dCA9
IGNvbnRleHQ7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBz
dGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBz
aXplICovKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogI2lmIFVTRShPUEVOR0wpCi0gICAg
Q0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4oX2Nv
bnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgQ0dMQ29udGV4dE9iaiBj
Z2xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4oX2NvbnRleHQtPnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0woKSk7CiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoY2dsQ29udGV4
dCk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBpbWFnZUNvbG9yU3BhY2UgPSBj
b2xvclNwYWNlOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHN0YXRpYyB2b2lkIGZyZWVEYXRhKHZvaWQg
KiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IC8qIHNpemUgKi8pCiAgICAgICAgIGlmIChfbGF0
Y2hlZFBidWZmZXIpIHsKIAogICAgICAgICAgICAgR0MzRGVudW0gdGV4dHVyZSA9IF9jb250ZXh0
LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAgICAgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldCwgdGV4dHVyZSk7CisgICAgICAgICAg
ICBnbDo6QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OklPU3VyZmFjZVRleHR1cmVUYXJn
ZXQsIHRleHR1cmUpOwogICAgICAgICAgICAgaWYgKCFFR0xfUmVsZWFzZVRleEltYWdlKF9lZ2xE
aXNwbGF5LCBfbGF0Y2hlZFBidWZmZXIsIEVHTF9CQUNLX0JVRkZFUikpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogcmVwb3J0IGVycm9yLgogICAgICAgICAgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBj
b25zdCB2b2lkICpkYXRhLCBzaXplX3QgLyogc2l6ZSAqLykKICAgICAgICAgRUdMX1dJRFRILCBz
aXplLndpZHRoKCksCiAgICAgICAgIEVHTF9IRUlHSFQsIHNpemUuaGVpZ2h0KCksCiAgICAgICAg
IEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUsIDAsCi0gICAgICAgIEVHTF9URVhUVVJFX1RBUkdF
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkVHTElPU3VyZmFjZVRleHR1cmVUYXJnZXQsCisgICAgICAg
IEVHTF9URVhUVVJFX1RBUkdFVCwgR3JhcGhpY3NDb250ZXh0R0w6OkVHTElPU3VyZmFjZVRleHR1
cmVUYXJnZXQsCiAgICAgICAgIEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSwgdXNp
bmdBbHBoYSA/IEdMX0JHUkFfRVhUIDogR0xfUkdCLAogICAgICAgICBFR0xfVEVYVFVSRV9GT1JN
QVQsIEVHTF9URVhUVVJFX1JHQkEsCiAgICAgICAgIEVHTF9URVhUVVJFX1RZUEVfQU5HTEUsIEdM
X1VOU0lHTkVEX0JZVEUsCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0
YSh2b2lkICosIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCAvKiBzaXplICovKQogICAgIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0ID0gX3VzaW5nQWxwaGEgPyBHTF9SR0JBIDogR0xfUkdCOwogCiAg
ICAgLy8gTGluayB0aGUgSU9TdXJmYWNlIHRvIHRoZSB0ZXh0dXJlLgotICAgIENHTENvbnRleHRP
YmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KF9jb250ZXh0LT5wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIENHTENvbnRleHRPYmogY2dsQ29udGV4dCA9
IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KF9jb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMKCkpOwogICAgIENHTEVycm9yIGVycm9yID0gQ0dMVGV4SW1hZ2VJT1N1cmZhY2UyRChj
Z2xDb250ZXh0LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIGludGVybmFsRm9ybWF0LCBfYnVm
ZmVyU2l6ZS53aWR0aCgpLCBfYnVmZmVyU2l6ZS5oZWlnaHQoKSwgR0xfQkdSQSwgR0xfVU5TSUdO
RURfSU5UXzhfOF84XzhfUkVWLCBpb1N1cmZhY2UsIDApOwogICAgIEFTU0VSVF9VTlVTRUQoZXJy
b3IsIGVycm9yID09IGtDR0xOb0Vycm9yKTsKICNlbGlmIFVTRShBTkdMRSkKICAgICBHQzNEZW51
bSB0ZXh0dXJlID0gX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpOwogCi0gICAgZ2w6OkJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0LCB0ZXh0dXJl
KTsKKyAgICBnbDo6QmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OklPU3VyZmFjZVRleHR1
cmVUYXJnZXQsIHRleHR1cmUpOwogCiAgICAgaWYgKF9sYXRjaGVkUGJ1ZmZlcikgewogICAgICAg
ICBpZiAoIUVHTF9SZWxlYXNlVGV4SW1hZ2UoX2VnbERpc3BsYXksIF9sYXRjaGVkUGJ1ZmZlciwg
RUdMX0JBQ0tfQlVGRkVSKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHQzRE5FT04uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vR3JhcGhpY3NDb250ZXh0M0RORU9OLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDNmZWRkNGE5YTYyYmVlZTVjYjhiNDUwZDg0OTc2
ZTNkYzZkYTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHQz
RE5FT04uaAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRE5FT05faAot
I2RlZmluZSBHcmFwaGljc0NvbnRleHQzRE5FT05faAotCi0jaWYgSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotCi0jaW5jbHVkZSA8YXJtX25lb24uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1uYW1lc3BhY2UgU0lNRCB7Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJH
QkExNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0
aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25l
bnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50
cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAxNjsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9
IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLSAgICBjb25zdCB1aW50OF90KiBz
cmMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2UpOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDE2KSB7Ci0gICAgICAg
IHVpbnQ4eDE2eDJfdCBjb21wb25lbnRzID0gdmxkMnFfdTgoc3JjICsgaSAqIDIpOwotICAgICAg
ICB2c3QxcV91OChkZXN0aW5hdGlvbiArIGksIGNvbXBvbmVudHMudmFsWzFdKTsKLSAgICB9Ci0K
LSAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7Ci0gICAgZGVzdGluYXRpb24gKz0gY29tcG9u
ZW50c1NpemU7Ci0gICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3Qg
dWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVs
c1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93
ICogMzsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAy
NDsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWls
Q29tcG9uZW50czsKLQotICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdmR1cF9uX3U4KDB4RkYp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAyNCkg
ewotICAgICAgICB1aW50MTZ4OHgzX3QgUkdCMTYgPSB2bGQzcV91MTYoc291cmNlICsgaSk7Ci0g
ICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihSR0Ix
Ni52YWxbMF0sIDgpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2
KHZzaHJxX25fdTE2KFJHQjE2LnZhbFsxXSwgOCkpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9u
ZW50QiA9IHZxbW92bl91MTYodnNocnFfbl91MTYoUkdCMTYudmFsWzJdLCA4KSk7Ci0gICAgICAg
IHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRC
LCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIFJHQkE4KTsKLSAg
ICAgICAgZGVzdGluYXRpb24gKz0gMzI7Ci0gICAgfQotCi0gICAgc291cmNlICs9IGNvbXBvbmVu
dHNTaXplOwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gMzsKLX0KLQotQUxX
QVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mQVJHQjE2TGl0dGxlVG9SR0JBOChjb25zdCB1
aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxz
UGVyUm93KQotewotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cg
KiA0OwotICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMy
OwotICAgIHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxD
b21wb25lbnRzOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXpl
OyBpICs9IDMyKSB7Ci0gICAgICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291
cmNlICsgaSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hy
cV9uX3UxNihBUkdCMTYudmFsWzBdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRS
ID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7Ci0gICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJd
LCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9u
X3UxNihBUkdCMTYudmFsWzNdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tj
b21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAg
IHZzdDRfdTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7Ci0gICAgfQotCi0gICAgc291cmNlICs9
IGNvbXBvbmVudHNTaXplOwotICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOwotICAg
IHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIHVucGFja09uZVJvd09mQkdSQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdComIHNv
dXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQotewot
ICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cgKiA0OwotICAgIHVu
c2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMyOwotICAgIHVuc2ln
bmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxDb21wb25lbnRzOwot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7
Ci0gICAgICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291cmNlICsgaSk7Ci0g
ICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdC
MTYudmFsWzBdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3Ux
Nih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21w
b25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJdLCA4KSk7Ci0gICAg
ICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYu
dmFsWzNdLCA4KSk7Ci0gICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBj
b21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVz
dGluYXRpb24gKyBpLCBSR0JBOCk7Ci0gICAgfQotCi0gICAgc291cmNlICs9IGNvbXBvbmVudHNT
aXplOwotICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOwotICAgIHBpeGVsc1BlclJv
dyA9IHRhaWxDb21wb25lbnRzIC8gNDsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09u
ZVJvd09mUkdCQTQ0NDRUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90KiYg
ZGVzdGluYXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCi17Ci0gICAgdW5zaWduZWQgdGFp
bFBpeGVscyA9IHBpeGVsc1BlclJvdyAlIDg7Ci0gICAgdW5zaWduZWQgcGl4ZWxTaXplID0gcGl4
ZWxzUGVyUm93IC0gdGFpbFBpeGVsczsKLQotICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgwZiA9
IHZkdXBxX25fdTE2KDB4MEYpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNp
emU7IGkgKz0gOCkgewotICAgICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2
KHNvdXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3Ux
Nih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMTIpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBv
bmVudEcgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgOCks
IGltbWVkaWF0ZTB4MGYpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5f
dTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNCksIGltbWVkaWF0ZTB4MGYp
KTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihl
aWdodFBpeGVscywgaW1tZWRpYXRlMHgwZikpOwotCi0gICAgICAgIGNvbXBvbmVudFIgPSB2b3Jy
X3U4KHZzaGxfbl91OChjb21wb25lbnRSLCA0KSwgY29tcG9uZW50Uik7Ci0gICAgICAgIGNvbXBv
bmVudEcgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRHLCA0KSwgY29tcG9uZW50Ryk7Ci0g
ICAgICAgIGNvbXBvbmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCA0KSwgY29t
cG9uZW50Qik7Ci0gICAgICAgIGNvbXBvbmVudEEgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25l
bnRBLCA0KSwgY29tcG9uZW50QSk7Ci0KLSAgICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVu
dHMgPSB7e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsK
LSAgICAgICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOwotICAgICAgICBk
ZXN0aW5hdGlvbiArPSAzMjsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOwotICAg
IHBpeGVsc1BlclJvdyA9IHRhaWxQaXhlbHM7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwYWNr
T25lUm93T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDQoY29uc3QgdWludDhfdComIHNvdXJjZSwg
dWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1
bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25l
ZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKLSAgICB1bnNpZ25lZCBj
b21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLQotICAg
IHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsK
LSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmMCA9IHZkdXBfbl91OCgweEYwKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKLSAgICAgICAg
dWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOwotCi0gICAgICAgIHVpbnQ4
eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4ZjApOwot
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZh
bFsxXSwgaW1tZWRpYXRlMHhmMCksIDQpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9
IHZhbmRfdTgoUkdCQTgudmFsWzJdLCBpbW1lZGlhdGUweGYwKTsKLSAgICAgICAgdWludDh4OF90
IGNvbXBvbmVudEEgPSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbM10sIGltbWVkaWF0ZTB4
ZjApLCA0KTsKLQotICAgICAgICB1aW50OHg4eDJfdCBSR0JBNDsKLSAgICAgICAgUkdCQTQudmFs
WzBdID0gdm9ycl91OChjb21wb25lbnRCLCBjb21wb25lbnRBKTsKLSAgICAgICAgUkdCQTQudmFs
WzFdID0gdm9ycl91OChjb21wb25lbnRSLCBjb21wb25lbnRHKTsKLSAgICAgICAgdnN0Ml91OChk
c3QsIFJHQkE0KTsKLSAgICAgICAgZHN0ICs9IDE2OwotICAgIH0KLQotICAgIHNvdXJjZSArPSBj
b21wb25lbnRzU2l6ZTsKLSAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZSAvIDQ7Ci0g
ICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgdW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3Vy
Y2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAg
ICB1bnNpZ25lZCB0YWlsUGl4ZWxzID0gcGl4ZWxzUGVyUm93ICUgODsKLSAgICB1bnNpZ25lZCBw
aXhlbFNpemUgPSBwaXhlbHNQZXJSb3cgLSB0YWlsUGl4ZWxzOwotCi0gICAgdWludDh4OF90IGlt
bWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcpOwotICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweGZm
ID0gdmR1cF9uX3U4KDB4RkYpOwotICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxZiA9IHZkdXBx
X25fdTE2KDB4MUYpOwotICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxID0gdmR1cHFfbl91MTYo
MHgxKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkgKz0gOCkg
ewotICAgICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJjZSArIGkp
OwotCi0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3Ux
NihlaWdodFBpeGVscywgMTEpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1v
dm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNiksIGltbWVkaWF0ZTB4
MWYpKTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2KHZhbmRxX3Ux
Nih2c2hycV9uX3UxNihlaWdodFBpeGVscywgMSksIGltbWVkaWF0ZTB4MWYpKTsKLSAgICAgICAg
dWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihlaWdodFBpeGVscywg
aW1tZWRpYXRlMHgxKSk7Ci0KLSAgICAgICAgY29tcG9uZW50UiA9IHZvcnJfdTgodnNobF9uX3U4
KGNvbXBvbmVudFIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudFIsIGltbWVkaWF0ZTB4NykpOwotICAg
ICAgICBjb21wb25lbnRHID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50RywgMyksIHZhbmRf
dTgoY29tcG9uZW50RywgaW1tZWRpYXRlMHg3KSk7Ci0gICAgICAgIGNvbXBvbmVudEIgPSB2b3Jy
X3U4KHZzaGxfbl91OChjb21wb25lbnRCLCAzKSwgdmFuZF91OChjb21wb25lbnRCLCBpbW1lZGlh
dGUweDcpKTsKLSAgICAgICAgY29tcG9uZW50QSA9IHZtdWxfdTgoY29tcG9uZW50QSwgaW1tZWRp
YXRlMHhmZik7Ci0KLSAgICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7e2NvbXBv
bmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsKLSAgICAgICAgdnN0
NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOwotICAgICAgICBkZXN0aW5hdGlvbiAr
PSAzMjsKLSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOwotICAgIHBpeGVsc1BlclJv
dyA9IHRhaWxQaXhlbHM7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwYWNrT25lUm93T2ZSR0JB
OFRvVW5zaWduZWRTaG9ydDU1NTEoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBk
ZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21w
b25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9u
ZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6
ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKLQotICAgIHVpbnQ4X3QqIGRz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsKLQotICAgIHVpbnQ4
eDhfdCBpbW1lZGlhdGUweGY4ID0gdmR1cF9uX3U4KDB4RjgpOwotICAgIHVpbnQ4eDhfdCBpbW1l
ZGlhdGUweDE4ID0gdmR1cF9uX3U4KDB4MTgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb21wb25lbnRzU2l6ZTsgaSArPSAzMikgewotICAgICAgICB1aW50OHg4eDRfdCBSR0JBOCA9
IHZsZDRfdTgoc291cmNlICsgaSk7Ci0KLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudFIgPSB2
YW5kX3U4KFJHQkE4LnZhbFswXSwgaW1tZWRpYXRlMHhmOCk7Ci0gICAgICAgIHVpbnQ4eDhfdCBj
b21wb25lbnRHM2JpdCA9IHZzaHJfbl91OChSR0JBOC52YWxbMV0sIDUpOwotCi0gICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRHMmJpdCA9IHZzaGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwg
aW1tZWRpYXRlMHgxOCksIDMpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZzaHJf
bl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhmOCksIDIpOwotICAgICAgICB1
aW50OHg4X3QgY29tcG9uZW50QSA9IHZzaHJfbl91OChSR0JBOC52YWxbM10sIDcpOwotCi0gICAg
ICAgIHVpbnQ4eDh4Ml90IFJHQkE1NTUxOwotICAgICAgICBSR0JBNTU1MS52YWxbMF0gPSB2b3Jy
X3U4KHZvcnJfdTgoY29tcG9uZW50RzJiaXQsIGNvbXBvbmVudEIpLCBjb21wb25lbnRBKTsKLSAg
ICAgICAgUkdCQTU1NTEudmFsWzFdID0gdm9ycl91OChjb21wb25lbnRSLCBjb21wb25lbnRHM2Jp
dCk7Ci0gICAgICAgIHZzdDJfdTgoZHN0LCBSR0JBNTU1MSk7Ci0gICAgICAgIGRzdCArPSAxNjsK
LSAgICB9Ci0KLSAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7Ci0gICAgZGVzdGluYXRpb24g
Kz0gY29tcG9uZW50c1NpemUgLyA0OwotICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRz
IC8gNDsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mUkdCNTY1VG9SR0JB
OChjb25zdCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25l
ZCYgcGl4ZWxzUGVyUm93KQotewotICAgIHVuc2lnbmVkIHRhaWxQaXhlbHMgPSBwaXhlbHNQZXJS
b3cgJSA4OwotICAgIHVuc2lnbmVkIHBpeGVsU2l6ZSA9IHBpeGVsc1BlclJvdyAtIHRhaWxQaXhl
bHM7Ci0KLSAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4M2YgPSB2ZHVwcV9uX3UxNigweDNGKTsK
LSAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4MWYgPSB2ZHVwcV9uX3UxNigweDFGKTsKLSAgICB1
aW50OHg4X3QgaW1tZWRpYXRlMHgzID0gdmR1cF9uX3U4KDB4Myk7Ci0gICAgdWludDh4OF90IGlt
bWVkaWF0ZTB4NyA9IHZkdXBfbl91OCgweDcpOwotCi0gICAgdWludDh4OF90IGNvbXBvbmVudEEg
PSB2ZHVwX25fdTgoMHhGRik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxT
aXplOyBpICs9IDgpIHsKLSAgICAgICAgdWludDE2eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3Ux
Nihzb3VyY2UgKyBpKTsKLQotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91
MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDExKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21w
b25lbnRHID0gdnFtb3ZuX3UxNih2YW5kcV91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDUp
LCBpbW1lZGlhdGUweDNmKSk7Ci0gICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3Zu
X3UxNih2YW5kcV91MTYoZWlnaHRQaXhlbHMsIGltbWVkaWF0ZTB4MWYpKTsKLQotICAgICAgICBj
b21wb25lbnRSID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50UiwgMyksIHZhbmRfdTgoY29t
cG9uZW50UiwgaW1tZWRpYXRlMHg3KSk7Ci0gICAgICAgIGNvbXBvbmVudEcgPSB2b3JyX3U4KHZz
aGxfbl91OChjb21wb25lbnRHLCAyKSwgdmFuZF91OChjb21wb25lbnRHLCBpbW1lZGlhdGUweDMp
KTsKLSAgICAgICAgY29tcG9uZW50QiA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudEIsIDMp
LCB2YW5kX3U4KGNvbXBvbmVudEIsIGltbWVkaWF0ZTB4NykpOwotCi0gICAgICAgIHVpbnQ4eDh4
NF90IGRlc3RDb21wb25lbnRzID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRC
LCBjb21wb25lbnRBfX07Ci0gICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIGRlc3RDb21wb25l
bnRzKTsKLSAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7Ci0gICAgfQotCi0gICAgc291cmNlICs9
IHBpeGVsU2l6ZTsKLSAgICBwaXhlbHNQZXJSb3cgPSB0YWlsUGl4ZWxzOwotfQotCi1BTFdBWVNf
SU5MSU5FIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjUoY29uc3QgdWlu
dDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1Bl
clJvdykKLXsKLSAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICog
NDsKLSAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsK
LSAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29t
cG9uZW50czsKLSAgICB1aW50OF90KiBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihk
ZXN0aW5hdGlvbik7Ci0KLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmOCA9IHZkdXBfbl91OCgw
eEY4KTsKLSAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgxYyA9IHZkdXBfbl91OCgweDFDKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKLSAg
ICAgICAgdWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOwotCi0gICAgICAg
IHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4
ZjgpOwotICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50R0xlZnQgPSB2c2hyX25fdTgoUkdCQTgu
dmFsWzFdLCA1KTsKLSAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEdSaWdodCA9IHZzaGxfbl91
OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHgxYyksIDMpOwotICAgICAgICB1aW50
OHg4X3QgY29tcG9uZW50QiA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRp
YXRlMHhmOCksIDMpOwotCi0gICAgICAgIHVpbnQ4eDh4Ml90IFJHQjU2NTsKLSAgICAgICAgUkdC
NTY1LnZhbFswXSA9IHZvcnJfdTgoY29tcG9uZW50R1JpZ2h0LCBjb21wb25lbnRCKTsKLSAgICAg
ICAgUkdCNTY1LnZhbFsxXSA9IHZvcnJfdTgoY29tcG9uZW50UiwgY29tcG9uZW50R0xlZnQpOwot
ICAgICAgICB2c3QyX3U4KGRzdCwgUkdCNTY1KTsKLSAgICAgICAgZHN0ICs9IDE2OwotICAgIH0K
LQotICAgIHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKLSAgICBkZXN0aW5hdGlvbiArPSBjb21w
b25lbnRzU2l6ZSAvIDQ7Ci0gICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0Owot
fQotCi19IC8vIG5hbWVzcGFjZSBTSU1ECi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKLQotI2VuZGlmIC8vIEdyYXBoaWNzQ29u
dGV4dDNETkVPTl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jcHUvYXJtL0dyYXBoaWNzQ29udGV4dEdMTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRleHRHTE5FT04uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
OTlhYzQ0NGUxOWQ0MzZjZTJhYWE1NGNhYzlkYzAwN2M0OWU2YmU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9HcmFwaGljc0NvbnRl
eHRHTE5FT04uaApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
YWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQorCisjaW5jbHVkZSA8YXJtX25lb24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgU0lNRCB7CisKK0FMV0FZU19JTkxJTkUgdm9pZCB1bnBhY2tPbmVSb3dPZlJHQkExNkxp
dHRsZVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlv
biwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVy
Um93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNv
bXBvbmVudHNQZXJSb3cgJSAxNjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBv
bmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKyAgICBjb25zdCB1aW50OF90KiBzcmMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2UpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDE2KSB7CisgICAgICAgIHVpbnQ4
eDE2eDJfdCBjb21wb25lbnRzID0gdmxkMnFfdTgoc3JjICsgaSAqIDIpOworICAgICAgICB2c3Qx
cV91OChkZXN0aW5hdGlvbiArIGksIGNvbXBvbmVudHMudmFsWzFdKTsKKyAgICB9CisKKyAgICBz
b3VyY2UgKz0gY29tcG9uZW50c1NpemU7CisgICAgZGVzdGluYXRpb24gKz0gY29tcG9uZW50c1Np
emU7CisgICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgdW5wYWNrT25lUm93T2ZSR0IxNkxpdHRsZVRvUkdCQTgoY29uc3QgdWludDE2
X3QqJiBzb3VyY2UsIHVpbnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJv
dykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogMzsK
KyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAyNDsKKyAg
ICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9u
ZW50czsKKworICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdmR1cF9uX3U4KDB4RkYpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21wb25lbnRzU2l6ZTsgaSArPSAyNCkgeworICAg
ICAgICB1aW50MTZ4OHgzX3QgUkdCMTYgPSB2bGQzcV91MTYoc291cmNlICsgaSk7CisgICAgICAg
IHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihSR0IxNi52YWxb
MF0sIDgpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2KHZzaHJx
X25fdTE2KFJHQjE2LnZhbFsxXSwgOCkpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9
IHZxbW92bl91MTYodnNocnFfbl91MTYoUkdCMTYudmFsWzJdLCA4KSk7CisgICAgICAgIHVpbnQ4
eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21w
b25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIFJHQkE4KTsKKyAgICAgICAg
ZGVzdGluYXRpb24gKz0gMzI7CisgICAgfQorCisgICAgc291cmNlICs9IGNvbXBvbmVudHNTaXpl
OworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gMzsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIHVucGFja09uZVJvd09mQVJHQjE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZf
dComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93
KQoreworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cgKiA0Owor
ICAgIHVuc2lnbmVkIHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMyOworICAg
IHVuc2lnbmVkIGNvbXBvbmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxDb21wb25l
bnRzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9
IDMyKSB7CisgICAgICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291cmNlICsg
aSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hycV9uX3Ux
NihBUkdCMTYudmFsWzBdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFt
b3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJdLCA4KSk7
CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihB
UkdCMTYudmFsWzNdLCA4KSk7CisgICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25l
bnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRf
dTgoZGVzdGluYXRpb24gKyBpLCBSR0JBOCk7CisgICAgfQorCisgICAgc291cmNlICs9IGNvbXBv
bmVudHNTaXplOworICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOworICAgIHBpeGVs
c1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHVu
cGFja09uZVJvd09mQkdSQTE2TGl0dGxlVG9SR0JBOChjb25zdCB1aW50MTZfdComIHNvdXJjZSwg
dWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4ZWxzUGVyUm93KQoreworICAgIHVu
c2lnbmVkIGNvbXBvbmVudHNQZXJSb3cgPSBwaXhlbHNQZXJSb3cgKiA0OworICAgIHVuc2lnbmVk
IHRhaWxDb21wb25lbnRzID0gY29tcG9uZW50c1BlclJvdyAlIDMyOworICAgIHVuc2lnbmVkIGNv
bXBvbmVudHNTaXplID0gY29tcG9uZW50c1BlclJvdyAtIHRhaWxDb21wb25lbnRzOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbXBvbmVudHNTaXplOyBpICs9IDMyKSB7CisgICAg
ICAgIHVpbnQxNng4eDRfdCBBUkdCMTYgPSB2bGQ0cV91MTYoc291cmNlICsgaSk7CisgICAgICAg
IHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFs
WzBdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRHID0gdnFtb3ZuX3UxNih2c2hy
cV9uX3UxNihBUkdCMTYudmFsWzFdLCA4KSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRS
ID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzJdLCA4KSk7CisgICAgICAgIHVp
bnQ4eDhfdCBjb21wb25lbnRBID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihBUkdCMTYudmFsWzNd
LCA4KSk7CisgICAgICAgIHVpbnQ4eDh4NF90IFJHQkE4ID0ge3tjb21wb25lbnRSLCBjb21wb25l
bnRHLCBjb21wb25lbnRCLCBjb21wb25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRp
b24gKyBpLCBSR0JBOCk7CisgICAgfQorCisgICAgc291cmNlICs9IGNvbXBvbmVudHNTaXplOwor
ICAgIGRlc3RpbmF0aW9uICs9IGNvbXBvbmVudHNTaXplOworICAgIHBpeGVsc1BlclJvdyA9IHRh
aWxDb21wb25lbnRzIC8gNDsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09m
UkdCQTQ0NDRUb1JHQkE4KGNvbnN0IHVpbnQxNl90KiYgc291cmNlLCB1aW50OF90KiYgZGVzdGlu
YXRpb24sIHVuc2lnbmVkJiBwaXhlbHNQZXJSb3cpCit7CisgICAgdW5zaWduZWQgdGFpbFBpeGVs
cyA9IHBpeGVsc1BlclJvdyAlIDg7CisgICAgdW5zaWduZWQgcGl4ZWxTaXplID0gcGl4ZWxzUGVy
Um93IC0gdGFpbFBpeGVsczsKKworICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgwZiA9IHZkdXBx
X25fdTE2KDB4MEYpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkg
Kz0gOCkgeworICAgICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJj
ZSArIGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hy
cV9uX3UxNihlaWdodFBpeGVscywgMTIpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcg
PSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgOCksIGltbWVk
aWF0ZTB4MGYpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2KHZh
bmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNCksIGltbWVkaWF0ZTB4MGYpKTsKKyAg
ICAgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihlaWdodFBp
eGVscywgaW1tZWRpYXRlMHgwZikpOworCisgICAgICAgIGNvbXBvbmVudFIgPSB2b3JyX3U4KHZz
aGxfbl91OChjb21wb25lbnRSLCA0KSwgY29tcG9uZW50Uik7CisgICAgICAgIGNvbXBvbmVudEcg
PSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRHLCA0KSwgY29tcG9uZW50Ryk7CisgICAgICAg
IGNvbXBvbmVudEIgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRCLCA0KSwgY29tcG9uZW50
Qik7CisgICAgICAgIGNvbXBvbmVudEEgPSB2b3JyX3U4KHZzaGxfbl91OChjb21wb25lbnRBLCA0
KSwgY29tcG9uZW50QSk7CisKKyAgICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7
e2NvbXBvbmVudFIsIGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsKKyAgICAg
ICAgdnN0NF91OChkZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOworICAgICAgICBkZXN0aW5h
dGlvbiArPSAzMjsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOworICAgIHBpeGVs
c1BlclJvdyA9IHRhaWxQaXhlbHM7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBwYWNrT25lUm93
T2ZSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDQoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2
X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25l
ZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWls
Q29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1bnNpZ25lZCBjb21wb25l
bnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKworICAgIHVpbnQ4
X3QqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsKKyAgICB1
aW50OHg4X3QgaW1tZWRpYXRlMHhmMCA9IHZkdXBfbl91OCgweEYwKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKKyAgICAgICAgdWludDh4
OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOworCisgICAgICAgIHVpbnQ4eDhfdCBj
b21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4ZjApOworICAgICAg
ICB1aW50OHg4X3QgY29tcG9uZW50RyA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwg
aW1tZWRpYXRlMHhmMCksIDQpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZhbmRf
dTgoUkdCQTgudmFsWzJdLCBpbW1lZGlhdGUweGYwKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBv
bmVudEEgPSB2c2hyX25fdTgodmFuZF91OChSR0JBOC52YWxbM10sIGltbWVkaWF0ZTB4ZjApLCA0
KTsKKworICAgICAgICB1aW50OHg4eDJfdCBSR0JBNDsKKyAgICAgICAgUkdCQTQudmFsWzBdID0g
dm9ycl91OChjb21wb25lbnRCLCBjb21wb25lbnRBKTsKKyAgICAgICAgUkdCQTQudmFsWzFdID0g
dm9ycl91OChjb21wb25lbnRSLCBjb21wb25lbnRHKTsKKyAgICAgICAgdnN0Ml91OChkc3QsIFJH
QkE0KTsKKyAgICAgICAgZHN0ICs9IDE2OworICAgIH0KKworICAgIHNvdXJjZSArPSBjb21wb25l
bnRzU2l6ZTsKKyAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRzU2l6ZSAvIDQ7CisgICAgcGl4
ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
dW5wYWNrT25lUm93T2ZSR0JBNTU1MVRvUkdCQTgoY29uc3QgdWludDE2X3QqJiBzb3VyY2UsIHVp
bnQ4X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNp
Z25lZCB0YWlsUGl4ZWxzID0gcGl4ZWxzUGVyUm93ICUgODsKKyAgICB1bnNpZ25lZCBwaXhlbFNp
emUgPSBwaXhlbHNQZXJSb3cgLSB0YWlsUGl4ZWxzOworCisgICAgdWludDh4OF90IGltbWVkaWF0
ZTB4NyA9IHZkdXBfbl91OCgweDcpOworICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUweGZmID0gdmR1
cF9uX3U4KDB4RkYpOworICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxZiA9IHZkdXBxX25fdTE2
KDB4MUYpOworICAgIHVpbnQxNng4X3QgaW1tZWRpYXRlMHgxID0gdmR1cHFfbl91MTYoMHgxKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaXhlbFNpemU7IGkgKz0gOCkgeworICAg
ICAgICB1aW50MTZ4OF90IGVpZ2h0UGl4ZWxzID0gdmxkMXFfdTE2KHNvdXJjZSArIGkpOworCisg
ICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRSID0gdnFtb3ZuX3UxNih2c2hycV9uX3UxNihlaWdo
dFBpeGVscywgMTEpKTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEcgPSB2cW1vdm5fdTE2
KHZhbmRxX3UxNih2c2hycV9uX3UxNihlaWdodFBpeGVscywgNiksIGltbWVkaWF0ZTB4MWYpKTsK
KyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEIgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNih2c2hy
cV9uX3UxNihlaWdodFBpeGVscywgMSksIGltbWVkaWF0ZTB4MWYpKTsKKyAgICAgICAgdWludDh4
OF90IGNvbXBvbmVudEEgPSB2cW1vdm5fdTE2KHZhbmRxX3UxNihlaWdodFBpeGVscywgaW1tZWRp
YXRlMHgxKSk7CisKKyAgICAgICAgY29tcG9uZW50UiA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBv
bmVudFIsIDMpLCB2YW5kX3U4KGNvbXBvbmVudFIsIGltbWVkaWF0ZTB4NykpOworICAgICAgICBj
b21wb25lbnRHID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50RywgMyksIHZhbmRfdTgoY29t
cG9uZW50RywgaW1tZWRpYXRlMHg3KSk7CisgICAgICAgIGNvbXBvbmVudEIgPSB2b3JyX3U4KHZz
aGxfbl91OChjb21wb25lbnRCLCAzKSwgdmFuZF91OChjb21wb25lbnRCLCBpbW1lZGlhdGUweDcp
KTsKKyAgICAgICAgY29tcG9uZW50QSA9IHZtdWxfdTgoY29tcG9uZW50QSwgaW1tZWRpYXRlMHhm
Zik7CisKKyAgICAgICAgdWludDh4OHg0X3QgZGVzdENvbXBvbmVudHMgPSB7e2NvbXBvbmVudFIs
IGNvbXBvbmVudEcsIGNvbXBvbmVudEIsIGNvbXBvbmVudEF9fTsKKyAgICAgICAgdnN0NF91OChk
ZXN0aW5hdGlvbiwgZGVzdENvbXBvbmVudHMpOworICAgICAgICBkZXN0aW5hdGlvbiArPSAzMjsK
KyAgICB9CisKKyAgICBzb3VyY2UgKz0gcGl4ZWxTaXplOworICAgIHBpeGVsc1BlclJvdyA9IHRh
aWxQaXhlbHM7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvVW5z
aWduZWRTaG9ydDU1NTEoY29uc3QgdWludDhfdComIHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5h
dGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykKK3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRz
UGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAgICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9
IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNv
bXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50czsKKworICAgIHVpbnQ4X3QqIGRzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uKTsKKworICAgIHVpbnQ4eDhfdCBp
bW1lZGlhdGUweGY4ID0gdmR1cF9uX3U4KDB4RjgpOworICAgIHVpbnQ4eDhfdCBpbW1lZGlhdGUw
eDE4ID0gdmR1cF9uX3U4KDB4MTgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21w
b25lbnRzU2l6ZTsgaSArPSAzMikgeworICAgICAgICB1aW50OHg4eDRfdCBSR0JBOCA9IHZsZDRf
dTgoc291cmNlICsgaSk7CisKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudFIgPSB2YW5kX3U4
KFJHQkE4LnZhbFswXSwgaW1tZWRpYXRlMHhmOCk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25l
bnRHM2JpdCA9IHZzaHJfbl91OChSR0JBOC52YWxbMV0sIDUpOworCisgICAgICAgIHVpbnQ4eDhf
dCBjb21wb25lbnRHMmJpdCA9IHZzaGxfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRp
YXRlMHgxOCksIDMpOworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50QiA9IHZzaHJfbl91OCh2
YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhmOCksIDIpOworICAgICAgICB1aW50OHg4
X3QgY29tcG9uZW50QSA9IHZzaHJfbl91OChSR0JBOC52YWxbM10sIDcpOworCisgICAgICAgIHVp
bnQ4eDh4Ml90IFJHQkE1NTUxOworICAgICAgICBSR0JBNTU1MS52YWxbMF0gPSB2b3JyX3U4KHZv
cnJfdTgoY29tcG9uZW50RzJiaXQsIGNvbXBvbmVudEIpLCBjb21wb25lbnRBKTsKKyAgICAgICAg
UkdCQTU1NTEudmFsWzFdID0gdm9ycl91OChjb21wb25lbnRSLCBjb21wb25lbnRHM2JpdCk7Cisg
ICAgICAgIHZzdDJfdTgoZHN0LCBSR0JBNTU1MSk7CisgICAgICAgIGRzdCArPSAxNjsKKyAgICB9
CisKKyAgICBzb3VyY2UgKz0gY29tcG9uZW50c1NpemU7CisgICAgZGVzdGluYXRpb24gKz0gY29t
cG9uZW50c1NpemUgLyA0OworICAgIHBpeGVsc1BlclJvdyA9IHRhaWxDb21wb25lbnRzIC8gNDsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIHVucGFja09uZVJvd09mUkdCNTY1VG9SR0JBOChjb25z
dCB1aW50MTZfdComIHNvdXJjZSwgdWludDhfdComIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCYgcGl4
ZWxzUGVyUm93KQoreworICAgIHVuc2lnbmVkIHRhaWxQaXhlbHMgPSBwaXhlbHNQZXJSb3cgJSA4
OworICAgIHVuc2lnbmVkIHBpeGVsU2l6ZSA9IHBpeGVsc1BlclJvdyAtIHRhaWxQaXhlbHM7CisK
KyAgICB1aW50MTZ4OF90IGltbWVkaWF0ZTB4M2YgPSB2ZHVwcV9uX3UxNigweDNGKTsKKyAgICB1
aW50MTZ4OF90IGltbWVkaWF0ZTB4MWYgPSB2ZHVwcV9uX3UxNigweDFGKTsKKyAgICB1aW50OHg4
X3QgaW1tZWRpYXRlMHgzID0gdmR1cF9uX3U4KDB4Myk7CisgICAgdWludDh4OF90IGltbWVkaWF0
ZTB4NyA9IHZkdXBfbl91OCgweDcpOworCisgICAgdWludDh4OF90IGNvbXBvbmVudEEgPSB2ZHVw
X25fdTgoMHhGRik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGl4ZWxTaXplOyBp
ICs9IDgpIHsKKyAgICAgICAgdWludDE2eDhfdCBlaWdodFBpeGVscyA9IHZsZDFxX3UxNihzb3Vy
Y2UgKyBpKTsKKworICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50UiA9IHZxbW92bl91MTYodnNo
cnFfbl91MTYoZWlnaHRQaXhlbHMsIDExKSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRH
ID0gdnFtb3ZuX3UxNih2YW5kcV91MTYodnNocnFfbl91MTYoZWlnaHRQaXhlbHMsIDUpLCBpbW1l
ZGlhdGUweDNmKSk7CisgICAgICAgIHVpbnQ4eDhfdCBjb21wb25lbnRCID0gdnFtb3ZuX3UxNih2
YW5kcV91MTYoZWlnaHRQaXhlbHMsIGltbWVkaWF0ZTB4MWYpKTsKKworICAgICAgICBjb21wb25l
bnRSID0gdm9ycl91OCh2c2hsX25fdTgoY29tcG9uZW50UiwgMyksIHZhbmRfdTgoY29tcG9uZW50
UiwgaW1tZWRpYXRlMHg3KSk7CisgICAgICAgIGNvbXBvbmVudEcgPSB2b3JyX3U4KHZzaGxfbl91
OChjb21wb25lbnRHLCAyKSwgdmFuZF91OChjb21wb25lbnRHLCBpbW1lZGlhdGUweDMpKTsKKyAg
ICAgICAgY29tcG9uZW50QiA9IHZvcnJfdTgodnNobF9uX3U4KGNvbXBvbmVudEIsIDMpLCB2YW5k
X3U4KGNvbXBvbmVudEIsIGltbWVkaWF0ZTB4NykpOworCisgICAgICAgIHVpbnQ4eDh4NF90IGRl
c3RDb21wb25lbnRzID0ge3tjb21wb25lbnRSLCBjb21wb25lbnRHLCBjb21wb25lbnRCLCBjb21w
b25lbnRBfX07CisgICAgICAgIHZzdDRfdTgoZGVzdGluYXRpb24sIGRlc3RDb21wb25lbnRzKTsK
KyAgICAgICAgZGVzdGluYXRpb24gKz0gMzI7CisgICAgfQorCisgICAgc291cmNlICs9IHBpeGVs
U2l6ZTsKKyAgICBwaXhlbHNQZXJSb3cgPSB0YWlsUGl4ZWxzOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgcGFja09uZVJvd09mUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjUoY29uc3QgdWludDhfdCom
IHNvdXJjZSwgdWludDE2X3QqJiBkZXN0aW5hdGlvbiwgdW5zaWduZWQmIHBpeGVsc1BlclJvdykK
K3sKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUm93ID0gcGl4ZWxzUGVyUm93ICogNDsKKyAg
ICB1bnNpZ25lZCB0YWlsQ29tcG9uZW50cyA9IGNvbXBvbmVudHNQZXJSb3cgJSAzMjsKKyAgICB1
bnNpZ25lZCBjb21wb25lbnRzU2l6ZSA9IGNvbXBvbmVudHNQZXJSb3cgLSB0YWlsQ29tcG9uZW50
czsKKyAgICB1aW50OF90KiBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkZXN0aW5h
dGlvbik7CisKKyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHhmOCA9IHZkdXBfbl91OCgweEY4KTsK
KyAgICB1aW50OHg4X3QgaW1tZWRpYXRlMHgxYyA9IHZkdXBfbl91OCgweDFDKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tcG9uZW50c1NpemU7IGkgKz0gMzIpIHsKKyAgICAgICAg
dWludDh4OHg0X3QgUkdCQTggPSB2bGQ0X3U4KHNvdXJjZSArIGkpOworCisgICAgICAgIHVpbnQ4
eDhfdCBjb21wb25lbnRSID0gdmFuZF91OChSR0JBOC52YWxbMF0sIGltbWVkaWF0ZTB4ZjgpOwor
ICAgICAgICB1aW50OHg4X3QgY29tcG9uZW50R0xlZnQgPSB2c2hyX25fdTgoUkdCQTgudmFsWzFd
LCA1KTsKKyAgICAgICAgdWludDh4OF90IGNvbXBvbmVudEdSaWdodCA9IHZzaGxfbl91OCh2YW5k
X3U4KFJHQkE4LnZhbFsxXSwgaW1tZWRpYXRlMHgxYyksIDMpOworICAgICAgICB1aW50OHg4X3Qg
Y29tcG9uZW50QiA9IHZzaHJfbl91OCh2YW5kX3U4KFJHQkE4LnZhbFsyXSwgaW1tZWRpYXRlMHhm
OCksIDMpOworCisgICAgICAgIHVpbnQ4eDh4Ml90IFJHQjU2NTsKKyAgICAgICAgUkdCNTY1LnZh
bFswXSA9IHZvcnJfdTgoY29tcG9uZW50R1JpZ2h0LCBjb21wb25lbnRCKTsKKyAgICAgICAgUkdC
NTY1LnZhbFsxXSA9IHZvcnJfdTgoY29tcG9uZW50UiwgY29tcG9uZW50R0xlZnQpOworICAgICAg
ICB2c3QyX3U4KGRzdCwgUkdCNTY1KTsKKyAgICAgICAgZHN0ICs9IDE2OworICAgIH0KKworICAg
IHNvdXJjZSArPSBjb21wb25lbnRzU2l6ZTsKKyAgICBkZXN0aW5hdGlvbiArPSBjb21wb25lbnRz
U2l6ZSAvIDQ7CisgICAgcGl4ZWxzUGVyUm93ID0gdGFpbENvbXBvbmVudHMgLyA0OworfQorCit9
IC8vIG5hbWVzcGFjZSBTSU1ECisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L1RleHR1cmVDYWNoZUNWLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5oCmluZGV4IGM5ZmY0MTlkNDNiZTQ1ZjQw
NDQwMzA0MGFkZDhjNGQwNDQwMmJhMmYuLjQ2M2QwNjFkMjUzOWZmMjI2NzRjNWI4MDc5ZmQxZGVj
MGNhNmYyZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2
L1RleHR1cmVDYWNoZUNWLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvVGV4dHVyZUNhY2hlQ1YuaApAQCAtNDEsMTIgKzQxLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9f
Q1ZPcGVuR0xFU1RleHR1cmVDYWNoZSAqQ1ZPcGVuR0xFU1RleHR1cmVDYWNoZVJlZjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOwogCiBjbGFzcyBUZXh0dXJlQ2FjaGVDViA6IHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxUZXh0dXJlQ2FjaGVDVj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZUNhY2hlQ1Y+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCYpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGV4
dHVyZUNhY2hlQ1Y+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYpOwogCiAjaWYgVVNF
KE9QRU5HTF9FUykKICAgICB1c2luZyBUZXh0dXJlQ2FjaGVUeXBlID0gQ1ZPcGVuR0xFU1RleHR1
cmVDYWNoZVJlZjsKQEAgLTU2LDEzICs1NiwxMyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgVGV4dHVy
ZVR5cGUgPSBDVk9wZW5HTFRleHR1cmVSZWY7CiAjZW5kaWYKIAotICAgIFRleHR1cmVDYWNoZUNW
KEdyYXBoaWNzQ29udGV4dDNEJiwgUmV0YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYpOworICAg
IFRleHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgUmV0YWluUHRyPFRleHR1
cmVDYWNoZVR5cGU+JiYpOwogCiAgICAgUmV0YWluUHRyPFRleHR1cmVUeXBlPiB0ZXh0dXJlRnJv
bUltYWdlKENWUGl4ZWxCdWZmZXJSZWYsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRl
eHQuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCgpIHsgcmV0
dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIFJlZjxHcmFwaGljc0NvbnRl
eHQzRD4gbV9jb250ZXh0OworICAgIFJlZjxHcmFwaGljc0NvbnRleHRHTE9wZW5HTD4gbV9jb250
ZXh0OwogICAgIFJldGFpblB0cjxUZXh0dXJlQ2FjaGVUeXBlPiBtX2NhY2hlOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hl
Q1YubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVD
Vi5tbQppbmRleCBmNTJmZTNkYThlOWJlZjY3ZGJjNDk2MDVmY2E3OWNlNDY5NDM0YzM2Li40OWNi
NjVlN2UwZDE2ZjA2NmMxNjBkNTIxN2M5NzRiNjI3NGU5YTgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtMjgs
MjAgKzI4LDIwIEBACiAKICNpZiBIQVZFKENPUkVfVklERU8pCiAKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAKICNp
bmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4gVGV4dHVyZUNhY2hlQ1Y6OmNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCYgY29udGV4dCkKK3N0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4g
VGV4dHVyZUNhY2hlQ1Y6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkK
IHsKICAgICBUZXh0dXJlQ2FjaGVUeXBlIGNhY2hlID0gbnVsbHB0cjsKICNpZiBVU0UoT1BFTkdM
X0VTKQotICAgIENWRUFHTENvbnRleHQgZWFnbENvbnRleHQgPSBzdGF0aWNfY2FzdDxDVkVBR0xD
b250ZXh0Pihjb250ZXh0LnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgQ1ZFQUdM
Q29udGV4dCBlYWdsQ29udGV4dCA9IHN0YXRpY19jYXN0PENWRUFHTENvbnRleHQ+KGNvbnRleHQu
cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpKTsKICAgICBDVlJldHVybiBlcnJvciA9IENWT3Bl
bkdMRVNUZXh0dXJlQ2FjaGVDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgZWFn
bENvbnRleHQsIG51bGxwdHIsICZjYWNoZSk7CiAjZWxpZiBVU0UoT1BFTkdMKQotICAgIENHTENv
bnRleHRPYmogY2dsQ29udGV4dCA9IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KGNvbnRleHQu
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRl
eHQgPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihjb250ZXh0LnBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0R0woKSk7CiAgICAgQ1ZSZXR1cm4gZXJyb3IgPSBDVk9wZW5HTFRleHR1cmVDYWNoZUNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBjZ2xDb250ZXh0LCBDR0xHZXRQaXhl
bEZvcm1hdChjZ2xDb250ZXh0KSwgbnVsbHB0ciwgJmNhY2hlKTsKICNlbGlmIFVTRShBTkdMRSkK
ICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gZG8gdGhpcyBpbnRlZ3JhdGluZyB2aWEg
QU5HTEUuCkBAIC01NSw3ICs1NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4g
VGV4dHVyZUNhY2hlQ1Y6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCYgY29udGV4CiAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8VGV4dHVyZUNhY2hlQ1Y+KGNvbnRleHQsIFdURk1vdmUoc3Ryb25nQ2Fj
aGUpKTsKIH0KIAotVGV4dHVyZUNhY2hlQ1Y6OlRleHR1cmVDYWNoZUNWKEdyYXBoaWNzQ29udGV4
dDNEJiBjb250ZXh0LCBSZXRhaW5QdHI8VGV4dHVyZUNhY2hlVHlwZT4mJiBjYWNoZSkKK1RleHR1
cmVDYWNoZUNWOjpUZXh0dXJlQ2FjaGVDVihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4
dCwgUmV0YWluUHRyPFRleHR1cmVDYWNoZVR5cGU+JiYgY2FjaGUpCiAgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKICAgICAsIG1fY2FjaGUoY2FjaGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5jcHAK
aW5kZXggZGRkOGE4MmY5YTAyYmY5OTFhNmI4ZGM0ZWZmMGZlMjc0NDM3MmY1MS4uZjk5ZmU4ZTA2
ZmY3OGUwM2M2NzYzM2U5ODFiOTYyNzNmMWNlODMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNw
cApAQCAtMzc2LDkgKzM3Niw5IEBAIHN0YXRpYyBjb25zdCBWZWN0b3I8R0xmbG9hdD4gWUNiQ3JU
b1JHQk1hdHJpeEZvclJhbmdlQW5kVHJhbnNmZXJGdW5jdGlvbihQaXhlbFJhCiB9CiAjZW5kaWYg
Ly8gSEFWRShJT1NVUkZBQ0UpCiAKLVZpZGVvVGV4dHVyZUNvcGllckNWOjpWaWRlb1RleHR1cmVD
b3BpZXJDVihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCkKK1ZpZGVvVGV4dHVyZUNvcGllckNW
OjpWaWRlb1RleHR1cmVDb3BpZXJDVihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCkK
ICAgICA6IG1fc2hhcmVkQ29udGV4dChjb250ZXh0KQotICAgICwgbV9jb250ZXh0KEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVTaGFyZWQoY29udGV4dCkpCisgICAgLCBtX2NvbnRleHQoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYXJlZChjb250ZXh0KSkKICAgICAsIG1fZnJhbWVi
dWZmZXIoY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcigpKQogewogfQpAQCAtNDA0LDYyICs0MDQs
NjIgQEAgc3RhdGljIFN0cmluZ01hcCYgZW51bVRvU3RyaW5nTWFwKCkKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nTWFwPiBtYXA7CiAgICAgaWYgKG1hcC5nZXQoKS5lbXB0eSgpKSB7
CiAgICAgICAgIFN0cmluZ01hcCBzdHJpbmdNYXA7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNl
KFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpKTsKLSAgICAgICAgbWFwLmdl
dCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKTsKLSAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRV9BTFBIQSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5l
bXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQSkpOwotICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6Ujgp
KTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250
ZXh0M0Q6OlIxNkYpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0M0Q6OlIzMkYpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlI4VUkpKTsKLSAgICAgICAgbWFwLmdldCgp
LmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlI4SSkpOwotICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UjE2
VUkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0M0Q6OlIxNkkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OlIzMlVJKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNl
KFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSMzJJKSk7Ci0gICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSRzgpKTsKLSAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJHMTZGKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBo
aWNzQ29udGV4dDNEOjpSRzMyRikpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6Ukc4VUkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHOEkpKTsKLSAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMTZV
SSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHQzRDo6UkcxNkkpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHMzJVSSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkczMkkpKTsKLSAgICAgICAgbWFw
LmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjgpKTsK
LSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
M0Q6OlNSR0I4KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBOCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJ
TkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6U1JHQjhfQUxQSEE4KSk7Ci0gICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCkp
OwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHQzRDo6UkdCMTBfQTIpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2KSk7Ci0gICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01Q
T05FTlQyNCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMzJGKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5l
bXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSDI0X1NURU5DSUw4
KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSDMyRl9TVEVOQ0lMOCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6UkdCKSk7Ci0gICAgICAgIG1hcC5nZXQo
KS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSk7Ci0gICAg
ICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpM
VU1JTkFOQ0VfQUxQSEEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1w
bGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6QUxQSEEpKTsKLSAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFRCkp
OwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHQzRDo6UkdfSU5URUdFUikpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCkpOwotICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzUpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxh
Y2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEpKTsKLSAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEUpKTsKLSAgICAgICAg
bWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZf
RkxPQVQpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lG
WV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkpOwotICAgICAgICBtYXAu
Z2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQpKTsK
LSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0lOVCkpOwotICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHQzRDo6SU5UKSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBsYWNl
KFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMl8xMF8xMF8x
MF9SRVYpKTsKLSAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSk7Ci0gICAgICAgIG1hcC5nZXQoKS5lbXBs
YWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF8zMl9VTlNJR05FRF9J
TlRfMjRfOF9SRVYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0R0w6OlJHQikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJ
TkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkdCQSkpOworICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhB
KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dEdMOjpMVU1JTkFOQ0UpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkFMUEhBKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBs
YWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSOCkpOworICAgICAgICBtYXAu
Z2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjE2RikpOwor
ICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRH
TDo6UjMyRikpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFw
aGljc0NvbnRleHRHTDo6UjhVSSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJ
RllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjhJKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBs
YWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZVSSkpOworICAgICAgICBt
YXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UjE2SSkp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6UjMyVUkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0R0w6OlIzMkkpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHOCkpOworICAgICAgICBtYXAuZ2V0KCku
ZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkcxNkYpKTsKKyAgICAg
ICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJH
MzJGKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNz
Q29udGV4dEdMOjpSRzhVSSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHRHTDo6Ukc4SSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkcxNlVJKSk7CisgICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSRzE2SSkp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6UkczMlVJKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlS
KEdyYXBoaWNzQ29udGV4dEdMOjpSRzMySSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShT
VFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkdCOCkpOworICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6U1JHQjgpKTsKKyAg
ICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQkE4KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBo
aWNzQ29udGV4dEdMOjpTUkdCOF9BTFBIQTgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2Uo
U1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE0KSk7CisgICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IxMF9BMikp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfQ09NUE9ORU5UMTYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RS
SU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDI0KSk7CisgICAg
ICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9DT01QT05FTlQzMkYpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMjRfU1RFTkNJTDgpKTsKKyAgICAgICAgbWFw
LmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJG
X1NURU5DSUw4KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdy
YXBoaWNzQ29udGV4dEdMOjpSR0IpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5H
SUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEpKTsKKyAgICAgICAgbWFwLmdldCgpLmVt
cGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQSkp
OworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRl
eHRHTDo6TFVNSU5BTkNFKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9Q
QUlSKEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6UkVEKSk7CisgICAgICAgIG1hcC5n
ZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VS
KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dEdMOjpERVBUSF9TVEVOQ0lMKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklO
R0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSk7CisgICAgICAgIG1h
cC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9TSE9SVF81XzZfNSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJ
UihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfU0hPUlRfNF80XzRfNCkpOworICAgICAgICBt
YXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllf
UEFJUihHcmFwaGljc0NvbnRleHRHTDo6QllURSkpOworICAgICAgICBtYXAuZ2V0KCkuZW1wbGFj
ZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVCkpOworICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6RkxP
QVQpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIoR3JhcGhpY3ND
b250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUKSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNU
UklOR0lGWV9QQUlSKEdyYXBoaWNzQ29udGV4dEdMOjpTSE9SVCkpOworICAgICAgICBtYXAuZ2V0
KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5U
KSk7CisgICAgICAgIG1hcC5nZXQoKS5lbXBsYWNlKFNUUklOR0lGWV9QQUlSKEdyYXBoaWNzQ29u
dGV4dEdMOjpJTlQpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BBSVIo
R3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikpOworICAgICAg
ICBtYXAuZ2V0KCkuZW1wbGFjZShTVFJJTkdJRllfUEFJUihHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfSU5UXzI0XzgpKTsKKyAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZX1BB
SVIoR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVikpOwog
CiAjaWYgVVNFKE9QRU5HTF9FUykKICAgICAgICAgbWFwLmdldCgpLmVtcGxhY2UoU1RSSU5HSUZZ
X1BBSVIoR0xfUkVEX0lOVEVHRVIpKTsKQEAgLTUxNCwxMiArNTE0LDEyIEBAIGJvb2wgVmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0T2JqZWN0cygpCiAgICAgdmVydGV4U2hh
ZGVyU291cmNlLmFwcGVuZExpdGVyYWwoIiAgICBnbF9Qb3NpdGlvbiA9IGFfcG9zaXRpb247XG4i
KTsKICAgICB2ZXJ0ZXhTaGFkZXJTb3VyY2UuYXBwZW5kTGl0ZXJhbCgifVxuIik7CiAKLSAgICBQ
bGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHZl
cnRleFNoYWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dEdMOjpW
RVJURVhfU0hBREVSKTsKICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIs
IHZlcnRleFNoYWRlclNvdXJjZS50b1N0cmluZygpKTsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXJEaXJlY3QodmVydGV4U2hhZGVyKTsKIAogICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAg
IG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVydGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdih2ZXJ0
ZXhTaGFkZXIsIEdyYXBoaWNzQ29udGV4dEdMOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKICAg
ICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNW
Ojpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVmVydGV4IHNoYWRlciBm
YWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFk
ZXIodmVydGV4U2hhZGVyKTsKQEAgLTU2MSwxMSArNTYxLDExIEBAIGJvb2wgVmlkZW9UZXh0dXJl
Q29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0T2JqZWN0cygpCiAgICAgZnJhZ21lbnRTaGFkZXJT
b3VyY2UuYXBwZW5kTGl0ZXJhbCgiICAgIH1cbiIpOwogICAgIGZyYWdtZW50U2hhZGVyU291cmNl
LmFwcGVuZExpdGVyYWwoIn1cbiIpOwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNo
YWRlciA9IG1fY29udGV4dC0+Y3JlYXRlU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVO
VF9TSEFERVIpOworICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRl
eHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6RlJBR01FTlRfU0hBREVSKTsKICAg
ICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJT
b3VyY2UudG9TdHJpbmcoKSk7CiAgICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyRGlyZWN0KGZy
YWdtZW50U2hhZGVyKTsKIAotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoZnJhZ21lbnRTaGFk
ZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKKyAgICBtX2Nv
bnRleHQtPmdldFNoYWRlcml2KGZyYWdtZW50U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6Q09N
UElMRV9TVEFUVVMsICZ2YWx1ZSk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBMT0coV2Vi
R0wsICJWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKCVwKSAtIEZyYWdtZW50IHNoYWRlciBmYWlsZWQgdG8gY29tcGlsZS4iLCB0aGlzKTsKICAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKQEAgLTU3OCw3ICs1
NzgsNyBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplQ29udGV4dE9iamVj
dHMoKQogICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1fcHJvZ3JhbSwgZnJhZ21lbnRTaGFk
ZXIpOwogICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV9wcm9ncmFtKTsKIAotICAgIG1fY29u
dGV4dC0+Z2V0UHJvZ3JhbWl2KG1fcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RB
VFVTLCAmdmFsdWUpOworICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1fcHJvZ3JhbSwgR3Jh
cGhpY3NDb250ZXh0R0w6OkxJTktfU1RBVFVTLCAmdmFsdWUpOwogICAgIGlmICghdmFsdWUpIHsK
ICAgICAgICAgTE9HKFdlYkdMLCAiVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmNvcHlWaWRlb1RleHR1
cmVUb1BsYXRmb3JtVGV4dHVyZSglcCkgLSBQcm9ncmFtIGZhaWxlZCB0byBsaW5rLiIsIHRoaXMp
OwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwpAQCAtNjA2
LDggKzYwNiw4IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVyQ1Y6OmluaXRpYWxpemVDb250ZXh0
T2JqZWN0cygpCiAgICAgbV92ZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigp
OwogICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwgMSwgMSwgMSwgMSwg
LTEsIDEsIC0xLCAtMSB9OwogCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKGZsb2F0KSAq
IDEyLCB2ZXJ0aWNlcywgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0
ZXhCdWZmZXIpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHRHTDo6
QVJSQVlfQlVGRkVSLCBzaXplb2YoZmxvYXQpICogMTIsIHZlcnRpY2VzLCBHcmFwaGljc0NvbnRl
eHRHTDo6U1RBVElDX0RSQVcpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC02MzksMTIgKzYz
OSwxMiBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2Jq
ZWN0cygpCiAgICAgICAgICJ9XG4iX3MKICAgICB9OwogCi0gICAgUGxhdGZvcm0zRE9iamVjdCB2
ZXJ0ZXhTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX1NIQURFUik7CisgICAgUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhTaGFkZXIgPSBtX2Nv
bnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURFUik7CiAg
ICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UpOwogICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlckRpcmVjdCh2ZXJ0ZXhTaGFkZXIpOwog
CiAgICAgR0MzRGludCBzdGF0dXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVy
dGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZzdGF0dXMpOwor
ICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYodmVydGV4U2hhZGVyLCBHcmFwaGljc0NvbnRleHRH
TDo6Q09NUElMRV9TVEFUVVMsICZzdGF0dXMpOwogICAgIGlmICghc3RhdHVzKSB7CiAgICAgICAg
IExPRyhXZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2Jq
ZWN0cyglcCkgLSBWZXJ0ZXggc2hhZGVyIGZhaWxlZCB0byBjb21waWxlLiIsIHRoaXMpOwogICAg
ICAgICBtX2NvbnRleHQtPmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwpAQCAtNjc4LDExICs2
NzgsMTEgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9i
amVjdHMoKQogICAgICAgICAifVxuIl9zCiAgICAgfTsKIAotICAgIFBsYXRmb3JtM0RPYmplY3Qg
ZnJhZ21lbnRTaGFkZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVNoYWRlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBR01FTlRfU0hBREVSKTsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVy
ID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NI
QURFUik7CiAgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyU291cmNlKTsKICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXJEaXJlY3QoZnJh
Z21lbnRTaGFkZXIpOwogCi0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihmcmFnbWVudFNoYWRl
ciwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmc3RhdHVzKTsKKyAgICBtX2Nv
bnRleHQtPmdldFNoYWRlcml2KGZyYWdtZW50U2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6Q09N
UElMRV9TVEFUVVMsICZzdGF0dXMpOwogICAgIGlmICghc3RhdHVzKSB7CiAgICAgICAgIExPRyhX
ZWJHTCwgIlZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXplVVZDb250ZXh0T2JqZWN0cygl
cCkgLSBGcmFnbWVudCBzaGFkZXIgZmFpbGVkIHRvIGNvbXBpbGUuIiwgdGhpcyk7CiAgICAgICAg
IG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CkBAIC02OTUsNyArNjk1LDcg
QEAgYm9vbCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6aW5pdGlhbGl6ZVVWQ29udGV4dE9iamVjdHMo
KQogICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG1feXV2UHJvZ3JhbSwgZnJhZ21lbnRTaGFk
ZXIpOwogICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0obV95dXZQcm9ncmFtKTsKIAotICAgIG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWl2KG1feXV2UHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TktfU1RBVFVTLCAmc3RhdHVzKTsKKyAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihtX3l1dlBy
b2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMOjpMSU5LX1NUQVRVUywgJnN0YXR1cyk7CiAgICAgaWYg
KCFzdGF0dXMpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiVmlkZW9UZXh0dXJlQ29waWVyQ1Y6Omlu
aXRpYWxpemVVVkNvbnRleHRPYmplY3RzKCVwKSAtIFByb2dyYW0gZmFpbGVkIHRvIGxpbmsuIiwg
dGhpcyk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CkBA
IC03MjEsMTAgKzcyMSwxMCBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjppbml0aWFsaXpl
VVZDb250ZXh0T2JqZWN0cygpCiAgICAgbV95dXZWZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmNy
ZWF0ZUJ1ZmZlcigpOwogICAgIGZsb2F0IHZlcnRpY2VzWzEyXSA9IHsgLTEsIC0xLCAxLCAtMSwg
MSwgMSwgMSwgMSwgLTEsIDEsIC0xLCAtMSB9OwogCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1feXV2VmVydGV4QnVmZmVyKTsKLSAg
ICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
c2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJB
Vyk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpBUlJBWV9C
VUZGRVIsIG1feXV2VmVydGV4QnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3Jh
cGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgdmVydGljZXMs
IEdyYXBoaWNzQ29udGV4dEdMOjpTVEFUSUNfRFJBVyk7CiAgICAgbV9jb250ZXh0LT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24pOwotICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRp
b24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3l1dlBvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24s
IDIsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgZmFsc2UsIDAsIDApOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC03MzUsMTUgKzczNSwxNSBAQCB2b2lkKiBWaWRlb1RleHR1cmVDb3BpZXJD
Vjo6YXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaQog
ICAgIGF1dG8gZGlzcGxheSA9IG1fY29udGV4dC0+cGxhdGZvcm1EaXNwbGF5KCk7CiAgICAgRUdM
aW50IGVnbFRleHR1cmVUYXJnZXQgPSAwOwogCi0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCKQorICAgIGlmICh0YXJnZXQgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQikKICAgICAgICAgZWdsVGV4dHVyZVRh
cmdldCA9IEVHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRTsKLSAgICBlbHNlIGlmICh0YXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpCisgICAgZWxzZSBpZiAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJEKQogICAgICAgICBlZ2xUZXh0dXJlVGFyZ2V0
ID0gRUdMX1RFWFRVUkVfMkQ7CiAgICAgZWxzZSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlVua25v
d24gdGV4dHVyZSB0YXJnZXQgJWQuIiwgc3RhdGljX2Nhc3Q8aW50Pih0YXJnZXQpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIGlmIChlZ2xUZXh0dXJlVGFyZ2V0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpFR0xJT1N1cmZhY2VUZXh0dXJlVGFyZ2V0KSB7CisgICAgaWYgKGVn
bFRleHR1cmVUYXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0R0w6OkVHTElPU3VyZmFjZVRleHR1cmVU
YXJnZXQpIHsKICAgICAgICAgTE9HKFdlYkdMLCAiTWlzbWF0Y2ggaW4gRUdMIHRleHR1cmUgdGFy
Z2V0ICVkLiIsIHN0YXRpY19jYXN0PGludD4odGFyZ2V0KSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KQEAgLTgzMSwxOSArODMxLDE5IEBAIGJvb2wgVmlkZW9UZXh0dXJlQ29waWVy
Q1Y6OmNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJSZWYgaW1hZ2UsIHNp
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXIpOworICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9mcmFt
ZWJ1ZmZlcik7CiAKICAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQgdGV4dHVy
ZS4KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRERpcmVj
dChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOwotCi0gICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKLSAgICBHQzNEZW51bSBzdGF0dXMgPSBt
X2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9DT01QTEVURSkgeworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFS
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
R0w6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhJ
bWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBsZXZlbCwgaW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7CisKKyAg
ICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSwgbGV2ZWwpOworICAgIEdDM0RlbnVt
IHN0YXR1cyA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRl
eHRHTDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250ZXh0R0w6
OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVvVGV4dHVy
ZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0gVW5hYmxl
IHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTg1OCw1MCArODU4LDUwIEBAIGJvb2wgVmlkZW9U
ZXh0dXJlQ29waWVyQ1Y6OmNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4ZWxCdWZmZXJS
ZWYgaW1hZ2UsIHNpCiAgICAgYXV0byB1dlBsYW5lSGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0
T2ZQbGFuZShzdXJmYWNlLCAxKTsKIAogI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR0MzRGVudW0g
dmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ7CisgICAg
R0MzRGVudW0gdmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
MkQ7CiAjZWxpZiBVU0UoT1BFTkdMKQotICAgIEdDM0RlbnVtIHZpZGVvVGV4dHVyZVRhcmdldCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkI7CisgICAgR0MzRGVudW0g
dmlkZW9UZXh0dXJlVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfUkVDVEFOR0xF
X0FSQjsKICNlbGlmIFVTRShBTkdMRSkKLSAgICBHQzNEZW51bSB2aWRlb1RleHR1cmVUYXJnZXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6SU9TdXJmYWNlVGV4dHVyZVRhcmdldDsKKyAgICBHQzNEZW51
bSB2aWRlb1RleHR1cmVUYXJnZXQgPSBHcmFwaGljc0NvbnRleHRHTDo6SU9TdXJmYWNlVGV4dHVy
ZVRhcmdldDsKICNlbHNlCiAjZXJyb3IgVW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbgogI2VuZGlm
CiAgICAgYXV0byB1dlRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBt
X2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKKyAg
ICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUxKTsK
ICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgdXZUZXh0dXJl
KTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElO
RUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFw
aGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlk
ZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
dmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdy
YXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKICNpZiBVU0UoQU5HTEUpCi0g
ICAgYXV0byB1dkhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVU
YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CisgICAgYXV0
byB1dkhhbmRsZSA9IGF0dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQs
IEdyYXBoaWNzQ29udGV4dEdMOjpSRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0LCBHcmFw
aGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSk7CiAgICAgaWYgKCF1dkhh
bmRsZSkgewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbHNlCi0gICAgaWYgKCFtX2NvbnRleHQtPnRl
eEltYWdlSU9TdXJmYWNlMkQodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
UkcsIHV2UGxhbmVXaWR0aCwgdXZQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMSkpIHsKKyAgICBpZiAo
IW1fY29udGV4dC0+dGV4SW1hZ2VJT1N1cmZhY2UyRCh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBo
aWNzQ29udGV4dEdMOjpSRywgdXZQbGFuZVdpZHRoLCB1dlBsYW5lSGVpZ2h0LCBHcmFwaGljc0Nv
bnRleHRHTDo6UkcsIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFLCBzdXJmYWNlLCAx
KSkgewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodXZUZXh0dXJlKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbmRpZiAvLyBVU0UoQU5HTEUpCiAKICAgICBhdXRv
IHlUZXh0dXJlID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgbV9jb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFMCk7CiAgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIHlUZXh0dXJlKTsKLSAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdF
KTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0
LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHRH
TDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFy
Z2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRl
eHRHTDo6TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJl
VGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dEdMOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9U
ZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKICNpZiBVU0UoQU5HTEUpCi0gICAgYXV0byB5SGFu
ZGxlID0gYXR0YWNoSU9TdXJmYWNlVG9UZXh0dXJlKHZpZGVvVGV4dHVyZVRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFRCwgeVBsYW5lV2lkdGgsIHlQbGFuZUhlaWdodCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApOworICAgIGF1dG8geUhhbmRsZSA9IGF0
dGFjaElPU3VyZmFjZVRvVGV4dHVyZSh2aWRlb1RleHR1cmVUYXJnZXQsIEdyYXBoaWNzQ29udGV4
dEdMOjpSRUQsIHlQbGFuZVdpZHRoLCB5UGxhbmVIZWlnaHQsIEdyYXBoaWNzQ29udGV4dEdMOjpV
TlNJR05FRF9CWVRFLCBzdXJmYWNlLCAwKTsKICAgICBpZiAoIXlIYW5kbGUpIHsKICAgICAgICAg
bV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHlUZXh0dXJlKTsKICAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAj
ZWxzZQotICAgIGlmICghbV9jb250ZXh0LT50ZXhJbWFnZUlPU3VyZmFjZTJEKHZpZGVvVGV4dHVy
ZVRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSwgeVBsYW5lV2lkdGgsIHlQbGFu
ZUhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIHN1cmZhY2UsIDApKSB7CisgICAgaWYgKCFtX2NvbnRleHQtPnRleElt
YWdlSU9TdXJmYWNlMkQodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRHTDo6TFVN
SU5BTkNFLCB5UGxhbmVXaWR0aCwgeVBsYW5lSGVpZ2h0LCBHcmFwaGljc0NvbnRleHRHTDo6TFVN
SU5BTkNFLCBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSwgc3VyZmFjZSwgMCkpIHsK
ICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHlUZXh0dXJlKTsKICAgICAgICAgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKHV2VGV4dHVyZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTkyMSw3ICs5MjEsNyBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5SW1hZ2VU
b1BsYXRmb3JtVGV4dHVyZShDVlBpeGVsQnVmZmVyUmVmIGltYWdlLCBzaQogICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDRmdihtX2NvbG9yTWF0cml4VW5pZm9ybUxvY2F0aW9uLCAxLCBHTF9G
QUxTRSwgY29sb3JNYXRyaXguZGF0YSgpKTsKIAogICAgIC8vIERvIHRoZSBhY3R1YWwgZHJhd2lu
Zy4KLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xF
UywgMCwgNik7CisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dEdMOjpU
UklBTkdMRVMsIDAsIDYpOwogCiAjaWYgVVNFKE9QRU5HTF9FUykgfHwgKFVTRShBTkdMRSkgJiYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkpCiAgICAgLy8gZmx1c2goKSBtdXN0IGJlIGNhbGxlZCBoZXJl
IGluIG9yZGVyIHRvIHJlLXN5bmNocm9uaXplIHRoZSBvdXRwdXQgdGV4dHVyZSdzIGNvbnRlbnRz
IGFjcm9zcyB0aGUKQEAgLTEwMTAsMTkgKzEwMTAsMTkgQEAgYm9vbCBWaWRlb1RleHR1cmVDb3Bp
ZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qg
dmkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlcik7CisgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zy
YW1lYnVmZmVyKTsKICAgICAKICAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBvdXRwdXQg
dGV4dHVyZS4KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBvdXRwdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0g
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2Uy
RERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOwotCi0gICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUsIGxldmVsKTsKLSAgICBHQzNEZW51bSBzdGF0
dXMgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkgeworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0w6OlRFWFRVUkVfMkQsIG91dHB1dFRleHR1cmUpOworICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
R0w6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6
TElORUFSKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0R0w6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVf
V1JBUF9ULCBHcmFwaGljc0NvbnRleHRHTDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBsZXZlbCwg
aW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7
CisKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0R0w6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwgb3V0cHV0VGV4dHVyZSwgbGV2ZWwpOworICAgIEdD
M0RlbnVtIHN0YXR1cyA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVIpOworICAgIGlmIChzdGF0dXMgIT0gR3JhcGhpY3NDb250
ZXh0R0w6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIExPRyhXZWJHTCwgIlZpZGVv
VGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoJXApIC0g
VW5hYmxlIHRvIGNyZWF0ZSBmcmFtZWJ1ZmZlciBmb3Igb3V0cHV0VGV4dHVyZS4iLCB0aGlzKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEwMzEsMTIgKzEwMzEsMTIgQEAgYm9v
bCBWaWRlb1RleHR1cmVDb3BpZXJDVjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJl
KFBsYXRmb3JtM0RPYmplY3QgdmkKICAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHdpZHRo
LCBoZWlnaHQpOwogCiAgICAgLy8gQmluZCBhbmQgc2V0IHVwIHRoZSB0ZXh0dXJlIGZvciB0aGUg
dmlkZW8gc291cmNlLgotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApOworICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRTApOwogICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodmlkZW9UZXh0
dXJlVGFyZ2V0LCB2aWRlb1RleHR1cmVOYW1lKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklM
VEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQt
PnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRleHRH
TDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHRHTDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHRHTDo6TElORUFSKTsKKyAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdF
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodmlkZW9UZXh0dXJlVGFyZ2V0LCBHcmFw
aGljc0NvbnRleHRHTDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9U
T19FREdFKTsKIAogICAgIC8vIENvbmZpZ3VyZSB0aGUgZHJhd2luZyBwYXJhbWV0ZXJzLgogICAg
IG1fY29udGV4dC0+dW5pZm9ybTFpKG1fdGV4dHVyZVVuaWZvcm1Mb2NhdGlvbiwgMCk7CkBAIC0x
MDUyLDkgKzEwNTIsOSBAQCBib29sIFZpZGVvVGV4dHVyZUNvcGllckNWOjpjb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB2aQogCiAgICAgLy8gRG8gdGhl
IGFjdHVhbCBkcmF3aW5nLgogICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
bV9wb3NpdGlvbkF0dHJpYnV0ZUxvY2F0aW9uKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOwotICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uQXR0cmlidXRlTG9jYXRpb24s
IDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotICAgIG1fY29udGV4
dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCA2KTsKKyAgICBt
X2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0R0w6OkFSUkFZX0JVRkZFUiwgbV92
ZXJ0ZXhCdWZmZXIpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0
aW9uQXR0cmlidXRlTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dEdMOjpGTE9BVCwgZmFsc2Us
IDAsIDApOworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHRHTDo6VFJJ
QU5HTEVTLCAwLCA2KTsKIAogI2lmIFVTRShPUEVOR0xfRVMpCiAgICAgLy8gZmx1c2goKSBtdXN0
IGJlIGNhbGxlZCBoZXJlIGluIG9yZGVyIHRvIHJlLXN5bmNocm9uaXplIHRoZSBvdXRwdXQgdGV4
dHVyZSdzIGNvbnRlbnRzIGFjcm9zcyB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9WaWRlb1RleHR1cmVDb3BpZXJDVi5oCmluZGV4IDM2YmRh
OTFkZDU4ZmRiMzQ4ZjRmMmNiYWIzZWViNGFmODkyNWY0ZTEuLjExNWU5ODBjOWU5OTk1M2NkNTg2
M2ZjMjk5NjQ0NDZlMTIwMzgxNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuaApAQCAtMjcsNyArMjcs
NyBAQAogCiAjaWYgSEFWRShDT1JFX1ZJREVPKQogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNpbXBvcnQgPHd0Zi9V
bnNhZmVQb2ludGVyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIqIENWSW1hZ2VCdWZm
ZXJSZWY7CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFRleHR1cmVDYWNoZUNWOwogY2xhc3MgVmlk
ZW9UZXh0dXJlQ29waWVyQ1YgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIFZpZGVvVGV4dHVyZUNvcGllckNWKEdyYXBoaWNzQ29udGV4dDNEJik7CisgICAgVmlk
ZW9UZXh0dXJlQ29waWVyQ1YoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKICAgICB+VmlkZW9U
ZXh0dXJlQ29waWVyQ1YoKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC01NCw3ICs1
NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGNvcHlJbWFnZVRvUGxhdGZvcm1UZXh0dXJlKENWUGl4
ZWxCdWZmZXJSZWYsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgUGxhdGZvcm0zRE9iamVj
dCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSk7CiAgICAgYm9vbCBjb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUoVGV4dHVyZVR5cGUsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhl
aWdodCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSwgYm9v
bCBzd2FwQ29sb3JDaGFubmVscyA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dDNEJiBj
b250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAogcHJpdmF0ZToKICAgICBib29s
IGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IGlucHV0
VGV4dHVyZSwgR0MzRGVudW0gaW5wdXRUYXJnZXQsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdo
dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSwgYm9vbCBz
d2FwQ29sb3JDaGFubmVscyk7CkBAIC04MSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBk
ZXRhY2hJT1N1cmZhY2VGcm9tVGV4dHVyZSh2b2lkKiBoYW5kbGUpOwogI2VuZGlmCiAKLSAgICBS
ZWY8R3JhcGhpY3NDb250ZXh0M0Q+IG1fc2hhcmVkQ29udGV4dDsKLSAgICBSZWY8R3JhcGhpY3ND
b250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1f
c2hhcmVkQ29udGV4dDsKKyAgICBSZWY8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w+IG1fY29udGV4
dDsKICNpZiAhVVNFKEFOR0xFKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlQ2FjaGVDVj4g
bV90ZXh0dXJlQ2FjaGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKaW5kZXggYThhODJkNzA5N2FhNGIzMzJh
NTRmOTA3MzRhM2VkOWJjOWVjZTk1ZS4uM2QzMmY4OGVlMmE1ZDAwYjg0OGVhNGU4MzJkNGYzY2I0
N2ExMmUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWds
L0dMQ29udGV4dEVHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2lmIFVTRShFR0wpCiAK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5LmgiCiAKICNpZiBVU0UoTElC
RVBPWFkpCkBAIC00ODcsOCArNDg3LDggQEAgY2Fpcm9fZGV2aWNlX3QqIEdMQ29udGV4dEVHTDo6
Y2Fpcm9EZXZpY2UoKQogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8z
RCkKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR0xDb250ZXh0RUdMOjpwbGF0Zm9ybUNvbnRl
eHQoKQorI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCBHTENvbnRleHRFR0w6OnBsYXRmb3JtQ29udGV4dCgpCiB7CiAgICAgcmV0dXJuIG1f
Y29udGV4dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VnbC9HTENvbnRleHRFR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Vn
bC9HTENvbnRleHRFR0wuaAppbmRleCAwYzdhODQ4ZTg2MjEyZTU3MTg5YWUxZmU3Mjg5Y2YwNTQ4
ZDRhYzY1Li45ZGE2MzIyMDg2MWIzNjMzNjcwOWYyMWU5NWM0MTc1NmI4ODE3YzJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5o
CkBAIC02OCw4ICs2OCw4IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIGlzRUdMQ29udGV4
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotI2lmIEVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250
ZXh0KCkgb3ZlcnJpZGU7CisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNvbnRleHQoKSBvdmVycmlkZTsKICNlbmRp
ZgogCiAgICAgZW51bSBFR0xTdXJmYWNlVHlwZSB7IFBidWZmZXJTdXJmYWNlLCBXaW5kb3dTdXJm
YWNlLCBQaXhtYXBTdXJmYWNlLCBTdXJmYWNlbGVzcyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAppbmRleCBhZGYzMjE5
Y2Q5M2NiNWE4NmJkNmE2ZDY1MGUxYTAxMDIwMjIyZDVmLi44MTU1NzcxMGIyY2Y0NjNlZWZhZTA2
YzczMjM0OTE1MTA3MmI3NTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcApAQCAtNDEzLDggKzQxMyw4IEBAIGNhaXJv
X2RldmljZV90KiBHTENvbnRleHRHTFg6OmNhaXJvRGV2aWNlKCkKICAgICByZXR1cm4gbV9jYWly
b0RldmljZTsKIH0KIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKQotUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBHTENvbnRleHRHTFg6OnBsYXRmb3JtQ29udGV4dCgpCisjaWYgRU5B
QkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIEdMQ29u
dGV4dEdMWDo6cGxhdGZvcm1Db250ZXh0KCkKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dM
Q29udGV4dEdMWC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29u
dGV4dEdMWC5oCmluZGV4IGNhMjQwMjRmNmNhNDJhMmQ4ODI1NmNjOTRiMjQ4ZDBlM2QxOGRhYjgu
LjRjNzJhODM4YTczZWU0MDc3YzIzMGMyZjY5NzcyOTc5Njk2ODM4YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmgKQEAgLTUw
LDggKzUwLDggQEAgcHJpdmF0ZToKICAgICBjYWlyb19kZXZpY2VfdCogY2Fpcm9EZXZpY2UoKSBv
dmVycmlkZTsKICAgICBib29sIGlzRUdMQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkKLSAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtQ29udGV4dCgpIG92ZXJyaWRlOworI2lmIEVOQUJM
RShHUkFQSElDU19DT05URVhUX0dMKQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxh
dGZvcm1Db250ZXh0KCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIEdMQ29udGV4dEdMWChQbGF0
Zm9ybURpc3BsYXkmLCBYVW5pcXVlR0xYQ29udGV4dCYmLCBHTE5hdGl2ZVdpbmRvd1R5cGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCmlu
ZGV4IDcxZmRhMGQ5MjRjZDI1NWRiM2VmMTA3N2Y5ZTEwNzgxNGUyNDNkZjQuLmU1NGRmMjRkMmJm
MmFlY2Y5YTliMGIzOGQ3ZDE4ZWNjNGFmNWQwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKQEAgLTM0LDkgKzM0LDkgQEAKIAogI2lu
Y2x1ZGUgIlRleHR1cmUuaCIKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUg
IkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KQEAgLTQ0LDcgKzQ0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1UZXh0dXJlOjpUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBzdGQ6OnVuaXF1
ZV9wdHI8VmVjdG9yPHVuc2lnbmVkPj4gdGlsZVRleHR1cmVJZHMsIEZvcm1hdCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1heFRleHR1cmVTaXplKQorVGV4dHVyZTo6VGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwgc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjx1bnNpZ25lZD4+IHRpbGVUZXh0dXJlSWRzLCBGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGludCBtYXhUZXh0dXJlU2l6ZSkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQog
ICAgICwgbV9mb3JtYXQoZm9ybWF0KQogICAgICwgbV90aWxlcyhJbnRTaXplKG1heFRleHR1cmVT
aXplLCBtYXhUZXh0dXJlU2l6ZSksIEludFNpemUod2lkdGgsIGhlaWdodCksIHRydWUpCkBAIC01
NCwyNSArNTQsMjUgQEAgVGV4dHVyZTo6VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgc3RkOjp1bmlxdWVfcHRyPFZlY3Rvcjx1bnNpZ25lZD4+IHQKIAogVGV4dHVyZTo6flRleHR1
cmUoKQogewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV90aWxlVGV4dHVyZUlk
cy0+c2l6ZSgpOyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGlsZVRleHR1
cmVJZHMtPnNpemUoKTsgaSsrKQogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV90
aWxlVGV4dHVyZUlkcy0+YXQoaSkpOwogfQogCi1zdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCB1bnNpZ25l
ZCBpbnQqIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQqIGdsVHlwZSwgYm9vbCogc3dpenpsZSkKK3N0
YXRpYyB2b2lkIGNvbnZlcnRGb3JtYXQoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQs
IFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkKiBnbEZvcm1hdCwgdW5zaWduZWQqIGds
VHlwZSwgYm9vbCogc3dpenpsZSkKIHsKICAgICAqc3dpenpsZSA9IGZhbHNlOwogICAgIHN3aXRj
aCAoZm9ybWF0KSB7CiAgICAgY2FzZSBUZXh0dXJlOjpSR0JBODoKLSAgICAgICAgKmdsRm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURTsKKyAgICAgICAgKmdsRm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE7CisgICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfQllURTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUZXh0dXJlOjpCR1JBODoKICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVf
Zm9ybWF0X0JHUkE4ODg4IikpIHsKLSAgICAgICAgICAgICpnbEZvcm1hdCA9IEV4dGVuc2lvbnMz
RDo6QkdSQV9FWFQ7Ci0gICAgICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU7CisgICAgICAgICAgICAqZ2xGb3JtYXQgPSBFeHRlbnNpb25zR0w6OkJHUkFf
RVhUOworICAgICAgICAgICAgKmdsVHlwZSA9IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9C
WVRFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKmdsRm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE7Ci0gICAgICAgICAgICAqZ2xUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU7CisgICAgICAgICAgICAqZ2xGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRH
TDo6UkdCQTsKKyAgICAgICAgICAgICpnbFR5cGUgPSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdO
RURfQllURTsKICAgICAgICAgICAgICpzd2l6emxlID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKQEAgLTgyLDEwICs4MiwxMCBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0Rm9ybWF0KEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCB1bgogICAg
IH0KIH0KIAotUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorUmVmUHRy
PFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4
dCwgRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIGludCBtYXhU
ZXh0dXJlU2l6ZSA9IDA7Ci0gICAgY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhUZXh0dXJlU2l6ZSk7CisgICAgY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0w6Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhUZXh0dXJl
U2l6ZSk7CiAgICAgVGlsaW5nRGF0YSB0aWxpbmcoSW50U2l6ZShtYXhUZXh0dXJlU2l6ZSwgbWF4
VGV4dHVyZVNpemUpLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCB0cnVlKTsKIAogICAgIC8vIENo
ZWNrIGZvciBvdmVyZmxvdy4KQEAgLTExNSw4ICsxMTUsOCBAQCBSZWZQdHI8VGV4dHVyZT4gVGV4
dHVyZTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBGb3JtYXQgZm9ybWF0LCBp
bnQgdwogICAgICAgICB1bnNpZ25lZCBpbnQgZ2xUeXBlID0gMDsKICAgICAgICAgYm9vbCBzd2l6
emxlOwogICAgICAgICBjb252ZXJ0Rm9ybWF0KGNvbnRleHQsIGZvcm1hdCwgJmdsRm9ybWF0LCAm
Z2xUeXBlLCAmc3dpenpsZSk7Ci0gICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgICAgICBjb250ZXh0LT50ZXhJ
bWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBnbEZv
cm1hdCwKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0w6OlRF
WFRVUkVfMkQsIHRleHR1cmVJZCk7CisgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJj
ZVNhZmUoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAsIGdsRm9ybWF0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndp
ZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUJvdW5k
c1dpdGhCb3JkZXIuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgZ2xGb3JtYXQsIGdsVHlwZSk7CkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBUZXh0
dXJlOjp1cGRhdGVTdWJSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCkKICAgICBib29sIHN3aXp6bGU7CiAgICAgY29udmVydEZvcm1hdChtX2NvbnRleHQsIG1fZm9y
bWF0LCAmZ2xGb3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKICAgICBpZiAoc3dpenpsZSkgewot
ICAgICAgICBBU1NFUlQoZ2xGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgZ2xU
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgQVNTRVJU
KGdsRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICYmIGdsVHlwZSA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6VU5TSUdORURfQllURSk7CiAgICAgICAgIC8vIEZJWE1FOiAgVGhpcyBjb3Vs
ZCB1c2UgUEJPJ3MgdG8gc2F2ZSBkb2luZyBhbiBleHRyYSBjb3B5IGhlcmUuCiAgICAgfQogICAg
IGludCB0ZW1wQnVmZlNpemUgPSAvLyBUZW1wb3JhcnkgYnVmZmVyIHNpemUgaXMgdGhlIHNtYWxs
ZXIgb2YgdGhlIG1heCB0ZXh0dXJlIHNpemUgb3IgdGhlIHVwZGF0ZVJlY3RTYW5pdGl6ZWQKQEAg
LTIwMSw4ICsyMDEsOCBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0KQogICAgICAgICAgICAgdGVtcEJ1ZmYuZ2V0KCks
IHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQuaGVp
Z2h0KCksIG1fdGlsZXMudG90YWxTaXplKCkud2lkdGgoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X3RpbGVUZXh0dXJlSWRzLT5hdCh0aWxlKSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTDo6VEVYVFVSRV8yRCwg
bV90aWxlVGV4dHVyZUlkcy0+YXQodGlsZSkpOworICAgICAgICBtX2NvbnRleHQtPnRleFN1Yklt
YWdlMkQoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sCiAgICAg
ICAgICAgICBkc3RSZWN0LngoKSwKICAgICAgICAgICAgIGRzdFJlY3QueSgpLAogICAgICAgICAg
ICAgdXBkYXRlUmVjdEludGVyc2VjdGVkLndpZHRoKCksCkBAIC0yMTIsMTEgKzIxMiwxMSBAQCB2
b2lkIFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiB1
cGRhdGVSZWN0KQogCiB2b2lkIFRleHR1cmU6OmJpbmRUaWxlKGludCB0aWxlKQogewotICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGls
ZVRleHR1cmVJZHMtPmF0KHRpbGUpKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUp
KTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dEdMOjpMSU5FQVIpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHRHTDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0R0w6OkxJTkVBUik7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dEdMOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHRHTDo6VEVY
VFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dEdMOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dEdMOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0R0w6OkNMQU1QX1RP
X0VER0UpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L1RleHR1cmUuaAppbmRleCA1N2E2ODMyN2JkY2YyYjVmZDAwZGEzYjk2YWEzZTk0M2QyNTc0NDE5
Li40MmMwMmMzODg5OTYwMzIwYzgxY2I4ODk5MDhlYzUzYmE5Y2RmMzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmgKQEAgLTM3LDcgKzM3LDcg
QEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiAKIGNs
YXNzIEludFJlY3Q7CiAKQEAgLTQ1LDE1ICs0NSwxNSBAQCBjbGFzcyBUZXh0dXJlIDogcHVibGlj
IFJlZkNvdW50ZWQ8VGV4dHVyZT4gewogcHVibGljOgogICAgIH5UZXh0dXJlKCk7CiAgICAgZW51
bSBGb3JtYXQgeyBSR0JBOCwgQkdSQTggfTsKLSAgICBzdGF0aWMgUmVmUHRyPFRleHR1cmU+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KyAgICBzdGF0aWMgUmVmUHRyPFRleHR1cmU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5H
TCosIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICB2b2lkIGJpbmRUaWxlKGlu
dCB0aWxlKTsKICAgICB2b2lkIGxvYWQodm9pZCogcGl4ZWxzKTsKICAgICB2b2lkIHVwZGF0ZVN1
YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgRm9ybWF0IGZvcm1hdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMo
KSBjb25zdCB7IHJldHVybiBtX3RpbGVzOyB9CiBwcml2YXRlOgotICAgIFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHVuc2lnbmVkPj4gdGlsZVRleHR1
cmVJZHMsIEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWF4VGV4dHVyZVNpemUp
OwotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCosIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8dW5zaWduZWQ+PiB0aWxl
VGV4dHVyZUlkcywgRm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXhUZXh0dXJl
U2l6ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKICAgICBGb3Jt
YXQgbV9mb3JtYXQ7CiAgICAgVGlsaW5nRGF0YSBtX3RpbGVzOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxWZWN0b3I8dW5zaWduZWQ+PiBtX3RpbGVUZXh0dXJlSWRzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVv
U2lua0dTdHJlYW1lci5jcHAKaW5kZXggMzJhYTg1OTIzMmIzN2IxODFmYTFjYzA1YWIwYjBmMTg3
MmUyNmMyZi4uY2M1OTBiODM5MmUxMmQ3YzUzNWNlNGUzYThhZDNkYTU2ZDA4MGRkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9T
aW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAgc3Rh
dGljIGJvb2wgZW5zdXJlR3N0R0xDb250ZXh0KFdlYktpdEdMVmlkZW9TaW5rKiBzaW5rKQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCiAKLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIGNvbnRleHRIYW5kbGUgPSBzaGFyZWRDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHRIYW5kbGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAppbmRleCA4NzFlNDUwZjE0NzU5MGE0MDQwYWRiNzg0OTExNTE2ZjEzZjAxNjM2
Li40Mzc5ZmVjODg4MjEwNjNjZjkxMmQ5YTc2Yzc1MDhkOWQ4ZjVlMGVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMzI5NCw3ICszMjk0
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWMKIH0KIAogI2lmIFVTRShHU1RSRUFNRVJfR0wp
Ci1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0
IG91dHB1dFRleHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNE
ZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBmbGlwWSkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBmZDA0NzU0NzljNzQ4ZTQ0
ODI0YWZiZGEwZWMyMWNlYjgzMDliOWQyLi5lMjM5Zjk2YzRjYzA5ODlhMzkxNmExOWMxMjU5OTQ1
NGY2ZWVlMWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5oCkBAIC04Niw3ICs4Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJpdG1hcFRl
eHR1cmVHTDsKIGNsYXNzIEdMQ29udGV4dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CiBjbGFz
cyBJbnRTaXplOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIFZpZGVvVGV4dHVyZUNvcGllckdTdHJl
YW1lcjsKQEAgLTIwOCw3ICsyMDgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShHU1RS
RUFNRVJfR0wpCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0Mz
RGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgYm9v
bCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rl
bnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0NvbnRleHQz
RElPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dyYXBoaWNzQ29u
dGV4dDNESU9TLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZWUxMDMxODZjODA5
ZDI2YTExMGQyZWY4YzA4MDY3MDMzNmMzYjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0dy
YXBoaWNzQ29udGV4dDNESU9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgVVNFKE9QRU5HTF9FUykKLQotI2RlZmluZSBnbEJpbmRGcmFtZWJ1ZmZlckVYVCBnbEJp
bmRGcmFtZWJ1ZmZlcgotI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xCaW5kUmVuZGVy
YnVmZmVyCi0jZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXMKLSNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVGcmFt
ZWJ1ZmZlcnMKLSNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVuZGVy
YnVmZmVycwotI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIKLSNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJECi0jZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQgZ2xHZW5lcmF0ZU1p
cG1hcAotI2RlZmluZSBnbEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1lYnVmZmVycwotI2Rl
ZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCi0jZGVmaW5lIGds
R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdgotI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKLSNkZWZpbmUgZ2xJc0ZyYW1lYnVmZmVy
RVhUIGdsSXNGcmFtZWJ1ZmZlcgotI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5k
ZXJidWZmZXIKLSNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZQotI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFQUExFCi0KLSNkZWZpbmUgZ2xEcmF3QXJyYXlz
SW5zdGFuY2VkQVJCIGdsRHJhd0FycmF5c0luc3RhbmNlZEVYVAotI2RlZmluZSBnbERyYXdFbGVt
ZW50c0luc3RhbmNlZEFSQiBnbERyYXdFbGVtZW50c0luc3RhbmNlZEVYVAotI2RlZmluZSBnbFZl
cnRleEF0dHJpYkRpdmlzb3JBUkIgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yRVhUCi0KLSNkZWZpbmUg
Z2xCaW5kVmVydGV4QXJyYXkgZ2xCaW5kVmVydGV4QXJyYXlPRVMKLSNkZWZpbmUgZ2xEZWxldGVW
ZXJ0ZXhBcnJheXMgZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMKLSNkZWZpbmUgZ2xHZW5WZXJ0ZXhB
cnJheXMgZ2xHZW5WZXJ0ZXhBcnJheXNPRVMKLSNkZWZpbmUgZ2xJc1ZlcnRleEFycmF5IGdsSXNW
ZXJ0ZXhBcnJheU9FUwotCi0jZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMAotI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0
X1NURU5DSUw4X09FUwotI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCAgR0xfREVQVEhf
QVRUQUNITUVOVAotI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCBHTF9EUkFXX0ZSQU1F
QlVGRkVSX0FQUExFCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURQotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQgR0xfRlJBTUVCVUZG
RVIKLSNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIEdMX01BWF9TQU1QTEVTX0FQUExFCi0jZGVm
aW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfRVhUIEdMX1JFQURfRlJBTUVCVUZGRVJfQVBQTEUKLSNk
ZWZpbmUgR0xfUkVOREVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKLSNpZm5kZWYgR0xfUkdC
OAotI2RlZmluZSBHTF9SR0I4IEdMX1JHQgotI2VuZGlmCi0jaWZuZGVmIEdMX1JHQkE4Ci0jZGVm
aW5lIEdMX1JHQkE4IEdMX1JHQkEKLSNlbmRpZgotI2RlZmluZSBHTF9TVEVOQ0lMX0FUVEFDSE1F
TlRfRVhUIEdMX1NURU5DSUxfQVRUQUNITUVOVAotI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVYgR0xfVU5TSUdORURfQllURQotCi0jZW5kaWYgLy8gVVNFKE9QRU5HTF9FUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEVTSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9p
b3MvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4ZWUxMDMxODZj
ODA5ZDI2YTExMGQyZWY4YzA4MDY3MDMzNmMzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lP
Uy5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoT1BFTkdMX0VTKQorCisjZGVmaW5l
IGdsQmluZEZyYW1lYnVmZmVyRVhUIGdsQmluZEZyYW1lYnVmZmVyCisjZGVmaW5lIGdsQmluZFJl
bmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzRVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERlbGV0ZUZy
YW1lYnVmZmVyc0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnNFWFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXJFWFQgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcgorI2RlZmluZSBnbEZyYW1l
YnVmZmVyVGV4dHVyZTJERVhUIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQKKyNkZWZpbmUgZ2xHZW5l
cmF0ZU1pcG1hcEVYVCBnbEdlbmVyYXRlTWlwbWFwCisjZGVmaW5lIGdsR2VuRnJhbWVidWZmZXJz
RVhUIGdsR2VuRnJhbWVidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCBnbEdl
blJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdkVYVCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisjZGVmaW5lIGds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dgorI2RlZmluZSBnbElzRnJhbWVidWZmZXJFWFQgZ2xJc0ZyYW1lYnVmZmVyCisjZGVmaW5lIGds
SXNSZW5kZXJidWZmZXJFWFQgZ2xJc1JlbmRlcmJ1ZmZlcgorI2RlZmluZSBnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VFWFQgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQVBQ
TEUKKworI2RlZmluZSBnbERyYXdBcnJheXNJbnN0YW5jZWRBUkIgZ2xEcmF3QXJyYXlzSW5zdGFu
Y2VkRVhUCisjZGVmaW5lIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQVJCIGdsRHJhd0VsZW1lbnRz
SW5zdGFuY2VkRVhUCisjZGVmaW5lIGdsVmVydGV4QXR0cmliRGl2aXNvckFSQiBnbFZlcnRleEF0
dHJpYkRpdmlzb3JFWFQKKworI2RlZmluZSBnbEJpbmRWZXJ0ZXhBcnJheSBnbEJpbmRWZXJ0ZXhB
cnJheU9FUworI2RlZmluZSBnbERlbGV0ZVZlcnRleEFycmF5cyBnbERlbGV0ZVZlcnRleEFycmF5
c09FUworI2RlZmluZSBnbEdlblZlcnRleEFycmF5cyBnbEdlblZlcnRleEFycmF5c09FUworI2Rl
ZmluZSBnbElzVmVydGV4QXJyYXkgZ2xJc1ZlcnRleEFycmF5T0VTCisKKyNkZWZpbmUgR0xfQ09M
T1JfQVRUQUNITUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRI
MjRfU1RFTkNJTDhfRVhUIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTCisjZGVmaW5lIEdMX0RFUFRI
X0FUVEFDSE1FTlRfRVhUICBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0RSQVdfRlJB
TUVCVUZGRVJfRVhUIEdMX0RSQVdfRlJBTUVCVUZGRVJfQVBQTEUKKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZS
QU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQg
R0xfTUFYX1NBTVBMRVNfQVBQTEUKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQgR0xf
UkVBRF9GUkFNRUJVRkZFUl9BUFBMRQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfRVhUIEdMX1JF
TkRFUkJVRkZFUgorI2lmbmRlZiBHTF9SR0I4CisjZGVmaW5lIEdMX1JHQjggR0xfUkdCCisjZW5k
aWYKKyNpZm5kZWYgR0xfUkdCQTgKKyNkZWZpbmUgR0xfUkdCQTggR0xfUkdCQQorI2VuZGlmCisj
ZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UCisj
ZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViBHTF9VTlNJR05FRF9CWVRFCisKKyNl
bmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNE
QU5HTEVMYXllci5jcHAKaW5kZXggYWEzZGVhMGE5Mjg1MmVmOWYzOGNkZTY0NmI2MDgwMWFkMmZm
NzhhZC4uZDg3ZDMyZmQ2MzczZThiYjc4YTU5MjU1YTY0NzYyNmYzYmMzNGVkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDM0RBTkdMRUxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzREFOR0xFTGF5ZXIuY3BwCkBAIC0xNzQsMTkgKzE3
NCwxOSBAQCBib29sIEdDM0RBTkdMRUxheWVyOjpBTkdMRUNvbnRleHQ6Om1ha2VDb250ZXh0Q3Vy
cmVudCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
R0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK1Bs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR0MzREFOR0xFTGF5ZXI6OkFOR0xFQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jb250ZXh0OwogfQogCi1HQzNE
QU5HTEVMYXllcjo6R0MzREFOR0xFTGF5ZXIoR3JhcGhpY3NDb250ZXh0M0QmIGNvbnRleHQsIEdy
YXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK0dDM0RBTkdMRUxheWVy
OjpHQzNEQU5HTEVMYXllcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQogICAgIDogR0MzRExh
eWVyKGNvbnRleHQpCiB7CiAgICAgc3dpdGNoIChkZXN0aW5hdGlvbikgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uOjpPZmZzY3JlZW46CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246Ok9mZnNjcmVlbjoKICAgICAgICAgbV9hbmds
ZUNvbnRleHQgPSBBTkdMRUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0
V2luZG93OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpE
aXJlY3RseVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTIwMyw3ICsyMDMsNyBAQCBib29sIEdDM0RBTkdMRUxheWVy
OjptYWtlQ29udGV4dEN1cnJlbnQoKQogCiB9CiAKLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
R0MzREFOR0xFTGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMIEdDM0RBTkdMRUxheWVyOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewogICAg
IEFTU0VSVChtX2FuZ2xlQ29udGV4dCk7CiAgICAgcmV0dXJuIG1fYW5nbGVDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNEQU5HTEVMYXllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxheWVy
LmgKaW5kZXggZWM0N2VhZGYyZTkxNjUwYTJlZWJkZjY2N2I4NWRiYzMwMDczNGEzYi4uMjExZjFl
NTdiZTg0N2VkNDBiNmNlYjdhOGZhZTNkNzhlNGQ1NWFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RBTkdMRUxh
eWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDM0RBTkdMRUxheWVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpZiBVU0UoTklD
T1NJQSkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRH
TE9wZW5HTC5oIgogI2luY2x1ZGUgIk5pY29zaWFHQzNETGF5ZXIuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CiAKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5BTkdMRUNv
bnRleHQoKTsKIAogICAgICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotI2lmIEVOQUJM
RShHUkFQSElDU19DT05URVhUXzNEKQotICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dM
KQorICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpAQCAtNzMsMTEgKzczLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgRUdMU3VyZmFjZSBtX3N1cmZhY2UgeyBudWxscHRyIH07CiAgICAgfTsKIAotICAg
IEdDM0RBTkdMRUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEJiwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uKTsKKyAgICBHQzNEQU5HTEVMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpEZXN0aW5hdGlvbik7CiAgICAgdmlydHVhbCB+R0MzREFOR0xFTGF5ZXIoKTsKIAogICAg
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwogCiBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUNvbnRleHQ+IG1fYW5nbGVDb250ZXh0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAppbmRleCAxNmExNDUzYzJi
OWNjMWQxNjEyZWQzYTFlNGM2M2I2YTFkZWM1MDRkLi40YzRjNDI2OTYxMjcxYzdiN2ExOWQyOTZh
OTQwMGVmZGMwZmFjOWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNw
cApAQCAtNDcsMjEgKzQ3LDIxIEBAIG5hbWVzcGFjZSBOaWNvc2lhIHsKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLUdDM0RMYXllcjo6R0MzRExheWVyKEdyYXBoaWNzQ29udGV4dDNEJiBj
b250ZXh0KQorR0MzRExheWVyOjpHQzNETGF5ZXIoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNv
bnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fY29udGVudExheWVyKE5p
Y29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCiB7CiB9CiAKLUdDM0RMYXllcjo6R0Mz
RExheWVyKEdyYXBoaWNzQ29udGV4dDNEJiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6RGVz
dGluYXRpb24gZGVzdGluYXRpb24pCitHQzNETGF5ZXI6OkdDM0RMYXllcihHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9u
IGRlc3RpbmF0aW9uKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2NvbnRlbnRM
YXllcihOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJU
ZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpKQogewogICAgIHN3aXRjaCAo
ZGVzdGluYXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbjo6
T2Zmc2NyZWVuOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9u
OjpPZmZzY3JlZW46CiAgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZz
Y3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGlu
YXRpb246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc4LDcgKzc4LDcgQEAg
Ym9vbCBHQzNETGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCgpCiAgICAgcmV0dXJuIG1fZ2xDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCBHQzNETGF5ZXI6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dEdMIEdDM0RMYXllcjo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bV9nbENvbnRleHQpOwogICAgIHJldHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0MzRExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmgKaW5kZXggZTg1NzIxNzdkYWZjYWFj
YWIzZWEyMzA5ZDQ4NGJjMzkwNDI3OGFlMy4uMjNlNGQ4YzdiZmE2ODU3OWFhZjYzYjYwYTZlNzYz
ZDY5NmYwMTU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuaApAQCAtMzAs
NyArMzAsNyBAQAogCiAjaWYgVVNFKE5JQ09TSUEpICYmIFVTRShURVhUVVJFX01BUFBFUikKIAot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wuaCIKICNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGwuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAKQEAgLTQzLDE5ICs0MywxOSBAQCBuYW1lc3BhY2Ug
Tmljb3NpYSB7CiBjbGFzcyBHQzNETGF5ZXIgOiBwdWJsaWMgQ29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw6OkNsaWVudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEJik7Ci0g
ICAgR0MzRExheWVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEJiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OkRlc3RpbmF0aW9uKTsKKyAgICBleHBsaWNpdCBHQzNETGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmKTsKKyAgICBHQzNETGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
RGVzdGluYXRpb24pOwogCiAgICAgdmlydHVhbCB+R0MzRExheWVyKCk7CiAKICAgICBDb250ZW50
TGF5ZXImIGNvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyOyB9CiAg
ICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHZpcnR1YWwgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CiAKICAg
ICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCYgbV9jb250ZXh0OworICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMJiBtX2NvbnRleHQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CiAKICAgICBSZWY8Q29udGVudExheWVyPiBtX2Nv
bnRlbnRMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDYxYzBjNmU0ODdkMjI2NDcwN2Q2YWU3YjkyZjA3ZWEwZTljMWNiM2YuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRG
T1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkpCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RP
cGVuR0wuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VsaWYg
VVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4KLSNlbGlmIFVT
RShPUEVOR0wpCi0jaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNE
T3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBib29sIHVzZUluZGV4ZWRHZXRTdHJp
bmcpCi0gICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCwgdXNlSW5kZXhlZEdl
dFN0cmluZykKLXsKLX0KLQotRXh0ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3BlbkdM
KCkgPSBkZWZhdWx0OwotCi0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBk
c3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBt
YXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKLXsKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNF
KE9QRU5HTF9FUykKLSAgICBVTlVTRURfUEFSQU0oc3JjWDApOwotICAgIFVOVVNFRF9QQVJBTShz
cmNZMCk7Ci0gICAgVU5VU0VEX1BBUkFNKHNyY1gxKTsKLSAgICBVTlVTRURfUEFSQU0oc3JjWTEp
OwotICAgIFVOVVNFRF9QQVJBTShkc3RYMCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRzdFkwKTsKLSAg
ICBVTlVTRURfUEFSQU0oZHN0WDEpOwotICAgIFVOVVNFRF9QQVJBTShkc3RZMSk7Ci0gICAgVU5V
U0VEX1BBUkFNKG1hc2spOwotICAgIFVOVVNFRF9QQVJBTShmaWx0ZXIpOwotICAgIDo6Z2xSZXNv
bHZlTXVsdGlzYW1wbGVGcmFtZWJ1ZmZlckFQUExFKCk7Ci0jZWxzZQotICAgIDo6Z2xCbGl0RnJh
bWVidWZmZXJFWFQoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0
WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgRXh0ZW5zaW9uczNE
T3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCi17Ci0gICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25z
M0RPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBhcnJheSA9IDA7Ci0jaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykp
Ci0gICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKLSAgICAgICAgZ2xHZW5W
ZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKLSNlbGlmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2Fy
cmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAotICAgIGdsR2VuVmVy
dGV4QXJyYXlzQVBQTEUoMSwgJmFycmF5KTsKLSNlbmRpZgotICAgIHJldHVybiBhcnJheTsKLX0K
LQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3Jt
M0RPYmplY3QgYXJyYXkpCi17Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLSAg
ICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQotICAgICAgICBnbERlbGV0ZVZl
cnRleEFycmF5cygxLCAmYXJyYXkpOwotI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJy
YXlfb2JqZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgZ2xEZWxldGVW
ZXJ0ZXhBcnJheXNBUFBMRSgxLCAmYXJyYXkpOwotI2VuZGlmCi19Ci0KLUdDM0Rib29sZWFuIEV4
dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5
KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCi0gICAgaWYg
KGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGdsSXNWZXJ0
ZXhBcnJheShhcnJheSk7Ci0jZWxpZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmpl
Y3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICByZXR1cm4gZ2xJc1ZlcnRl
eEFycmF5QVBQTEUoYXJyYXkpOwotI2VuZGlmCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi12
b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmpl
Y3QgYXJyYXkpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0Uo
T1BFTkdMX0VTKSkKLSAgICBpZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQotICAg
ICAgICBnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7Ci0jZWxpZiBkZWZpbmVkKEdMX0FQUExFX3Zl
cnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBn
bEJpbmRWZXJ0ZXhBcnJheUFQUExFKGFycmF5KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFy
cmF5KTsKLSNlbmRpZgotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6aW5zZXJ0RXZlbnRN
YXJrZXJFWFQoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMg
ZnVuY3Rpb24gYW5kIGFkZCBHTF9FWFRfZGVidWdfbWFya2VyIGluIHN1cHBvcnRzKCkuCi0gICAg
cmV0dXJuOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6cHVzaEdyb3VwTWFya2VyRVhU
KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9u
IGFuZCBhZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgotICAgIHJldHVybjsK
LX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCi17
Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfRVhUX2Rl
YnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgotICAgIHJldHVybjsKLX0KLQotYm9vbCBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAg
ICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhlcgot
ICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQg
YW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZS9HTF9BUFBMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZS4KLSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIp
Ci0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9m
cmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICByZXR1cm4g
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0
aXNhbXBsZSIpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5j
b250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0jZW5kaWYKLQotICAg
IGlmIChuYW1lID09ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikgewotICAgICAgICByZXR1
cm4gKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2luc3RhbmNlZF9hcnJh
eXMiKSB8fCBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9pbnN0YW5jZWRf
YXJyYXlzIikpCi0gICAgICAgICAgICAmJiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KCJHTF9BUkJfZHJhd19pbnN0YW5jZWQiKSB8fCBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFp
bnMoIkdMX0VYVF9kcmF3X2luc3RhbmNlZCIpKTsKLSAgICB9Ci0KLSAgICBpZiAobmFtZSA9PSAi
R0xfRVhUX3NSR0IiKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHJldHVybiBt
X2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9zUkdCIik7Ci0jZWxzZQotICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVy
ZV9zUkdCIikgJiYgKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1l
YnVmZmVyX3NSR0IiKSB8fCBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl9m
cmFtZWJ1ZmZlcl9zUkdCIikpOwotI2VuZGlmCi0KLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX2Zy
YWdfZGVwdGgiKQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0jZWxz
ZQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRf
ZnJhZ19kZXB0aCIpOwotI2VuZGlmCi0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0
cyBHTF9PRVNfcmdiOF9yZ2JhOC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgi
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0
IG9yIEdMX09FU190ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydAotICAg
IC8vIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQsIEdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVh
ciBhbmQgR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIgYXMgYXZhaWxhYmxlLgotICAg
IGlmIChuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3Rl
eHR1cmVfaGFsZl9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFy
IiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAg
IHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX2Zs
b2F0IikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpOwotCi0gICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBpZiAobmFt
ZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSB7Ci0jaWYgKFBMQVRGT1JNKEdUSykp
Ci0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl92
ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0jZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAg
ICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9PRVNfdmVydGV4X2Fy
cmF5X29iamVjdCIpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9u
cy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCIpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRlcml2
YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMg
c3VwcG9ydHMgVU5TSUdORURfSU5UIGluZGljZXMKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX2Vs
ZW1lbnRfaW5kZXhfdWludCIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChu
YW1lID09ICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAgcmV0dXJuIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwot
ICAgIAotICAgIGlmIChuYW1lID09ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMi
KQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRf
dGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKLQotICAgIGlmIChuYW1lID09ICJHTF9FWFRf
ZHJhd19idWZmZXJzIikgewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHJldHVy
biBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Ci0jZWxpZiBQTEFURk9STShN
QUMpIHx8IFBMQVRGT1JNKEdUSykKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9u
cy5jb250YWlucygiR0xfQVJCX2RyYXdfYnVmZmVycyIpOwotI2Vsc2UKLSAgICAgICAgLy8gRklY
TUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9ybXMuCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSNlbmRpZgotICAgIH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBM
QVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQotICAgIGlmIChuYW1lID09ICJHTF9FWFRfcGFj
a2VkX2RlcHRoX3N0ZW5jaWwiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25z
LmNvbnRhaW5zKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQotICAgIGlmIChuYW1l
ID09ICJHTF9PRVNfY29tcHJlc3NlZF9FVEMxX1JHQjhfdGV4dHVyZSIKLSAgICAgICAgfHwgbmFt
ZSA9PSAiR0xfQU5HTEVfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpIHsKLSAgICAgICAgLy8gSW1w
bGljaXRseSBlbmFibGVkIHdpdGggRVMgMy4wIGNvbnRleHRzLgotICAgICAgICByZXR1cm4gbV9j
b250ZXh0LT5tX2lzRm9yV2ViR0wyOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0w6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSBuLCBjb25zdCBHQzNEZW51bSogYnVmcykK
LXsKLSAgICAvLyAgRklYTUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9ybXMu
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIDo6Z2xEcmF3QnVmZmVyc0FSQihuLCBidWZzKTsKLSNl
bGlmIFBMQVRGT1JNKEdUSykKLSAgICA6OmdsRHJhd0J1ZmZlcnMobiwgYnVmcyk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShuKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmcyk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0g
bW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50
KQotewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgUExBVEZPUk0o
R1RLKQotICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJp
bWNvdW50KTsKLSNlbGlmIFBMQVRGT1JNKENPQ09BKQotICAgIDo6Z2xEcmF3QXJyYXlzSW5zdGFu
Y2VkQVJCKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKG1vZGUpOwotICAgIFVOVVNFRF9QQVJBTShmaXJzdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGNvdW50KTsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWNvdW50KTsKLSNlbmRpZgotfQotCi12b2lk
IEV4dGVuc2lvbnMzRE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUs
IEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNp
emVpIHByaW1jb3VudCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
I2lmIFBMQVRGT1JNKEdUSykKLSAgICA6OmdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNv
dW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKLSNlbGlmIFBMQVRGT1JNKENPQ09BKQotICAgIDo6Z2xE
cmF3RWxlbWVudHNJbnN0YW5jZWRBUkIobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obW9kZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdW50KTsK
LSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKHByaW1jb3VudCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlz
b3IpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9S
TShHVEspCi0gICAgOjpnbFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotI2Vs
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgOjpnbFZlcnRleEF0dHJpYkRpdmlzb3JBUkIoaW5kZXgs
IGRpdmlzb3IpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIFVOVVNFRF9Q
QVJBTShkaXZpc29yKTsKLSNlbmRpZgotfQotCi1TdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMOjpn
ZXRFeHRlbnNpb25zKCkKLXsKLSAgICBBU1NFUlQoIW1fdXNlSW5kZXhlZEdldFN0cmluZyk7Ci0g
ICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3Ry
aW5nKEdMX0VYVEVOU0lPTlMpKSk7Ci19Ci0KLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFdJTikgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKLWJvb2wgRXh0ZW5z
aW9uczNET3BlbkdMOjppc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkKLXsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBzdXBwb3J0c1ZlcnRleEFycmF5T2JqZWN0ID0gc3VwcG9ydHMoIkdMX09F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0gICAgcmV0dXJuIHN1cHBvcnRzVmVydGV4QXJyYXlP
YmplY3Q7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIChVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0o
Q09DT0EpICYmIFVTRShPUEVOR0xfRVMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyNTA4YTUzMWRhYTIwZDhhZDlkOTkxZmJhOTQ4NWJj
OTk0M2VjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCIKLQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTCA6IHB1YmxpYyBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkg
R3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgotICAgIEV4dGVuc2lvbnMzRE9wZW5H
TChHcmFwaGljc0NvbnRleHQzRCosIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZyk7Ci0gICAgdmly
dHVhbCB+RXh0ZW5zaW9uczNET3BlbkdMKCk7Ci0KLSAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9k
cy4KLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25n
IHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBs
b25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJp
ZGU7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKLSAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwotICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwotICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBH
QzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZ2V0
RXh0ZW5zaW9ucygpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotI2lmIFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQotICAg
IGJvb2wgaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpOwotI2VuZGlmCi19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTNlZjU4Zjc0NTRiNWZmZTI1ZjkwMzY2
YzFjNDRlZjFkMjk3NWI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQotI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgotCi0jaW5jbHVkZSAiQU5HTEVXZWJLaXRC
cmlkZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaWYgUExBVEZPUk0o
Q09DT0EpCi0KLSNpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPE9wZW5HTEVTL0VTMi9nbGV4
dC5oPgotI2luY2x1ZGUgPE9wZW5HTEVTL0VTMy9nbC5oPgotI2Vsc2UKLSNkZWZpbmUgR0xfRE9f
Tk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECi0jaW5jbHVkZSA8
T3BlbkdML2dsLmg+Ci0jaW5jbHVkZSA8T3BlbkdML2dsMy5oPgotI3VuZGVmIEdMX0RPX05PVF9X
QVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAotI2VuZGlmCi0KLSNlbHNl
Ci0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlTaGltcy5oIgotI2VsaWYgVVNF
KE9QRU5HTF9FUykKLSNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCi0jaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+Ci0jZWxpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGJvb2wgdXNl
SW5kZXhlZEdldFN0cmluZykKLSAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
KGZhbHNlKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lzTlZJRElBKGZhbHNl
KQotICAgICwgbV9pc0FNRChmYWxzZSkKLSAgICAsIG1faXNJbnRlbChmYWxzZSkKLSAgICAsIG1f
aXNJbWFnaW5hdGlvbihmYWxzZSkKLSAgICAsIG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVs
YXRpb24oZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6
ZShmYWxzZSkKLSAgICAsIG1fdXNlSW5kZXhlZEdldFN0cmluZyh1c2VJbmRleGVkR2V0U3RyaW5n
KQotewotICAgIG1fdmVuZG9yID0gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSkpOwotICAgIG1fcmVuZGVyZXIgPSBTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9SRU5ERVJFUikpKTsK
LQotICAgIFZlY3RvcjxTdHJpbmc+IHZlbmRvckNvbXBvbmVudHMgPSBtX3ZlbmRvci5jb252ZXJ0
VG9BU0NJSUxvd2VyY2FzZSgpLnNwbGl0KCcgJyk7Ci0gICAgaWYgKHZlbmRvckNvbXBvbmVudHMu
Y29udGFpbnMoIm52aWRpYSIpKQotICAgICAgICBtX2lzTlZJRElBID0gdHJ1ZTsKLSAgICBpZiAo
dmVuZG9yQ29tcG9uZW50cy5jb250YWlucygiYXRpIikgfHwgdmVuZG9yQ29tcG9uZW50cy5jb250
YWlucygiYW1kIikpCi0gICAgICAgIG1faXNBTUQgPSB0cnVlOwotICAgIGlmICh2ZW5kb3JDb21w
b25lbnRzLmNvbnRhaW5zKCJpbnRlbCIpKQotICAgICAgICBtX2lzSW50ZWwgPSB0cnVlOwotICAg
IGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJpbWFnaW5hdGlvbiIpKQotICAgICAgICBt
X2lzSW1hZ2luYXRpb24gPSB0cnVlOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChtX2lz
QU1EIHx8IG1faXNJbnRlbCkKLSAgICAgICAgbV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxh
dGlvbiA9IHRydWU7Ci0KLSAgICAvLyBJbnRlbCBIRCAzMDAwIGRldmljZXMgaGF2ZSBwcm9ibGVt
cyB3aXRoIGxhcmdlIHRleHR1cmVzLiA8cmRhcjovL3Byb2JsZW0vMTY2NDkxNDA+Ci0gICAgbV9y
ZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNpemUgPSBtX3JlbmRlcmVyLnN0YXJ0c1dp
dGgoIkludGVsIEhEIEdyYXBoaWNzIDMwMDAiKTsKLSNlbmRpZgotfQotCi1FeHRlbnNpb25zM0RP
cGVuR0xDb21tb246On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKSA9IGRlZmF1bHQ7Ci0KLWJv
b2wgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUp
Ci17Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKLSAgICAgICAg
aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQotICAgIC8vIFdlIGV4cGxpY2l0bHkg
ZG8gbm90IHN1cHBvcnQgdGhpcyBleHRlbnNpb24gdW50aWwKLSAgICAvLyB3ZSBmaXggdGhlIGZv
bGxvd2luZyBidWc6Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0OTczNAotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9z
b3VyY2UiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gc3VwcG9ydHNFeHRl
bnNpb24obmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1cmVF
bmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdM
RSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNv
bXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJj
ZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYg
KCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAg
IEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAg
ICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmIChuYW1lID09ICJHTF9FWFRfZHJhd19idWZmZXJzIikgewotICAgICAgICAvLyBF
bmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAgICAgICAg
QU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAg
ICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNv
dXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzKSB7
Ci0gICAgICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzID0gMTsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZG
RVJTX0VYVCwgJkFOR0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKLSAgICAgICAgICAgIGNv
bXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7Ci0gICAgICAgIC8v
IEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQotICAgICAg
ICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0g
ICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJl
c291cmNlcygpOwotICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9s
b2QgPSAxOwotICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhUX2ZyYWdfZGVwdGgi
KSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBh
bHJlYWR5KQotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQt
Pm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9
IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVY
VF9mcmFnX2RlcHRoKSB7Ci0gICAgICAgICAgICBBTkdMRVJlc291cmNlcy5FWFRfZnJhZ19kZXB0
aCA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6
aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29t
cGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIHJldHVybiBjb21waWxlci5n
ZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7Ci0gICAgfQotICAgIHJldHVy
biBzdXBwb3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpOT19FUlJPUjsKLX0KLQotU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJh
bnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIGludCBHTHNoYWRlclR5cGU7Ci0gICAgQU5HTEVTaGFkZXJU
eXBlIHNoYWRlclR5cGU7Ci0KLSAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2Nv
bnRleHQtPm1fY29tcGlsZXI7Ci0KLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKLQotICAgIGlm
IChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpCi0gICAg
ICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFk
ZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNo
YWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biAiIjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9i
amVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KLSAgICBp
ZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiAiIjsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYg
ZW50cnkgPSByZXN1bHQtPnZhbHVlOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3Vy
Y2U7Ci0gICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0gICAgdWludDY0X3QgZXh0cmFDb21waWxl
T3B0aW9ucyA9IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyB8IFNIX1VORk9MRF9TSE9S
VF9DSVJDVUlUIHwgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTIHwgU0hfRU5GT1JDRV9QQUNLSU5H
X1JFU1RSSUNUSU9OUyB8IFNIX0xJTUlUX0VYUFJFU1NJT05fQ09NUExFWElUWSB8IFNIX0xJTUlU
X0NBTExfU1RBQ0tfREVQVEggfCBTSF9JTklUSUFMSVpFX1VOSU5JVElBTElaRURfTE9DQUxTOwot
Ci0gICAgaWYgKG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24pCi0gICAgICAgIGV4
dHJhQ29tcGlsZU9wdGlvbnMgfD0gU0hfRU1VTEFURV9BQlNfSU5UX0ZVTkNUSU9OOwotCi0gICAg
VmVjdG9yPHN0ZDo6cGFpcjxBTkdMRVNoYWRlclN5bWJvbFR5cGUsIHNoOjpTaGFkZXJWYXJpYWJs
ZT4+IHN5bWJvbHM7Ci0gICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIuY29tcGlsZVNoYWRlclNv
dXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNo
YWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZywgc3ltYm9scywgZXh0cmFDb21waWxlT3B0aW9ucyk7
Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAgIGVudHJ5LmlzVmFsaWQgPSBp
c1ZhbGlkOwotCi0gICAgZm9yIChjb25zdCBzdGQ6OnBhaXI8QU5HTEVTaGFkZXJTeW1ib2xUeXBl
LCBzaDo6U2hhZGVyVmFyaWFibGU+JiBwYWlyIDogc3ltYm9scykgewotICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyYgbmFtZSA9IHBhaXIuc2Vjb25kLm5hbWU7Ci0gICAgICAgIGVudHJ5LnN5bWJv
bE1hcChwYWlyLmZpcnN0KS5zZXQoU3RyaW5nKG5hbWUuY19zdHIoKSwgbmFtZS5sZW5ndGgoKSks
IHBhaXIuc2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJldHVy
biAiIjsKLQotICAgIHJldHVybiB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotfQotCi12b2lkIEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKQot
ewotI2lmIChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTCkpIHx8IChQTEFURk9STShHVEsp
ICYmICFVU0UoT1BFTkdMX0VTKSkKLSAgICBpZiAobV91c2VJbmRleGVkR2V0U3RyaW5nKSB7Ci0g
ICAgICAgIEdMaW50IG51bUV4dGVuc2lvbnMgPSAwOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
R0xfTlVNX0VYVEVOU0lPTlMsICZudW1FeHRlbnNpb25zKTsKLSAgICAgICAgZm9yIChHTGludCBp
ID0gMDsgaSA8IG51bUV4dGVuc2lvbnM7ICsraSkKLSAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0
ZW5zaW9ucy5hZGQoZ2xHZXRTdHJpbmdpKEdMX0VYVEVOU0lPTlMsIGkpKTsKLQotICAgICAgICBp
ZiAoIW1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1cmVfc3RvcmFn
ZSJfcykpIHsKLSAgICAgICAgICAgIEdMaW50IG1ham9yVmVyc2lvbjsKLSAgICAgICAgICAgIGds
R2V0SW50ZWdlcnYoR0xfTUFKT1JfVkVSU0lPTiwgJm1ham9yVmVyc2lvbik7Ci0gICAgICAgICAg
ICBHTGludCBtaW5vclZlcnNpb247Ci0gICAgICAgICAgICBnbEdldEludGVnZXJ2KEdMX01JTk9S
X1ZFUlNJT04sICZtaW5vclZlcnNpb24pOwotICAgICAgICAgICAgaWYgKG1ham9yVmVyc2lvbiA+
IDQgfHwgKG1ham9yVmVyc2lvbiA9PSA0ICYmIG1pbm9yVmVyc2lvbiA+PSAyKSkKLSAgICAgICAg
ICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKCJHTF9BUkJfdGV4dHVyZV9zdG9yYWdl
Il9zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlmCi0gICAgewotICAgICAgICBTdHJp
bmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lvbnMoKTsKLSAgICAgICAgZm9yIChhdXRv
JiBleHRlbnNpb24gOiBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCcgJykpCi0gICAgICAgICAgICBt
X2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGV4dGVuc2lvbik7Ci0gICAgfQotICAgIG1faW5pdGlh
bGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OnJlYWRuUGl4ZWxzRVhUKGludCwgaW50LCBHQzNEc2l6ZWksIEdDM0RzaXpl
aSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6ZWksIHZvaWQgKikKLXsKLSAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQsIGludCwg
R0MzRHNpemVpLCBmbG9hdCAqKQotewotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6Z2V0blVuaWZvcm1pdkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGludCAqKQotewot
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NDcyMTc5MDc3MjdjYWVlYTI3ZWY2OGEwNjljYzA1MzEwODIwZDM5Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAorKysgL2Rldi9udWxsCkBA
IC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKTsKLQotICAg
IC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgotICAgIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJy
aWRlOwotICAgIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIGlu
dCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgb3ZlcnJpZGU7Ci0KLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJpZGUgPSAwOwotICAgIHZvaWQgZGVs
ZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGUgPSAwOwotICAgIEdD
M0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGUgPSAw
OwotICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
ID0gMDsKLQotICAgIHZvaWQgZHJhd0J1ZmZlcnNFWFQoR0MzRHNpemVpLCBjb25zdCBHQzNEZW51
bSopIG92ZXJyaWRlID0gMDsKLQotICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFWFQgUm9idXN0bmVz
cyAtIHVzZXMgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi0gICAgdm9pZCByZWFkblBpeGVs
c0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0
YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0s
IGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0blVuaWZvcm1pdkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IGlzTlZJRElBKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc05WSURJQTsgfQotICAgIGJvb2wgaXNB
TUQoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzQU1EOyB9Ci0gICAgYm9vbCBpc0ludGVsKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9pc0ludGVsOyB9Ci0gICAgYm9vbCBpc0ltYWdpbmF0aW9uKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9pc0ltYWdpbmF0aW9uOyB9Ci0gICAgU3RyaW5nIHZlbmRvcigpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fdmVuZG9yOyB9Ci0KLSAgICBib29sIHJlcXVpcmVzQnVpbHRJbkZ1
bmN0aW9uRW11bGF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc0J1aWx0SW5GdW5j
dGlvbkVtdWxhdGlvbjsgfQotICAgIGJvb2wgcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRleHR1
cmVTaXplKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4
dHVyZVNpemU7IH0KLQotcHJvdGVjdGVkOgotICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RP
cGVuR0xFUzsKLSAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0Qq
LCBib29sIHVzZUluZGV4ZWRHZXRTdHJpbmcpOwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRl
bnNpb25zKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVBdmFpbGFibGVFeHRl
bnNpb25zKCk7Ci0gICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKLSAg
ICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwotCi0gICAgLy8gV2VhayBw
b2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0M0QKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwotCi0gICAgYm9vbCBtX2lzTlZJRElBOwotICAgIGJvb2wgbV9pc0FNRDsKLSAg
ICBib29sIG1faXNJbnRlbDsKLSAgICBib29sIG1faXNJbWFnaW5hdGlvbjsKLSAgICBib29sIG1f
cmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247Ci0gICAgYm9vbCBtX3JlcXVpcmVzUmVz
dHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZTsKLQotICAgIGJvb2wgbV91c2VJbmRleGVkR2V0U3Ry
aW5nIHsgZmFsc2UgfTsKLQotICAgIFN0cmluZyBtX3ZlbmRvcjsKLSAgICBTdHJpbmcgbV9yZW5k
ZXJlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMRVMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDk0MWY2NDFlMTUxZjM4
YmM2ZWE1NjljYjhkYWYyMThjMTZkOTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKE9Q
RU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgotCi0jaWYgRU5BQkxF
KEdSQVBISUNTX0NPTlRFWFRfM0QpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUg
IkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTEVTOjpFeHRlbnNpb25zM0RPcGVu
R0xFUyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5n
KQotICAgIDogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKGNvbnRleHQsIHVzZUluZGV4ZWRHZXRT
dHJpbmcpCi0gICAgLCBtX2NvbnRleHRSZXNldFN0YXR1cyhHTF9OT19FUlJPUikKLSAgICAsIG1f
c3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKLSAgICAsIG1fc3VwcG9ydHNJTUdN
dWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCi0gICAgLCBtX3N1cHBvcnRzQU5HTEVp
bnN0YW5jZWRBcnJheXMoZmFsc2UpCi0gICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRygwKQotICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlN
RygwKQotICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQotICAgICwgbV9nbERlbGV0ZVZl
cnRleEFycmF5c09FUygwKQotICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQotICAgICwg
bV9nbElzVmVydGV4QXJyYXlPRVMoMCkKLSAgICAsIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVz
RVhUKDApCi0gICAgLCBtX2dsUmVhZG5QaXhlbHNFWFQoMCkKLSAgICAsIG1fZ2xHZXRuVW5pZm9y
bWZ2RVhUKDApCi0gICAgLCBtX2dsR2V0blVuaWZvcm1pdkVYVCgwKQotICAgICwgbV9nbFZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRShudWxscHRyKQotICAgICwgbV9nbERyYXdBcnJheXNJbnN0YW5j
ZWRBTkdMRShudWxscHRyKQotICAgICwgbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG51
bGxwdHIpCi17Ci19Ci0KLUV4dGVuc2lvbnMzRE9wZW5HTEVTOjp+RXh0ZW5zaW9uczNET3BlbkdM
RVMoKSA9IGRlZmF1bHQ7Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmlzRW5hYmxlZChj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5IGlm
IHRoZSBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVycy4KLSAgICBib29s
IGVuYWJsZWQgPSBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmlzRW5hYmxlZChuYW1lKTsKLSAg
ICBpZiAoIWVuYWJsZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZvciBHTF9F
WFRfcm9idXN0bmVzcywgY2hlY2sgdGhhdCB0aGUgY29udGV4dCBzdXBwb3J0cyByb2J1c3QgYWNj
ZXNzLgotICAgIGlmIChuYW1lID09ICJHTF9FWFRfcm9idXN0bmVzcyIpIHsKLSAgICAgICAgR0xp
bnQgcm9idXN0QWNjZXNzID0gR0xfRkFMU0U7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoRXh0ZW5zaW9uczNEOjpDT05URVhUX1JPQlVTVF9BQ0NFU1MsICZyb2J1c3RBY2Nlc3MpOwot
ICAgICAgICByZXR1cm4gcm9idXN0QWNjZXNzID09IEdMX1RSVUU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4
dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
YXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJl
LCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKLXsKLSAgICBpZiAobV9nbEZyYW1l
YnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCi0gICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCwgc2FtcGxlcyk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLX0KLQotdm9pZCBFeHRlbnNpb25z
M0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxm
b3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAg
IGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQotICAgICAgICBtX2ds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci19Ci0KLXZvaWQgRXh0ZW5z
aW9uczNET3BlbkdMRVM6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIC8qIHNyY1gwICovLCBsb25nIC8q
IHNyY1kwICovLCBsb25nIC8qIHNyY1gxICovLCBsb25nIC8qIHNyY1kxICovLCBsb25nIC8qIGRz
dFgwICovLCBsb25nIC8qIGRzdFkwICovLCBsb25nIC8qIGRzdFgxICovLCBsb25nIC8qIGRzdFkx
ICovLCB1bnNpZ25lZCBsb25nIC8qIG1hc2sgKi8sIHVuc2lnbmVkIGxvbmcgLyogZmlsdGVyICov
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdM
RVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBpZiAobV9nbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKLSAgICAgICAgcmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotICAgIGVsc2UKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5n
JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpwb3BHcm91cE1hcmtlckVY
VCh2b2lkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3Qg
RXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKLXsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlz
T0VTKSB7Ci0gICAgICAgIEdMdWludCBhcnJheSA9IDA7Ci0gICAgICAgIG1fZ2xHZW5WZXJ0ZXhB
cnJheXNPRVMoMSwgJmFycmF5KTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
aWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCi0gICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhB
cnJheXNPRVMoMSwgJmFycmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi1HQzNEYm9vbGVhbiBFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5
KQotewotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5
T0VTKQotICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotCi0gICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQotICAgICAg
ICBtX2dsQmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotfQotCi12b2lk
IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkcmF3QnVmZmVyc0VYVChHQzNEc2l6ZWkgLyogbiAqLywg
Y29uc3QgR0MzRGVudW0qIC8qIGJ1ZnMgKi8pCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0
aGUgc3VwcG9ydC4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1pbnQgRXh0ZW5zaW9uczNE
T3BlbkdMRVM6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotewotICAgIC8vIEZJWE1FOiBU
aGlzIGRvZXMgbm90IGNhbGwgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiwgYnV0IGluc3RlYWQg
Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVC4KLSAgICAvLyBUaGUgcmV0dXJuIGNvZGVzIGZyb20g
dGhlIHR3byBleHRlbnNpb25zIGFyZSBpZGVudGljYWwgYW5kIHRoZWlyIHB1cnBvc2UgaXMgdGhl
IHNhbWUsIHNvIGl0Ci0gICAgLy8gbWF5IGJlIGJlc3QgdG8gcmVuYW1lIGdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKSB0byBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzKCkuCi0gICAgaWYgKG1fY29u
dGV4dFJlc2V0U3RhdHVzICE9IEdMX05PX0VSUk9SKQotICAgICAgICByZXR1cm4gbV9jb250ZXh0
UmVzZXRTdGF0dXM7Ci0gICAgaWYgKG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIGludCByZWFz
b25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7Ci0gICAgICAgIGlm
IChyZWFzb25Gb3JSZXNldCAhPSBHTF9OT19FUlJPUikKLSAgICAgICAgICAgIG1fY29udGV4dFJl
c2V0U3RhdHVzID0gcmVhc29uRm9yUmVzZXQ7Ci0gICAgICAgIHJldHVybiByZWFzb25Gb3JSZXNl
dDsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3Bl
bkdMRVM6OnJlYWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBi
dWZTaXplLCB2b2lkICpkYXRhKQotewotICAgIGlmIChtX2dsUmVhZG5QaXhlbHNFWFQpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgLy8gRklYTUU6
IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhl
ZCwgaS5lLiwKLSAgICAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQg
YmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgICAgIDo6Z2xGbHVzaCgpOwotCi0g
ICAgICAgIC8vIEZJWE1FOiBJZiBub24tQmxhY2tCZXJyeSBwbGF0Zm9ybXMgdXNlIHRoaXMsIHRo
ZXkgd2lsbCBuZWVkIHRvIGltcGxlbWVudAotICAgICAgICAvLyB0aGVpciBhbnRpLWFsaWFzaW5n
IGNvZGUgaGVyZS4KLSAgICAgICAgbV9nbFJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Z2V0blVuaWZvcm1mdkVYVChHQzNE
dWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBmbG9hdCAqcGFy
YW1zKQotewotICAgIGlmIChtX2dsR2V0blVuaWZvcm1mdkVYVCkgewotICAgICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2dsR2V0blVuaWZvcm1mdkVYVChw
cm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpnZXRuVW5pZm9ybWl2RVhUKEdD
M0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFy
YW1zKQotewotICAgIGlmIChtX2dsR2V0blVuaWZvcm1pdkVYVCkgewotICAgICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2dsR2V0blVuaWZvcm1pdkVYVChw
cm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkcmF3QXJyYXlzSW5zdGFuY2Vk
KEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVp
IHByaW1jb3VudCkKLXsKLSAgICBpZiAoIW1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUpIHsK
LSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3Qs
IGNvdW50LCBwcmltY291bnQpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlm
ICghbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2ds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQp
OwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdD
M0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQotewotICAgIGlmICghbV9nbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9nbFZlcnRleEF0dHJpYkRpdmlz
b3JBTkdMRShpbmRleCwgZGl2aXNvcik7Ci19Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6
OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIGlmICghbV9zdXBwb3J0
c09FU3ZlcnRleEFycmF5T2JqZWN0ICYmIG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IikgewotICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xC
aW5kVmVydGV4QXJyYXlPRVMiKSk7Ci0gICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VT
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFBy
b2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKLSAgICAgICAgICAgIG1fZ2xEZWxl
dGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJS
QVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIikp
OwotICAgICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBG
TkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJy
YXlPRVMiKSk7Ci0gICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVy
VG9UZXh0dXJlICYmIG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1
cmUiKSB7Ci0gICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlN
RyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExF
SU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNh
bXBsZUlNRyIpKTsKLSAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FN
UExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlSU1HIikpOwotICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRl
clRvVGV4dHVyZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1fZ2xHZXRHcmFwaGljc1Jl
c2V0U3RhdHVzRVhUICYmIG5hbWUgPT0gIkdMX0VYVF9yb2J1c3RuZXNzIikgewotICAgICAgICAg
ICAgbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdM
R0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdldEdy
YXBoaWNzUmVzZXRTdGF0dXNFWFQiKSk7Ci0gICAgICAgICAgICBtX2dsUmVhZG5QaXhlbHNFWFQg
PSByZWludGVycHJldF9jYXN0PFBGTkdMUkVBRE5QSVhFTFNFWFRQUk9DPihlZ2xHZXRQcm9jQWRk
cmVzcygiZ2xSZWFkblBpeGVsc0VYVCIpKTsKLSAgICAgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWZ2
RVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVE5VTklGT1JNRlZFWFRQUk9DPihlZ2xHZXRQ
cm9jQWRkcmVzcygiZ2xHZXRuVW5pZm9ybWZ2RVhUIikpOwotICAgICAgICAgICAgbV9nbEdldG5V
bmlmb3JtaXZFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUTlVOSUZPUk1JVkVYVFBST0M+
KGVnbEdldFByb2NBZGRyZXNzKCJnbEdldG5Vbmlmb3JtaXZFWFQiKSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIW1fc3VwcG9ydHNBTkdMRWluc3RhbmNlZEFycmF5cyAmJiBuYW1lID09ICJHTF9BTkdM
RV9pbnN0YW5jZWRfYXJyYXlzIikgewotICAgICAgICAgICAgbV9nbFZlcnRleEF0dHJpYkRpdmlz
b3JBTkdMRSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQ
Uk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiKSk7Ci0g
ICAgICAgICAgICBtX2dsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFID0gcmVpbnRlcnByZXRfY2Fz
dDxQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MgPihlZ2xHZXRQcm9jQWRkcmVzcygi
Z2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiKSk7Ci0gICAgICAgICAgICBtX2dsRHJhd0VsZW1l
bnRzSW5zdGFuY2VkQU5HTEUgPSByZWludGVycHJldF9jYXN0PFBGTkdMRFJBV0VMRU1FTlRTSU5T
VEFOQ0VEQU5HTEVQUk9DID4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRHJhd0VsZW1lbnRzSW5zdGFu
Y2VkQU5HTEUiKSk7Ci0gICAgICAgICAgICBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJheXMg
PSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9kcmF3X2J1ZmZlcnMi
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoZSBzdXBwb3J0LgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTEVT
OjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0Qp
Ci0KLSNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc3MmZjNmRlMzdiOTgxNjlmY2IzZDVkYmZj
ZWRkYTFmNjE2NDQ2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uaCIKLQotI2lmIFVTRShPUEVOR0xfRVMpCi0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVk
ZSA8ZXBveHkvZ2wuaD4KLSNlbHNlCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jaW5jbHVkZSA8
R0xFUzIvZ2wyZXh0Lmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBHTF9FWFRfcm9idXN0bmVzcwotLyog
cmV1c2UgR0xfTk9fRVJST1IgKi8KLSNkZWZpbmUgR0xfR1VJTFRZX0NPTlRFWFRfUkVTRVRfRVhU
IDB4ODI1MwotI2RlZmluZSBHTF9JTk5PQ0VOVF9DT05URVhUX1JFU0VUX0VYVCAweDgyNTQKLSNk
ZWZpbmUgR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUX0VYVCAweDgyNTUKLSNkZWZpbmUgR0xfQ09O
VEVYVF9ST0JVU1RfQUNDRVNTX0VYVCAweDkwRjMKLSNkZWZpbmUgR0xfUkVTRVRfTk9USUZJQ0FU
SU9OX1NUUkFURUdZX0VYVCAweDgyNTYKLSNkZWZpbmUgR0xfTE9TRV9DT05URVhUX09OX1JFU0VU
X0VYVCAweDgyNTIKLSNkZWZpbmUgR0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0VYVCAweDgyNjEK
LSNlbmRpZgotCi0jaWZuZGVmIEdMX0VYVF9yb2J1c3RuZXNzCi0jZGVmaW5lIEdMX0VYVF9yb2J1
c3RuZXNzIDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIEdDM0RlbnVt
IEdMX0FQSUVOVFJZIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCh2b2lkKTsKLUdMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRuUGl4ZWxzRVhUKEdMaW50IHgsIEdMaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSk7Ci1HTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xHZXRuVW5pZm9ybWZ2RVhUKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpOwotR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsR2V0blVuaWZvcm1pdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLSNlbmRpZgotdHlwZWRl
ZiBHQzNEZW51bSAoR0xfQVBJRU5UUllQIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBS
T0MpICh2b2lkKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBRE5QSVhFTFNF
WFRQUk9DKSAoR0xpbnQgeCwgR0xpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2
b2lkICpkYXRhKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUTlVOSUZPUk1G
VkVYVFBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZT
aXplLCBmbG9hdCAqcGFyYW1zKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VU
TlVOSUZPUk1JVkVYVFBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0Rz
aXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTIDogcHVibGljIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCi0gICAg
RXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqLCBib29sIHVzZUluZGV4ZWRH
ZXRTdHJpbmcpOwotICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTEVTKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRh
cmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1w
bGVzKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1H
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KTsKLQotICAgIC8vIEV4dGVuc2lvbjNEIG1ldGhvZHMKLSAgICBib29sIGlzRW5hYmxlZChj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNy
Y1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25n
IGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2ln
bmVkIGxvbmcgZmlsdGVyKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25z
dCBTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpIG92
ZXJyaWRlOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7Ci0gICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3Qg
R0MzRGVudW0qKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmlt
Y291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKLQotICAgIC8v
IEVYVCBSb2J1c3RuZXNzIC0gcmVzZXQKLSAgICBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpIG92ZXJyaWRlOwotCi0gICAgLy8gRVhUIFJvYnVzdG5lc3MgLSBldGMKLSAgICB2b2lkIHJl
YWRuUGl4ZWxzRVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2
b2lkICpkYXRhKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsKLQot
cHJvdGVjdGVkOgotICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIGdldEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKLQotICAgIEdDM0Rl
bnVtIG1fY29udGV4dFJlc2V0U3RhdHVzOwotCi0gICAgYm9vbCBtX3N1cHBvcnRzT0VTdmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgYm9vbCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9U
ZXh0dXJlOwotICAgIGJvb2wgbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzOwotCi0gICAg
UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQyBtX2dsRnJhbWVidWZm
ZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKLSAgICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VN
VUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRzsK
LSAgICBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUzsK
LSAgICBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUzsKLSAgICBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MgbV9nbEdlblZlcnRleEFycmF5
c09FUzsKLSAgICBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5T0VT
OwotICAgIFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0MgbV9nbEdldEdyYXBoaWNz
UmVzZXRTdGF0dXNFWFQ7Ci0gICAgUEZOR0xSRUFETlBJWEVMU0VYVFBST0MgbV9nbFJlYWRuUGl4
ZWxzRVhUOwotICAgIFBGTkdMR0VUTlVOSUZPUk1GVkVYVFBST0MgbV9nbEdldG5Vbmlmb3JtZnZF
WFQ7Ci0gICAgUEZOR0xHRVROVU5JRk9STUlWRVhUUFJPQyBtX2dsR2V0blVuaWZvcm1pdkVYVDsK
LSAgICBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MgbV9nbFZlcnRleEF0dHJpYkRp
dmlzb3JBTkdMRTsKLSAgICBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MgbV9nbERy
YXdBcnJheXNJbnN0YW5jZWRBTkdMRTsKLSAgICBQRk5HTERSQVdFTEVNRU5UU0lOU1RBTkNFREFO
R0xFUFJPQyBtX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEU7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGNiM2Q2OGQ3ODk3ODI3NGNhMjlkMjJhMmY5NDg5YjI4
NGYyMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAKQEAgLTAsMCArMSwzMTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCisK
KyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wuaCIKKworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPE9w
ZW5HTEVTL0VTMi9nbGV4dC5oPgorI2VsaWYgVVNFKE9QRU5HTCkKKyNpbmNsdWRlIDxPcGVuR0wv
Z2wuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTEVTSU9TLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitFeHRlbnNpb25zR0xPcGVuR0w6OkV4dGVuc2lvbnNHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDogRXh0
ZW5zaW9uc0dMT3BlbkdMQ29tbW9uKGNvbnRleHQsIHVzZUluZGV4ZWRHZXRTdHJpbmcpCit7Cit9
CisKK0V4dGVuc2lvbnNHTE9wZW5HTDo6fkV4dGVuc2lvbnNHTE9wZW5HTCgpID0gZGVmYXVsdDsK
KworCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAs
IGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0
WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQg
bG9uZyBmaWx0ZXIpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisg
ICAgVU5VU0VEX1BBUkFNKHNyY1gwKTsKKyAgICBVTlVTRURfUEFSQU0oc3JjWTApOworICAgIFVO
VVNFRF9QQVJBTShzcmNYMSk7CisgICAgVU5VU0VEX1BBUkFNKHNyY1kxKTsKKyAgICBVTlVTRURf
UEFSQU0oZHN0WDApOworICAgIFVOVVNFRF9QQVJBTShkc3RZMCk7CisgICAgVU5VU0VEX1BBUkFN
KGRzdFgxKTsKKyAgICBVTlVTRURfUEFSQU0oZHN0WTEpOworICAgIFVOVVNFRF9QQVJBTShtYXNr
KTsKKyAgICBVTlVTRURfUEFSQU0oZmlsdGVyKTsKKyAgICA6OmdsUmVzb2x2ZU11bHRpc2FtcGxl
RnJhbWVidWZmZXJBUFBMRSgpOworI2Vsc2UKKyAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFz
aywgZmlsdGVyKTsKKyNlbmRpZgorfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6cmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVFWFQodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uc0dMT3BlbkdMOjpjcmVh
dGVWZXJ0ZXhBcnJheU9FUygpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTHVpbnQgYXJyYXkgPSAwOworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
V0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAgIGlmIChpc1Zl
cnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCisgICAgICAgIGdsR2VuVmVydGV4QXJyYXlzKDEs
ICZhcnJheSk7CisjZWxpZiBkZWZpbmVkKEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QpICYm
IEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBnbEdlblZlcnRleEFycmF5c0FQUExF
KDEsICZhcnJheSk7CisjZW5kaWYKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5
KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4p
IHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCisgICAgaWYgKGlzVmVydGV4
QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKKyAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwg
JmFycmF5KTsKKyNlbGlmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYg
R0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdAorICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzQVBQ
TEUoMSwgJmFycmF5KTsKKyNlbmRpZgorfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVu
R0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAo
IWFycmF5KQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSB8fCAo
UExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAgIGlmIChpc1ZlcnRleEFycmF5
T2JqZWN0U3VwcG9ydGVkKCkpCisgICAgICAgIHJldHVybiBnbElzVmVydGV4QXJyYXkoYXJyYXkp
OworI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9BUFBM
RV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheUFQUExFKGFy
cmF5KTsKKyNlbmRpZgorICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBFeHRlbnNpb25z
R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQorewor
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCisg
ICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKKyAgICAgICAgZ2xCaW5kVmVy
dGV4QXJyYXkoYXJyYXkpOworI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0KSAmJiBHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgZ2xCaW5kVmVydGV4QXJy
YXlBUFBMRShhcnJheSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhcnJheSk7CisjZW5kaWYK
K30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6Omluc2VydEV2ZW50TWFya2VyRVhUKGNvbnN0
IFN0cmluZyYpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBh
ZGQgR0xfRVhUX2RlYnVnX21hcmtlciBpbiBzdXBwb3J0cygpLgorICAgIHJldHVybjsKK30KKwor
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OnB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcm
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VY
VF9kZWJ1Z19tYXJrZXIgaW4gc3VwcG9ydHMoKS4KKyAgICByZXR1cm47Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uc0dMT3BlbkdMOjpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0VYVF9kZWJ1Z19tYXJrZXIgaW4g
c3VwcG9ydHMoKS4KKyAgICByZXR1cm47Cit9CisKK2Jvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMOjpz
dXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVf
ZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJl
ICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNp
b25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUvR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCisg
ICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQorICAgICAgICByZXR1
cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfYmxp
dCIpOworICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0
ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyNl
bHNlCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VY
VF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworI2VuZGlmCisKKyAgICBpZiAobmFtZSA9PSAi
R0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpIHsKKyAgICAgICAgcmV0dXJuIChtX2F2YWlsYWJs
ZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl9pbnN0YW5jZWRfYXJyYXlzIikgfHwgbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfaW5zdGFuY2VkX2FycmF5cyIpKQorICAg
ICAgICAgICAgJiYgKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX2RyYXdf
aW5zdGFuY2VkIikgfHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZHJh
d19pbnN0YW5jZWQiKSk7CisgICAgfQorCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9zUkdCIikK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRl
bnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfc1JHQiIpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfc1JHQiIpICYmICht
X2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9zUkdCIikg
fHwgbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfZnJhbWVidWZmZXJfc1JH
QiIpKTsKKyNlbmRpZgorCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF9mcmFnX2RlcHRoIikKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYWdfZGVwdGgiKTsK
KyNlbmRpZgorCisgICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgR0xfT0VTX3JnYjhf
cmdiYTguCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3JnYmE4IikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9mbG9hdCBvciBHTF9PRVNfdGV4
dHVyZV9mbG9hdCBpcyBhdmFpbGFibGUgdGhlbiB3ZSByZXBvcnQKKyAgICAvLyBHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0LCBHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgYW5kIEdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIGFzIGF2YWlsYWJsZS4KKyAgICBpZiAobmFtZSA9PSAi
R0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIgfHwgbmFtZSA9PSAi
R0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKQorICAgICAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpIHx8IG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3RleHR1cmVfZmxvYXQiKTsKKworICAg
IC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgaWYgKG5hbWUgPT0gIkdMX09FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgeworI2lmIChQTEFURk9STShHVEspKQorICAgICAgICByZXR1
cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdmVydGV4X2FycmF5X29i
amVjdCIpOworI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgcmV0dXJuIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsK
KyNlbHNlCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdM
X0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERl
c2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBkZXJpdmF0aXZlIGZ1bmN0aW9u
cworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIFVOU0lH
TkVEX0lOVCBpbmRpY2VzCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19lbGVtZW50X2luZGV4X3Vp
bnQiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAKKyAgICBpZiAo
bmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIik7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX2RyYXdfYnVmZmVycyIp
IHsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVF
eHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOworI2VsaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShHVEspCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdM
X0FSQl9kcmF3X2J1ZmZlcnMiKTsKKyNlbHNlCisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
c3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zLgorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKKyAgICB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShJT1NfRkFN
SUxZX1NJTVVMQVRPUikKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xf
T0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX2Nv
bXByZXNzZWRfRVRDMV9SR0I4X3RleHR1cmUiCisgICAgICAgIHx8IG5hbWUgPT0gIkdMX0FOR0xF
X2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKSB7CisgICAgICAgIC8vIEltcGxpY2l0bHkgZW5hYmxl
ZCB3aXRoIEVTIDMuMCBjb250ZXh0cy4KKyAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+bV9pc0Zv
cldlYkdMMjsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMobmFtZSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVm
ZmVyc0VYVChHQzNEc2l6ZWkgbiwgY29uc3QgR0MzRGVudW0qIGJ1ZnMpCit7CisgICAgLy8gIEZJ
WE1FOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Igb3RoZXIgcGxhdGZvcm1zLgorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICA6OmdsRHJhd0J1ZmZlcnNBUkIobiwgYnVmcyk7CisjZWxpZiBQTEFURk9STShH
VEspCisgICAgOjpnbERyYXdCdWZmZXJzKG4sIGJ1ZnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0obik7CisgICAgVU5VU0VEX1BBUkFNKGJ1ZnMpOworI2VuZGlmCit9CisKK3ZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQg
Zmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICA6Omds
RHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisjZWxp
ZiBQTEFURk9STShDT0NPQSkKKyAgICA6OmdsRHJhd0FycmF5c0luc3RhbmNlZEFSQihtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtb2RlKTsK
KyAgICBVTlVTRURfUEFSQU0oZmlyc3QpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAg
VU5VU0VEX1BBUkFNKHByaW1jb3VudCk7CisjZW5kaWYKK30KKwordm9pZCBFeHRlbnNpb25zR0xP
cGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQp
Cit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNpZiBQTEFURk9STShH
VEspCisgICAgOjpnbERyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHBy
aW1jb3VudCk7CisjZWxpZiBQTEFURk9STShDT0NPQSkKKyAgICA6OmdsRHJhd0VsZW1lbnRzSW5z
dGFuY2VkQVJCKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0
YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKG1vZGUpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShw
cmltY291bnQpOworI2VuZGlmCit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKQoreworICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIDo6
Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyNlbGlmIFBMQVRGT1JNKENP
Q09BKQorICAgIDo6Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQVJCKGluZGV4LCBkaXZpc29yKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAgICBVTlVTRURfUEFSQU0oZGl2aXNvcik7
CisjZW5kaWYKK30KKworU3RyaW5nIEV4dGVuc2lvbnNHTE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygp
Cit7CisgICAgQVNTRVJUKCFtX3VzZUluZGV4ZWRHZXRTdHJpbmcpOworICAgIHJldHVybiBTdHJp
bmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJ
T05TKSkpOworfQorCisjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pIHx8IChQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpCitib29sIEV4dGVuc2lvbnNHTE9wZW5HTDo6
aXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpCit7CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c3VwcG9ydHNWZXJ0ZXhBcnJheU9iamVjdCA9IHN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5
X29iamVjdCIpOworICAgIHJldHVybiBzdXBwb3J0c1ZlcnRleEFycmF5T2JqZWN0OworfQorI2Vu
ZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0Uo
T1BFTkdMX0VTKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYzZTljOTQw
ZDI0ZDQ0MzhkYjE4MGE2ZTZlYTM1ZDc0ZjZlN2Y3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wuaApA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHRlbnNp
b25zR0xPcGVuR0xDb21tb24uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEV4dGVuc2lvbnNHTE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zR0xPcGVu
R0xDb21tb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8v
IFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wgaW1wbGVtZW50YXRpb25zLgorICAgIEV4dGVuc2lvbnNHTE9wZW5HTChHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCosIGJvb2wgdXNlSW5kZXhlZEdldFN0cmluZyk7CisgICAgdmly
dHVhbCB+RXh0ZW5zaW9uc0dMT3BlbkdMKCk7CisKKyAgICAvLyBFeHRlbnNpb25zR0wgbWV0aG9k
cy4KKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25n
IHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBs
b25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgb3ZlcnJp
ZGU7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKKyAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOworICAgIHZvaWQgaW5zZXJ0RXZlbnRNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgU3RyaW5nJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lkKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZTsK
KworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92ZXJyaWRlOworICAg
IHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkg
b3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBH
QzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgc3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0
RXh0ZW5zaW9ucygpIG92ZXJyaWRlOworCitwcml2YXRlOgorI2lmIFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKQorICAg
IGJvb2wgaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpOworI2VuZGlmCit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xDb21tb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdmNDk1YWNlOGVkZWU5NjYyYzlmNGNjNjM1NzI0OGFkODMyMWZmZjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmNwcApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykpCisjaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgiCisKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRn
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBQTEFURk9S
TShDT0NPQSkKKworI2lmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSA8T3BlbkdMRVMvRVMyL2ds
ZXh0Lmg+CisjaW5jbHVkZSA8T3BlbkdMRVMvRVMzL2dsLmg+CisjZWxzZQorI2RlZmluZSBHTF9E
T19OT1RfV0FSTl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVERUQKKyNpbmNsdWRl
IDxPcGVuR0wvZ2wuaD4KKyNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+CisjdW5kZWYgR0xfRE9fTk9U
X1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECisjZW5kaWYKKworI2Vs
c2UKKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eVNoaW1zLmgiCisjZWxpZiBV
U0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2Vu
ZGlmCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OkV4
dGVuc2lvbnNHTE9wZW5HTENvbW1vbihHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCwg
Ym9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4
dGVuc2lvbnMoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1faXNOVklE
SUEoZmFsc2UpCisgICAgLCBtX2lzQU1EKGZhbHNlKQorICAgICwgbV9pc0ludGVsKGZhbHNlKQor
ICAgICwgbV9pc0ltYWdpbmF0aW9uKGZhbHNlKQorICAgICwgbV9yZXF1aXJlc0J1aWx0SW5GdW5j
dGlvbkVtdWxhdGlvbihmYWxzZSkKKyAgICAsIG1fcmVxdWlyZXNSZXN0cmljdGVkTWF4aW11bVRl
eHR1cmVTaXplKGZhbHNlKQorICAgICwgbV91c2VJbmRleGVkR2V0U3RyaW5nKHVzZUluZGV4ZWRH
ZXRTdHJpbmcpCit7CisgICAgbV92ZW5kb3IgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKSk7CisgICAgbV9yZW5kZXJlciA9IFN0
cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1JFTkRF
UkVSKSkpOworCisgICAgVmVjdG9yPFN0cmluZz4gdmVuZG9yQ29tcG9uZW50cyA9IG1fdmVuZG9y
LmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3BsaXQoJyAnKTsKKyAgICBpZiAodmVuZG9yQ29t
cG9uZW50cy5jb250YWlucygibnZpZGlhIikpCisgICAgICAgIG1faXNOVklESUEgPSB0cnVlOwor
ICAgIGlmICh2ZW5kb3JDb21wb25lbnRzLmNvbnRhaW5zKCJhdGkiKSB8fCB2ZW5kb3JDb21wb25l
bnRzLmNvbnRhaW5zKCJhbWQiKSkKKyAgICAgICAgbV9pc0FNRCA9IHRydWU7CisgICAgaWYgKHZl
bmRvckNvbXBvbmVudHMuY29udGFpbnMoImludGVsIikpCisgICAgICAgIG1faXNJbnRlbCA9IHRy
dWU7CisgICAgaWYgKHZlbmRvckNvbXBvbmVudHMuY29udGFpbnMoImltYWdpbmF0aW9uIikpCisg
ICAgICAgIG1faXNJbWFnaW5hdGlvbiA9IHRydWU7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
aWYgKG1faXNBTUQgfHwgbV9pc0ludGVsKQorICAgICAgICBtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0
aW9uRW11bGF0aW9uID0gdHJ1ZTsKKworICAgIC8vIEludGVsIEhEIDMwMDAgZGV2aWNlcyBoYXZl
IHByb2JsZW1zIHdpdGggbGFyZ2UgdGV4dHVyZXMuIDxyZGFyOi8vcHJvYmxlbS8xNjY0OTE0MD4K
KyAgICBtX3JlcXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSA9IG1fcmVuZGVyZXIu
c3RhcnRzV2l0aCgiSW50ZWwgSEQgR3JhcGhpY3MgMzAwMCIpOworI2VuZGlmCit9CisKK0V4dGVu
c2lvbnNHTE9wZW5HTENvbW1vbjo6fkV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbigpID0gZGVmYXVs
dDsKKworYm9vbCBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OnN1cHBvcnRzKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKQor
ICAgICAgICBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworCisgICAgLy8gV2UgZXhw
bGljaXRseSBkbyBub3Qgc3VwcG9ydCB0aGlzIGV4dGVuc2lvbiB1bnRpbAorICAgIC8vIHdlIGZp
eCB0aGUgZm9sbG93aW5nIGJ1ZzoKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ5NzM0CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzdXBw
b3J0c0V4dGVuc2lvbihuYW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246
OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0
IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQorICAgICAgICBBTkdMRVdlYktpdEJy
aWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJ
blJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOworICAg
ICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgeworICAg
ICAgICAgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKKyAg
ICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKSB7CisgICAg
ICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQor
ICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGls
ZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVy
LmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLkVYVF9kcmF3X2J1
ZmZlcnMpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPSAx
OworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zR0w6Ok1BWF9E
UkFXX0JVRkZFUlNfRVhULCAmQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOworICAgICAg
ICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHsKKyAg
ICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkp
CisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21w
aWxlcjsKKyAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGls
ZXIuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuRVhUX3NoYWRl
cl90ZXh0dXJlX2xvZCkgeworICAgICAgICAgICAgQU5HTEVSZXNvdXJjZXMuRVhUX3NoYWRlcl90
ZXh0dXJlX2xvZCA9IDE7CisgICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVS
ZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChuYW1lID09ICJHTF9FWFRfZnJh
Z19kZXB0aCIpIHsKKyAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBl
bmFibGVkIGFscmVhZHkpCisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1f
Y29udGV4dC0+bV9jb21waWxlcjsKKyAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVz
b3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGlmICghQU5HTEVSZXNv
dXJjZXMuRVhUX2ZyYWdfZGVwdGgpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLkVYVF9m
cmFnX2RlcHRoID0gMTsKKyAgICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJl
c291cmNlcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRXh0ZW5zaW9uc0dMT3BlbkdM
Q29tbW9uOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09
ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIEFOR0xFV2ViS2l0QnJp
ZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKyAgICAgICAgcmV0dXJuIGNv
bXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlczsKKyAgICB9Cisg
ICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUpOworfQorCitpbnQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0R0w6Ok5PX0VSUk9SOworfQorCitTdHJpbmcgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9u
OjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Cit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaW50IEdMc2hhZGVyVHlwZTsKKyAgICBBTkdM
RVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxl
ciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKworICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYo
c2hhZGVyLCBHcmFwaGljc0NvbnRleHRHTDo6U0hBREVSX1RZUEUsICZHTHNoYWRlclR5cGUpOwor
CisgICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VkVSVEVYX1NIQURF
UikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlIGlm
IChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQUdNRU5UX1NIQURFUikKKyAg
ICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuICIiOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0
Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6U2hhZGVyU291cmNlRW50cnk+
OjppdGVyYXRvciByZXN1bHQgPSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5l
bmQoKSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisKKyAgICBTdHJpbmcg
dHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKKyAgICB1
aW50NjRfdCBleHRyYUNvbXBpbGVPcHRpb25zID0gU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9V
TkRTIHwgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMg
fCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TIHwgU0hfTElNSVRfRVhQUkVTU0lPTl9D
T01QTEVYSVRZIHwgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCB8IFNIX0lOSVRJQUxJWkVfVU5J
TklUSUFMSVpFRF9MT0NBTFM7CisKKyAgICBpZiAobV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVt
dWxhdGlvbikKKyAgICAgICAgZXh0cmFDb21waWxlT3B0aW9ucyB8PSBTSF9FTVVMQVRFX0FCU19J
TlRfRlVOQ1RJT047CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPEFOR0xFU2hhZGVyU3ltYm9sVHlw
ZSwgc2g6OlNoYWRlclZhcmlhYmxlPj4gc3ltYm9sczsKKyAgICBib29sIGlzVmFsaWQgPSBjb21w
aWxlci5jb21waWxlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFk
ZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nLCBzeW1ib2xzLCBl
eHRyYUNvbXBpbGVPcHRpb25zKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7Cisg
ICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBmb3IgKGNvbnN0IHN0ZDo6cGFpcjxB
TkdMRVNoYWRlclN5bWJvbFR5cGUsIHNoOjpTaGFkZXJWYXJpYWJsZT4mIHBhaXIgOiBzeW1ib2xz
KSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lID0gcGFpci5zZWNvbmQubmFtZTsK
KyAgICAgICAgZW50cnkuc3ltYm9sTWFwKHBhaXIuZmlyc3QpLnNldChTdHJpbmcobmFtZS5jX3N0
cigpLCBuYW1lLmxlbmd0aCgpKSwgcGFpci5zZWNvbmQpOworICAgIH0KKworICAgIGlmICghaXNW
YWxpZCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZh
aWxhYmxlRXh0ZW5zaW9ucygpCit7CisjaWYgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdM
KSkgfHwgKFBMQVRGT1JNKEdUSykgJiYgIVVTRShPUEVOR0xfRVMpKQorICAgIGlmIChtX3VzZUlu
ZGV4ZWRHZXRTdHJpbmcpIHsKKyAgICAgICAgR0xpbnQgbnVtRXh0ZW5zaW9ucyA9IDA7CisgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9OVU1fRVhURU5TSU9OUywgJm51bUV4dGVuc2lvbnMpOwor
ICAgICAgICBmb3IgKEdMaW50IGkgPSAwOyBpIDwgbnVtRXh0ZW5zaW9uczsgKytpKQorICAgICAg
ICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChnbEdldFN0cmluZ2koR0xfRVhURU5TSU9O
UywgaSkpOworCisgICAgICAgIGlmICghbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJH
TF9BUkJfdGV4dHVyZV9zdG9yYWdlIl9zKSkgeworICAgICAgICAgICAgR0xpbnQgbWFqb3JWZXJz
aW9uOworICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9NQUpPUl9WRVJTSU9OLCAmbWFqb3JW
ZXJzaW9uKTsKKyAgICAgICAgICAgIEdMaW50IG1pbm9yVmVyc2lvbjsKKyAgICAgICAgICAgIGds
R2V0SW50ZWdlcnYoR0xfTUlOT1JfVkVSU0lPTiwgJm1pbm9yVmVyc2lvbik7CisgICAgICAgICAg
ICBpZiAobWFqb3JWZXJzaW9uID4gNCB8fCAobWFqb3JWZXJzaW9uID09IDQgJiYgbWlub3JWZXJz
aW9uID49IDIpKQorICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoIkdM
X0FSQl90ZXh0dXJlX3N0b3JhZ2UiX3MpOworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYK
KyAgICB7CisgICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gZ2V0RXh0ZW5zaW9ucygp
OworICAgICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQo
JyAnKSkKKyAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoZXh0ZW5zaW9uKTsK
KyAgICB9CisgICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOworfQor
Cit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6cmVhZG5QaXhlbHNFWFQoaW50LCBpbnQs
IEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgdm9p
ZCAqKQoreworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTENvbW1vbjo6Z2V0blVuaWZvcm1m
dkVYVChHQzNEdWludCwgaW50LCBHQzNEc2l6ZWksIGZsb2F0ICopCit7CisgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOjpnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50LCBpbnQsIEdD
M0RzaXplaSwgaW50ICopCit7CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9Q
RU5HTF9FUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDA2YjE1YjFhNzEwOTQwNjc4NWNjZGRiZWE3OWQ2MjgzNWZiM2M5ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xP
cGVuR0xDb21tb24uaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uIDogcHVibGljIEV4dGVuc2lvbnNHTCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uc0dM
T3BlbkdMQ29tbW9uKCk7CisKKyAgICAvLyBFeHRlbnNpb25zR0wgbWV0aG9kcy4KKyAgICBib29s
IHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgZW5zdXJlRW5hYmxl
ZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBib29sIGlzRW5hYmxlZChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIG92ZXJy
aWRlOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJy
aWRlID0gMDsKKyAgICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlID0gMDsKKyAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlID0gMDsKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZSA9IDA7CisKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdD
M0RzaXplaSwgY29uc3QgR0MzRGVudW0qKSBvdmVycmlkZSA9IDA7CisKKyAgICBTdHJpbmcgZ2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwor
CisgICAgLy8gRVhUIFJvYnVzdG5lc3MgLSB1c2VzIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIo
KQorICAgIHZvaWQgcmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNp
emVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0blVuaWZvcm1m
dkVYVChHQzNEdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBidWZTaXplLCBm
bG9hdCAqcGFyYW1zKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldG5Vbmlmb3JtaXZFWFQoR0MzRHVp
bnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMp
IG92ZXJyaWRlOworCisgICAgYm9vbCBpc05WSURJQSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNO
VklESUE7IH0KKyAgICBib29sIGlzQU1EKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc0FNRDsgfQor
ICAgIGJvb2wgaXNJbnRlbCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNJbnRlbDsgfQorICAgIGJv
b2wgaXNJbWFnaW5hdGlvbigpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNJbWFnaW5hdGlvbjsgfQor
ICAgIFN0cmluZyB2ZW5kb3IoKSBvdmVycmlkZSB7IHJldHVybiBtX3ZlbmRvcjsgfQorCisgICAg
Ym9vbCByZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbigpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb247IH0KKyAgICBib29sIHJlcXVpcmVz
UmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWly
ZXNSZXN0cmljdGVkTWF4aW11bVRleHR1cmVTaXplOyB9CisKK3Byb3RlY3RlZDoKKyAgICBmcmll
bmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMRVM7CisgICAgRXh0ZW5zaW9uc0dMT3BlbkdMQ29t
bW9uKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKTsK
KworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAgIGJvb2wgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxl
RXh0ZW5zaW9uczsKKworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMCisgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIG1fY29udGV4dDsKKworICAg
IGJvb2wgbV9pc05WSURJQTsKKyAgICBib29sIG1faXNBTUQ7CisgICAgYm9vbCBtX2lzSW50ZWw7
CisgICAgYm9vbCBtX2lzSW1hZ2luYXRpb247CisgICAgYm9vbCBtX3JlcXVpcmVzQnVpbHRJbkZ1
bmN0aW9uRW11bGF0aW9uOworICAgIGJvb2wgbV9yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4
dHVyZVNpemU7CisKKyAgICBib29sIG1fdXNlSW5kZXhlZEdldFN0cmluZyB7IGZhbHNlIH07CisK
KyAgICBTdHJpbmcgbV92ZW5kb3I7CisgICAgU3RyaW5nIG1fcmVuZGVyZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yYjFkMGQxOTdlYzQ5MDdiOGEyYzEzNzQxZjhjZjAyYWIyNDdhZDlhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnNHTE9wZW5HTEVTLmNwcApAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlICJF
eHRlbnNpb25zR0xPcGVuR0xFUy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgIkVwb3h5RUdMLmgiCisj
ZWxzZQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0V4dGVuc2lvbnNHTE9wZW5HTEVTOjpFeHRlbnNpb25zR0xPcGVuR0xFUyhHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCogY29udGV4dCwgYm9vbCB1c2VJbmRleGVkR2V0U3RyaW5nKQorICAgIDog
RXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uKGNvbnRleHQsIHVzZUluZGV4ZWRHZXRTdHJpbmcpCisg
ICAgLCBtX2NvbnRleHRSZXNldFN0YXR1cyhHTF9OT19FUlJPUikKKyAgICAsIG1fc3VwcG9ydHNP
RVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBs
ZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCisgICAgLCBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRB
cnJheXMoZmFsc2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlN
RygwKQorICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQorICAg
ICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUygwKQorICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbElzVmVy
dGV4QXJyYXlPRVMoMCkKKyAgICAsIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKDApCisg
ICAgLCBtX2dsUmVhZG5QaXhlbHNFWFQoMCkKKyAgICAsIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKDAp
CisgICAgLCBtX2dsR2V0blVuaWZvcm1pdkVYVCgwKQorICAgICwgbV9nbFZlcnRleEF0dHJpYkRp
dmlzb3JBTkdMRShudWxscHRyKQorICAgICwgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShu
dWxscHRyKQorICAgICwgbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG51bGxwdHIpCit7
Cit9CisKK0V4dGVuc2lvbnNHTE9wZW5HTEVTOjp+RXh0ZW5zaW9uc0dMT3BlbkdMRVMoKSA9IGRl
ZmF1bHQ7CisKK2Jvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzRW5hYmxlZChjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgLy8gUmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5IGlmIHRoZSBleHRl
bnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVycy4KKyAgICBib29sIGVuYWJsZWQg
PSBFeHRlbnNpb25zR0xPcGVuR0xDb21tb246OmlzRW5hYmxlZChuYW1lKTsKKyAgICBpZiAoIWVu
YWJsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZvciBHTF9FWFRfcm9idXN0
bmVzcywgY2hlY2sgdGhhdCB0aGUgY29udGV4dCBzdXBwb3J0cyByb2J1c3QgYWNjZXNzLgorICAg
IGlmIChuYW1lID09ICJHTF9FWFRfcm9idXN0bmVzcyIpIHsKKyAgICAgICAgR0xpbnQgcm9idXN0
QWNjZXNzID0gR0xfRkFMU0U7CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5z
aW9uc0dMOjpDT05URVhUX1JPQlVTVF9BQ0NFU1MsICZyb2J1c3RBY2Nlc3MpOworICAgICAgICBy
ZXR1cm4gcm9idXN0QWNjZXNzID09IEdMX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVu
dCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIHRleHR1cmUsIGludCBsZXZlbCwg
dW5zaWduZWQgbG9uZyBzYW1wbGVzKQoreworICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJl
MkRNdWx0aXNhbXBsZUlNRykKKyAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlz
YW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBz
YW1wbGVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpy
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKG1fZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xF
Uzo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgLyogc3JjWDAgKi8sIGxvbmcgLyogc3JjWTAgKi8sIGxv
bmcgLyogc3JjWDEgKi8sIGxvbmcgLyogc3JjWTEgKi8sIGxvbmcgLyogZHN0WDAgKi8sIGxvbmcg
LyogZHN0WTAgKi8sIGxvbmcgLyogZHN0WDEgKi8sIGxvbmcgLyogZHN0WTEgKi8sIHVuc2lnbmVk
IGxvbmcgLyogbWFzayAqLywgdW5zaWduZWQgbG9uZyAvKiBmaWx0ZXIgKi8pCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgZWxzZQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV4dGVuc2lvbnNH
TE9wZW5HTEVTOjppbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnB1c2hHcm91
cE1hcmtlckVYVChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnBvcEdyb3VwTWFya2VyRVhUKHZvaWQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zR0xP
cGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMpIHsKKyAgICAg
ICAgR0x1aW50IGFycmF5ID0gMDsKKyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5c09FUygxLCAm
YXJyYXkpOworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbERlbGV0
ZVZlcnRleEFycmF5c09FUykKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygxLCAm
YXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYg
KCFhcnJheSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMpCisgICAgICAg
IHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CisKKyAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMpCisgICAgICAgIG1fZ2xCaW5kVmVy
dGV4QXJyYXlPRVMoYXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM6OmRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSAvKiBuICovLCBjb25zdCBHQzNEZW51
bSogLyogYnVmcyAqLykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoZSBzdXBwb3J0Lgor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2ludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3Qg
Y2FsbCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCLCBidXQgaW5zdGVhZCBnZXRHcmFwaGljc1Jl
c2V0U3RhdHVzRVhULgorICAgIC8vIFRoZSByZXR1cm4gY29kZXMgZnJvbSB0aGUgdHdvIGV4dGVu
c2lvbnMgYXJlIGlkZW50aWNhbCBhbmQgdGhlaXIgcHVycG9zZSBpcyB0aGUgc2FtZSwgc28gaXQK
KyAgICAvLyBtYXkgYmUgYmVzdCB0byByZW5hbWUgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
IHRvIGdldEdyYXBoaWNzUmVzZXRTdGF0dXMoKS4KKyAgICBpZiAobV9jb250ZXh0UmVzZXRTdGF0
dXMgIT0gR0xfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBtX2NvbnRleHRSZXNldFN0YXR1czsK
KyAgICBpZiAobV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQpIHsKKyAgICAgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgaW50IHJlYXNvbkZvclJlc2V0ID0g
bV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQoKTsKKyAgICAgICAgaWYgKHJlYXNvbkZvclJl
c2V0ICE9IEdMX05PX0VSUk9SKQorICAgICAgICAgICAgbV9jb250ZXh0UmVzZXRTdGF0dXMgPSBy
ZWFzb25Gb3JSZXNldDsKKyAgICAgICAgcmV0dXJuIHJlYXNvbkZvclJlc2V0OworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5Q
aXhlbHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUsIHZvaWQg
KmRhdGEpCit7CisgICAgaWYgKG1fZ2xSZWFkblBpeGVsc0VYVCkgeworICAgICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0
d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAg
ICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9y
ZSByZWFkaW5nIHBpeGVscy4KKyAgICAgICAgOjpnbEZsdXNoKCk7CisKKyAgICAgICAgLy8gRklY
TUU6IElmIG5vbi1CbGFja0JlcnJ5IHBsYXRmb3JtcyB1c2UgdGhpcywgdGhleSB3aWxsIG5lZWQg
dG8gaW1wbGVtZW50CisgICAgICAgIC8vIHRoZWlyIGFudGktYWxpYXNpbmcgY29kZSBoZXJlLgor
ICAgICAgICBtX2dsUmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBidWZTaXplLCBkYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lk
IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDM0R1aW50IHByb2dyYW0s
IGludCBsb2NhdGlvbiwgR0MzRHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpCit7CisgICAg
aWYgKG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBwYXJhbXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3Zv
aWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQoR0MzRHVpbnQgcHJvZ3Jh
bSwgaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgaW50ICpwYXJhbXMpCit7CisgICAg
aWYgKG1fZ2xHZXRuVW5pZm9ybWl2RVhUKSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWl2RVhUKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBwYXJhbXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3Zv
aWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQor
eworICAgIGlmICghbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSkgeworICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgbV9nbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcg
bG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgaWYgKCFtX2dsRHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkQU5HTEUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fZ2xEcmF3RWxlbWVudHNJ
bnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQq
PihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7Cit9CisKK3ZvaWQg
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgs
IEdDM0R1aW50IGRpdmlzb3IpCit7CisgICAgaWYgKCFtX2dsVmVydGV4QXR0cmliRGl2aXNvckFO
R0xFKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2dsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4
LCBkaXZpc29yKTsKK30KKworYm9vbCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6c3VwcG9ydHNFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgaWYgKCFtX3N1cHBvcnRzT0VTdmVydGV4QXJy
YXlPYmplY3QgJiYgbmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSB7CisgICAg
ICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJJ
TkRWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJpbmRWZXJ0ZXhBcnJh
eU9FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJl
dF9jYXN0PFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImds
R2VuVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DPihl
Z2xHZXRQcm9jQWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7CisgICAgICAgICAg
ICBtX2dsSXNWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJU1ZFUlRFWEFS
UkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJheU9FUyIpKTsKKyAg
ICAgICAgICAgIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAoIW1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgJiYg
bmFtZSA9PSAiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpIHsKKyAgICAg
ICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnBy
ZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DPihlZ2xH
ZXRQcm9jQWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HIikpOwor
ICAgICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DPihl
Z2xHZXRQcm9jQWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUciKSk7
CisgICAgICAgICAgICBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQg
JiYgbmFtZSA9PSAiR0xfRVhUX3JvYnVzdG5lc3MiKSB7CisgICAgICAgICAgICBtX2dsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0VYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQSElDU1JF
U0VUU1RBVFVTRVhUUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2V0R3JhcGhpY3NSZXNldFN0
YXR1c0VYVCIpKTsKKyAgICAgICAgICAgIG1fZ2xSZWFkblBpeGVsc0VYVCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UEZOR0xSRUFETlBJWEVMU0VYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFJlYWRu
UGl4ZWxzRVhUIikpOworICAgICAgICAgICAgbV9nbEdldG5Vbmlmb3JtZnZFWFQgPSByZWludGVy
cHJldF9jYXN0PFBGTkdMR0VUTlVOSUZPUk1GVkVYVFBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJn
bEdldG5Vbmlmb3JtZnZFWFQiKSk7CisgICAgICAgICAgICBtX2dsR2V0blVuaWZvcm1pdkVYVCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVROVU5JRk9STUlWRVhUUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsR2V0blVuaWZvcm1pdkVYVCIpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9zdXBw
b3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzICYmIG5hbWUgPT0gIkdMX0FOR0xFX2luc3RhbmNlZF9h
cnJheXMiKSB7CisgICAgICAgICAgICBtX2dsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFID0gcmVp
bnRlcnByZXRfY2FzdDxQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0M+KGVnbEdldFBy
b2NBZGRyZXNzKCJnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSIpKTsKKyAgICAgICAgICAgIG1f
Z2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUgPSByZWludGVycHJldF9jYXN0PFBGTkdMRFJBV0FS
UkFZU0lOU1RBTkNFREFOR0xFUFJPQyA+KGVnbEdldFByb2NBZGRyZXNzKCJnbERyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRSIpKTsKKyAgICAgICAgICAgIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRB
TkdMRSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBS
T0MgPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIpKTsK
KyAgICAgICAgICAgIG1fc3VwcG9ydHNBTkdMRWluc3RhbmNlZEFycmF5cyA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfRVhUX2RyYXdfYnVmZmVycyIpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhlIHN1cHBvcnQuCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitTdHJpbmcgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEV4dGVuc2lv
bnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
OjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKworI2VuZGlmIC8v
IFVTRShPUEVOR0xfRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFk
MWM2YzBhODA2YzMxOWFiNjE5NjU4ZmQwNmY0ZWU1NDRiZWI0YmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3Bl
bkdMRVMuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uLmgiCisKKyNpZiBVU0Uo
T1BFTkdMX0VTKQorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+Cisj
ZWxzZQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgor
I2VuZGlmCisKKyNpZm5kZWYgR0xfRVhUX3JvYnVzdG5lc3MKKy8qIHJldXNlIEdMX05PX0VSUk9S
ICovCisjZGVmaW5lIEdMX0dVSUxUWV9DT05URVhUX1JFU0VUX0VYVCAweDgyNTMKKyNkZWZpbmUg
R0xfSU5OT0NFTlRfQ09OVEVYVF9SRVNFVF9FWFQgMHg4MjU0CisjZGVmaW5lIEdMX1VOS05PV05f
Q09OVEVYVF9SRVNFVF9FWFQgMHg4MjU1CisjZGVmaW5lIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VT
U19FWFQgMHg5MEYzCisjZGVmaW5lIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQg
MHg4MjU2CisjZGVmaW5lIEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQgMHg4MjUyCisjZGVm
aW5lIEdMX05PX1JFU0VUX05PVElGSUNBVElPTl9FWFQgMHg4MjYxCisjZW5kaWYKKworI2lmbmRl
ZiBHTF9FWFRfcm9idXN0bmVzcworI2RlZmluZSBHTF9FWFRfcm9idXN0bmVzcyAxCisjaWZkZWYg
R0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCBHQzNEZW51bSBHTF9BUElFTlRSWSBnbEdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xSZWFkblBpeGVsc0VYVChHTGludCB4LCBHTGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVp
IGJ1ZlNpemUsIHZvaWQgKmRhdGEpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0
blVuaWZvcm1mdkVYVChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBi
dWZTaXplLCBmbG9hdCAqcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdl
dG5Vbmlmb3JtaXZFWFQoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisjZW5kaWYKK3R5cGVkZWYgR0MzRGVudW0gKEdMX0FQ
SUVOVFJZUCBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DKSAodm9pZCk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQUROUElYRUxTRVhUUFJPQykgKEdMaW50IHgs
IEdMaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklGT1JNRlZFWFRQUk9DKSAoR0x1aW50
IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFt
cyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklGT1JNSVZFWFRQUk9D
KSAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0xp
bnQgKnBhcmFtcyk7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRl
bnNpb25zR0xPcGVuR0xFUyA6IHB1YmxpYyBFeHRlbnNpb25zR0xPcGVuR0xDb21tb24geworcHVi
bGljOgorICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgaW1wbGVtZW50YXRpb25zLgorICAgIEV4dGVuc2lvbnNH
TE9wZW5HTEVTKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgYm9vbCB1c2VJbmRleGVkR2V0U3Ry
aW5nKTsKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zR0xPcGVuR0xFUygpOworCisgICAgdmlydHVh
bCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQs
IHVuc2lnbmVkIHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKwor
ICAgIC8vIEV4dGVuc2lvbjNEIG1ldGhvZHMKKyAgICBib29sIGlzRW5hYmxlZChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25n
IHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBs
b25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcg
ZmlsdGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnNlcnRFdmVudE1hcmtlckVYVChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBTdHJpbmcm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHBvcEdyb3VwTWFya2VyRVhUKHZvaWQpIG92ZXJyaWRlOwor
CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7
CisgICAgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdCdWZmZXJzRVhUKEdDM0RzaXplaSwgY29uc3QgR0MzRGVudW0q
KSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVp
IHByaW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1
aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKworICAgIC8vIEVYVCBSb2J1
c3RuZXNzIC0gcmVzZXQKKyAgICBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpIG92ZXJy
aWRlOworCisgICAgLy8gRVhUIFJvYnVzdG5lc3MgLSBldGMKKyAgICB2b2lkIHJlYWRuUGl4ZWxz
RVhUKGludCB4LCBpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSBidWZTaXplLCB2b2lkICpkYXRh
KSBvdmVycmlkZTsKKyAgICB2b2lkIGdldG5Vbmlmb3JtZnZFWFQoR0MzRHVpbnQgcHJvZ3JhbSwg
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykgb3ZlcnJpZGU7
CisgICAgdm9pZCBnZXRuVW5pZm9ybWl2RVhUKEdDM0R1aW50IHByb2dyYW0sIGludCBsb2NhdGlv
biwgR0MzRHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKSBvdmVycmlkZTsKKworcHJvdGVjdGVk
OgorICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Cisg
ICAgU3RyaW5nIGdldEV4dGVuc2lvbnMoKSBvdmVycmlkZTsKKworICAgIEdDM0RlbnVtIG1fY29u
dGV4dFJlc2V0U3RhdHVzOworCisgICAgYm9vbCBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmpl
Y3Q7CisgICAgYm9vbCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlOwor
ICAgIGJvb2wgbV9zdXBwb3J0c0FOR0xFaW5zdGFuY2VkQXJyYXlzOworCisgICAgUEZOR0xGUkFN
RUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQyBtX2dsRnJhbWVidWZmZXJUZXh0dXJl
MkRNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBM
RUlNR1BST0MgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5H
TEJJTkRWRVJURVhBUlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUzsKKyAgICBQRk5H
TERFTEVURVZFUlRFWEFSUkFZU09FU1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUzsKKyAg
ICBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MgbV9nbEdlblZlcnRleEFycmF5c09FUzsKKyAg
ICBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5T0VTOworICAgIFBG
TkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0VYVFBST0MgbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0
dXNFWFQ7CisgICAgUEZOR0xSRUFETlBJWEVMU0VYVFBST0MgbV9nbFJlYWRuUGl4ZWxzRVhUOwor
ICAgIFBGTkdMR0VUTlVOSUZPUk1GVkVYVFBST0MgbV9nbEdldG5Vbmlmb3JtZnZFWFQ7CisgICAg
UEZOR0xHRVROVU5JRk9STUlWRVhUUFJPQyBtX2dsR2V0blVuaWZvcm1pdkVYVDsKKyAgICBQRk5H
TFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdM
RTsKKyAgICBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MgbV9nbERyYXdBcnJheXNJ
bnN0YW5jZWRBTkdMRTsKKyAgICBQRk5HTERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQyBt
X2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoT1BFTkdMX0VTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNDdlMjQ3MzNhMTZl
MGZlMjAwYWUzNDM5YWM3ZmNiODAzNmNhYWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYm
IChVU0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKSkKLQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESU9TLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJF
eHRlbnNpb25zM0RPcGVuR0wuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50
U2l6ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGVtcG9yYXJ5
T3BlbkdMU2V0dGluZy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjc3RyaW5n
PgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVy
YXRlLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotI2lu
Y2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2ltcG9ydCA8T3Bl
bkdMRVMvRVMyL2dsZXh0Lmg+Ci0vLyBGcm9tIDxPcGVuR0xFUy9nbGV4dC5oPgotI2RlZmluZSBH
TF9SR0JBMzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAweDg4MTQKLSNkZWZpbmUgR0xfUkdC
MzJGX0FSQiAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE1Ci0jZWxpZiBVU0UoT1BFTkdMKQot
I2RlZmluZSBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9HTF9WRVJTSU9OX0hFQURFUlNfSU5DTFVE
RUQKLSNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KLSNpbmNsdWRlIDxPcGVuR0wvZ2wzLmg+Ci0jdW5k
ZWYgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi1zdGF0aWMgdm9pZCB3
aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVk
IGNoYXIqIHBpeGVscykKLXsKLSAgICAvLyBXZSBjYW4gYXNzdW1lIHRoaXMgZG9lc24ndCBvdmVy
ZmxvdyBiZWNhdXNlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucwotICAgIC8vIHVzZSBjaGVja2VkIGFy
aXRobWV0aWMuCi0gICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHBpeGVsc1tp
ICsgM10gPSAyNTU7Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBp
eGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQotewotICAgIGF1dG8gYXR0cnMgPSBj
b250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgLy8gTlZJRElBIGRyaXZlcnMgaGF2ZSBhIGJ1ZyB3
aGVyZSBjYWxsaW5nIHJlYWRQaXhlbHMgaW4gQkdSQSBjYW4gcmV0dXJuIHRoZSB3cm9uZyB2YWx1
ZXMgZm9yIHRoZSBhbHBoYSBjaGFubmVsIHdoZW4gdGhlIGFscGhhIGlzIG9mZiBmb3IgdGhlIGNv
bnRleHQuCi0gICAgaWYgKCFhdHRycy5hbHBoYSAmJiBnZXRFeHRlbnNpb25zKCkuaXNOVklESUEo
KSkgewotICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICAg
ICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHdpZHRoICogNDsK
LSAgICAgICAgc3JjLmRhdGEgPSBwaXhlbHM7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0
OwotICAgICAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzdC53aWR0aCA9IHdp
ZHRoOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgICAgICBkZXN0LmRh
dGEgPSBwaXhlbHM7Ci0KLSAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEg
dG8gQkdSQS4KLSAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsK
LSAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAs
IGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGgg
KiBoZWlnaHQgKiA0OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkKLSAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwot
I2VuZGlmCi0gICAgfSBlbHNlCi0gICAgICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKLQot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWF0dHJzLmFscGhhKQotICAgICAgICB3aXBlQWxw
aGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwotI2VuZGlmCi19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCi17Ci0gICAgdmFs
aWRhdGVEZXB0aFN0ZW5jaWwoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQot
ewotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotICAgIGNvbnN0IGludCB3
aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0g
MDsKLSAgICBpZiAoYXR0cnMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0
ID0gR0xfUkdCQTg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OwotICAgICAgICBjb2xv
ckZvcm1hdCA9IEdMX1JHQjsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMu
ZGVwdGgpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5j
aWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBoaWNz
Q29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCi0KLSAgICAgICAgRXh0ZW5zaW9uczNEJiBl
eHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVw
dGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgaWYgKGV4dGVuc2lv
bnMuc3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKQotICAgICAgICAgICAg
aW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKLSAg
ICAgICAgZWxzZQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgICAg
ICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQxNjsK
LSNlbHNlCi0gICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRI
X0NPTVBPTkVOVDsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIFJlc2l6ZSBtdWx0aXNhbXBsZSBG
Qk8uCi0gICAgaWYgKGF0dHJzLmFudGlhbGlhcykgewotICAgICAgICBHTGludCBtYXhTYW1wbGVD
b3VudDsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNh
bXBsZUNvdW50KTsKLSAgICAgICAgLy8gVXNpbmcgbW9yZSB0aGFuIDQgc2FtcGxlcyBpcyBzbG93
IG9uIHNvbWUgaGFyZHdhcmUgYW5kIGlzIHVubGlrZWx5IHRvCi0gICAgICAgIC8vIHByb2R1Y2Ug
YSBzaWduaWZpY2FudGx5IGJldHRlciByZXN1bHQuCi0gICAgICAgIEdMaW50IHNhbXBsZUNvdW50
ID0gc3RkOjptaW4oNCwgbWF4U2FtcGxlQ291bnQpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7Ci0jaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCi0gICAg
ICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgc2FtcGxlQ291bnQsIEdMX1JHQkE4X09FUywgd2lkdGgsIGhlaWdodCk7Ci0jZWxzZQot
ICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotI2VuZGlmCi0gICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJzLnN0ZW5j
aWwgfHwgYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cnMuZGVwdGgpCi0g
ICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAgIDo6Z2xC
aW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwotICAgICAgICBpZiAo
Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4K
LSAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyByZXNpemUgcmVndWxhciBGQk8KLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIEFTU0VSVChtX3RleHR1cmUpOwotI2lmIFBMQVRGT1JN
KENPQ09BKQotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xf
UkVOREVSQlVGRkVSLCBtX3RleHR1cmUpOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwg
bV90ZXh0dXJlKTsKLSAgICBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURyYXdhYmxlKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOwotI2Vsc2UKLSAgICBhbGxvY2F0ZUlPU3VyZmFj
ZUJhY2tpbmdTdG9yZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKLSAgICB1cGRhdGVGcmFtZWJ1
ZmZlclRleHR1cmVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsKLSAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQs
IEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV90ZXh0dXJlLCAwKTsKLSNlbmRpZiAvLyAhVVNF
KE9QRU5HTF9FUykpCi0jZWxzZQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X3RleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJu
YWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVE
X0JZVEUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
LCAwKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9jb21wb3Np
dG9yVGV4dHVyZSkgewotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9j
b21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgMCk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVy
bWVkaWF0ZVRleHR1cmUpOwotICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApOwotICAgIH0KLSNlbmRpZgotI2VuZGlmCi0KLSAgICBhdHRhY2hEZXB0aEFuZFN0ZW5j
aWxCdWZmZXJJZk5lZWRlZChpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICBpZiAoYXR0cnMuYW50
aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0g
bV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8pCi0gICAg
ICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBtdXN0
UmVzdG9yZUZCTzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoRGVwdGhBbmRT
dGVuY2lsQnVmZmVySWZOZWVkZWQoR0x1aW50IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1
dGVzKCk7Ci0KLSAgICBpZiAoIWF0dHJzLmFudGlhbGlhcyAmJiAoYXR0cnMuc3RlbmNpbCB8fCBh
dHRycy5kZXB0aCkpIHsKLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsUmVuZGVyYnVm
ZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQotICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9B
VFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAw
KTsKLSAgICB9Ci0KLSAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRT
Y2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhFUiwgR0xfRkFMU0UpOwotICAgIFRlbXBvcmFyeU9w
ZW5HTFNldHRpbmcgc2NvcGVkRGVwdGgoR0xfREVQVEhfVEVTVCwgR0xfRkFMU0UpOwotICAgIFRl
bXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU3RlbmNpbChHTF9TVEVOQ0lMX1RFU1QsIEdMX0ZB
TFNFKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIEdMaW50
IGJvdW5kRnJhbWVCdWZmZXI7Ci0gICAgOjpnbEdldEludGVnZXJ2KEdMX0ZSQU1FQlVGRkVSX0JJ
TkRJTkcsICZib3VuZEZyYW1lQnVmZmVyKTsKLSNlbmRpZgotCi0gICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
I2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIFVOVVNFRF9QQVJBTShy
ZWN0KTsKLSAgICA6OmdsRmx1c2goKTsKLSAgICA6OmdsUmVzb2x2ZU11bHRpc2FtcGxlRnJhbWVi
dWZmZXJBUFBMRSgpOwotICAgIGNvbnN0IEdMZW51bSBkaXNjYXJkc1tdID0geyBHTF9DT0xPUl9B
VFRBQ0hNRU5UMCwgR0xfREVQVEhfQVRUQUNITUVOVCB9OwotICAgIDo6Z2xEaXNjYXJkRnJhbWVi
dWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9BUFBMRSwgMiwgZGlzY2FyZHMpOwotICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJvdW5kRnJhbWVCdWZmZXIpOwotI2Vs
c2UKLSAgICBJbnRSZWN0IHJlc29sdmVSZWN0ID0gcmVjdDsKLSAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc29sdmVSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0KTsKLQotICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVzb2x2ZVJl
Y3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJlc29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3Qu
bWF4WSgpLCByZXNvbHZlUmVjdC54KCksIHJlc29sdmVSZWN0LnkoKSwgcmVzb2x2ZVJlY3QubWF4
WCgpLCByZXNvbHZlUmVjdC5tYXhZKCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7
Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYg
VVNFKE9QRU5HTCkKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBERVBU
SF9TVEVOQ0lMOgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhf
RVhUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERFUFRIX0NPTVBPTkVOVDE2OgotICAgICAg
ICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBSR0JBNDoKLSAgICBjYXNlIFJHQjVfQTE6Ci0gICAgICAgIGludGVybmFsZm9ybWF0
ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSR0I1NjU6Ci0gICAgICAgIGlu
dGVybmFsZm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLSAg
ICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIC8vIE5lZWQgdG8gZW11bGF0ZSBN
QVhfRlJBR01FTlQvVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyBhbmQgTUFYX1ZBUllJTkdfVkVDVE9S
UwotICAgIC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyByZXR1
cm4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzCi0gICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1cm4g
dGhlIG51bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4KLSAg
ICAvLyBUaGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRv
IGJlIGRpdmlkZWQgYnkgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBzd2l0Y2gg
KHBuYW1lKSB7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlM6Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9S
TV9DT01QT05FTlRTLCB2YWx1ZSk7Ci0gICAgICAgICp2YWx1ZSAvPSA0OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgotICAgICAgICA6OmdsR2V0
SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMsIHZhbHVlKTsKLSAgICAg
ICAgKnZhbHVlIC89IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUFYX1ZBUllJTkdfVkVD
VE9SUzoKLSAgICAgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICAgICAgQVNT
RVJUKDo6Z2xHZXRFcnJvcigpID09IEdMX05PX0VSUk9SKTsKLSAgICAgICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAo
OjpnbEdldEVycm9yKCkgPT0gR0xfSU5WQUxJRF9FTlVNKSB7Ci0gICAgICAgICAgICAgICAgOjpn
bEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0NPTVBPTkVOVFMsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAqdmFsdWUgLz0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsIHZhbHVlKTsK
LSAgICAgICAgICAgICp2YWx1ZSAvPSA0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0gICAgY2FzZSBNQVhfVEVYVFVSRV9TSVpFOgotICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
TUFYX1RFWFRVUkVfU0laRSwgdmFsdWUpOwotICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJl
cXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQotICAgICAgICAgICAgKnZhbHVl
ID0gc3RkOjptaW4oNDA5NiwgKnZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFOgotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSwgdmFsdWUpOwotICAgICAgICBpZiAoZ2V0RXh0ZW5zaW9ucygpLnJl
cXVpcmVzUmVzdHJpY3RlZE1heGltdW1UZXh0dXJlU2l6ZSgpKQotICAgICAgICAgICAgKnZhbHVl
ID0gc3RkOjptaW4oMTAyNCwgKnZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIC8vIFNvbWUgb2xkZXIgaGFyZHdhcmUgYWR2ZXJ0aXNlcyBhIGxhcmdlciBtYXhp
bXVtIHRoYW4gdGhleQotICAgIC8vIGNhbiBhY3R1YWxseSBoYW5kbGUuIFJhdGhlciB0aGFuIGRl
dGVjdGluZyBzdWNoIGRldmljZXMsIHNpbXBseQotICAgIC8vIGNsYW1wIHRoZSBtYXhpbXVtIHRv
IDgxOTIsIHdoaWNoIGlzIGJpZyBlbm91Z2ggZm9yIGEgNUsgZGlzcGxheS4KLSAgICBjYXNlIE1B
WF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9SRU5ERVJC
VUZGRVJfU0laRSwgdmFsdWUpOwotICAgICAgICAqdmFsdWUgPSBzdGQ6Om1pbig4MTkyLCAqdmFs
dWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1BWF9WSUVXUE9SVF9ESU1TOgotICAgICAg
ICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZJRVdQT1JUX0RJTVMsIHZhbHVlKTsKLSAgICAgICAgdmFs
dWVbMF0gPSBzdGQ6Om1pbig4MTkyLCB2YWx1ZVswXSk7Ci0gICAgICAgIHZhbHVlWzFdID0gc3Rk
OjptaW4oODE5MiwgdmFsdWVbMV0pOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwotICAgIH0KLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVt
IHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEdDM0RpbnQqIHJhbmdlLCBHQzNE
aW50KiBwcmVjaXNpb24pCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNoYWRlclR5cGUpOwotICAgIEFT
U0VSVChyYW5nZSk7Ci0gICAgQVNTRVJUKHByZWNpc2lvbik7Ci0KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxPV19JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVN
X0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0lOVDoKLSAgICAgICAgLy8g
VGhlc2UgdmFsdWVzIGFyZSBmb3IgYSAzMi1iaXQgdHdvcy1jb21wbGVtZW50IGludGVnZXIgZm9y
bWF0LgotICAgICAgICByYW5nZVswXSA9IDMxOwotICAgICAgICByYW5nZVsxXSA9IDMwOwotICAg
ICAgICBwcmVjaXNpb25bMF0gPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVN
X0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgICAg
IC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGFuIElFRUUgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGlu
Zy1wb2ludCBmb3JtYXQuCi0gICAgICAgIHJhbmdlWzBdID0gMTI3OwotICAgICAgICByYW5nZVsx
XSA9IDEyNzsKLSAgICAgICAgcHJlY2lzaW9uWzBdID0gMjM7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgaWYgKHdpZHRoICYm
IGhlaWdodCAmJiAhcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURf
VkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0MzRGVudW0gb3Bl
bkdMRm9ybWF0ID0gZm9ybWF0OwotICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0g
aW50ZXJuYWxmb3JtYXQ7Ci0jaWYgVVNFKE9QRU5HTCkKLSAgICBpZiAodHlwZSA9PSBHTF9GTE9B
VCkgewotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCi0gICAgICAgICAgICBvcGVuR0xJ
bnRlcm5hbEZvcm1hdCA9IEdMX1JHQkEzMkZfQVJCOwotICAgICAgICBlbHNlIGlmIChmb3JtYXQg
PT0gR0xfUkdCKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IzMkZf
QVJCOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykgewotICAgICAgICBp
ZiAoZm9ybWF0ID09IEdMX1JHQkEpCi0gICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9
IEdMX1JHQkExNkZfQVJCOwotICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfUkdCKQotICAg
ICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0IxNkZfQVJCOwotICAgICAgICBl
bHNlIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFKQotICAgICAgICAgICAgb3BlbkdMSW50ZXJu
YWxGb3JtYXQgPSBHTF9MVU1JTkFOQ0UxNkZfQVJCOwotICAgICAgICBlbHNlIGlmIChmb3JtYXQg
PT0gR0xfQUxQSEEpCi0gICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IEdMX0FMUEhB
MTZGX0FSQjsKLSAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRV9BTFBIQSkK
LSAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5BTkNFX0FMUEhBMTZG
X0FSQjsKLSAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOwotICAgIH0KLQotICAgIEFT
U0VSVChmb3JtYXQgIT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUKTsKLSAgICBpZiAo
Zm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQpCi0gICAgICAgIG9wZW5HTEZv
cm1hdCA9IEdMX1JHQkE7Ci0gICAgZWxzZSBpZiAoZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JH
Ql9FWFQpCi0gICAgICAgIG9wZW5HTEZvcm1hdCA9IEdMX1JHQjsKLSNlbmRpZgotCi0gICAgaWYg
KG1fdXNpbmdDb3JlUHJvZmlsZSkgewotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBmb3JtYXQg
dmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5nIGEgY29y
ZSBwcm9maWxlLCBzbyB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIGFkYXB0IHRoZW0uCi0gICAgICAg
IHN3aXRjaCAob3BlbkdMSW50ZXJuYWxGb3JtYXQpIHsKLSAgICAgICAgY2FzZSBBTFBIQToKLSAg
ICAgICAgICAgIC8vIFRoZSBmb3JtYXQgaXMgYSBzaW1wbGUgY29tcG9uZW50IGNvbnRhaW5pbmcg
YW4gYWxwaGEgdmFsdWUuIEl0IG5lZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEgR0xfUkVEIHBsYW5l
LgotICAgICAgICAgICAgLy8gV2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdMX1JFRCAoYm90aCBu
ZWVkIHRvIGJlIEdMX0FMUEhBIGluIFdlYkdMKSBhbmQgaW5zdHJ1Y3QgdGhlIHRleHR1cmUgdG8g
c3dpenpsZQotICAgICAgICAgICAgLy8gdGhlIHJlZCBjb21wb25lbnQgdmFsdWVzIHdpdGggdGhl
IGFscGhhIGNvbXBvbmVudCB2YWx1ZXMuCi0gICAgICAgICAgICBvcGVuR0xJbnRlcm5hbEZvcm1h
dCA9IG9wZW5HTEZvcm1hdCA9IFJFRDsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0
LCBURVhUVVJFX1NXSVpaTEVfQSwgUkVEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIExVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgaGFzIDIgY29t
cG9uZW50cywgYW4gYWxwaGEgb25lIGFuZCBhIGx1bWluYW5jZSBvbmUgKHNhbWUgdmFsdWUgZm9y
IHJlZCwgZ3JlZW4gYW5kIGJsdWUpLgotICAgICAgICAgICAgLy8gSXQgbmVlZHMgdG8gYmUgYmFj
a2VkIHdpdGggYSBHTF9SRyBwbGFuZSwgdXNpbmcgdGhlIHJlZCBjb21wb25lbnQgZm9yIHRoZSBj
b2xvcnMgYW5kIHRoZSBncmVlbiBjb21wb25lbnQKLSAgICAgICAgICAgIC8vIGZvciBhbHBoYS4g
V2UgY2hhbmdlIHRoZSBmb3JtYXRzIHRvIEdMX1JHIGFuZCBzd2l6emxlIHRoZSBjb21wb25lbnRz
LgotICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xGb3JtYXQgPSBSRzsK
LSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfUiwgUkVE
KTsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVfRywg
UkVEKTsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpaTEVf
QiwgUkVEKTsKLSAgICAgICAgICAgIHRleFBhcmFtZXRlcmkodGFyZ2V0LCBURVhUVVJFX1NXSVpa
TEVfQSwgR1JFRU4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRleEltYWdlMkREaXJlY3Qo
dGFyZ2V0LCBsZXZlbCwgb3BlbkdMSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgb3BlbkdMRm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0Rj
bGFtcGYgekZhcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiBQTEFURk9STShD
T0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsRGVwdGhSYW5nZWYoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHpOZWFyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHpGYXIpKTsKLSNlbHNlCi0gICAgOjpn
bERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKLSAgICA6Omds
Q2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7Ci0jZWxzZQotICAgIDo6Z2xD
bGVhckRlcHRoKGRlcHRoKTsKLSNlbmRpZgotfQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLUV4dGVu
c2lvbnMzRCYgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICgh
bV9leHRlbnNpb25zKQotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAg
ICAgICBtX2V4dGVuc2lvbnMgPSBtYWtlVW5pcXVlPEV4dGVuc2lvbnMzRE9wZW5HTD4odGhpcywg
ZmFsc2UpOwotI2Vsc2UKLSAgICAgICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNp
b25zM0RPcGVuR0w+KHRoaXMsIGlzR0xFUzJDb21wbGlhbnQoKSk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gKm1fZXh0ZW5zaW9uczsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKLXsK
LSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8vIEZJWE1FOiBy
ZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQs
IGkuZS4sCi0gICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9u
ZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbEZsdXNoKCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5l
Y2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAg
ICAgICAgOjpnbEZsdXNoKCk7Ci0gICAgfQotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAm
JiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRkJPKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWF0dHJzLmFscGhhICYmIChm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpCR1JBKSAmJiAobV9zdGF0ZS5ib3VuZEZCTyA9PSBtX2ZibyB8fCAoYXR0cnMuYW50
aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykpKQotICAgICAg
ICB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyh3aWR0aCwgaGVpZ2h0LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4oZGF0YSkpOwotI2VuZGlmCi19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgKFBMQVRGT1JNKENPQ09B
KSAmJiBVU0UoT1BFTkdMX0VTKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJmMDYxYTBhMGI5
ZjI1OTUzMTc4NGQyNjY4MjM1NGYwZmVlNTFlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjA4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8
c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9QRU5HTF9FUykp
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJT1MuaCIKLSNlbmRpZgotCi0jaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9w
ZW5HTEVTLmgiCi0jZWxzZQotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgotI2VuZGlm
Ci0jaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKLSNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVn
dWxhckV4cHJlc3Npb24uaD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9IZXhO
dW1iZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0KLSNpZiBVU0Uo
T1BFTkdMX0VTKQotI2ltcG9ydCA8T3BlbkdMRVMvRVMyL2dsZXh0Lmg+Ci0jaW1wb3J0IDxPcGVu
R0xFUy9FUzMvZ2wuaD4KLS8vIEZyb20gPE9wZW5HTEVTL2dsZXh0Lmg+Ci0jZGVmaW5lIEdMX1JH
QkEzMkZfQVJCICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNAotI2RlZmluZSBHTF9SR0IzMkZf
QVJCICAgICAgICAgICAgICAgICAgICAgICAweDg4MTUKLSNlbHNlCi0jZGVmaW5lIEdMX0RPX05P
VF9XQVJOX0lGX01VTFRJX0dMX1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAotI2luY2x1ZGUgPE9w
ZW5HTC9nbC5oPgotI2luY2x1ZGUgPE9wZW5HTC9nbDMuaD4KLSNpbmNsdWRlIDxPcGVuR0wvZ2wz
ZXh0Lmg+Ci0jdW5kZWYgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJT
X0lOQ0xVREVECi0jZW5kaWYKLQotI2Vsc2UKLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRl
ICJFcG94eVNoaW1zLmgiCi0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTEVT
U2hpbXMuaCIKLSNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUg
Ik9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2VuZGlmCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhhc2gqPiYgZ2V0Q3VycmVudE5h
bWVIYXNoTWFwRm9yU2hhZGVyKCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZs
YWc7Ci0gICAgc3RhdGljIFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj4qIHNoYXJlZE5h
bWVIYXNoOwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7Ci0gICAgICAgIHNoYXJl
ZE5hbWVIYXNoID0gbmV3IFRocmVhZFNwZWNpZmljPFNoYWRlck5hbWVIYXNoKj47Ci0gICAgfSk7
Ci0KLSAgICByZXR1cm4gKnNoYXJlZE5hbWVIYXNoOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoU2hhZGVyTmFtZUhhc2gqIHNoYWRlck5hbWVIYXNoKQot
ewotICAgICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKSA9IHNoYWRlck5hbWVIYXNo
OwotfQotCi0vLyBIYXNoIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIEFOR0xFIHRyYW5zbGF0b3IvY29t
cGlsZXIgdG8gZG8KLS8vIHN5bWJvbCBuYW1lIG1hbmdsaW5nLiBTaW5jZSB0aGlzIGlzIGEgc3Rh
dGljIG1ldGhvZCwgYmVmb3JlCi0vLyBjYWxsaW5nIGNvbXBpbGVTaGFkZXIgd2Ugc2V0IGN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlcgotLy8gdG8gcG9pbnQgdG8gdGhlIG1hcCBrZXB0IGJ5IHRo
ZSBjdXJyZW50IGluc3RhbmNlIG9mIEdyYXBoaWNzQ29udGV4dDNELgotCi1zdGF0aWMgdWludDY0
X3QgbmFtZUhhc2hGb3JTaGFkZXIoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IGxlbmd0aCkKLXsK
LSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3RyaW5nIG5hbWVB
c0NTdHJpbmcgPSBDU3RyaW5nKG5hbWUpOwotCi0gICAgLy8gTG9vayB1cCBuYW1lIGluIG91ciBs
b2NhbCBtYXAuCi0gICAgU2hhZGVyTmFtZUhhc2gqJiBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFk
ZXIgPSAqZ2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKCk7Ci0gICAgU2hhZGVyTmFtZUhh
c2g6Oml0ZXJhdG9yIGZpbmRSZXN1bHQgPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmZp
bmQobmFtZUFzQ1N0cmluZyk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgIT0gY3VycmVudE5hbWVIYXNo
TWFwRm9yU2hhZGVyLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlOwot
Ci0gICAgdW5zaWduZWQgaGFzaFZhbHVlID0gbmFtZUFzQ1N0cmluZy5oYXNoKCk7Ci0KLSAgICAv
LyBDb252ZXJ0IHRoZSAzMi1iaXQgaGFzaCBmcm9tIENTdHJpbmc6Omhhc2ggaW50byBhIDY0LWJp
dCByZXN1bHQKLSAgICAvLyBieSBzaGlmdGluZyB0aGVuIGFkZGluZyB0aGUgc2l6ZSBvZiBvdXIg
dGFibGUuIE92ZXJmbG93IHdvdWxkCi0gICAgLy8gb25seSBiZSBhIHByb2JsZW0gaWYgd2UncmUg
YWxyZWFkeSBoYXNoaW5nIHRvIHRoZSBzYW1lIHZhbHVlIChhbmQKLSAgICAvLyB3ZSdyZSBob3Bp
bmcgdGhhdCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCB3ZQotICAgIC8vIGRvbid0
IGhhdmUgdGhhdCBtYW55IHN5bWJvbHMpLgotCi0gICAgdWludDY0X3QgcmVzdWx0ID0gaGFzaFZh
bHVlOwotICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgMzIpICsgKGN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlci0+c2l6ZSgpICsgMSk7Ci0KLSAgICBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIt
PnNldChuYW1lQXNDU3RyaW5nLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKLXsKLSAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0
dHJpYnV0ZXMoKTsKLQotICAgIEV4dGVuc2lvbnMzRCYgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lv
bnMoKTsKLSAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBpZiAoZXh0ZW5zaW9ucy5z
dXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7Ci0gICAgICAgICAgICBleHRl
bnNpb25zLmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKLSAgICAg
ICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KLSAgICAgICAgICAgIGF0
dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhdHRycy5zdGVu
Y2lsID0gZmFsc2U7Ci0gICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJzKTsKLSAgICB9
Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiAhbV9pc0ZvcldlYkdMMikgewotICAgICAgICBp
ZiAoIWV4dGVuc2lvbnMuc3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
IikpIHsKLSAgICAgICAgICAgIGF0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICAgICAg
c2V0Q29udGV4dEF0dHJpYnV0ZXMoYXR0cnMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUiKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKLXsKLSAgICBDaGVja2Vk
PGludCwgUmVjb3JkT3ZlcmZsb3c+IHJvd0J5dGVzID0gQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJm
bG93PihtX2N1cnJlbnRXaWR0aCkgKiA0OwotICAgIGlmIChyb3dCeXRlcy5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4g
dG90YWxCeXRlc0NoZWNrZWQgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKLSAgICBpZiAo
dG90YWxCeXRlc0NoZWNrZWQuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
aW50IHRvdGFsQnl0ZXMgPSB0b3RhbEJ5dGVzQ2hlY2tlZC51bnNhZmVHZXQoKTsKLQotICAgIGF1
dG8gcGl4ZWxzID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHRvdGFsQnl0ZXMpOwot
ICAgIGlmICghcGl4ZWxzKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWFkUmVuZGVyaW5nUmVz
dWx0cyhwaXhlbHMuZ2V0KCksIHRvdGFsQnl0ZXMpOwotCi0gICAgaWYgKCFjb250ZXh0QXR0cmli
dXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHRvdGFsQnl0ZXM7IGkgKz0gNCkgewotICAgICAgICAgICAgLy8gUHJlbXVsdGlwbHkgYWxwaGEu
Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBd
ICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3Rk
OjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7Ci0gICAgICAg
ICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxz
W2kgKyAzXSAvIDI1NSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwYWludFRvQ2FudmFzKHBp
eGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1h
Z2VCdWZmZXItPmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKLQotI2lm
IFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQotICAgIHByZXNlbnRSZW5kZXJidWZm
ZXIoKTsKLSNlbmRpZgotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludENvbXBvc2l0
ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKQotewotICAgIC8vIE5vdCBuZWVkZWQgYXQg
dGhlIG1vbWVudCwgc28gcmV0dXJuIHRoYXQgbm90aGluZyB3YXMgZG9uZS4KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVJlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17Ci0gICAgLy8gUmVhZGluZyBwcmVtdWx0aXBs
aWVkIGFscGhhIHdvdWxkIGludm9sdmUgdW5wcmVtdWx0aXBseWluZywgd2hpY2ggaXMKLSAgICAv
LyBsb3NzeS4KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURh
dGE6OmNyZWF0ZShJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpKTsKLSAg
ICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpOwotICAg
IENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gdG90YWxCeXRlc0NoZWNrZWQgPSA0ICogQ2hl
Y2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PihtX2N1cnJlbnRXaWR0aCkgKiBDaGVja2VkPGludCwg
UmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudEhlaWdodCk7Ci0gICAgaWYgKHRvdGFsQnl0ZXNDaGVj
a2VkLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLSAgICBpbnQg
dG90YWxCeXRlcyA9IHRvdGFsQnl0ZXNDaGVja2VkLnVuc2FmZUdldCgpOwotCi0gICAgcmVhZFJl
bmRlcmluZ1Jlc3VsdHMocGl4ZWxzLCB0b3RhbEJ5dGVzKTsKLQotICAgIC8vIENvbnZlcnQgdG8g
UkdCQS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAg
ICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7Ci0KLSAgICByZXR1cm4gaW1h
Z2VEYXRhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCi17
Ci0gICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotI2lmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAg
VGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lzc29yKEdMX1NDSVNTT1JfVEVTVCwgR0xf
RkFMU0UpOwotICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkRGl0aGVyKEdMX0RJVEhF
UiwgR0xfRkFMU0UpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRp
YWxpYXMpCi0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoKTsKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKLSAgICBzdGQ6OnN3YXAobV90ZXh0dXJlLCBtX2ludGVybWVkaWF0
ZVRleHR1cmUpOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJv
KTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0g
ICAgZ2xGbHVzaCgpOwotCi0gICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pCi0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX3N0YXRlLmJvdW5kRkJPKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgcmV0dXJu
OwotI2VuZGlmCi0KLSAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fc3RhdGUuYm91bmRUYXJnZXQoR0xfVEVYVFVS
RTApID09IEdMX1RFWFRVUkVfMkQgPyBtX3N0YXRlLmJvdW5kVGV4dHVyZShHTF9URVhUVVJFMCkg
OiAwKTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0KTsK
LSAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRG
Qk8pOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFk
UmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNTaXplKQot
ewotICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQg
KiA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMo
KS5hbnRpYWxpYXMpIHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgp
OwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9mYm8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKG1fc3RhdGUuYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAg
ICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKLSAgICBib29sIG11c3RSZXN0
b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FM
SUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwotICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkgewot
ICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOwotICAgICAgICBt
dXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwotICAgIH0KLQotICAgIHJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCwgcGl4ZWxzKTsKLQotICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCi0g
ICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7
Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJy
ZW50SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQod2lkdGggPj0gMCAmJiBo
ZWlnaHQgPj0gMCk7Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIG1fY3VycmVudFdpZHRo
ID0gd2lkdGg7Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Ci0KLSAgICBUZW1wb3JhcnlP
cGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7Ci0g
ICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9GQUxT
RSk7Ci0gICAgCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHJlc2hhcGVGQk9zKEludFNpemUo
d2lkdGgsIGhlaWdodCkpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAu
Ci0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwgMCwgMH0sIGNsZWFyRGVwdGggPSAw
OwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAgR0xib29sZWFuIGNvbG9yTWFza1td
ID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9U
UlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmYsIHN0ZW5jaWxNYXNrQmFj
ayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZG
RVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29s
b3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIDo6Z2xHZXRCb29sZWFu
dihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0gICAgOjpnbENvbG9yTWFzayhHTF9U
UlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLQotICAgIGF1dG8gYXR0cnMgPSBjb250
ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0gICAgICAgIDo6Z2xH
ZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoMSk7Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihH
TF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdM
X1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9
Ci0gICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NU
RU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAgICAgICA6OmdsQ2xlYXJTdGVu
Y2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJl
aW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKLSAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX1NURU5DSUxfQkFDS19XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQq
Pigmc3RlbmNpbE1hc2tCYWNrKSk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdM
X0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xf
QkFDSywgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZF
Ul9CSVQ7Ci0gICAgfQotCi0gICAgOjpnbENsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICA6OmdsQ2xl
YXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVh
ckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFd
LCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7Ci0gICAgaWYgKGF0dHJzLmRlcHRoKSB7Ci0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAg
ICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgfQotICAgIGlmIChhdHRycy5zdGVuY2ls
KSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpn
bFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsKLSAgICAgICAgOjpn
bFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfQkFDSywgc3RlbmNpbE1hc2tCYWNrKTsKLSAgICB9Ci0K
LSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX3N0YXRlLmJvdW5kRkJPKTsKLQotICAg
IDo6Z2xGbHVzaCgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja1Zhcnlpbmdz
UGFja2luZyhQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBm
cmFnbWVudFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29u
dGFpbnModmVydGV4U2hhZGVyKSk7Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRh
aW5zKGZyYWdtZW50U2hhZGVyKSk7Ci0gICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8m
IGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+
dmFsdWU7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBjb21iaW5l
ZFZhcnlpbmdzOwotICAgIGZvciAoY29uc3QgYXV0byYgdmVydGV4U3ltYm9sIDogdmVydGV4RW50
cnkudmFyeWluZ01hcCkgewotICAgICAgICBjb25zdCBTdHJpbmcmIHN5bWJvbE5hbWUgPSB2ZXJ0
ZXhTeW1ib2wua2V5OwotICAgICAgICAvLyBUaGUgdmFyeWluZyBtYXAgaW5jbHVkZXMgdmFyaWFi
bGVzIGZvciBlYWNoIGluZGV4IG9mIGFuIGFycmF5IHZhcmlhYmxlLgotICAgICAgICAvLyBXZSBv
bmx5IHdhbnQgYSBzaW5nbGUgdmFyaWFibGUgdG8gcmVwcmVzZW50IHRoZSBhcnJheS4KLSAgICAg
ICAgaWYgKHN5bWJvbE5hbWUuZW5kc1dpdGgoIl0iKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIC8vIERvbid0IGNvdW50IGJ1aWx0IGluIHZhcnlpbmdzLgotICAgICAgICBpZiAo
c3ltYm9sTmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Gcm9udEZh
Y2luZyIgfHwgc3ltYm9sTmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBjb25zdCBhdXRvJiBmcmFnbWVudFN5bWJvbCA9IGZyYWdtZW50RW50
cnkudmFyeWluZ01hcC5maW5kKHN5bWJvbE5hbWUpOwotICAgICAgICBpZiAoZnJhZ21lbnRTeW1i
b2wgIT0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmVuZCgpKQotICAgICAgICAgICAgY29tYmlu
ZWRWYXJ5aW5ncy5hZGQoc3ltYm9sTmFtZSwgZnJhZ21lbnRTeW1ib2wtPnZhbHVlKTsKLSAgICB9
Ci0KLSAgICBzaXplX3QgbnVtVmFyeWluZ3MgPSBjb21iaW5lZFZhcnlpbmdzLnNpemUoKTsKLSAg
ICBpZiAoIW51bVZhcnlpbmdzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN0ZDo6dmVj
dG9yPHNoOjpTaGFkZXJWYXJpYWJsZT4gdmFyaWFibGVzOwotICAgIHZhcmlhYmxlcy5yZXNlcnZl
KGNvbWJpbmVkVmFyeWluZ3Muc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHZhcnlpbmdT
eW1ib2wgOiBjb21iaW5lZFZhcnlpbmdzLnZhbHVlcygpKQotICAgICAgICB2YXJpYWJsZXMucHVz
aF9iYWNrKHZhcnlpbmdTeW1ib2wpOwotCi0gICAgR0MzRGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9
IDA7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICA6OmdsR2V0SW50ZWdlcnYoTUFYX1ZBUllJTkdf
VkVDVE9SUywgJm1heFZhcnlpbmdWZWN0b3JzKTsKLSNlbHNlCi0gICAgaWYgKG1faXNGb3JXZWJH
TDIpCi0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4
VmFyeWluZ1ZlY3RvcnMpOwotICAgIGVsc2UgewotICAgICAgICBHQzNEaW50IG1heFZhcnlpbmdG
bG9hdHMgPSAwOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRT
LCAmbWF4VmFyeWluZ0Zsb2F0cyk7Ci0gICAgICAgIG1heFZhcnlpbmdWZWN0b3JzID0gbWF4VmFy
eWluZ0Zsb2F0cyAvIDQ7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHNoOjpDaGVja1Zhcmlh
Ymxlc1dpdGhpblBhY2tpbmdMaW1pdHMobWF4VmFyeWluZ1ZlY3RvcnMsIHZhcmlhYmxlcyk7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybTNET2Jq
ZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7
Ci0gICAgQVNTRVJUKG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7
Ci0gICAgY29uc3QgYXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZl
cnRleFNoYWRlciktPnZhbHVlOwotICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7Ci0KLSAgICBIYXNoTWFw
PFN0cmluZywgc2g6OkdMZW51bT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBlbnRyeSA6IHZlcnRleEVudHJ5LnVuaWZvcm1NYXApIHsKLSAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1ZS5tYXBwZWROYW1lOwot
ICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKFN0cmluZyhtYXBwZWROYW1lLmNf
c3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpLCBlbnRyeS52YWx1ZS5wcmVjaXNpb24pOwotICAg
IH0KLQotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBmcmFnbWVudEVudHJ5LnVuaWZvcm1N
YXApIHsKLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1hcHBlZE5hbWUgPSBlbnRyeS52YWx1
ZS5tYXBwZWROYW1lOwotICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgPSB2ZXJ0ZXhT
eW1ib2xQcmVjaXNpb25NYXAuZmluZChTdHJpbmcobWFwcGVkTmFtZS5jX3N0cigpLCBtYXBwZWRO
YW1lLmxlbmd0aCgpKSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVydGV4U3ltYm9s
UHJlY2lzaW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gZW50cnkudmFsdWUu
cHJlY2lzaW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRl
eHR1cmUoR0MzRGVudW0gdGV4dHVyZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKLSAgICA6OmdsQWN0aXZlVGV4
dHVyZSh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0g
ICAgQVNTRVJUKHByb2dyYW0pOwotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9n
cmFtKTsKLSAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJU
KHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU3RyaW5nIG1hcHBl
ZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRS
SUJVVEUsIG5hbWUpOwotICAgIExPRyhXZWJHTCwgIjo6YmluZEF0dHJpYkxvY2F0aW9uIGlzIG1h
cHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRh
dGEoKSk7Ci0gICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbWFwcGVk
TmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0x1aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZm
ZXI7Ci0gICAgZWxzZQotICAgICAgICBmYm8gPSAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxp
YXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwotICAgIGlmIChmYm8gIT0gbV9zdGF0ZS5i
b3VuZEZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsK
LSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IGZibzsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9z
dGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwg
dGFyZ2V0KTsKLSAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1w
ZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbihHQzNEZW51
bSBtb2RlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0
aW9uKG1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwg
bW9kZUFscGhhKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0Mz
RGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfSAgICAgICAKLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdC
LCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUo
c3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwg
R0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1
ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0
LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKFdQRSkKLXZvaWQqIEdyYXBoaWNzQ29udGV4dDNEOjptYXBCdWZmZXJSYW5nZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgbGVuZ3RoLCBHQzNEYml0
ZmllbGQgYWNjZXNzKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6
OmdsTWFwQnVmZmVyUmFuZ2UodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKLX0KLQot
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OnVubWFwQnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbFVubWFwQnVm
ZmVyKHRhcmdldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlCdWZmZXJTdWJE
YXRhKEdDM0RlbnVtIHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRy
IHJlYWRPZmZzZXQsIEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShy
ZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEc2l6
ZWkgYnVmU2l6ZSwgR0MzRGludCogcGFyYW1zKQotewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0
LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBVTlVTRURfUEFSQU0oYnVmU2l6ZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHBhcmFtcyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNp
emVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3Rv
cmFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBsZXZl
bHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0
ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFZlY3RvcjxH
QzNEdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQzNEZW51bSBwbmFtZSwgVmVjdG9yPEdDM0RpbnQ+
JiBwYXJhbXMpCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGlj
ZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCBwYXJhbXMuZGF0YSgpKTsK
LX0KLSNlbmRpZgotCi1HQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBm
IGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXIobWFzayk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9v
bGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRo
ZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQotICAgIC8vIHBvaW50IGEgZ2xvYmFs
IGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCi0gICAgU2hCdWlsdElu
UmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gbV9jb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAg
ICBTaEhhc2hGdW5jdGlvbjY0IHByZXZpb3VzSGFzaEZ1bmN0aW9uID0gQU5HTEVSZXNvdXJjZXMu
SGFzaEZ1bmN0aW9uOwotICAgIEFOR0xFUmVzb3VyY2VzLkhhc2hGdW5jdGlvbiA9IG5hbWVIYXNo
Rm9yU2hhZGVyOwotCi0gICAgaWYgKCFuYW1lSGFzaE1hcEZvclNoYWRlcnMpCi0gICAgICAgIG5h
bWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VVbmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7Ci0gICAg
c2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQo
KSk7Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAg
U3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOwotCi0gICAgQU5HTEVSZXNvdXJjZXMuSGFzaEZ1
bmN0aW9uID0gcHJldmlvdXNIYXNoRnVuY3Rpb247Ci0gICAgbV9jb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihu
dWxscHRyKTsKLQotICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJp
bmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiB0cmFu
c2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcuZGF0YSgpOwotICAgIGlu
dCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcubGVuZ3Ro
KCk7Ci0KLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gb3JpZ2luYWwgc2hhZGVyIHNvdXJjZSAt
LS1cbiVzXG4tLS0gZW5kIG9yaWdpbmFsIHNoYWRlciBzb3VyY2UgLS0tXG4iLCBnZXRTaGFkZXJT
b3VyY2Uoc2hhZGVyKS51dGY4KCkuZGF0YSgpKTsKLSAgICBMT0coV2ViR0wsICItLS0gYmVnaW4g
dHJhbnNsYXRlZCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgdHJhbnNsYXRlZCBzaGFk
ZXIgc291cmNlIC0tLSIsIHRyYW5zbGF0ZWRTaGFkZXJQdHIpOwotCi0gICAgOjpnbFNoYWRlclNv
dXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyUHRyLCAmdHJhbnNsYXRlZFNoYWRlckxl
bmd0aCk7Ci0gICAgCi0gICAgOjpnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICAKLSAgICBp
bnQgY29tcGlsZVN0YXR1czsKLSAgICAKLSAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01Q
SUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOwotCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7Ci0K
LSAgICAvLyBQb3B1bGF0ZSB0aGUgc2hhZGVyIGxvZwotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0g
ICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsK
LQotICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAgR0xzaXplaSBzaXplID0gMDsKLSAgICAgICAg
VmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgICAgICA6OmdsR2V0U2hhZGVySW5mb0xv
ZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgICAgICBQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IHNoYWRlciwgMCB9OwotICAgICAgICBlbnRyeS5sb2cg
PSBnZXRVbm1hbmdsZWRJbmZvTG9nKHNoYWRlcnMsIDEsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6
ZSkpOwotICAgIH0KLQotICAgIGlmIChjb21waWxlU3RhdHVzICE9IEdMX1RSVUUpIHsKLSAgICAg
ICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBMT0coV2ViR0wsICJFcnJvcjogc2hh
ZGVyIHRyYW5zbGF0b3IgcHJvZHVjZWQgYSBzaGFkZXIgdGhhdCBPcGVuR0wgd291bGQgbm90IGNv
bXBpbGUuIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChzaGFkZXIp
OwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+dmFsdWU7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VDU3RyaW5n
ID0gZW50cnkuc291cmNlLnV0ZjgoKTsKLSAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIg
PSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgc2hhZGVyU291cmNlTGVuZ3Ro
ID0gc2hhZGVyU291cmNlQ1N0cmluZy5sZW5ndGgoKTsKLQotICAgIExPRyhXZWJHTCwgIi0tLSBi
ZWdpbiBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiVzXG4tLS0gZW5kIGRpcmVjdCBzaGFkZXIg
c291cmNlIC0tLVxuIiwgc2hhZGVyU291cmNlUHRyKTsKLQotICAgIDo6Z2xTaGFkZXJTb3VyY2Uo
c2hhZGVyLCAxLCAmc2hhZGVyU291cmNlUHRyLCAmc2hhZGVyU291cmNlTGVuZ3RoKTsKLQotICAg
IDo6Z2xDb21waWxlU2hhZGVyKHNoYWRlcik7Ci0KLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLQot
ICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGlsZVN0YXR1
cyk7Ci0KLSAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBHTF9UUlVFKSB7Ci0gICAgICAgIGVudHJ5
LmlzVmFsaWQgPSB0cnVlOwotICAgICAgICBMT0coV2ViR0wsICJEaXJlY3QgY29tcGlsYXRpb24g
b2Ygc2hhZGVyIHN1Y2NlZWRlZC4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbnRyeS5pc1Zh
bGlkID0gZmFsc2U7Ci0gICAgICAgIExPRyhXZWJHTCwgIkVycm9yOiBkaXJlY3QgY29tcGlsYXRp
b24gb2Ygc2hhZGVyIGZhaWxlZC4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgaWYg
KGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8p
IHsKLSAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHks
IHdpZHRoLCBoZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpOwotICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9
PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0
aXNhbXBsZUZCTykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KElu
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLSAgICA6
OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKGF0dHJzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ3VsbEZhY2UobW9kZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBB
U1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7Ci0gICAgOjpnbERldGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxl
KEdDM0RlbnVtIGNhcCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGlz
YWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0Mz
RHNpemVpIGNvdW50KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xEcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgY2hlY2tHUFVTdGF0dXMoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmVuYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbEVuYWJsZShjYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpmaW5pc2goKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xGaW5pc2goKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVy
YnVmZmVydGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVs
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwot
ICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0
dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0g
bW9kZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRnJvbnRGYWNlKG1v
ZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51
bSB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdlbmVyYXRl
TWlwbWFwKHRhcmdldCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0
dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZl
SW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7Ci0g
ICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5H
VEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKLSAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJp
YnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVs
bCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNp
emUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHBy
b2dyYW0sIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBl
LCBuYW1lLmRhdGEoKSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShw
cm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5kYXRhKCks
IG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1O
YW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVk
IGlzIG1hcHBpbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZCBmcm9tICclcycgdG8gJyVzJyIsIHByb2dy
YW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgpLCBvcmlnaW5hbE5hbWUudXRmOCgp
LmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKLSAgICBp
bmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAg
IEdDM0RpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1T
eW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJQ
cm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFjdGl2
ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRF
UywgJnN5bWJvbENvdW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9s
Q291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICB9Ci0gICAgCi0gICAgQWN0aXZlU2hhZGVyU3lt
Ym9sQ291bnRzJiBzeW1ib2xDb3VudHMgPSByZXN1bHQtPnZhbHVlOwotICAgIEdDM0R1aW50IHJh
d0luZGV4ID0gKGluZGV4IDwgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJ
bmRleE1hcC5zaXplKCkpID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJ
bmRleE1hcFtpbmRleF0gOiAtMTsKLQotICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHBy
b2dyYW0sIHJhd0luZGV4LCBpbmZvKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBtYXhVbmlmb3JtU2l6
ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9N
QVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotCi0gICAgVmVjdG9yPEdMY2hhcj4gbmFtZSht
YXhVbmlmb3JtU2l6ZSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMg
bnVsbCB0ZXJtaW5hdGlvbi4KLSAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50
IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlVW5pZm9y
bShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5
cGUsIG5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBTdHJpbmcgb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xOYW1l
KHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNLCBTdHJpbmcobmFtZS5kYXRhKCks
IG5hbWVMZW5ndGgpKTsKLSAgICAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU3RyaW5nIHVuaWZvcm1O
YW1lKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKTsKLSAgICBMT0coV2ViR0wsICJQcm9ncmFtICVk
IGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0gJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFt
LCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5k
YXRhKCkpOwotI2VuZGlmCi0gICAgCi0gICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOwotICAg
IGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewot
ICAgIEdDM0RpbnQgc3ltYm9sQ291bnQ7Ci0gICAgYXV0byByZXN1bHQgPSBtX3NoYWRlclByb2dy
YW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dyYW0pOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZW5kKCkpIHsKLSAgICAgICAgZ2V0Tm9uQnVpbHRJbkFj
dGl2ZVN5bWJvbENvdW50KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9S
TVMsICZzeW1ib2xDb3VudCk7Ci0gICAgICAgIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgfQotICAgIAotICAgIEFjdGl2ZVNoYWRlclN5
bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0gcmVzdWx0LT52YWx1ZTsKLSAgICBHQzNEdWludCBy
YXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUlu
ZGV4TWFwLnNpemUoKSkgPyBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRl
eE1hcFtpbmRleF0gOiAtMTsKLSAgICAKLSAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwo
cHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4
Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCi17Ci0g
ICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFM
VUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFk
ZXJzKTsKLX0KLQotc3RhdGljIFN0cmluZyBnZW5lcmF0ZUhhc2hlZE5hbWUoY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7
Ci0gICAgdWludDY0X3QgbnVtYmVyID0gbmFtZUhhc2hGb3JTaGFkZXIobmFtZS51dGY4KCkuZGF0
YSgpLCBuYW1lLmxlbmd0aCgpKTsKLSAgICByZXR1cm4gbWFrZVN0cmluZygid2ViZ2xfIiwgaGV4
KG51bWJlciwgTG93ZXJjYXNlKSk7Ci19Ci0KLU9wdGlvbmFsPFN0cmluZz4gR3JhcGhpY3NDb250
ZXh0M0Q6Om1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
KQotewotICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwot
ICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBhdXRvJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZh
bHVlLnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICBhdXRvIHN5bWJvbEVudHJ5ID0gc3ltYm9s
TWFwLmZpbmQobmFtZSk7Ci0gICAgaWYgKHN5bWJvbEVudHJ5ID09IHN5bWJvbE1hcC5lbmQoKSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8mIG1hcHBlZE5hbWUgPSBz
eW1ib2xFbnRyeS0+dmFsdWUubWFwcGVkTmFtZTsKLSAgICByZXR1cm4gU3RyaW5nKG1hcHBlZE5h
bWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSk7Ci19Ci0KLVN0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
R0MzRHNpemVpIGNvdW50ID0gMDsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7
IH07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7
Ci0KLSAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
YXV0byBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoc2hhZGVyc1tp
XSwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChtYXBwZWROYW1lKQotICAgICAgICAg
ICAgcmV0dXJuIG1hcHBlZE5hbWUudmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBtaWdodCBo
YXZlIGRldGFjaGVkIG9yIGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KLSAgICBh
dXRvIHJlc3VsdCA9IG1fbGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7Ci0gICAgaWYgKHJl
c3VsdCAhPSBtX2xpbmtlZFNoYWRlck1hcC5lbmQoKSkgewotICAgICAgICBhdXRvIGxpbmtlZFNo
YWRlcnMgPSByZXN1bHQtPnZhbHVlOwotICAgICAgICBhdXRvIG1hcHBlZE5hbWUgPSBtYXBwZWRT
eW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBu
YW1lKTsKLSAgICAgICAgaWYgKG1hcHBlZE5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbWFwcGVk
TmFtZS52YWx1ZSgpOwotICAgICAgICBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sSW5TaGFkZXJT
b3VyY2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAg
ICBpZiAobWFwcGVkTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7
Ci0gICAgfQotCi0gICAgaWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJ
QlVURSAmJiAhbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBz
cGVjaWFsIGNhc2U6IHRoZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2
ZSBiZWVuIGNvbXBpbGVkLAotICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8g
YmUgdXNlZCBpbiBhbnkgc2hhZGVyIHByb2dyYW0uCi0gICAgICAgIGlmICghbmFtZUhhc2hNYXBG
b3JTaGFkZXJzKQotICAgICAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJzID0gbWFrZVVuaXF1
ZTxTaGFkZXJOYW1lSGFzaD4oKTsKLSAgICAgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hh
ZGVyKG5hbWVIYXNoTWFwRm9yU2hhZGVycy5nZXQoKSk7Ci0KLSAgICAgICAgYXV0byBnZW5lcmF0
ZWROYW1lID0gZ2VuZXJhdGVIYXNoZWROYW1lKG5hbWUpOwotCi0gICAgICAgIHNldEN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlcihudWxscHRyKTsKLQotICAgICAgICBtX3Bvc3NpYmx5VW51c2Vk
QXR0cmlidXRlTWFwLnNldChnZW5lcmF0ZWROYW1lLCBuYW1lKTsKLQotICAgICAgICByZXR1cm4g
Z2VuZXJhdGVkTmFtZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotT3B0aW9uYWw8
U3RyaW5nPiBHcmFwaGljc0NvbnRleHQzRDo6b3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1h
cChQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgY29uc3QgYXV0byYg
c3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBzeW1ib2xFbnRyeSA6IHN5bWJvbE1hcCkgewotICAgICAgICBpZiAobmFt
ZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5tYXBwZWROYW1lLmNfc3RyKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc3ltYm9sRW50cnkua2V5OwotICAgIH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
fQotCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Om9yaWdpbmFsU3ltYm9sTmFtZShQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgR0MzRHNpemVpIGNvdW50OwotICAgIFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyc1syXTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNv
dW50LCBzaGFkZXJzKTsKLSAgICAKLSAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKLSAgICAgICAgYXV0byBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbEluU2hh
ZGVyU291cmNlTWFwKHNoYWRlcnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOwotICAgICAgICBpZiAo
b3JpZ2luYWxOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgpOwot
ICAgIH0KLQotICAgIC8vIFdlIG1pZ2h0IGhhdmUgZGV0YWNoZWQgb3IgZGVsZXRlZCB0aGUgc2hh
ZGVycyBhZnRlciBsaW5raW5nLgotICAgIGF1dG8gcmVzdWx0ID0gbV9saW5rZWRTaGFkZXJNYXAu
ZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0ICE9IG1fbGlua2VkU2hhZGVyTWFwLmVuZCgp
KSB7Ci0gICAgICAgIGF1dG8gbGlua2VkU2hhZGVycyA9IHJlc3VsdC0+dmFsdWU7Ci0gICAgICAg
IGF1dG8gb3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5r
ZWRTaGFkZXJzLmZpcnN0LCBzeW1ib2xUeXBlLCBuYW1lKTsKLSAgICAgICAgaWYgKG9yaWdpbmFs
TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE5hbWUudmFsdWUoKTsKLSAgICAgICAg
b3JpZ2luYWxOYW1lID0gb3JpZ2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChsaW5rZWRTaGFk
ZXJzLnNlY29uZCwgc3ltYm9sVHlwZSwgbmFtZSk7Ci0gICAgICAgIGlmIChvcmlnaW5hbE5hbWUp
Ci0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZhbHVlKCk7Ci0gICAgfQotCi0gICAg
aWYgKHN5bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSAmJiAhbmFtZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQXR0cmlidXRlcyBhcmUgYSBzcGVjaWFsIGNhc2U6IHRo
ZXkgbWF5IGJlIHJlcXVlc3RlZCBiZWZvcmUgYW55IHNoYWRlcnMgaGF2ZSBiZWVuIGNvbXBpbGVk
LAotICAgICAgICAvLyBhbmQgYXJlbid0IGV2ZW4gcmVxdWlyZWQgdG8gYmUgdXNlZCBpbiBhbnkg
c2hhZGVyIHByb2dyYW0uCi0KLSAgICAgICAgY29uc3QgYXV0byYgY2FjaGVkID0gbV9wb3NzaWJs
eVVudXNlZEF0dHJpYnV0ZU1hcC5maW5kKG5hbWUpOwotICAgICAgICBpZiAoY2FjaGVkICE9IG1f
cG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gY2Fj
aGVkLT52YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1sy
XSwgc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChzaXplX3Qg
c3ltYm9sVHlwZSA9IDA7IHN5bWJvbFR5cGUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihTSEFERVJf
U1lNQk9MX1RZUEVfVkFSWUlORyk7ICsrc3ltYm9sVHlwZSkgewotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKLSAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFNoYWRl
clN5bWJvbE1hcCYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1ZS5zeW1ib2xNYXAoc3RhdGljX2Nh
c3Q8ZW51bSBBTkdMRVNoYWRlclN5bWJvbFR5cGU+KHN5bWJvbFR5cGUpKTsKLSAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKLSAgICAgICAgICAg
ICAgICBpZiAobmFtZSA9PSBzeW1ib2xFbnRyeS52YWx1ZS5tYXBwZWROYW1lLmNfc3RyKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS5rZXk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLWludCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7
Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0g
bWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBu
YW1lKTsKLSAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAl
cyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsK
LSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRm
OCgpLmRhdGEoKSk7Ci19Ci0KLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRp
b25EaXJlY3QoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwotCi0gICAgLy8gU2V0IGFuIGFyYml0cmFy
eSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKLSAgICAvLyBh
IHByb2JsZW0gZHJpdmVyIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCB0byBuZXZlciBjbGVhciB0
aGUgZXJyb3IuCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBqdXN0IGxvb3AgdW50aWwgd2Ug
Z290IE5PX0VSUk9SLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewot
ICAgICAgICBHQzNEZW51bSBlcnJvciA9IGdsR2V0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9y
ID09IE5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1fc3ludGhldGljRXJy
b3JzLmFkZChlcnJvcik7Ci0gICAgICAgIG1vdmVkQW5FcnJvciA9IHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1vdmVkQW5FcnJvcjsKLX0KLQotR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEVycm9yKCkKLXsKLSAgICBpZiAoIW1fc3ludGhldGljRXJyb3JzLmlzRW1wdHkoKSkgewot
ICAgICAgICAvLyBOZWVkIHRvIG1vdmUgdGhlIGN1cnJlbnQgZXJyb3JzIHRvIHRoZSBzeW50aGV0
aWMgZXJyb3IgbGlzdCBpbiBjYXNlCi0gICAgICAgIC8vIHRoYXQgZXJyb3IgaXMgYWxyZWFkeSB0
aGVyZSwgc2luY2UgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGJvdGgKLSAgICAgICAgLy8gZ2xH
ZXRFcnJvciBhbmQgZ2V0RXJyb3IgaXMgdG8gb25seSByZXBvcnQgZWFjaCBlcnJvciBjb2RlIG9u
Y2UuCi0gICAgICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgICAgICBy
ZXR1cm4gbV9zeW50aGV0aWNFcnJvcnMudGFrZUZpcnN0KCk7Ci0gICAgfQotCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRFcnJvcigpOwotfQotCi1TdHJpbmcg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oOjpnbEdldFN0cmluZyhuYW1lKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
Ci17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKLX0K
LQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZChHQzNEZW51bSBjYXAp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQo
Y2FwKTsKLX0KLQotR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIo
UGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQot
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOwotfQotCi1HQzNEYm9v
bGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0p
OwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxh
dGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIpCi0g
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IHJldHVybiA6OmdsSXNSZW5kZXJidWZmZXJFWFQocmVuZGVyYnVmZmVyKTsKLX0KLQotR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KQotewotICAgIGlmICghc2hhZGVyKQotICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbElzU2hhZGVyKHNoYWRlcik7Ci19
Ci0KLUdDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xJc1RleHR1
cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNE
ZmxvYXQgd2lkdGgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbExpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBHQzNEc2l6ZWkgY291bnQgPSAwOwotICAgIFBsYXRm
b3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKLSAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKLQotICAgIGlmIChjb3VudCA9PSAyKQotICAgICAg
ICBtX2xpbmtlZFNoYWRlck1hcC5zZXQocHJvZ3JhbSwgc3RkOjptYWtlX3BhaXIoc2hhZGVyc1sw
XSwgc2hhZGVyc1sxXSkpOwotCi0gICAgOjpnbExpbmtQcm9ncmFtKHByb2dyYW0pOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCBwYXJhbSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsUGl4ZWxTdG9y
ZWkocG5hbWUsIHBhcmFtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9m
ZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUs
IEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6
OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsU2Np
c3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7Ci0KLSAgICBlbnRyeS5zb3VyY2UgPSBzdHJp
bmc7Ci0KLSAgICBtX3NoYWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQg
cmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdD
M0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxNYXNrKG1hc2spOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZh
Y2UsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0g
enBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2ls
T3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwg
R0MzRGVudW0genBhc3MpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFN0
ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGZsb2F0IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50IHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTFmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2
MCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZnYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVp
IHNpemUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgOjpnbFVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNp
emUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
OjpnbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQgdjApCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm0x
aShsb2NhdGlvbiwgdjApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWl2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTFpdihsb2NhdGlv
biwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmko
R0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSkKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICA6OmdsVW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2
MCwgR0MzRGludCB2MSwgR0MzRGludCB2MikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6
ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bFVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQg
djEsIEdDM0RpbnQgdjIsIEdDM0RpbnQgdjMpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgOjpnbFVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBjb25zdCBHQzNEaW50KiBhcnJheSkKLXsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsVW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17
Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24s
IHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkuCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9z
ZSwgYXJyYXkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdDM0RmbG9hdCogYXJyYXkpCi17Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDE2LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFVzZVByb2dyYW0o
cHJvZ3JhbSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgQVNTRVJUKHByb2dyYW0pOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5k
ZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGlu
ZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2
MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBjb25z
dCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZs
b2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGlu
ZGV4LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGlu
dCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkg
c3RyaWRlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXpl
ZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PihvZmZzZXQpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVW
ZXJ0ZXhBcnJheSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGFy
cmF5ID0gMDsKLSNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKLSAgICA6OmdsR2VuVmVydGV4QXJyYXlzKDEs
ICZhcnJheSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCi17Ci0g
ICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQotICAgIDo6Z2xEZWxldGVWZXJ0ZXhBcnJheXMo
MSwgJmFycmF5KTsKLSNlbmRpZgotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6
aXNWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQotewotICAgIGlmICghYXJyYXkp
Ci0gICAgICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJ
TikpKSB8fCBQTEFURk9STShDT0NPQSkKLSAgICByZXR1cm4gOjpnbElzVmVydGV4QXJyYXkoYXJy
YXkpOwotI2VuZGlmCi0gICAgcmV0dXJuIEdMX0ZBTFNFOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKLXsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKLSAgICA6OmdsQmluZFZl
cnRleEFycmF5KGFycmF5KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFycmF5KTsKLSNlbmRp
ZgotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFt
ZSwgR0MzRGJvb2xlYW4qIHZhbHVlKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
IDo6Z2xHZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6Omds
R2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldEZsb2F0dihwbmFt
ZSwgdmFsdWUpOwotfQotICAgIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcjY0
dihHQzNEZW51bSBwbmFtZSwgR0MzRGludDY0KiB2YWx1ZSkKLXsKLSAgICBVTlVTRURfUEFSQU0o
cG5hbWUpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICp2YWx1ZSA9IDA7Ci0gICAg
Ly8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRj
aCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2Vi
R0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KLSAgICAvLyA6OmdsR2V0SW50ZWdlcjY0
dihwbmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBpZiAoYXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQpCi0gICAgICAgIGF0dGFjaG1lbnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lM
X0FUVEFDSE1FTlQsIGVpdGhlciB3b3Jrcy4KLSAgICA6OmdsR2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9s
Q291bnQoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpCi17Ci0gICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8IEFDVElW
RV9VTklGT1JNUyA9PSBwbmFtZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9z
aGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKLSAgICBpZiAocmVzdWx0
ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7Ci0gICAgICAgICp2YWx1
ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnNldChwcm9ncmFtLCBB
Y3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKSk7Ci0gICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRz
JiBzeW1ib2xDb3VudHMgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5kKHByb2dy
YW0pLT52YWx1ZTsKLQotICAgIC8vIFJldHJpZXZlIHRoZSBhY3RpdmUgYXR0cmlidXRlcywgYnVp
bGQgYSBmaWx0ZXJlZCBjb3VudCwgYW5kIGEgbWFwcGluZyBvZgotICAgIC8vIG91ciBpbnRlcm5h
bCBhdHRyaWJ1dGVzIGluZGV4ZXMgdG8gdGhlIHJlYWwgdW5maWx0ZXJlZCBpbmRleGVzIGluc2lk
ZSBPcGVuR0wuCi0gICAgR0MzRGludCBhdHRyaWJ1dGVDb3VudCA9IDA7Ci0gICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBBQ1RJVkVfQVRUUklCVVRFUywgJmF0dHJpYnV0ZUNvdW50KTsKLSAg
ICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudDsgKytpKSB7Ci0gICAgICAg
IEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCBp
LCBpbmZvKTsKLSAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHN5bWJvbENvdW50cy5maWx0ZXJlZFRvQWN0dWFs
QXR0cmlidXRlSW5kZXhNYXAuYXBwZW5kKGkpOwotICAgIH0KLSAgICAKLSAgICAvLyBEbyB0aGUg
c2FtZSBmb3IgdW5pZm9ybXMuCi0gICAgR0MzRGludCB1bmlmb3JtQ291bnQgPSAwOwotICAgIDo6
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgQUNUSVZFX1VOSUZPUk1TLCAmdW5pZm9ybUNvdW50KTsK
LSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCB1bmlmb3JtQ291bnQ7ICsraSkgewotICAgICAg
ICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0s
IGksIGluZm8pOwotICAgICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVy
ZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7Ci0gICAgfQotICAgIAotICAgICp2
YWx1ZSA9IHN5bWJvbENvdW50cy5jb3VudEZvclR5cGUocG5hbWUpOwotfQotCi1TdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFVubWFuZ2xlZEluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFk
ZXJzWzJdLCBHQzNEc2l6ZWkgY291bnQsIGNvbnN0IFN0cmluZyYgbG9nKQotewotICAgIExPRyhX
ZWJHTCwgIk9yaWdpbmFsIFNoYWRlckluZm9Mb2c6XG4lcyIsIGxvZy51dGY4KCkuZGF0YSgpKTsK
LQotICAgIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24gcmVnRXhwKCJ3ZWJnbF9bMDEyMzQ1
Njc4OWFiY2RlZkFCQ0RFRl0rIik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIHByb2Nlc3NlZExvZzsK
LSAgICAKLSAgICAvLyBBTkdMRSBpbnNlcnRzIGEgIiNleHRlbnNpb24iIGxpbmUgaW50byB0aGUg
c2hhZGVyIHNvdXJjZSB0aGF0Ci0gICAgLy8gY2F1c2VzIGEgd2FybmluZyBpbiBzb21lIGNvbXBp
bGVycy4gVGhlcmUgaXMgbm8gcG9pbnQgc2hvd2luZwotICAgIC8vIHRoaXMgd2FybmluZyB0byB0
aGUgdXNlciBzaW5jZSB0aGV5IGRpZG4ndCB3cml0ZSB0aGUgY29kZSB0aGF0Ci0gICAgLy8gaXMg
Y2F1c2luZyBpdC4KLSAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhbmds
ZVdhcm5pbmcgeyAiV0FSTklORzogMDoxOiBleHRlbnNpb24gJ0dMX0FSQl9ncHVfc2hhZGVyNScg
aXMgbm90IHN1cHBvcnRlZFxuIl9zIH07Ci0gICAgaW50IHN0YXJ0RnJvbSA9IGxvZy5zdGFydHNX
aXRoKGFuZ2xlV2FybmluZykgPyBhbmdsZVdhcm5pbmcuZ2V0KCkubGVuZ3RoKCkgOiAwOwotICAg
IGludCBtYXRjaGVkTGVuZ3RoID0gMDsKLQotICAgIGRvIHsKLSAgICAgICAgaW50IHN0YXJ0ID0g
cmVnRXhwLm1hdGNoKGxvZywgc3RhcnRGcm9tLCAmbWF0Y2hlZExlbmd0aCk7Ci0gICAgICAgIGlm
IChzdGFydCA9PSAtMSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHByb2Nlc3NlZExv
Zy5hcHBlbmQobG9nLnN1YnN0cmluZyhzdGFydEZyb20sIHN0YXJ0IC0gc3RhcnRGcm9tKSk7Ci0g
ICAgICAgIHN0YXJ0RnJvbSA9IHN0YXJ0ICsgbWF0Y2hlZExlbmd0aDsKLQotICAgICAgICBjb25z
dCBTdHJpbmcmIG1hbmdsZWRTeW1ib2wgPSBsb2cuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaGVkTGVu
Z3RoKTsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBtYXBwZWRTeW1ib2wgPSBtYXBwZWRTeW1ib2xO
YW1lKHNoYWRlcnMsIGNvdW50LCBtYW5nbGVkU3ltYm9sKTsKLSAgICAgICAgTE9HKFdlYkdMLCAi
RGVtYW5nbGluZzogJXMgdG8gJXMiLCBtYW5nbGVkU3ltYm9sLnV0ZjgoKS5kYXRhKCksIG1hcHBl
ZFN5bWJvbC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChtYXBw
ZWRTeW1ib2wpOwotICAgIH0gd2hpbGUgKHN0YXJ0RnJvbSA8IHN0YXRpY19jYXN0PGludD4obG9n
Lmxlbmd0aCgpKSk7Ci0KLSAgICBwcm9jZXNzZWRMb2cuYXBwZW5kKGxvZy5zdWJzdHJpbmcoc3Rh
cnRGcm9tLCBsb2cubGVuZ3RoKCkgLSBzdGFydEZyb20pKTsKLQotICAgIExPRyhXZWJHTCwgIlVu
bWFuZ2xlZCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBwcm9jZXNzZWRMb2cudG9TdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtKQotewotICAgIEFTU0VSVChwcm9ncmFtKTsKLQotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9n
cmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIGlmICghbGVuZ3RoKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgR0xzaXplaSBzaXplID0gMDsKLSAgICBWZWN0
b3I8R0xjaGFyPiBpbmZvKGxlbmd0aCk7Ci0gICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKHByb2dy
YW0sIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0YSgpKTsKLQotICAgIEdDM0RzaXplaSBjb3VudDsK
LSAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl07Ci0gICAgZ2V0QXR0YWNoZWRTaGFkZXJz
KHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7Ci0KLSAgICByZXR1cm4gZ2V0VW5tYW5nbGVk
SW5mb0xvZyhzaGFkZXJzLCBjb3VudCwgU3RyaW5nKGluZm8uZGF0YSgpLCBzaXplKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBERUxFVEVfU1RBVFVT
OgotICAgIGNhc2UgU0hBREVSX1RZUEU6Ci0gICAgICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIs
IHBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6
Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAg
ICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZmFsc2UpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4ocmVzdWx0
LT52YWx1ZS5pc1ZhbGlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJTkZPX0xPR19MRU5H
VEg6Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAg
ICAgICAgICAgICp2YWx1ZSA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgKnZhbHVlID0gZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICAqdmFsdWUg
PSBnZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKLSAgICB9
Ci19Ci0KLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgCi0KLSAgICBjb25zdCBTaGFkZXJTb3VyY2VF
bnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOwotICAgIGlmICghZW50cnkuaXNWYWxpZCkKLSAg
ICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKLQotICAgIEdMaW50IGxlbmd0aCA9IDA7Ci0gICAgOjpn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKLQotICAgIEdMc2l6ZWkgc2l6
ZSA9IDA7Ci0gICAgVmVjdG9yPEdMY2hhcj4gaW5mbyhsZW5ndGgpOwotICAgIDo6Z2xHZXRTaGFk
ZXJJbmZvTG9nKHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mby5kYXRhKCkpOwotCi0gICAgUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsKLSAgICByZXR1cm4gZ2V0
VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJpbmcoaW5mby5kYXRhKCksIHNpemUpKTsK
LX0KLQotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCi17Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAotCi0gICAgcmV0dXJuIHJlc3VsdC0+dmFsdWUu
c291cmNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQs
IHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFt
ZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRUZXhQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFVu
aWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Ci19Ci0KLUdDM0Rp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQocHJvZ3JhbSk7Ci0K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSwgbmFtZSk7
Ci0gICAgTE9HKFdlYkdMLCAiOjpnZXRVbmlmb3JtTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAl
cyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBy
ZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5k
YXRhKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdihH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCi17Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBw
bmFtZSwgdmFsdWUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcG5hbWUsIHZhbHVlKTsKLX0KLQotR0MzRHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgR0x2b2lkKiBwb2ludGVyID0gMDsKLSAg
ICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4ocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4ocG9pbnRlcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2ZmLCBHQzNEaW50
IHlvZmYsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICBpZiAodHlwZSA9PSBIQUxGX0ZM
T0FUX09FUykKLSAgICAgICAgdHlwZSA9IEdMX0hBTEZfRkxPQVRfQVJCOwotI2VuZGlmCi0KLSAg
ICBpZiAobV91c2luZ0NvcmVQcm9maWxlKSAgewotICAgICAgICAvLyBUaGVyZSBhcmUgc29tZSBm
b3JtYXQgdmFsdWVzIHVzZWQgaW4gV2ViR0wgdGhhdCBhcmUgZGVwcmVjYXRlZCB3aGVuIHVzaW5n
IGEgY29yZSBwcm9maWxlLCBzbyB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIGFkYXB0IHRoZW0sIGFz
IHdlIGRvIGluIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKCkuCi0gICAgICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgQUxQSEE6Ci0gICAgICAgICAgICAvLyBXZSBhcmUg
dXNpbmcgR0xfUkVEIHRvIGJhY2sgR0xfQUxQSEEsIHNvIGRvIGl0IGhlcmUgYXMgd2VsbC4KLSAg
ICAgICAgICAgIGZvcm1hdCA9IFJFRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IExVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIC8vIFdlIGFyZSB1c2luZyBHTF9SRyB0byBi
YWNrIEdMX0xVTUlOQU5DRV9BTFBIQSwgc28gZG8gaXQgaGVyZSBhcyB3ZWxsLgotICAgICAgICAg
ICAgZm9ybWF0ID0gUkc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHdp
bGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGgg
aW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplLgotICAgIDo6
Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRk
KG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsQ29tcHJlc3NlZFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQqIGRhdGEpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbENvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICBtX3N0YXRlLnRleHR1cmVT
ZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKLX0KLQotUGxhdGZv
cm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5CdWZmZXJzKDEs
ICZvKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIEdMdWludCBvID0gMDsKLSAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7Ci0gICAg
cmV0dXJuIG87Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZVByb2dyYW0oKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBnbENy
ZWF0ZVByb2dyYW0oKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBH
THVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsKLSAgICByZXR1
cm4gbzsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hh
ZGVyKEdDM0RlbnVtIHR5cGUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0
dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURFUikgPyBHTF9GUkFHTUVO
VF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0x1aW50IG8gPSAwOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwotICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJmJ1
ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91bmRGQk8pIHsKLSAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgZHJh
d2luZwotICAgICAgICAvLyBvcGVyYXRpb25zIGFmdGVyIGl0IGdldHMgZGVsZXRlZC4KLSAgICAg
ICAgYmluZEZyYW1lYnVmZmVyKEZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci0gICAgZ2xEZWxldGVG
cmFtZWJ1ZmZlcnNFWFQoMSwgJmZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVt
b3ZlKHByb2dyYW0pOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVu
ZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fc3RhdGUuYm91bmRUZXh0dXJl
TWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsKLSAgICAgICAgcmV0dXJu
IGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7Ci0gICAgfSk7Ci0gICAgZ2xEZWxldGVU
ZXh0dXJlcygxLCAmdGV4dHVyZSk7Ci0gICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LnJlbW92
ZUFsbCh0ZXh0dXJlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdM
RXJyb3IoR0MzRGVudW0gZXJyb3IpCi17Ci0gICAgLy8gTmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50
IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxpc3QgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0
aGUgb3JkZXIgb2YgZXJyb3JzLCBzbyBhIGNhbGxlciB0byBnZXRFcnJvciB3aWxsIGdldAotICAg
IC8vIGFueSBlcnJvcnMgZnJvbSBnbEVycm9yIGJlZm9yZSB0aGUgZXJyb3Igd2UgYXJlIHN5bnRo
ZXNpemluZy4KLSAgICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX3N5
bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpt
YXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gZmFsc2U7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQotewotICAg
IG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKLQotICAgIGZvciAoYXV0byogY2xpZW50IDogY29w
eVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+ZGlkQ29tcG9zaXRlKCk7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpmb3JjZUNvbnRleHRMb3N0KCkKLXsKLSAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1Zl
Y3RvcihtX2NsaWVudHMpKQotICAgICAgICBjbGllbnQtPmZvcmNlQ29udGV4dExvc3QoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVjeWNsZUNvbnRleHQoKQotewotICAgIGZvciAo
YXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50cykpCi0gICAgICAgIGNsaWVudC0+
cmVjeWNsZUNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzcGF0Y2hD
b250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCi17Ci0gICAgZm9yIChhdXRvKiBjbGllbnQgOiBj
b3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50LT5kaXNwYXRjaENvbnRleHRD
aGFuZ2VkTm90aWZpY2F0aW9uKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkREaXJlY3QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOwotICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5j
dXJyZW50Qm91bmRUZXh0dXJlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3
QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBj
b3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBnZXRFeHRlbnNpb25zKCkuZHJhd0Fy
cmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0gICAgY2hlY2tH
UFVTdGF0dXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzSW5z
dGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludHB0ciBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgZ2V0RXh0ZW5zaW9u
cygpLmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBwcmlt
Y291bnQpOwotICAgIGNoZWNrR1BVU3RhdHVzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3Ip
Ci17Ci0gICAgZ2V0RXh0ZW5zaW9ucygpLnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlz
b3IpOwotfQotCi0jaWYgVVNFKE9QRU5HTCkgJiYgRU5BQkxFKFdFQkdMMikKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnByaW1pdGl2ZVJlc3RhcnRJbmRleChHQzNEdWludCBpbmRleCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsUHJpbWl0aXZlUmVzdGFydEluZGV4KGlu
ZGV4KTsKLX0KLSNlbmRpZgotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVY
VF8zRCkgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShPUEVOR0xfRVMpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
NjY4MjFjYTZmZDgzMzgxNWIzYjgzYWMyZGY3NTM4MDI2MTQ4NjMzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8
c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKE9QRU5HTF9FUykgJiYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
SW50U2l6ZS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLSNpbmNsdWRlIDxBTkdM
RS9TaGFkZXJMYW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2
b2lkKiBkYXRhKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgYXV0byBhdHRy
aWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhl
IHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0g
ICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUg
cmVhZGluZyBwaXhlbHMuCi0gICAgOjpnbEZsdXNoKCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMuYW50
aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAg
ICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgICAgICA6OmdsRmx1c2goKTsKLSAgICB9Ci0KLSAgICA6OmdsUmVhZFBpeGVscyh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotCi0gICAgaWYgKGF0dHJp
YnV0ZXMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0
VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVu
c2lnbmVkIGNoYXIqIHBpeGVscykKLXsKLSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgIGludCB0b3Rh
bEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OwotICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkp
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAg
ICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0
byBCR1JBLgotICAgIH0KLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3Mo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRo
KCk7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgR0x1aW50IGNv
bG9yRm9ybWF0ID0gMDsKLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygp
OwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAg
Y29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhl
IGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAv
LyBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLSAgICBib29sIHN1
cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIgPSAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0
dHJpYnV0ZXMuZGVwdGgpICYmIGdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsIik7Ci0KLSAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCi0gICAgYm9v
bCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1f
ZmJvKSB7Ci0gICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLQotICAgIEFTU0VSVCht
X3RleHR1cmUpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1Jf
QVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAgICAg
ICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIH0KLQot
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUp
OwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSNlbmRpZgotCi0gICAg
RXh0ZW5zaW9uczNET3BlbkdMRVMmIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25z
M0RPcGVuR0xFUyY+KGdldEV4dGVuc2lvbnMoKSk7Ci0gICAgaWYgKGV4dGVuc2lvbnMuaXNJbWFn
aW5hdGlvbigpICYmIGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIEdMaW50IG1heFNh
bXBsZUNvdW50OwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FN
UExFU19JTUcsICZtYXhTYW1wbGVDb3VudCk7IAotICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9
IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsKLQotICAgICAgICBleHRlbnNpb25zLmZyYW1l
YnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDAsIHNhbXBsZUNvdW50KTsKLQot
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAg
ICAgICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBo
YXZlIGl0LgotICAgICAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIp
IHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUywgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdM
X1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRF
UkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVy
KTsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy5yZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgR0xfU1RFTkNJTF9JTkRFWDgs
IHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVS
QlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICAgICAgICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAg
ICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9S
RU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2Rl
cHRoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKSB7Ci0gICAgICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJl
IHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhT
dGVuY2lsQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xf
UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUywgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCkKLSAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVy
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAg
ICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lM
X0lOREVYOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBH
TF9SRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgICAgICAgICAgICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZF
UiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAg
ICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRI
X0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIo
R0xfUkVOREVSQlVGRkVSLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZ2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdMX0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSkgewotICAgICAgICAvLyBGSVhNRTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIH0KLQotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0
JikKLXsKLSAgICAvLyBGSVhNRTogV2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0Lgot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRl
Z2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFk
ZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCog
cHJlY2lzaW9uKQotewotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgQVNTRVJUKHByZWNpc2lvbik7
Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsR2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCBwcmVjaXNpb24pOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYg
IXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHRleEltYWdlMkREaXJlY3QodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQotewotICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJH
TF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgIWdl
dEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4
dHVyZSIpKSB7Ci0gICAgICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgICAg
IHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgIH0KLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpG
YXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbERlcHRoUmFuZ2VmKHpO
ZWFyLCB6RmFyKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNE
Y2xhbXBmIGRlcHRoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xDbGVh
ckRlcHRoZihkZXB0aCk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQotRXh0ZW5zaW9uczNEJiBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lv
bnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdM
RVM+KHRoaXMsIGlzR0xFUzJDb21wbGlhbnQoKSk7Ci0gICAgcmV0dXJuICptX2V4dGVuc2lvbnM7
Ci19Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENBKQotUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0Nv
bnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1l
bnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0
aGUgSG9zdFdpbmRvdy4KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVj
dGx5VG9Ib3N0V2luZG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0
cnVlOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICAg
ICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOwotI2VuZGlmCi0gICAgICAgIGlu
aXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4
dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMg
YXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBk
ZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0M0QqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFw
aGljc0NvbnRleHQzREJhc2UoYXR0cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQp
Ci0gICAgLCBtX2NvbXBpbGVyKGlzR0xFUzJDb21wbGlhbnQoKSA/IFNIX0VTU0xfT1VUUFVUIDog
U0hfR0xTTF9DT01QQVRJQklMSVRZX09VVFBVVCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4odGhpcywgZGVzdGluYXRpb24pKQotewotICAgIEFT
U0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIAotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotICAgIGF0dHJp
YnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVy
aW5nIHZhbGlkYXRpb24uCi0KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246Ok9m
ZnNjcmVlbikgewotICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgot
ICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgICAgICA6OmdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0g
ICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICA6OmdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIENyZWF0ZSBhbiBGQk8uCi0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgJm1fZmJvKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgbV9mYm8pOwotICAgICAgICAKLSAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwot
ICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuYW50aWFsaWFzICYmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkpCi0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygx
LCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAKLSAgICAgICAgLy8gQ3JlYXRlIGEg
bXVsdGlzYW1wbGUgRkJPLgotICAgICAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAg
ICAgICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAg
ICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsK
LSAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIpOwotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAv
LyBBTkdMRSBpbml0aWFsaXphdGlvbi4KLSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNv
dXJjZXM7Ci0gICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotICAg
IAotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMs
ICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNl
cy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVj
dG9ycyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RF
WFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAg
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKLSAgICAKLSAg
ICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5N
YXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgCi0gICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9u
OwotICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNp
b24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVsw
XSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotICAgIAotICAgIG1fY29tcGlsZXIuc2V0UmVz
b3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICAKLSNpZiAhVVNFKE9QRU5HTF9FUykKLSAgICA6
OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotICAgIDo6Z2xFbmFibGUo
R0xfUE9JTlRfU1BSSVRFKTsKLSNlbmRpZgotICAgIAotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAs
IDAsIDApOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKLXsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7Ci0KLSAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwot
Ci0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsRGVs
ZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJv
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhz
dGQ6OnVuaXF1ZV9wdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0ZDo6dW5pcXVlX3B0cjxFcnJv
ck1lc3NhZ2VDYWxsYmFjaz4pCi17Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VD
b250ZXh0Q3VycmVudCgpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tHUFVTdGF0dXMoKQotewotfQotCi1QbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKCkKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5wbGF0Zm9ybUNvbnRleHQoKTsKLX0K
LQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV90ZXh0dXJlOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKLXsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAg
IHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotUGxh
dGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3dlYkdMTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKTsKLX0KLSNlbmRpZgotCi19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKE9QRU5HTF9F
UykgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYjMzNjExODBiMWIyYmE2ZTkxMmU0MGRkMjE1M2I0ZmQzNGI0
MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmNwcApAQCAtMCwwICsxLDUzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBNb3ppbGxhIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
CisKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKworI2luY2x1ZGUgIkV4dGVuc2lv
bnNHTC5oIgorI2luY2x1ZGUgIkZvcm1hdENvbnZlcnRlci5oIgorI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSB7CisKK0dyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0IGdldERhdGFGb3JtYXQoR0Mz
RGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdDM0RlbnVtIGRlc3RpbmF0aW9uVHlwZSkKK3sKKyAg
ICBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHRHTDo6RGF0YUZvcm1hdDo6UkdCQTg7CisgICAgc3dpdGNoIChkZXN0aW5hdGlvblR5cGUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0
Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjoKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0I4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHRHTDo6QUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHRHTDo6RGF0YUZvcm1hdDo6QTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlI4OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAg
ICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTg7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6U1JHQjoKKyAg
ICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNS
R0JfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0
YUZvcm1hdDo6UkdCQTg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Cisg
ICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBNDQ0
NDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURf
U0hPUlRfNV81XzVfMToKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRh
dGFGb3JtYXQ6OlJHQkE1NTUxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjU2NTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZf
ZmxvYXQKKyAgICAgICAgc3dpdGNoIChkZXN0aW5hdGlvbkZvcm1hdCkgeworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpSR0I6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCMTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE6CisgICAgICAgICAgICBkc3RGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTE2RjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICAgICAgICAg
IGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBMTZGOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRToK
KyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpS
MTZGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQjE2RjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpTUkdCX0FMUEhBOgorICAgICAgICAgICAgZHN0
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkExNkY7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAgICAgICBzd2l0Y2ggKGRlc3Rp
bmF0aW9uRm9ybWF0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAg
ICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0Iz
MkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdCQToKKyAgICAgICAgICAgIGRzdEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0JBMzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0R0w6OkFMUEhBOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OkEzMkY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFOgorICAgICAgICAgICAgZHN0Rm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlIzMkY7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAg
ICAgZHN0Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJBMzJGOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNSR0I6Cisg
ICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdC
MzJGOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OlNSR0JfQUxQSEE6CisgICAgICAgICAgICBkc3RGb3JtYXQgPSBHcmFwaGljc0NvbnRleHRHTDo6
RGF0YUZvcm1hdDo6UkdCQTMyRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIHJldHVybiBkc3RGb3JtYXQ7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Citib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB1bnBhY2tBbGlnbm1lbnQpCit7CisgICAg
QVNTRVJUKHVucGFja0FsaWdubWVudCA9PSAxIHx8IHVucGFja0FsaWdubWVudCA9PSAyIHx8IHVu
cGFja0FsaWdubWVudCA9PSA0IHx8IHVucGFja0FsaWdubWVudCA9PSA4KTsKKyAgICBVbmlxdWVB
cnJheTx1bnNpZ25lZCBjaGFyPiB6ZXJvOworICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4g
MCkgeworICAgICAgICB1bnNpZ25lZCBzaXplOworICAgICAgICBHQzNEZW51bSBlcnJvciA9IGNv
bXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgdW5wYWNr
QWxpZ25tZW50LCAmc2l6ZSwgbnVsbHB0cik7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGlj
c0NvbnRleHRHTDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVy
cm9yKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB6ZXJv
ID0gbWFrZVVuaXF1ZUFycmF5PHVuc2lnbmVkIGNoYXI+KHNpemUpOworICAgICAgICBpZiAoIXpl
cm8pIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiB0ZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkKiBjb21wb25lbnRzUGVyUGl4ZWwsIHVuc2lnbmVkKiBi
eXRlc1BlckNvbXBvbmVudCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlJFRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5U
RUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpBTFBIQToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6REVQ
VEhfQ09NUE9ORU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUw6
CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSRzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R19JTlRFR0VSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRV9BTFBIQToK
KyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JfSU5URUdFUjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6U1JHQl9FWFQ6CisgICAgICAgICpj
b21wb25lbnRzUGVyUGl4ZWwgPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0JBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdF
UjoKKyAgICBjYXNlIEV4dGVuc2lvbnNHTDo6QkdSQV9FWFQ6IC8vIEdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OAorICAgIGNhc2UgRXh0ZW5zaW9uc0dMOjpTUkdCX0FMUEhBX0VYVDoKKyAg
ICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFOgorICAgICAgICAqYnl0
ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVieXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6QllURToKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50
ID0gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNp
emVvZihHQzNEdXNob3J0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHRHTDo6U0hPUlQ6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihHQzNEc2hv
cnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05F
RF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9TSE9S
VF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOworICAgICAgICAqYnl0ZXNQ
ZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICAgICAgKmNvbXBv
bmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZihH
QzNEdWludCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlVO
U0lHTkVEX0lOVDoKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKEdDM0R1aW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SU5UOgorICAg
ICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGludCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9h
dAorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGZsb2F0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6SEFMRl9GTE9BVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dEdMOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdAorICAgICAgICAqYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YoR0MzRGhhbGZmbG9h
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkZMT0FUXzMy
X1VOU0lHTkVEX0lOVF8yNF84X1JFVjoKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKEdDM0RmbG9hdCkgKyBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwb3NzaWJsZUZvcm1hdEFuZFR5cGVG
b3JJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0mIGZvcm1h
dCwgR0MzRGVudW0mIHR5cGUpCit7CisjZGVmaW5lIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
aW50ZXJuYWxGb3JtYXRNYWNybywgZm9ybWF0TWFjcm8sIHR5cGVNYWNybykgY2FzZSBpbnRlcm5h
bEZvcm1hdE1hY3JvOiBcCisgICAgICAgIGZvcm1hdCA9IGZvcm1hdE1hY3JvOyBcCisgICAgICAg
IHR5cGUgPSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHlwZU1hY3JvOyBcCisgICAgICAgIGJy
ZWFrOworCisgICAgc3dpdGNoIChpbnRlcm5hbEZvcm1hdCkgeworICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICAgICwgR3JhcGhp
Y3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpS
R0JBICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIFVO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6TFVNSU5BTkNFX0FMUEhBICAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6TFVNSU5BTkNFX0FMUEhBLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOwor
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5D
RSAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OkxVTUlOQU5DRSAgICAgICwgVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdy
YXBoaWNzQ29udGV4dEdMOjpBTFBIQSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpB
TFBIQSAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjggICAgICAgICAgICAg
ICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEICAgICAgICAgICAgLCBVTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3ND
b250ZXh0R0w6OlI4X1NOT1JNICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRCAgICAg
ICAgICAgICwgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9G
T1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSMTZGICAgICAgICAgICAgICAsIEdy
YXBoaWNzQ29udGV4dEdMOjpSRUQgICAgICAgICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRH
TDo6UjMyRiAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkVEICAgICAgICAgICAg
LCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9U
WVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlI4VUkgICAgICAgICAgICAgICwgR3JhcGhpY3ND
b250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSOEkg
ICAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURfSU5URUdFUiAgICAsIEJZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FT
RShHcmFwaGljc0NvbnRleHRHTDo6UjE2VUkgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRH
TDo6UkVEX0lOVEVHRVIgICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApOworICAg
IFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlIxNkkgICAgICAg
ICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJFRF9JTlRFR0VSICAgICwgU0hPUlQgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBo
aWNzQ29udGV4dEdMOjpSMzJVSSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSRURf
SU5URUdFUiAgICAsIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lC
TEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UjMySSAgICAgICAgICAgICAg
LCBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVIgICAgLCBJTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250
ZXh0R0w6OlJHOCAgICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHICAgICAgICAg
ICAgICwgVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JN
QVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhfU05PUk0gICAgICAgICAsIEdyYXBo
aWNzQ29udGV4dEdMOjpSRyAgICAgICAgICAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6
UkcxNkYgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkcgICAgICAgICAgICAgLCBI
QUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBF
X0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMzJGICAgICAgICAgICAgICwgR3JhcGhpY3NDb250
ZXh0R0w6OlJHICAgICAgICAgICAgICwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSRzhVSSAg
ICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRFR0VSICAgICAsIFVOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShH
cmFwaGljc0NvbnRleHRHTDo6Ukc4SSAgICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6
UkdfSU5URUdFUiAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBP
U1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHMTZVSSAgICAgICAg
ICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgICAgICwgVU5TSUdORURfU0hPUlQg
ICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNz
Q29udGV4dEdMOjpSRzE2SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR19JTlRF
R0VSICAgICAsIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVf
Rk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkczMlVJICAgICAgICAgICAgLCBH
cmFwaGljc0NvbnRleHRHTDo6UkdfSU5URUdFUiAgICAgLCBVTlNJR05FRF9JTlQgICAgICAgICAg
ICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0
R0w6OlJHMzJJICAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHX0lOVEVHRVIgICAg
ICwgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRf
VFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4ICAgICAgICAgICAgICAsIEdyYXBoaWNz
Q29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6U1JH
QjggICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBVTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NB
U0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjU2NSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0
R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKTsKKyAg
ICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4X1NOT1JN
ICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAgICAgICAsIEJZVEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFw
aGljc0NvbnRleHRHTDo6UjExRl9HMTFGX0IxMEYgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdC
ICAgICAgICAgICAgLCBVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICApOworICAgIFBPU1NJ
QkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQjlfRTUgICAgICAgICAg
ICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQiAgICAgICAgICAgICwgVU5TSUdORURfSU5UXzVfOV85
XzlfUkVWICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0IxNkYgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0IgICAgICAg
ICAgICAsIEhBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9S
TUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMzJGICAgICAgICAgICAgLCBHcmFw
aGljc0NvbnRleHRHTDo6UkdCICAgICAgICAgICAgLCBGTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6
OlJHQjhVSSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQl9JTlRFR0VSICAgICwg
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQ
RV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0I4SSAgICAgICAgICAgICAsIEdyYXBoaWNzQ29u
dGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTZV
SSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lOVEVHRVIgICAgLCBVTlNJR05F
RF9TSE9SVCAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0Uo
R3JhcGhpY3NDb250ZXh0R0w6OlJHQjE2SSAgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6
OlJHQl9JTlRFR0VSICAgICwgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQ
T1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0IzMlVJICAgICAg
ICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUiAgICAsIFVOU0lHTkVEX0lOVCAg
ICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGlj
c0NvbnRleHRHTDo6UkdCMzJJICAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCX0lO
VEVHRVIgICAgLCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxF
X0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4ICAgICAgICAgICAgICwg
R3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4
dEdMOjpTUkdCOF9BTFBIQTggICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAg
ICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFU
X1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQThfU05PUk0gICAgICAgLCBHcmFwaGlj
c0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJH
QjVfQTEgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEgICAgICAgICAgICwgVU5T
SUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9D
QVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBNCAgICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4
dEdMOjpSR0JBICAgICAgICAgICAsIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICk7Cisg
ICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCMTBfQTIg
ICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQSAgICAgICAgICAgLCBVTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkExNkYgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJH
QkEgICAgICAgICAgICwgSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NT
SUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJGICAgICAgICAg
ICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBICAgICAgICAgICAsIEZMT0FUICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQThVSSAgICAgICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRF
R0VSICAgLCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZP
Uk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkE4SSAgICAgICAgICAgICwgR3Jh
cGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgQllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdM
OjpSR0IxMF9BMlVJICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVIgICAs
IFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZ
UEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTE2VUkgICAgICAgICAgLCBHcmFwaGljc0Nv
bnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAp
OworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OlJHQkEx
NkkgICAgICAgICAgICwgR3JhcGhpY3NDb250ZXh0R0w6OlJHQkFfSU5URUdFUiAgICwgU0hPUlQg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNF
KEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBMzJJICAgICAgICAgICAsIEdyYXBoaWNzQ29udGV4dEdM
OjpSR0JBX0lOVEVHRVIgICAsIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
UE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRleHRHTDo6UkdCQTMyVUkgICAg
ICAgICAgLCBHcmFwaGljc0NvbnRleHRHTDo6UkdCQV9JTlRFR0VSICAgLCBVTlNJR05FRF9JTlQg
ICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDE2ICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRI
X0NPTVBPTkVOVCwgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKTsKKyAgICBQT1NTSUJM
RV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQgICAs
IEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9DT01QT05FTlQsIFVOU0lHTkVEX1NIT1JUICAgICAg
ICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRShHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfQ09NUE9ORU5UMjQgLCBHcmFwaGljc0NvbnRleHRHTDo6REVQVEhfQ09NUE9O
RU5ULCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApOworICAgIFBPU1NJQkxFX0ZPUk1B
VF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVDMyRiwgR3JhcGhp
Y3NDb250ZXh0R0w6OkRFUFRIX0NPTVBPTkVOVCwgRkxPQVQgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEdyYXBoaWNzQ29udGV4dEdMOjpE
RVBUSF9TVEVOQ0lMICAgICAsIEdyYXBoaWNzQ29udGV4dEdMOjpERVBUSF9TVEVOQ0lMICAsIFVO
U0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICk7CisgICAgUE9TU0lCTEVfRk9STUFUX1RZUEVf
Q0FTRShHcmFwaGljc0NvbnRleHRHTDo6REVQVEgyNF9TVEVOQ0lMOCAgLCBHcmFwaGljc0NvbnRl
eHRHTDo6REVQVEhfU1RFTkNJTCAgLCBVTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICApOwor
ICAgIFBPU1NJQkxFX0ZPUk1BVF9UWVBFX0NBU0UoR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIMzJG
X1NURU5DSUw4ICwgR3JhcGhpY3NDb250ZXh0R0w6OkRFUFRIX1NURU5DSUwgICwgRkxPQVRfMzJf
VU5TSUdORURfSU5UXzI0XzhfUkVWKTsKKyAgICBQT1NTSUJMRV9GT1JNQVRfVFlQRV9DQVNFKEV4
dGVuc2lvbnNHTDo6U1JHQl9FWFQgICAgICAgICAgICAgICAsIEV4dGVuc2lvbnNHTDo6U1JHQl9F
WFQgICAgICAgICAgICAsIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICk7CisgICAgUE9T
U0lCTEVfRk9STUFUX1RZUEVfQ0FTRShFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUICAgICAg
ICAgLCBFeHRlbnNpb25zR0w6OlNSR0JfQUxQSEFfRVhUICAgICAgLCBVTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisjdW5kZWYgUE9TU0lCTEVfRk9STUFUX1RZUEVfQ0FTRQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wdXRlSW1hZ2VTaXpl
SW5CeXRlcyhHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBhbGlnbm1lbnQsIHVuc2lnbmVkKiBpbWFnZVNpemVJ
bkJ5dGVzLCB1bnNpZ25lZCogcGFkZGluZ0luQnl0ZXMpCit7CisgICAgQVNTRVJUKGltYWdlU2l6
ZUluQnl0ZXMpOworICAgIEFTU0VSVChhbGlnbm1lbnQgPT0gMSB8fCBhbGlnbm1lbnQgPT0gMiB8
fCBhbGlnbm1lbnQgPT0gNCB8fCBhbGlnbm1lbnQgPT0gOCk7CisgICAgaWYgKHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURf
VkFMVUU7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgdW5zaWduZWQgY29t
cG9uZW50c1BlclBpeGVsOworICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJz
KGZvcm1hdCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX0VOVU07CisgICAgaWYg
KCF3aWR0aCB8fCAhaGVpZ2h0KSB7CisgICAgICAgICppbWFnZVNpemVJbkJ5dGVzID0gMDsKKyAg
ICAgICAgaWYgKHBhZGRpbmdJbkJ5dGVzKQorICAgICAgICAgICAgKnBhZGRpbmdJbkJ5dGVzID0g
MDsKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUjsKKyAgICB9Cisg
ICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRWYWx1ZSA9IGJ5dGVz
UGVyQ29tcG9uZW50ICogY29tcG9uZW50c1BlclBpeGVsOworICAgIGNoZWNrZWRWYWx1ZSAqPSAg
d2lkdGg7CisgICAgaWYgKGNoZWNrZWRWYWx1ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRTsKKyAgICB1bnNpZ25lZCB2YWxp
ZFJvd1NpemUgPSBjaGVja2VkVmFsdWUudW5zYWZlR2V0KCk7CisgICAgdW5zaWduZWQgcGFkZGlu
ZyA9IDA7CisgICAgdW5zaWduZWQgcmVzaWR1YWwgPSB2YWxpZFJvd1NpemUgJSBhbGlnbm1lbnQ7
CisgICAgaWYgKHJlc2lkdWFsKSB7CisgICAgICAgIHBhZGRpbmcgPSBhbGlnbm1lbnQgLSByZXNp
ZHVhbDsKKyAgICAgICAgY2hlY2tlZFZhbHVlICs9IHBhZGRpbmc7CisgICAgfQorICAgIC8vIExh
c3Qgcm93IG5lZWRzIG5vIHBhZGRpbmcuCisgICAgY2hlY2tlZFZhbHVlICo9IChoZWlnaHQgLSAx
KTsKKyAgICBjaGVja2VkVmFsdWUgKz0gdmFsaWRSb3dTaXplOworICAgIGlmIChjaGVja2VkVmFs
dWUuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0R0w6OklO
VkFMSURfVkFMVUU7CisgICAgKmltYWdlU2l6ZUluQnl0ZXMgPSBjaGVja2VkVmFsdWUudW5zYWZl
R2V0KCk7CisgICAgaWYgKHBhZGRpbmdJbkJ5dGVzKQorICAgICAgICAqcGFkZGluZ0luQnl0ZXMg
PSBwYWRkaW5nOworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHRHTDo6Tk9fRVJST1I7Cit9CisK
K0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3Io
SW1hZ2UqIGltYWdlLCBET01Tb3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlLCBib29sIHByZW11bHRp
cGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAgbV9pbWFn
ZSA9IGltYWdlOworICAgIG1faW1hZ2VIdG1sRG9tU291cmNlID0gaW1hZ2VIdG1sRG9tU291cmNl
OworICAgIG1fZXh0cmFjdFN1Y2NlZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVtdWx0aXBseUFscGhh
LCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBhY2tJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBwaXhlbHMs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFPcCBhbHBo
YU9wLCBEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCBWZWN0b3I8dWludDhfdD4mIGRh
dGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhcGl4ZWxzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB1bnNpZ25lZCBwYWNrZWRTaXplOworICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0
bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCisgICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnBhY2tlZFNpemUsIG51bGxwdHIp
ICE9IEdyYXBoaWNzQ29udGV4dEdMOjpOT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGRhdGEucmVzaXplKHBhY2tlZFNpemUpOworCisgICAgaWYgKCFwYWNrUGl4ZWxzKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscyksIHNvdXJjZUZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgc291cmNlVW5wYWNrQWxpZ25tZW50LCBmb3JtYXQsIHR5cGUsIGFscGhhT3AsIGRh
dGEuZGF0YSgpLCBmbGlwWSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBvYnNl
cnZlci0+ZGlkRHJhdygqaW1hZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRh
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQoreworICAgIGlmICghaW1hZ2VEYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IHdpZHRoID0gaW1hZ2VEYXRhLT53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBpbWFnZURhdGEtPmhlaWdodCgpOworCisgICAgdW5zaWdu
ZWQgcGFja2VkU2l6ZTsKKyAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxp
Z25tZW50ID09IDEpLgorICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5
cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCBudWxscHRyKSAhPSBHcmFwaGljc0Nv
bnRleHRHTDo6Tk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6
ZShwYWNrZWRTaXplKTsKKworICAgIGlmICghcGFja1BpeGVscyhpbWFnZURhdGEtPmRhdGEoKS0+
ZGF0YSgpLCBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkdCQTgsIHdpZHRoLCBoZWln
aHQsIDAsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlBbHBoYSA/IEFscGhhT3A6OkRvUHJlbXVs
dGlwbHkgOiBBbHBoYU9wOjpEb05vdGhpbmcsIGRhdGEuZGF0YSgpLCBmbGlwWSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpleHRyYWN0VGV4dHVyZURhdGEodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCB1bnBhY2tB
bGlnbm1lbnQsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgY29uc3Qgdm9pZCog
cGl4ZWxzLCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgLy8gQXNzdW1lcyBmb3JtYXQs
IHR5cGUsIGV0Yy4gaGF2ZSBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLgorICAgIERhdGFGb3JtYXQg
c291cmNlRGF0YUZvcm1hdCA9IGdldERhdGFGb3JtYXQoZm9ybWF0LCB0eXBlKTsKKworICAgIC8v
IFJlc2l6ZSB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4
ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OworICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJh
bWV0ZXJzKGZvcm1hdCwgdHlwZSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9u
ZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwg
PSBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKKyAgICBkYXRhLnJlc2l6
ZSh3aWR0aCAqIGhlaWdodCAqIGJ5dGVzUGVyUGl4ZWwpOworCisgICAgaWYgKCFwYWNrUGl4ZWxz
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLCBzb3VyY2VEYXRhRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgKHByZW11bHRpcGx5
QWxwaGEgPyBBbHBoYU9wOjpEb1ByZW11bHRpcGx5IDogQWxwaGFPcDo6RG9Ob3RoaW5nKSwgZGF0
YS5kYXRhKCksIGZsaXBZKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0FMV0FZU19JTkxJTkUgdW5zaWduZWQgVGV4ZWxCeXRlc0ZvckZvcm1hdChHcmFw
aGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpBODoKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6UkE4OgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSODoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSR0JBNTU1MToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpE
YXRhRm9ybWF0OjpSR0JBNDQ0NDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9y
bWF0OjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZvcm1hdDo6QTE2
RjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSMTZGOgorICAgICAg
ICByZXR1cm4gMjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0I4
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUjg6CisgICAgICAg
IHJldHVybiAzOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OlJHQkE4
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFSR0I4OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkFCR1I4OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0R0w6OkRhdGFGb3JtYXQ6OkJHUkE4OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
R0w6OkRhdGFGb3JtYXQ6OlIzMkY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6QTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSQTE2
RjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6RGF0YUZv
cm1hdDo6UkdCMTZGOgorICAgICAgICByZXR1cm4gNjsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpEYXRhRm9ybWF0OjpSQTMyRjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpEYXRh
Rm9ybWF0OjpSR0JBMTZGOgorICAgICAgICByZXR1cm4gODsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dEdMOjpEYXRhRm9ybWF0OjpSR0IzMkY6CisgICAgICAgIHJldHVybiAxMjsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dEdMOjpEYXRhRm9ybWF0OjpSR0JBMzJGOgorICAgICAgICByZXR1cm4g
MTY7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWNrUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURh
dGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50LCB1bnNpZ25lZCBkZXN0aW5h
dGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBBbHBoYU9wIGFscGhhT3AsIHZv
aWQqIGRlc3RpbmF0aW9uRGF0YSwgYm9vbCBmbGlwWSkKK3sKKyAgICBpbnQgdmFsaWRTcmMgPSB3
aWR0aCAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoc291cmNlRGF0YUZvcm1hdCk7CisgICAgaW50IHJl
bWFpbmRlciA9IHNvdXJjZVVucGFja0FsaWdubWVudCA/ICh2YWxpZFNyYyAlIHNvdXJjZVVucGFj
a0FsaWdubWVudCkgOiAwOworICAgIGludCBzcmNTdHJpZGUgPSByZW1haW5kZXIgPyAodmFsaWRT
cmMgKyBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgLSByZW1haW5kZXIpIDogdmFsaWRTcmM7CisKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHBhY2tpbmcgcGl4ZWxzIHRvIFdlYkdMIDIgZm9ybWF0cwor
ICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dEdMOjpSRUQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6UkVEX0lOVEVHRVI6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHRHTDo6Ukc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6
UkdfSU5URUdFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JfSU5URUdFUjoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBX0lOVEVHRVI6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHRHTDo6REVQVEhfQ09NUE9ORU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6
OkRFUFRIX1NURU5DSUw6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3dpdGNo
IChkZXN0aW5hdGlvblR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpCWVRFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0R0w6OklOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzEw
Rl8xMUZfMTFGX1JFVjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9JTlRf
NV85XzlfOV9SRVY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfSU5UXzI0
Xzg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBEYXRhRm9ybWF0IGRzdERh
dGFGb3JtYXQgPSBnZXREYXRhRm9ybWF0KGRlc3RpbmF0aW9uRm9ybWF0LCBkZXN0aW5hdGlvblR5
cGUpOworICAgIGludCBkc3RTdHJpZGUgPSB3aWR0aCAqIFRleGVsQnl0ZXNGb3JGb3JtYXQoZHN0
RGF0YUZvcm1hdCk7CisgICAgaWYgKGZsaXBZKSB7CisgICAgICAgIGRlc3RpbmF0aW9uRGF0YSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpICsgZHN0U3RyaWRlKihoZWln
aHQgLSAxKTsKKyAgICAgICAgZHN0U3RyaWRlID0gLWRzdFN0cmlkZTsKKyAgICB9CisgICAgaWYg
KCFoYXNBbHBoYShzb3VyY2VEYXRhRm9ybWF0KSB8fCAhaGFzQ29sb3Ioc291cmNlRGF0YUZvcm1h
dCkgfHwgIWhhc0NvbG9yKGRzdERhdGFGb3JtYXQpKQorICAgICAgICBhbHBoYU9wID0gQWxwaGFP
cDo6RG9Ob3RoaW5nOworCisgICAgaWYgKHNvdXJjZURhdGFGb3JtYXQgPT0gZHN0RGF0YUZvcm1h
dCAmJiBhbHBoYU9wID09IEFscGhhT3A6OkRvTm90aGluZykgeworICAgICAgICBjb25zdCB1aW50
OF90KiBwdHIgPSBzb3VyY2VEYXRhOworICAgICAgICBjb25zdCB1aW50OF90KiBwdHJFbmQgPSBz
b3VyY2VEYXRhICsgc3JjU3RyaWRlICogaGVpZ2h0OworICAgICAgICB1bnNpZ25lZCByb3dTaXpl
ID0gKGRzdFN0cmlkZSA+IDApID8gZHN0U3RyaWRlOiAtZHN0U3RyaWRlOworICAgICAgICB1aW50
OF90KiBkc3QgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzdGluYXRpb25EYXRhKTsKKyAgICAg
ICAgd2hpbGUgKHB0ciA8IHB0ckVuZCkgeworICAgICAgICAgICAgbWVtY3B5KGRzdCwgcHRyLCBy
b3dTaXplKTsKKyAgICAgICAgICAgIHB0ciArPSBzcmNTdHJpZGU7CisgICAgICAgICAgICBkc3Qg
Kz0gZHN0U3RyaWRlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIEZvcm1hdENvbnZlcnRlciBjb252ZXJ0ZXIod2lkdGgsIGhlaWdodCwgc291cmNlRGF0YSwg
ZGVzdGluYXRpb25EYXRhLCBzcmNTdHJpZGUsIGRzdFN0cmlkZSk7CisgICAgY29udmVydGVyLmNv
bnZlcnQoc291cmNlRGF0YUZvcm1hdCwgZHN0RGF0YUZvcm1hdCwgYWxwaGFPcCk7CisgICAgaWYg
KCFjb252ZXJ0ZXIuc3VjY2VzcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKKyNpZiAhKFBMQVRGT1JNKENPQ09BKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNF
KEFOR0xFKSkpCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJp
bGl0eShib29sKQoreworfQorI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkKK3sKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJ
Q1NfQ09OVEVYVF9HTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODg4OGQ2MWU4M2RmOTk3MDM0MGU5N2EyMWZiZjAxYmNjOWExZjYwNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oCkBAIC0wLDAgKzEsNzQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHTCkKKworI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R0wuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
TGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1VuaXF1ZUFycmF5Lmg+CisKKyNpZiBVU0UoQ0EpCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVy
LmgiCisjZW5kaWYKKworLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGF2b2lkIHRoZSBu
YW1lIGNvbmZsaWN0aW9uIGZvciBOT19FUlJPUi4KKyNpZiBQTEFURk9STShXSU4pCisjdW5kZWYg
Tk9fRVJST1IKKyNlbGlmIFBMQVRGT1JNKEdUSykKKy8vIFRoaXMgZGVmaW5lIGlzIGZyb20gdGhl
IFgxMSBoZWFkZXJzLCBidXQgaXQncyB1c2VkIGJlbG93LCBzbyB3ZSBtdXN0IHVuZGVmaW5lIGl0
LgorI3VuZGVmIFZFUlNJT04KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNF
KE9QRU5HTF9FUykKKyNpbmNsdWRlIDxPcGVuR0xFUy9FUzIvZ2wuaD4KKyNpZmRlZiBfX09CSkNf
XworI2ltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorI2VuZGlmIC8vIF9fT0JKQ19fCisjZW5kaWYg
Ly8gVVNFKE9QRU5HTF9FUykKK09CSkNfQ0xBU1MgQ0FMYXllcjsKK09CSkNfQ0xBU1MgV2ViR0xM
YXllcjsKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlKiBJT1N1cmZhY2VSZWY7CisjZW5kaWYg
Ly8gUExBVEZPUk0oQ09DT0EpCisKKyNpZiBVU0UoTklDT1NJQSkKK25hbWVzcGFjZSBOaWNvc2lh
IHsKK2NsYXNzIEdDM0RMYXllcjsKK30KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBFeHRlbnNpb25zR0w7CisjaWYgVVNFKEFOR0xFKQorY2xhc3MgRXh0ZW5zaW9uc0dMQU5H
TEU7CisjZWxpZiAhUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCitjbGFzcyBFeHRl
bnNpb25zR0xPcGVuR0xFUzsKKyNlbGlmIFVTRShPUEVOR0wpIHx8IChQTEFURk9STShDT0NPQSkg
JiYgVVNFKE9QRU5HTF9FUykpCitjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0w7CisjZW5kaWYKK2Ns
YXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCitjbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXI7CisjZW5kaWYKKwordHlwZWRlZiBXVEY6Okhhc2hNYXA8Q1N0cmluZywgdWludDY0X3Q+IFNo
YWRlck5hbWVIYXNoOworCitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU7CisK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEdM
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+Q2xpZW50KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wb3NpdGUoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JjZUNvbnRleHRMb3N0KCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVjeWNsZUNvbnRleHQoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkgPSAwOworICAgIH07CisKKyAg
ICBzdGF0aWMgUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBjcmVhdGUoR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzLCBIb3N0V2luZG93KiwgRGVzdGluYXRpb24gPSBEZXN0aW5hdGlv
bjo6T2Zmc2NyZWVuKTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpOwor
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgc3RhdGljIFJlZjxHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTD4gY3JlYXRlU2hhcmVkKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBzaGFyZWRDb250ZXh0
KTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHRHTCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9jb250ZXh0T2JqOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybVRleHR1cmUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3RleHR1cmU7IH0KKyAgICBDQUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDQUxh
eWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQorI2lmIFVTRShBTkdMRSkKKyAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dEdMRGlzcGxheSBwbGF0Zm9ybURpc3BsYXkoKSBjb25zdCB7IHJldHVy
biBtX2Rpc3BsYXlPYmo7IH0KKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMQ29uZmlnIHBs
YXRmb3JtQ29uZmlnKCkgY29uc3QgeyByZXR1cm4gbV9jb25maWdPYmo7IH0KKyNlbmRpZiAvLyBV
U0UoQU5HTEUpCisjZWxzZQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgcGxhdGZvcm1H
cmFwaGljc0NvbnRleHRHTCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
cGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCisKKyAgICBib29sIG1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgdm9pZCBhZGRDbGllbnQoQ2xpZW50JiBjbGllbnQpIHsgbV9j
bGllbnRzLmFkZCgmY2xpZW50KTsgfQorICAgIHZvaWQgcmVtb3ZlQ2xpZW50KENsaWVudCYgY2xp
ZW50KSB7IG1fY2xpZW50cy5yZW1vdmUoJmNsaWVudCk7IH0KKworICAgIC8vIFdpdGggbXVsdGlz
YW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgorICAg
IHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG8gOjpnbFRleElt
YWdlMkQoKS4gQWxsb3dzIHBpeGVscz09MCB3aXRoIG5vIGFsbG9jYXRpb24uCisgICAgdm9pZCB0
ZXhJbWFnZTJERGlyZWN0KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKTsKKworICAgIC8vIEdldCBhbiBhdHRyaWJ1dGUgbG9jYXRpb24gd2l0aG91dCBjaGVja2lu
ZyB0aGUgbmFtZSAtPiBtYW5nbGVkbmFtZSBtYXBwaW5nLgorICAgIGludCBnZXRBdHRyaWJMb2Nh
dGlvbkRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSk7
CisKKyAgICAvLyBDb21waWxlIGEgc2hhZGVyIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCBBTkdMRS4K
KyAgICB2b2lkIGNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm0zRE9iamVjdCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6IHBpeGVscyBhcmUgaW5p
dGlhbGl6ZWQgdG8gMC4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBubyBHTCBlcnJvciBpcyBzeW50
aGVzaXplZC4KKyAgICAvLyBCeSBkZWZhdWx0LCBhbGlnbm1lbnQgaXMgNCwgdGhlIE9wZW5HTCBk
ZWZhdWx0IHNldHRpbmcuCisgICAgYm9vbCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBhbGlnbm1lbnQgPSA0KTsKKworICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0OworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVs
cGVycyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgorICAgIC8vCisK
KyAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50cyBwZXIgcGl4ZWwgYW5kIGJ5dGVzIHBlciBj
b21wb25lbnQKKyAgICAvLyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlv
bi4gUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGVpdGhlciB3YXMgYW4gaW52YWxpZCBlbnVtLgor
ICAgIHN0YXRpYyBib29sIGNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhHQzNEZW51bSBm
b3JtYXQsCisgICAgICAgIEdDM0RlbnVtIHR5cGUsCisgICAgICAgIHVuc2lnbmVkKiBjb21wb25l
bnRzUGVyUGl4ZWwsCisgICAgICAgIHVuc2lnbmVkKiBieXRlc1BlckNvbXBvbmVudCk7CisKKyAg
ICAvLyBDb21wdXRlcyB0aGUgaW1hZ2Ugc2l6ZSBpbiBieXRlcy4gSWYgcGFkZGluZ0luQnl0ZXMg
aXMgbm90IG51bGwsIHBhZGRpbmcKKyAgICAvLyBpcyBhbHNvIGNhbGN1bGF0ZWQgaW4gcmV0dXJu
LiBSZXR1cm5zIE5PX0VSUk9SIGlmIHN1Y2NlZWQsIG90aGVyd2lzZQorICAgIC8vIHJldHVybiB0
aGUgc3VnZ2VzdGVkIEdMIGVycm9yIGluZGljYXRpbmcgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJl
OgorICAgIC8vICAgSU5WQUxJRF9WQUxVRSBpZiB3aWR0aC9oZWlnaHQgaXMgbmVnYXRpdmUgb3Ig
b3ZlcmZsb3cgaGFwcGVucy4KKyAgICAvLyAgIElOVkFMSURfRU5VTSBpZiBmb3JtYXQvdHlwZSBp
cyBpbGxlZ2FsLgorICAgIHN0YXRpYyBHQzNEZW51bSBjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhH
QzNEZW51bSBmb3JtYXQsCisgICAgICAgIEdDM0RlbnVtIHR5cGUsCisgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwKKyAgICAgICAgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgR0MzRGludCBhbGln
bm1lbnQsCisgICAgICAgIHVuc2lnbmVkKiBpbWFnZVNpemVJbkJ5dGVzLAorICAgICAgICB1bnNp
Z25lZCogcGFkZGluZ0luQnl0ZXMpOworCisgICAgc3RhdGljIGJvb2wgcG9zc2libGVGb3JtYXRB
bmRUeXBlRm9ySW50ZXJuYWxGb3JtYXQoR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIEdDM0RlbnVt
JiBmb3JtYXQsIEdDM0RlbnVtJiB0eXBlKTsKKworICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50
cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCisgICAgLy8g
cGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQg
dHlwZSwKKyAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEg
ZmxhZ3MuIFJldHVybnMgdHJ1ZQorICAgIC8vIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9v
bCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSosCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwK
KyAgICAgICAgR0MzRGVudW0gdHlwZSwKKyAgICAgICAgYm9vbCBmbGlwWSwKKyAgICAgICAgYm9v
bCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGV4dHJhY3RzIHRoZSB1c2VyLXN1cHBsaWVkIHRl
eHR1cmUKKyAgICAvLyBkYXRhLCBhcHBseWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxw
aGEgcGFyYW1ldGVycy4KKyAgICAvLyBJZiB0aGUgZGF0YSBpcyBub3QgdGlnaHRseSBwYWNrZWQg
YWNjb3JkaW5nIHRvIHRoZSBwYXNzZWQKKyAgICAvLyB1bnBhY2tBbGlnbm1lbnQsIHRoZSBvdXRw
dXQgZGF0YSB3aWxsIGJlIHRpZ2h0bHkgcGFja2VkLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBz
dWNjZXNzZnVsLCBmYWxzZSBpZiBhbnkgZXJyb3Igb2NjdXJyZWQuCisgICAgc3RhdGljIGJvb2wg
ZXh0cmFjdFRleHR1cmVEYXRhKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCisgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKKyAgICAgICAgdW5zaWduZWQgdW5w
YWNrQWxpZ25tZW50LAorICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
CisgICAgICAgIGNvbnN0IHZvaWQqIHBpeGVscywKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEVudHJ5IHBvaW50cyBmb3IgV2Vi
R0wuCisgICAgLy8KKworICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlKSBv
dmVycmlkZTsKKyAgICB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRBdHRyaWJM
b2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBHQzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgYmluZFJlbmRl
cmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAg
IHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIGJsZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3Jl
ZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgYmxlbmRF
cXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZh
Y3Rvcikgb3ZlcnJpZGU7CisgICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNS
R0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhh
KSBvdmVycmlkZTsKKworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBHQzNEZW51bSB1c2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBidWZmZXJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEs
IEdDM0RlbnVtIHVzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZv
aWQqIGRhdGEpIG92ZXJyaWRlOworCisgICAgdm9pZCogbWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIGxlbmd0aCwgR0MzRGJpdGZp
ZWxkIGFjY2Vzcykgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gdW5tYXBCdWZmZXIoR0MzRGVu
dW0gdGFyZ2V0KSBvdmVycmlkZTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVt
IHJlYWRUYXJnZXQsIEdDM0RlbnVtIHdyaXRlVGFyZ2V0LCBHQzNEaW50cHRyIHJlYWRPZmZzZXQs
IEdDM0RpbnRwdHIgd3JpdGVPZmZzZXQsIEdDM0RzaXplaXB0cikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGdldEludGVybmFsZm9ybWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBwYXJh
bXMpIG92ZXJyaWRlOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIHNhbXBsZXMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB0ZXhTdG9yYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHRleFN0b3JhZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBs
ZXZlbHMsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGdldEFjdGl2
ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDM0R1aW50
PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGludD4mIHBhcmFt
cykgb3ZlcnJpZGU7CisKKyAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0Rl
bnVtIHRhcmdldCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzaykg
b3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBm
IGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpIG92ZXJyaWRlOworICAg
IHZvaWQgY2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNs
ZWFyU3RlbmNpbChHQzNEaW50IHMpIG92ZXJyaWRlOworICAgIHZvaWQgY29sb3JNYXNrKEdDM0Ri
b29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29s
ZWFuIGFscGhhKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92ZXJyaWRlOworICAgIHZvaWQgY29tcHJlc3NlZFRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpIG92
ZXJyaWRlOworICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpIG92ZXJyaWRl
OworICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcHRoRnVuYyhH
QzNEZW51bSBmdW5jKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbiBm
bGFnKSBvdmVycmlkZTsKKyAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0Mz
RGNsYW1wZiB6RmFyKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2FibGUoR0Mz
RGVudW0gY2FwKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
QzNEdWludCBpbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCBk
cmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBHQzNEaW50cHRyIG9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGVuYWJsZShHQzNEZW51
bSBjYXApIG92ZXJyaWRlOworICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVp
bnQgaW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgZmluaXNoKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmbHVzaCgpIG92ZXJyaWRlOworICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0
ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpIG92ZXJyaWRlOworICAg
IHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KSBvdmVycmlkZTsKKworICAgIGJvb2wgZ2V0QWN0aXZl
QXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mKSBvdmVycmlkZTsKKyAgICBib29sIGdldEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0
QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBB
Y3RpdmVJbmZvJikgb3ZlcnJpZGU7CisgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtSW1wbChQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAg
dm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6
ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMp
IG92ZXJyaWRlOworICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJvb2xlYW52KEdD
M0RlbnVtIHBuYW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0
QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpIG92ZXJyaWRlOworICAgIEdDM0RlbnVtIGdldEVycm9yKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJy
aWRlOworICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEludGVnZXI2NHYoR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQ2NCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0UHJvZ3JhbWl2
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KSBvdmVycmlkZTsKKyNpZiAhVVNFKEFOR0xFKQorICAgIHZvaWQgZ2V0Tm9uQnVpbHRJbkFjdGl2
ZVN5bWJvbENvdW50KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKTsKKyNlbmRpZiAvLyAhVVNFKEFOR0xFKQorICAgIFN0cmluZyBnZXRQcm9n
cmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0VW5t
YW5nbGVkSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0WzJdLCBHQzNEc2l6ZWksIGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0
U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0
KSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBz
aGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGlu
dCogcHJlY2lzaW9uKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFBsYXRm
b3JtM0RPYmplY3QpIG92ZXJyaWRlOworICAgIFN0cmluZyBnZXRTdHJpbmcoR0MzRGVudW0gbmFt
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdl
dFRleFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQq
IHZhbHVlKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldFVuaWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZ2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBs
b2NhdGlvbiwgR0MzRGludCogdmFsdWUpIG92ZXJyaWRlOworICAgIEdDM0RpbnQgZ2V0VW5pZm9y
bUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RmbG9hdCogdmFsdWUpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0VmVydGV4QXR0cmli
aXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkgb3ZlcnJp
ZGU7CisgICAgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUpIG92ZXJyaWRlOworCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gbW9kZSkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIo
UGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdD
M0RlbnVtIGNhcCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFBsYXRmb3Jt
M0RPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAg
ICB2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVu
aXRzKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKTsKKworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpIG92ZXJyaWRlOworICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2
YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNjaXNzb3IoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVu
YywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spIG92ZXJyaWRlOworICAgIHZvaWQgc3RlbmNp
bEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwg
R0MzRHVpbnQgbWFzaykgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCBt
YXNrKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRHVpbnQgbWFzaykgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKSBvdmVycmlkZTsKKyAgICB2b2lk
IHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVt
IHpmYWlsLCBHQzNEZW51bSB6cGFzcykgb3ZlcnJpZGU7CisKKyAgICBib29sIHRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEZmxvYXQgcGFyYW0pIG92ZXJyaWRlOworICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKSBvdmVycmlkZTsKKyAgICB2
b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0x
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9y
bTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQqIHYpIG92ZXJy
aWRlOworICAgIHZvaWQgdW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBH
QzNEZmxvYXQgeSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVu
aWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkgb3ZlcnJpZGU7
CisgICAgdm9pZCB1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3Qg
R0MzRGludCogdikgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtM2YoR0MzRGludCBsb2NhdGlv
biwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikgb3ZlcnJpZGU7CisgICAg
dm9pZCB1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZs
b2F0KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZv
cm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBjb25zdCBHQzNEaW50KiB2KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykgb3ZlcnJpZGU7CisgICAgdm9p
ZCB1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgY29uc3QgR0MzRGZsb2F0
KiB2KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcpIG92ZXJyaWRlOworICAgIHZv
aWQgdW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RpbnQq
IHYpIG92ZXJyaWRlOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0MzRGZsb2F0KiB2YWx1
ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIHZhbHVl
KSBvdmVycmlkZTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWUp
IG92ZXJyaWRlOworCisgICAgdm9pZCB1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOworICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRl
OworI2lmICFVU0UoQU5HTEUpCisgICAgYm9vbCBjaGVja1ZhcnlpbmdzUGFja2luZyhQbGF0Zm9y
bTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikg
Y29uc3Q7CisgICAgYm9vbCBwcmVjaXNpb25zTWF0Y2goUGxhdGZvcm0zRE9iamVjdCB2ZXJ0ZXhT
aGFkZXIsIFBsYXRmb3JtM0RPYmplY3QgZnJhZ21lbnRTaGFkZXIpIGNvbnN0OworI2VuZGlmCisK
KyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCkgb3Zl
cnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdD
M0RmbG9hdCogdmFsdWVzKSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpIG92ZXJyaWRlOworICAgIHZvaWQg
dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBjb25zdCBHQzNEZmxvYXQqIHZhbHVlcykg
b3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFsdWVzKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykgb3ZlcnJpZGU7CisgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIGNvbnN0IEdDM0RmbG9hdCogdmFs
dWVzKSBvdmVycmlkZTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwg
R0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOworCisgICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNp
emVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpIHBy
aW1jb3VudCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50
IGluZGV4LCBHQzNEdWludCBkaXZpc29yKSBvdmVycmlkZTsKKworICAgIC8vIFZlcnRleEFycmF5
T2plY3QgY2FsbHMKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5KCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0KSBvdmVy
cmlkZTsKKyAgICBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpIG92
ZXJyaWRlOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOworCisgICAgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdl
UGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1Np
emUsIEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsK
KyAgICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyAgICBib29sIGxheWVyQ29tcG9zaXRl
ZCgpIGNvbnN0OworICAgIHZvaWQgZm9yY2VDb250ZXh0TG9zdCgpOworICAgIHZvaWQgcmVjeWNs
ZUNvbnRleHQoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlv
bigpOworICAgIHZvaWQgc2ltdWxhdGVDb250ZXh0Q2hhbmdlZCgpOworCisgICAgdm9pZCBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOworICAgIFJlZlB0cjxJbWFn
ZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgYm9vbCBwYWlu
dENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsKKworI2lmIFVTRShPUEVO
R0wpICYmIEVOQUJMRShXRUJHTDIpCisgICAgdm9pZCBwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0Mz
RHVpbnQpIG92ZXJyaWRlOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29s
IHRleEltYWdlSU9TdXJmYWNlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIElPU3VyZmFjZVJlZiwgR0MzRHVpbnQgcGxhbmUpOworCisjaWYgVVNF
KE9QRU5HTF9FUykKKyAgICB2b2lkIHByZXNlbnRSZW5kZXJidWZmZXIoKTsKKyNlbmRpZgorCisj
aWYgVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKQorICAgIHZvaWQgYWxsb2NhdGVJT1N1cmZhY2VC
YWNraW5nU3RvcmUoSW50U2l6ZSk7CisgICAgdm9pZCB1cGRhdGVGcmFtZWJ1ZmZlclRleHR1cmVC
YWNraW5nU3RvcmVGcm9tTGF5ZXIoKTsKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKE1B
Q0NBVEFMWVNUKQorICAgIHZvaWQgdXBkYXRlQ0dMQ29udGV4dCgpOworI2VuZGlmCisjZW5kaWYK
KyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKKworICAgIHZvaWQgc2V0Q29udGV4dFZpc2liaWxp
dHkoYm9vbCk7CisKKyAgICBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBwb3dlclBy
ZWZlcmVuY2VVc2VkRm9yQ3JlYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvd2VyUHJlZmVyZW5j
ZVVzZWRGb3JDcmVhdGlvbjsgfQorCisgICAgLy8gU3VwcG9ydCBmb3IgYnVmZmVyIGNyZWF0aW9u
IGFuZCBkZWxldGlvbgorICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCkgb3ZlcnJp
ZGU7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVGcmFtZWJ1ZmZlcigpIG92ZXJyaWRlOwor
ICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUHJvZ3JhbSgpIG92ZXJyaWRlOworICAgIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCkgb3ZlcnJpZGU7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVudW0pIG92ZXJyaWRlOworICAgIFBsYXRmb3JtM0RP
YmplY3QgY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIo
UGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOworCisgICAgLy8gU3ludGhlc2l6ZXMgYW4gT3BlbkdMIGVycm9yIHdoaWNoIHdp
bGwgYmUgcmV0dXJuZWQgZnJvbSBhCisgICAgLy8gbGF0ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhp
cyBpcyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCisgICAgLy8gMi4wIGJlaGF2aW9yIG9uIHRo
ZSBkZXNrdG9wIGFuZCB0byBlbmZvcmNlIGFkZGl0aW9uYWwgZXJyb3IKKyAgICAvLyBjaGVja2lu
ZyBtYW5kYXRlZCBieSBXZWJHTC4KKyAgICAvLworICAgIC8vIFBlciB0aGUgYmVoYXZpb3Igb2Yg
Z2xHZXRFcnJvciwgdGhpcyBzdG9yZXMgYXQgbW9zdCBvbmUKKyAgICAvLyBpbnN0YW5jZSBvZiBh
bnkgZ2l2ZW4gZXJyb3IsIGFuZCByZXR1cm5zIHRoZW0gZnJvbSBjYWxscyB0bworICAgIC8vIGdl
dEVycm9yIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQuCisgICAgdm9pZCBzeW50aGVzaXpl
R0xFcnJvcihHQzNEZW51bSBlcnJvcik7CisKKyAgICAvLyBSZWFkIHJlYWwgT3BlbkdMIGVycm9y
cywgYW5kIG1vdmUgdGhlbSB0byB0aGUgc3ludGhldGljCisgICAgLy8gZXJyb3IgbGlzdC4gUmV0
dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGVycm9yIGlzIG1vdmVkLgorICAgIGJvb2wgbW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisKKyAgICAvLyBTdXBwb3J0IGZvciBleHRlbnNp
b25zLiBSZXR1cm5zIGEgbm9uLW51bGwgb2JqZWN0LCB0aG91Z2ggbm90CisgICAgLy8gYWxsIG1l
dGhvZHMgaXQgY29udGFpbnMgbWF5IG5lY2Vzc2FyaWx5IGJlIHN1cHBvcnRlZCBvbiB0aGUKKyAg
ICAvLyBjdXJyZW50IGhhcmR3YXJlLiBNdXN0IGNhbGwgRXh0ZW5zaW9uc0dMOjpzdXBwb3J0cygp
IHRvCisgICAgLy8gZGV0ZXJtaW5lIHRoaXMuCisgICAgRXh0ZW5zaW9uc0dMJiBnZXRFeHRlbnNp
b25zKCkgb3ZlcnJpZGU7CisKKyAgICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkgY29uc3Q7CisKKyAgICAvLyBQYWNrcyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdl
IHdoaWNoIGlzIHBhc3NlZCBpbiB8cGl4ZWxzfCBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yCisgICAg
Ly8gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsIGFuZCBvYmV5aW5nIHRo
ZSBmbGlwWSBhbmQgQWxwaGFPcCBmbGFncy4KKyAgICAvLyBSZXR1cm5zIHRydWUgdXBvbiBzdWNj
ZXNzLgorICAgIHN0YXRpYyBib29sIHBhY2tJbWFnZURhdGEoSW1hZ2UqLCBjb25zdCB2b2lkKiBw
aXhlbHMsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBmbGlwWSwgQWxwaGFP
cCwgRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQsIHVuc2lnbmVkIHNvdXJjZVVucGFja0FsaWdubWVudCwgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KTsKKworICAgIGNsYXNzIEltYWdlRXh0cmFjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIElt
YWdlRXh0cmFjdG9yKEltYWdlKiwgRE9NU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJv
b2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOworCisgICAgICAgIC8vIEVhY2ggcGxhdGZv
cm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHRvIGRlYWxs
b2NhdGUgb3IgcmVsZWFzZSByZXNvdXJjZXMKKyAgICAgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRo
ZSBpbWFnZSBpZiBuZWVkZWQuCisgICAgICAgIH5JbWFnZUV4dHJhY3RvcigpOworCisgICAgICAg
IGJvb2wgZXh0cmFjdFN1Y2NlZWRlZCgpIHsgcmV0dXJuIG1fZXh0cmFjdFN1Y2NlZWRlZDsgfQor
ICAgICAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSgpIHsgcmV0dXJuIG1faW1hZ2VQaXhl
bERhdGE7IH0KKyAgICAgICAgdW5zaWduZWQgaW1hZ2VXaWR0aCgpIHsgcmV0dXJuIG1faW1hZ2VX
aWR0aDsgfQorICAgICAgICB1bnNpZ25lZCBpbWFnZUhlaWdodCgpIHsgcmV0dXJuIG1faW1hZ2VI
ZWlnaHQ7IH0KKyAgICAgICAgRGF0YUZvcm1hdCBpbWFnZVNvdXJjZUZvcm1hdCgpIHsgcmV0dXJu
IG1faW1hZ2VTb3VyY2VGb3JtYXQ7IH0KKyAgICAgICAgQWxwaGFPcCBpbWFnZUFscGhhT3AoKSB7
IHJldHVybiBtX2FscGhhT3A7IH0KKyAgICAgICAgdW5zaWduZWQgaW1hZ2VTb3VyY2VVbnBhY2tB
bGlnbm1lbnQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OyB9CisgICAg
ICAgIERPTVNvdXJjZSBpbWFnZUh0bWxEb21Tb3VyY2UoKSB7IHJldHVybiBtX2ltYWdlSHRtbERv
bVNvdXJjZTsgfQorICAgIHByaXZhdGU6CisgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBw
cm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgorICAgICAgICAvLyBFeHRy
YWN0cyB0aGUgaW1hZ2UgYW5kIGtlZXBzIHRyYWNrIG9mIGl0cyBzdGF0dXMsIHN1Y2ggYXMgd2lk
dGgsIGhlaWdodCwgU291cmNlIEFsaWdubWVudCwgZm9ybWF0IGFuZCBBbHBoYU9wIGV0YywKKyAg
ICAgICAgLy8gbmVlZHMgdG8gbG9jayB0aGUgcmVzb3VyY2VzIG9yIHJlbGV2YW50IGRhdGEgaWYg
bmVlZGVkIGFuZCByZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzCisgICAgICAgIGJvb2wgZXh0cmFj
dEltYWdlKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSk7CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IG1faW1hZ2VTdXJmYWNlOworI2VsaWYgVVNFKENHKQorICAgICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gbV9jZ0ltYWdlOworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9kZWNvZGVk
SW1hZ2U7CisgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IG1fcGl4ZWxEYXRhOworICAgICAg
ICBVbmlxdWVBcnJheTx1aW50OF90PiBtX2Zvcm1hbGl6ZWRSR0JBOERhdGE7CisjZW5kaWYKKyAg
ICAgICAgSW1hZ2UqIG1faW1hZ2U7CisgICAgICAgIERPTVNvdXJjZSBtX2ltYWdlSHRtbERvbVNv
dXJjZTsKKyAgICAgICAgYm9vbCBtX2V4dHJhY3RTdWNjZWVkZWQ7CisgICAgICAgIGNvbnN0IHZv
aWQqIG1faW1hZ2VQaXhlbERhdGE7CisgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VXaWR0aDsKKyAg
ICAgICAgdW5zaWduZWQgbV9pbWFnZUhlaWdodDsKKyAgICAgICAgRGF0YUZvcm1hdCBtX2ltYWdl
U291cmNlRm9ybWF0OworICAgICAgICBBbHBoYU9wIG1fYWxwaGFPcDsKKyAgICAgICAgdW5zaWdu
ZWQgbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsKKyAgICB9OworCisgICAgdm9pZCBzZXRG
YWlsTmV4dEdQVVN0YXR1c0NoZWNrKCkgeyBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgPSB0cnVlOyB9
CisKKyAgICBHQzNEZW51bSBhY3RpdmVUZXh0dXJlVW5pdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuYWN0aXZlVGV4dHVyZVVuaXQ7IH0KKyAgICBHQzNEZW51bSBjdXJyZW50Qm91bmRUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCk7IH0KKyAgICBH
QzNEZW51bSBjdXJyZW50Qm91bmRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmN1cnJl
bnRCb3VuZFRhcmdldCgpOyB9CisgICAgdW5zaWduZWQgdGV4dHVyZVNlZWQoR0MzRHVpbnQgdGV4
dHVyZSkgeyByZXR1cm4gbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmNvdW50KHRleHR1cmUpOyB9
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgdXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50
MzJfdDsKKyAgICB2b2lkIHNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCk7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlvbiA9IERlc3RpbmF0aW9uOjpP
ZmZzY3JlZW4sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0ID0gbnVsbHB0
cik7CisKKyAgICAvLyBIZWxwZXIgZm9yIHBhY2tJbWFnZURhdGEvZXh0cmFjdEltYWdlRGF0YS9l
eHRyYWN0VGV4dHVyZURhdGEgd2hpY2ggaW1wbGVtZW50IHBhY2tpbmcgb2YgcGl4ZWwKKyAgICAv
LyBkYXRhIGludG8gdGhlIHNwZWNpZmllZCBPcGVuR0wgZGVzdGluYXRpb24gZm9ybWF0IGFuZCB0
eXBlLgorICAgIC8vIEEgc291cmNlVW5wYWNrQWxpZ25tZW50IG9mIHplcm8gaW5kaWNhdGVzIHRo
YXQgdGhlIHNvdXJjZQorICAgIC8vIGRhdGEgaXMgdGlnaHRseSBwYWNrZWQuIE5vbi16ZXJvIHZh
bHVlcyBtYXkgdGFrZSBhIHNsb3cgcGF0aC4KKyAgICAvLyBEZXN0aW5hdGlvbiBkYXRhIHdpbGwg
aGF2ZSBubyBnYXBzIGJldHdlZW4gcm93cy4KKyAgICBzdGF0aWMgYm9vbCBwYWNrUGl4ZWxzKGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25t
ZW50LCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBl
LCBBbHBoYU9wLCB2b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpOworCisgICAgLy8g
VGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBh
dHRyaWJ1dGVzLAorICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBh
bmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCisgICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQg
YmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCisgICAgLy8gaW1wbGVtZW50
YXRpb24uCisgICAgdm9pZCB2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAgIHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7Cisg
ICAgCisgICAgLy8gRGlkIHRoZSBtb3N0IHJlY2VudCBkcmF3aW5nIG9wZXJhdGlvbiBsZWF2ZSB0
aGUgR1BVIGluIGFuIGFjY2VwdGFibGUgc3RhdGU/CisgICAgdm9pZCBjaGVja0dQVVN0YXR1cygp
OworCisgICAgLy8gUmVhZCByZW5kZXJpbmcgcmVzdWx0cyBpbnRvIGEgcGl4ZWwgYXJyYXkgd2l0
aCB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlCisgICAgLy8gYmFja2J1ZmZlci4KKyAgICB2b2lkIHJl
YWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgaW50IHBpeGVsc1NpemUp
OworICAgIHZvaWQgcmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKTsKKwor
I2lmIFVTRShPUEVOR0xfRVMpCisgICAgdm9pZCBzZXRSZW5kZXJidWZmZXJTdG9yYWdlRnJvbURy
YXdhYmxlKEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisjZW5kaWYKKworICAg
IGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiA9IEludFJlY3QoKSk7CisgICAgdm9p
ZCBhdHRhY2hEZXB0aEFuZFN0ZW5jaWxCdWZmZXJJZk5lZWRlZChHTHVpbnQgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBib29sIGFsbG93T2ZmbGluZVJlbmRlcmVycygpIGNvbnN0OworI2VuZGlmCisK
KyAgICBpbnQgbV9jdXJyZW50V2lkdGggeyAwIH07CisgICAgaW50IG1fY3VycmVudEhlaWdodCB7
IDAgfTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBt
X3dlYkdMTGF5ZXI7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBtX2NvbnRleHRPYmog
eyBudWxscHRyIH07CisjaWYgVVNFKEFOR0xFKQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
R0xEaXNwbGF5IG1fZGlzcGxheU9iaiB7IG51bGxwdHIgfTsKKyAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dEdMQ29uZmlnIG1fY29uZmlnT2JqIHsgbnVsbHB0ciB9OworI2VuZGlmIC8vIFVTRShB
TkdMRSkKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKKworI2lmIFBMQVRGT1JNKFdJTikgJiYg
VVNFKENBKQorICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fd2ViR0xMYXllcjsKKyNlbmRp
ZgorCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgc2g6OlNoYWRlclZhcmlhYmxlPiBTaGFk
ZXJTeW1ib2xNYXA7CisKKyAgICBzdHJ1Y3QgU2hhZGVyU291cmNlRW50cnkgeworICAgICAgICBH
QzNEZW51bSB0eXBlOworICAgICAgICBTdHJpbmcgc291cmNlOworICAgICAgICBTdHJpbmcgdHJh
bnNsYXRlZFNvdXJjZTsKKyAgICAgICAgU3RyaW5nIGxvZzsKKyAgICAgICAgYm9vbCBpc1ZhbGlk
OworICAgICAgICBTaGFkZXJTeW1ib2xNYXAgYXR0cmlidXRlTWFwOworICAgICAgICBTaGFkZXJT
eW1ib2xNYXAgdW5pZm9ybU1hcDsKKyAgICAgICAgU2hhZGVyU3ltYm9sTWFwIHZhcnlpbmdNYXA7
CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5KCkKKyAgICAgICAgICAgIDogdHlwZShWRVJURVhf
U0hBREVSKQorICAgICAgICAgICAgLCBpc1ZhbGlkKGZhbHNlKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwKGVudW0gQU5H
TEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgfHwgc3ltYm9s
VHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSB8fCBzeW1ib2xUeXBlID09IFNIQURF
Ul9TWU1CT0xfVFlQRV9WQVJZSU5HKTsKKyAgICAgICAgICAgIGlmIChzeW1ib2xUeXBlID09IFNI
QURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJp
YnV0ZU1hcDsKKyAgICAgICAgICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQ
RV9WQVJZSU5HKQorICAgICAgICAgICAgICAgIHJldHVybiB2YXJ5aW5nTWFwOworICAgICAgICAg
ICAgcmV0dXJuIHVuaWZvcm1NYXA7CisgICAgICAgIH0KKyAgICB9OworCisjaWYgIVVTRShBTkdM
RSkKKyAgICAvLyBGSVhNRTogU2hhZGVycyBhcmUgbmV2ZXIgcmVtb3ZlZCBmcm9tIHRoaXMgbWFw
LCBldmVuIGlmIHRoZXkgYW5kIHRoZWlyIHByb2dyYW0gYXJlIGRlbGV0ZWQuCisgICAgLy8gVGhp
cyBpcyBiYWQsIGFuZCBpdCBhbHNvIHJlbGllcyBvbiB0aGUgZmFjdCB3ZSBuZXZlciByZXVzZSBQ
bGF0Zm9ybTNET2JqZWN0IG51bWJlcnMuCisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RP
YmplY3QsIFNoYWRlclNvdXJjZUVudHJ5PiBTaGFkZXJTb3VyY2VNYXA7CisgICAgU2hhZGVyU291
cmNlTWFwIG1fc2hhZGVyU291cmNlTWFwOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3Jt
M0RPYmplY3QsIHN0ZDo6cGFpcjxQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0Pj4g
TGlua2VkU2hhZGVyTWFwOworICAgIExpbmtlZFNoYWRlck1hcCBtX2xpbmtlZFNoYWRlck1hcDsK
KworICAgIHN0cnVjdCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMgeworICAgICAgICBWZWN0b3I8
R0MzRGludD4gZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4TWFwOworICAgICAgICBWZWN0
b3I8R0MzRGludD4gZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcDsKKworICAgICAgICBB
Y3RpdmVTaGFkZXJTeW1ib2xDb3VudHMoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBHQzNEaW50IGNvdW50Rm9yVHlwZShHQzNEZW51bSBhY3RpdmVUeXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoYWN0aXZlVHlwZSA9PSBBQ1RJVkVfQVRUUklCVVRFUyB8fCBhY3Rp
dmVUeXBlID09IEFDVElWRV9VTklGT1JNUyk7CisgICAgICAgICAgICBpZiAoYWN0aXZlVHlwZSA9
PSBBQ1RJVkVfQVRUUklCVVRFUykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRUb0Fj
dHVhbEF0dHJpYnV0ZUluZGV4TWFwLnNpemUoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZpbHRl
cmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXAuc2l6ZSgpOworICAgICAgICB9CisgICAgfTsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgQWN0aXZlU2hhZGVyU3ltYm9sQ291
bnRzPiBTaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXA7CisgICAgU2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwOworCisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBIYXNoZWRTeW1ib2xNYXA7CisgICAgSGFzaGVkU3ltYm9s
TWFwIG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXA7CisKKyAgICBTdHJpbmcgbWFwcGVkU3lt
Ym9sTmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBTdHJpbmcgbWFwcGVkU3ltYm9sTmFtZShQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyAgICBTdHJpbmcgb3JpZ2luYWxTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
QU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIE9wdGlvbmFs
PFN0cmluZz4gbWFwcGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBP
cHRpb25hbDxTdHJpbmc+IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkZXJOYW1lSGFzaD4gbmFtZUhhc2hNYXBGb3JT
aGFkZXJzOworI2VuZGlmIC8vICFVU0UoQU5HTEUpCisKKyNpZiBVU0UoQU5HTEUpCisgICAgZnJp
ZW5kIGNsYXNzIEV4dGVuc2lvbnNHTEFOR0xFOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNp
b25zR0xBTkdMRT4gbV9leHRlbnNpb25zOworI2VsaWYgIVBMQVRGT1JNKENPQ09BKSAmJiBVU0Uo
T1BFTkdMX0VTKQorICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xFUzsKKyAgICBm
cmllbmQgY2xhc3MgRXh0ZW5zaW9uc0dMT3BlbkdMQ29tbW9uOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHRlbnNpb25zR0xPcGVuR0xFUz4gbV9leHRlbnNpb25zOworI2VsaWYgVVNFKE9QRU5HTCkg
fHwgKFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKSkKKyAgICBmcmllbmQgY2xhc3Mg
RXh0ZW5zaW9uc0dMT3BlbkdMOworICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zR0xPcGVuR0xD
b21tb247CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNHTE9wZW5HTD4gbV9leHRlbnNp
b25zOworI2VuZGlmCisKKyAgICBHcmFwaGljc0NvbnRleHRHTFBvd2VyUHJlZmVyZW5jZSBtX3Bv
d2VyUHJlZmVyZW5jZVVzZWRGb3JDcmVhdGlvbiB7IEdyYXBoaWNzQ29udGV4dEdMUG93ZXJQcmVm
ZXJlbmNlOjpEZWZhdWx0IH07CisgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4+IG1fdmVydGV4QXJy
YXk7CisKKyNpZiAhVVNFKEFOR0xFKQorICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7
CisjZW5kaWYKKworICAgIEdDM0R1aW50IG1fdGV4dHVyZSB7IDAgfTsKKyAgICBHQzNEdWludCBt
X2ZibyB7IDAgfTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgR0MzRHVpbnQg
bV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyAgICBHQzNEdWludCBtX2ludGVybWVkaWF0ZVRl
eHR1cmUgeyAwIH07CisjZW5kaWYKKworICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXIgeyAwIH07
CisgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyIHsgMCB9OworICAgIEdDM0R1aW50IG1fZGVw
dGhTdGVuY2lsQnVmZmVyIHsgMCB9OworCisgICAgYm9vbCBtX2xheWVyQ29tcG9zaXRlZCB7IGZh
bHNlIH07CisgICAgR0MzRHVpbnQgbV9pbnRlcm5hbENvbG9yRm9ybWF0IHsgMCB9OworCisjaWYg
VVNFKEFOR0xFKSAmJiBQTEFURk9STShDT0NPQSkKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dEdMU3VyZmFjZSBtX3BidWZmZXI7CisjZW5kaWYKKworICAgIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRHTFN0YXRlIHsKKyAgICAgICAgR0MzRHVpbnQgYm91bmRGQk8geyAwIH07CisgICAgICAgIEdD
M0RlbnVtIGFjdGl2ZVRleHR1cmVVbml0IHsgR3JhcGhpY3NDb250ZXh0R0w6OlRFWFRVUkUwIH07
CisKKyAgICAgICAgdXNpbmcgQm91bmRUZXh0dXJlTWFwID0gSGFzaE1hcDxHQzNEZW51bSwKKyAg
ICAgICAgICAgIHN0ZDo6cGFpcjxHQzNEdWludCwgR0MzRGVudW0+LAorICAgICAgICAgICAgV1RG
OjpJbnRIYXNoPEdDM0RlbnVtPiwgCisgICAgICAgICAgICBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPEdDM0R1aW50PiwKKyAgICAgICAgICAgIFdURjo6UGFpckhhc2hUcmFpdHM8
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxHQzNEdWludD4sIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8R0MzRHVpbnQ+PgorICAgICAgICA+OworICAgICAgICBC
b3VuZFRleHR1cmVNYXAgYm91bmRUZXh0dXJlTWFwOworICAgICAgICBHQzNEdWludCBjdXJyZW50
Qm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gYm91bmRUZXh0dXJlKGFjdGl2ZVRleHR1cmVV
bml0KTsgfQorICAgICAgICBHQzNEdWludCBib3VuZFRleHR1cmUoR0MzRGVudW0gdGV4dHVyZVVu
aXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBib3VuZFRl
eHR1cmVNYXAuZmluZCh0ZXh0dXJlVW5pdCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
Ym91bmRUZXh0dXJlTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci0+
dmFsdWUuZmlyc3Q7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAg
IEdDM0R1aW50IGN1cnJlbnRCb3VuZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIGJvdW5kVGFyZ2V0
KGFjdGl2ZVRleHR1cmVVbml0KTsgfQorICAgICAgICBHQzNEZW51bSBib3VuZFRhcmdldChHQzNE
ZW51bSB0ZXh0dXJlVW5pdCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdGVy
YXRvciA9IGJvdW5kVGV4dHVyZU1hcC5maW5kKHRleHR1cmVVbml0KTsKKyAgICAgICAgICAgIGlm
IChpdGVyYXRvciAhPSBib3VuZFRleHR1cmVNYXAuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yLT52YWx1ZS5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgc2V0Qm91bmRUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmVVbml0
LCBHQzNEdWludCB0ZXh0dXJlLCBHQzNEZW51bSB0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGJvdW5kVGV4dHVyZU1hcC5zZXQodGV4dHVyZVVuaXQsIHN0ZDo6bWFrZV9wYWlyKHRleHR1
cmUsIHRhcmdldCkpOworICAgICAgICB9CisKKyAgICAgICAgdXNpbmcgVGV4dHVyZVNlZWRDb3Vu
dCA9IEhhc2hDb3VudGVkU2V0PEdDM0R1aW50LCBXVEY6OkludEhhc2g8R0MzRHVpbnQ+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEdDM0R1aW50Pj47CisgICAgICAgIFRleHR1
cmVTZWVkQ291bnQgdGV4dHVyZVNlZWRDb3VudDsKKyAgICB9OworCisgICAgR3JhcGhpY3NDb250
ZXh0R0xTdGF0ZSBtX3N0YXRlOworCisgICAgLy8gRm9yIG11bHRpc2FtcGxpbmcKKyAgICBHQzNE
dWludCBtX211bHRpc2FtcGxlRkJPIHsgMCB9OworICAgIEdDM0R1aW50IG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIgeyAwIH07CisgICAgR0MzRHVpbnQgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyIHsgMCB9OworCisgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJv
cigpLgorICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKKworI2lm
IFVTRShOSUNPU0lBKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgZnJpZW5kIGNsYXNzIE5p
Y29zaWE6OkdDM0RMYXllcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6R0MzRExheWVy
PiBtX25pY29zaWFMYXllcjsKKyNlbGlmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBmcmllbmQg
Y2xhc3MgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI+IG1fdGV4bWFwTGF5ZXI7CisjZWxpZiAh
UExBVEZPUk0oQ09DT0EpCisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
UHJpdmF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2
YXRlPiBtX3ByaXZhdGU7CisjZW5kaWYKKworICAgIEhhc2hTZXQ8Q2xpZW50Kj4gbV9jbGllbnRz
OworCisgICAgYm9vbCBtX2lzRm9yV2ViR0wyIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdXNpbmdD
b3JlUHJvZmlsZSB7IGZhbHNlIH07CisKKyAgICB1bnNpZ25lZCBtX3N0YXR1c0NoZWNrQ291bnQg
eyAwIH07CisgICAgYm9vbCBtX2ZhaWxOZXh0U3RhdHVzQ2hlY2sgeyBmYWxzZSB9OworCisjaWYg
VVNFKENBSVJPKQorICAgIFBsYXRmb3JtM0RPYmplY3QgbV92YW8geyAwIH07CisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKENPQ09BKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKEFOR0xFKSkKKyAgICBi
b29sIG1faGFzU3dpdGNoZWRUb0hpZ2hQZXJmb3JtYW5jZUdQVSB7IGZhbHNlIH07CisjZW5kaWYK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMDg2ZDBjNTFmY2QxNWI4
NTk3ZTJiYzAzOTA5OGRhMWYxMjk4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xCYXNlLmNw
cApAQCAtMCwwICsxLDUxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChV
U0UoT1BFTkdMKSB8fCAoUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpKSkKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xF
U0lPUy5oIgorI2VuZGlmCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3BlbkdMLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlRlbXBvcmFyeU9wZW5HTFNldHRpbmcuaCIKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIFVTRShBQ0NFTEVSQVRFKQor
I2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VsaWYg
VVNFKE9QRU5HTF9FUykKKyNpbXBvcnQgPE9wZW5HTEVTL0VTMi9nbGV4dC5oPgorLy8gRnJvbSA8
T3BlbkdMRVMvZ2xleHQuaD4KKyNkZWZpbmUgR0xfUkdCQTMyRl9BUkIgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAg
IDB4ODgxNQorI2VsaWYgVVNFKE9QRU5HTCkKKyNkZWZpbmUgR0xfRE9fTk9UX1dBUk5fSUZfTVVM
VElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVECisjaW5jbHVkZSA8T3BlbkdML2dsLmg+Cisj
aW5jbHVkZSA8T3BlbkdML2dsMy5oPgorI3VuZGVmIEdMX0RPX05PVF9XQVJOX0lGX01VTFRJX0dM
X1ZFUlNJT05fSEVBREVSU19JTkNMVURFRAorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIHZvaWQgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhl
bHMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit7CisgICAg
Ly8gV2UgY2FuIGFzc3VtZSB0aGlzIGRvZXNuJ3Qgb3ZlcmZsb3cgYmVjYXVzZSB0aGUgY2FsbGlu
ZyBmdW5jdGlvbnMKKyAgICAvLyB1c2UgY2hlY2tlZCBhcml0aG1ldGljLgorICAgIGludCB0b3Rh
bEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90
YWxCeXRlczsgaSArPSA0KQorICAgICAgICBwaXhlbHNbaSArIDNdID0gMjU1OworfQorI2VuZGlm
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9C
R1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2ln
bmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMo
KTsKKworICAgIC8vIE5WSURJQSBkcml2ZXJzIGhhdmUgYSBidWcgd2hlcmUgY2FsbGluZyByZWFk
UGl4ZWxzIGluIEJHUkEgY2FuIHJldHVybiB0aGUgd3JvbmcgdmFsdWVzIGZvciB0aGUgYWxwaGEg
Y2hhbm5lbCB3aGVuIHRoZSBhbHBoYSBpcyBvZmYgZm9yIHRoZSBjb250ZXh0LgorICAgIGlmICgh
YXR0cnMuYWxwaGEgJiYgZ2V0RXh0ZW5zaW9ucygpLmlzTlZJRElBKCkpIHsKKyAgICAgICAgOjpn
bFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgcGl4ZWxzKTsKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICAgICAgdkltYWdlX0J1ZmZlciBz
cmM7CisgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIHNyYy53aWR0aCA9IHdp
ZHRoOworICAgICAgICBzcmMucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgICAgIHNyYy5kYXRh
ID0gcGl4ZWxzOworCisgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKKyAgICAgICAgZGVzdC5o
ZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgZGVz
dC5yb3dCeXRlcyA9IHdpZHRoICogNDsKKyAgICAgICAgZGVzdC5kYXRhID0gcGl4ZWxzOworCisg
ICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCisgICAgICAg
IGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBl
cm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7
CisjZWxzZQorICAgICAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgICAg
ICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKyNlbmRpZgorICAgIH0gZWxz
ZQorICAgICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBH
TF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscyk7CisKKyNpZiBQTEFURk9STShNQUMp
CisgICAgaWYgKCFhdHRycy5hbHBoYSkKKyAgICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhl
bHMod2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIHZhbGlkYXRlRGVwdGhT
dGVuY2lsKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBpbnQgd2lkdGgg
PSBzaXplLndpZHRoKCk7CisgICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Cisg
ICAgR0x1aW50IGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7Cisg
ICAgaWYgKGF0dHJzLmFscGhhKSB7CisgICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdM
X1JHQkE4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JGb3Jt
YXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChhdHRycy5zdGVuY2lsIHx8IGF0dHJzLmRlcHRo
KSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlz
IHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgorCisgICAgICAgIEV4dGVuc2lvbnNHTCYg
ZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRl
cHRoIGJ1ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQuCisgICAgICAgIGlmIChleHRlbnNp
b25zLnN1cHBvcnRzKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKSkKKyAgICAgICAgICAg
IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7Cisg
ICAgICAgIGVsc2UKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICAg
ICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7
CisjZWxzZQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBU
SF9DT01QT05FTlQ7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBSZXNpemUgbXVsdGlzYW1wbGUg
RkJPLgorICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxl
Q291bnQ7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhT
YW1wbGVDb3VudCk7CisgICAgICAgIC8vIFVzaW5nIG1vcmUgdGhhbiA0IHNhbXBsZXMgaXMgc2xv
dyBvbiBzb21lIGhhcmR3YXJlIGFuZCBpcyB1bmxpa2VseSB0bworICAgICAgICAvLyBwcm9kdWNl
IGEgc2lnbmlmaWNhbnRseSBiZXR0ZXIgcmVzdWx0LgorICAgICAgICBHTGludCBzYW1wbGVDb3Vu
dCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIpOworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQorICAg
ICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIHNhbXBsZUNvdW50LCBHTF9SR0JBOF9PRVMsIHdpZHRoLCBoZWlnaHQpOworI2Vsc2UK
KyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKKyNlbmRpZgorICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRycy5zdGVu
Y2lsIHx8IGF0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVO
REVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChhdHRycy5zdGVuY2lsKQorICAgICAgICAg
ICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQor
ICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgaWYg
KGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAu
CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgbV90ZXh0dXJlKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9SRU5ERVJCVUZGRVIs
IG1fdGV4dHVyZSk7CisgICAgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZUZyb21EcmF3YWJsZShtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyNlbHNlCisgICAgYWxsb2NhdGVJT1N1cmZh
Y2VCYWNraW5nU3RvcmUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgdXBkYXRlRnJhbWVi
dWZmZXJUZXh0dXJlQmFja2luZ1N0b3JlRnJvbUxheWVyKCk7CisgICAgOjpnbEZyYW1lYnVmZmVy
VGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhU
LCBHTF9URVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1fdGV4dHVyZSwgMCk7CisjZW5kaWYgLy8gIVVT
RShPUEVOR0xfRVMpKQorI2Vsc2UKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9z
aXRvclRleHR1cmUpIHsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
Y29tcG9zaXRvclRleHR1cmUpOworICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0
LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOworICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9pbnRl
cm1lZGlhdGVUZXh0dXJlKTsKKyAgICAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgMCk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKKyAgICB9CisjZW5kaWYKKyNlbmRpZgorCisgICAgYXR0YWNoRGVwdGhBbmRTdGVu
Y2lsQnVmZmVySWZOZWVkZWQoaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPID09IG1fZmJvKQorICAg
ICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbXVz
dFJlc3RvcmVGQk87Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaERl
cHRoQW5kU3RlbmNpbEJ1ZmZlcklmTmVlZGVkKEdMdWludCBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgaWYgKCFhdHRycy5hbnRpYWxpYXMgJiYgKGF0dHJzLnN0ZW5j
aWwgfHwgYXR0cnMuZGVwdGgpKSB7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0
ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCkK
KyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJzLmRlcHRoKQorICAgICAgICAg
ICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
REVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgMCk7CisgICAgfQorCisgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChH
TF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAg
ICAgICAvLyBGSVhNRTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0K
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFRlbXBvcmFyeU9wZW5HTFNl
dHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKKyAgICBUZW1w
b3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdMX0ZBTFNFKTsKKyAg
ICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERlcHRoKEdMX0RFUFRIX1RFU1QsIEdMX0ZB
TFNFKTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFN0ZW5jaWwoR0xfU1RFTkNJ
TF9URVNULCBHTF9GQUxTRSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9F
UykKKyAgICBHTGludCBib3VuZEZyYW1lQnVmZmVyOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HLCAmYm91bmRGcmFtZUJ1ZmZlcik7CisjZW5kaWYKKworICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVGQk8pOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICBV
TlVTRURfUEFSQU0ocmVjdCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgOjpnbFJlc29sdmVNdWx0
aXNhbXBsZUZyYW1lYnVmZmVyQVBQTEUoKTsKKyAgICBjb25zdCBHTGVudW0gZGlzY2FyZHNbXSA9
IHsgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX0RFUFRIX0FUVEFDSE1FTlQgfTsKKyAgICA6Omds
RGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfQVBQTEUsIDIsIGRpc2Nh
cmRzKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBib3VuZEZyYW1l
QnVmZmVyKTsKKyNlbHNlCisgICAgSW50UmVjdCByZXNvbHZlUmVjdCA9IHJlY3Q7CisgICAgaWYg
KHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXNvbHZlUmVjdCA9IEludFJlY3QoMCwgMCwgbV9j
dXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisKKyAgICA6OmdsQmxpdEZyYW1lYnVmZmVy
RVhUKHJlc29sdmVSZWN0LngoKSwgcmVzb2x2ZVJlY3QueSgpLCByZXNvbHZlUmVjdC5tYXhYKCks
IHJlc29sdmVSZWN0Lm1heFkoKSwgcmVzb2x2ZVJlY3QueCgpLCByZXNvbHZlUmVjdC55KCksIHJl
c29sdmVSZWN0Lm1heFgoKSwgcmVzb2x2ZVJlY3QubWF4WSgpLCBHTF9DT0xPUl9CVUZGRVJfQklU
LCBHTF9MSU5FQVIpOworI2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworI2lmIFVTRShPUEVOR0wpCisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1h
dCkgeworICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKKyAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBH
TF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBERVBUSF9D
T01QT05FTlQxNjoKKyAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkdCQTQ6CisgICAgY2FzZSBSR0I1X0ExOgorICAg
ICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JHQkE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UkdCNTY1OgorICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JHQjsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorI2VuZGlmCisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sK
KyAgICAvLyBOZWVkIHRvIGVtdWxhdGUgTUFYX0ZSQUdNRU5UL1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlMgYW5kIE1BWF9WQVJZSU5HX1ZFQ1RPUlMKKyAgICAvLyBiZWNhdXNlIGRlc2t0b3AgR0wncyBj
b3JyZXNwb25kaW5nIHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cworICAg
IC8vIHdoZXJlYXMgR0xFUzIgcmV0dXJuIHRoZSBudW1iZXIgb2YgdmVjdG9ycyAoZWFjaCB2ZWN0
b3IgaGFzIDQgY29tcG9uZW50cykuCisgICAgLy8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0dXJu
ZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IDQuCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgc3dpdGNoIChwbmFtZSkgeworI2lmIFVTRShPUEVOR0wpCisgICAg
Y2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgorICAgICAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUywgdmFsdWUpOworICAgICAgICAq
dmFsdWUgLz0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNQVhfVkVSVEVYX1VOSUZPUk1f
VkVDVE9SUzoKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfVU5JRk9STV9D
T01QT05FTlRTLCB2YWx1ZSk7CisgICAgICAgICp2YWx1ZSAvPSA0OworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICAgIGlmIChpc0dMRVMyQ29tcGxp
YW50KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCg6OmdsR2V0RXJyb3IoKSA9PSBHTF9OT19FUlJP
Uik7CisgICAgICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZBUllJTkdfVkVDVE9SUywg
dmFsdWUpOworICAgICAgICAgICAgaWYgKDo6Z2xHZXRFcnJvcigpID09IEdMX0lOVkFMSURfRU5V
TSkgeworICAgICAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19DT01Q
T05FTlRTLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgKnZhbHVlIC89IDQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFY
X1ZBUllJTkdfRkxPQVRTLCB2YWx1ZSk7CisgICAgICAgICAgICAqdmFsdWUgLz0gNDsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgTUFYX1RFWFRVUkVfU0laRToK
KyAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNp
emUoKSkKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWluKDQwOTYsICp2YWx1ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgICAg
OjpnbEdldEludGVnZXJ2KE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKGdldEV4dGVuc2lvbnMoKS5yZXF1aXJlc1Jlc3RyaWN0ZWRNYXhpbXVtVGV4dHVyZVNp
emUoKSkKKyAgICAgICAgICAgICp2YWx1ZSA9IHN0ZDo6bWluKDEwMjQsICp2YWx1ZSk7CisgICAg
ICAgIGJyZWFrOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBTb21lIG9sZGVyIGhhcmR3YXJl
IGFkdmVydGlzZXMgYSBsYXJnZXIgbWF4aW11bSB0aGFuIHRoZXkKKyAgICAvLyBjYW4gYWN0dWFs
bHkgaGFuZGxlLiBSYXRoZXIgdGhhbiBkZXRlY3Rpbmcgc3VjaCBkZXZpY2VzLCBzaW1wbHkKKyAg
ICAvLyBjbGFtcCB0aGUgbWF4aW11bSB0byA4MTkyLCB3aGljaCBpcyBiaWcgZW5vdWdoIGZvciBh
IDVLIGRpc3BsYXkuCisgICAgY2FzZSBNQVhfUkVOREVSQlVGRkVSX1NJWkU6CisgICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihNQVhfUkVOREVSQlVGRkVSX1NJWkUsIHZhbHVlKTsKKyAgICAgICAgKnZh
bHVlID0gc3RkOjptaW4oODE5MiwgKnZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
QVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KE1BWF9WSUVXUE9SVF9E
SU1TLCB2YWx1ZSk7CisgICAgICAgIHZhbHVlWzBdID0gc3RkOjptaW4oODE5MiwgdmFsdWVbMF0p
OworICAgICAgICB2YWx1ZVsxXSA9IHN0ZDo6bWluKDgxOTIsIHZhbHVlWzFdKTsKKyAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICA6OmdsR2V0SW50ZWdlcnYocG5h
bWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVj
aXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKQoreworICAgIFVO
VVNFRF9QQVJBTShzaGFkZXJUeXBlKTsKKyAgICBBU1NFUlQocmFuZ2UpOworICAgIEFTU0VSVChw
cmVjaXNpb24pOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzd2l0Y2ggKHBy
ZWNpc2lvblR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfSU5UOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHRHTDo6SElHSF9JTlQ6CisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgZm9yIGEgMzIt
Yml0IHR3b3MtY29tcGxlbWVudCBpbnRlZ2VyIGZvcm1hdC4KKyAgICAgICAgcmFuZ2VbMF0gPSAz
MTsKKyAgICAgICAgcmFuZ2VbMV0gPSAzMDsKKyAgICAgICAgcHJlY2lzaW9uWzBdID0gMDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TE9XX0ZMT0FUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0R0w6Ok1FRElVTV9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dEdMOjpISUdIX0ZMT0FUOgorICAgICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGZvciBh
biBJRUVFIHNpbmdsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZm9ybWF0LgorICAgICAgICBy
YW5nZVswXSA9IDEyNzsKKyAgICAgICAgcmFuZ2VbMV0gPSAxMjc7CisgICAgICAgIHByZWNpc2lv
blswXSA9IDIzOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzKQoreworICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEdDM0RlbnVtIG9wZW5HTEZvcm1hdCA9IGZvcm1hdDsK
KyAgICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OworI2lm
IFVTRShPUEVOR0wpCisgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpIHsKKyAgICAgICAgaWYgKGZv
cm1hdCA9PSBHTF9SR0JBKQorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9S
R0JBMzJGX0FSQjsKKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKKyAgICAgICAg
ICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfUkdCMzJGX0FSQjsKKyAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9SR0JB
KQorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9SR0JBMTZGX0FSQjsKKyAg
ICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKKyAgICAgICAgICAgIG9wZW5HTEludGVy
bmFsRm9ybWF0ID0gR0xfUkdCMTZGX0FSQjsKKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdM
X0xVTUlOQU5DRSkKKyAgICAgICAgICAgIG9wZW5HTEludGVybmFsRm9ybWF0ID0gR0xfTFVNSU5B
TkNFMTZGX0FSQjsKKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0FMUEhBKQorICAgICAg
ICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBHTF9BTFBIQTE2Rl9BUkI7CisgICAgICAgIGVs
c2UgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICBvcGVuR0xJ
bnRlcm5hbEZvcm1hdCA9IEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9BUkI7CisgICAgICAgIHR5cGUg
PSBHTF9IQUxGX0ZMT0FUX0FSQjsKKyAgICB9CisKKyAgICBBU1NFUlQoZm9ybWF0ICE9IEV4dGVu
c2lvbnNHTDo6U1JHQjhfQUxQSEE4X0VYVCk7CisgICAgaWYgKGZvcm1hdCA9PSBFeHRlbnNpb25z
R0w6OlNSR0JfQUxQSEFfRVhUKQorICAgICAgICBvcGVuR0xGb3JtYXQgPSBHTF9SR0JBOworICAg
IGVsc2UgaWYgKGZvcm1hdCA9PSBFeHRlbnNpb25zR0w6OlNSR0JfRVhUKQorICAgICAgICBvcGVu
R0xGb3JtYXQgPSBHTF9SR0I7CisjZW5kaWYKKworICAgIGlmIChtX3VzaW5nQ29yZVByb2ZpbGUp
IHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdM
IHRoYXQgYXJlIGRlcHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVl
ZAorICAgICAgICAvLyB0byBhZGFwdCB0aGVtLgorICAgICAgICBzd2l0Y2ggKG9wZW5HTEludGVy
bmFsRm9ybWF0KSB7CisgICAgICAgIGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBUaGUgZm9y
bWF0IGlzIGEgc2ltcGxlIGNvbXBvbmVudCBjb250YWluaW5nIGFuIGFscGhhIHZhbHVlLiBJdCBu
ZWVkcyB0byBiZSBiYWNrZWQgd2l0aCBhIEdMX1JFRCBwbGFuZS4KKyAgICAgICAgICAgIC8vIFdl
IGNoYW5nZSB0aGUgZm9ybWF0cyB0byBHTF9SRUQgKGJvdGggbmVlZCB0byBiZSBHTF9BTFBIQSBp
biBXZWJHTCkgYW5kIGluc3RydWN0IHRoZSB0ZXh0dXJlIHRvIHN3aXp6bGUKKyAgICAgICAgICAg
IC8vIHRoZSByZWQgY29tcG9uZW50IHZhbHVlcyB3aXRoIHRoZSBhbHBoYSBjb21wb25lbnQgdmFs
dWVzLgorICAgICAgICAgICAgb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBvcGVuR0xGb3JtYXQgPSBS
RUQ7CisgICAgICAgICAgICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0Es
IFJFRCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgICAgICAvLyBUaGUgZm9ybWF0IGhhcyAyIGNvbXBvbmVudHMsIGFuIGFscGhhIG9u
ZSBhbmQgYSBsdW1pbmFuY2Ugb25lIChzYW1lIHZhbHVlIGZvciByZWQsIGdyZWVuIGFuZCBibHVl
KS4KKyAgICAgICAgICAgIC8vIEl0IG5lZWRzIHRvIGJlIGJhY2tlZCB3aXRoIGEgR0xfUkcgcGxh
bmUsIHVzaW5nIHRoZSByZWQgY29tcG9uZW50IGZvciB0aGUgY29sb3JzIGFuZCB0aGUgZ3JlZW4g
Y29tcG9uZW50CisgICAgICAgICAgICAvLyBmb3IgYWxwaGEuIFdlIGNoYW5nZSB0aGUgZm9ybWF0
cyB0byBHTF9SRyBhbmQgc3dpenpsZSB0aGUgY29tcG9uZW50cy4KKyAgICAgICAgICAgIG9wZW5H
TEludGVybmFsRm9ybWF0ID0gb3BlbkdMRm9ybWF0ID0gUkc7CisgICAgICAgICAgICB0ZXhQYXJh
bWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX1IsIFJFRCk7CisgICAgICAgICAgICB0ZXhQ
YXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0csIFJFRCk7CisgICAgICAgICAgICB0
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0IsIFJFRCk7CisgICAgICAgICAg
ICB0ZXhQYXJhbWV0ZXJpKHRhcmdldCwgVEVYVFVSRV9TV0laWkxFX0EsIEdSRUVOKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZXhJbWFnZTJERGlyZWN0KHRhcmdldCwgbGV2ZWwsIG9wZW5H
TEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIG9wZW5HTEZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShP
UEVOR0xfRVMpCisgICAgOjpnbERlcHRoUmFuZ2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciks
IHN0YXRpY19jYXN0PGZsb2F0Pih6RmFyKSk7CisjZWxzZQorICAgIDo6Z2xEZXB0aFJhbmdlKHpO
ZWFyLCB6RmFyKTsKKyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisgICAgOjpnbENsZWFyRGVw
dGhmKHN0YXRpY19jYXN0PGZsb2F0PihkZXB0aCkpOworI2Vsc2UKKyAgICA6OmdsQ2xlYXJEZXB0
aChkZXB0aCk7CisjZW5kaWYKK30KKworI2lmICFQTEFURk9STShHVEspCitFeHRlbnNpb25zR0wm
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1f
ZXh0ZW5zaW9ucykKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKKyAgICAg
ICAgbV9leHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KHRoaXMsIGZh
bHNlKTsKKyNlbHNlCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9u
c0dMT3BlbkdMPih0aGlzLCBpc0dMRVMyQ29tcGxpYW50KCkpOworI2VuZGlmCisgICAgcmV0dXJu
ICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEp
Cit7CisgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBGSVhN
RTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZp
eGVkLCBpLmUuLAorICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJl
IGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xGbHVzaCgpOworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgICAgIDo6Z2xGbHVzaCgpOworICAgIH0KKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworICAgIGlmIChhdHRycy5hbnRpYWxp
YXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgaWYgKCFhdHRycy5hbHBoYSAm
JiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dEdMOjpSR0JBIHx8IGZvcm1hdCA9PSBHcmFwaGlj
c0NvbnRleHRHTDo6QkdSQSkgJiYgKG1fc3RhdGUuYm91bmRGQk8gPT0gbV9mYm8gfHwgKGF0dHJz
LmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pKSkKKyAg
ICAgICAgd2lwZUFscGhhQ2hhbm5lbEZyb21QaXhlbHMod2lkdGgsIGhlaWdodCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpKTsKKyNlbmRpZgorfQorCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVOR0wpIHx8IChQTEFURk9STShD
T0NPQSkgJiYgVVNFKE9QRU5HTF9FUykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUyZThhMGZlYjMzYzdiNWU5MmMxODdmNDJi
MjZkNGI0ZDc4MDEzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTAs
MCArMSwyMDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8
c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRf
R0wpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oIgorI2Vu
ZGlmCisKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMT3BlbkdMRVMuaCIKKyNlbHNlCisjaW5jbHVkZSAiRXh0ZW5zaW9uc0dMT3Bl
bkdMLmgiCisjZW5kaWYKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5o
IgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5j
bHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBQTEFURk9STShDT0NP
QSkKKworI2lmIFVTRShPUEVOR0xfRVMpCisjaW1wb3J0IDxPcGVuR0xFUy9FUzIvZ2xleHQuaD4K
KyNpbXBvcnQgPE9wZW5HTEVTL0VTMy9nbC5oPgorLy8gRnJvbSA8T3BlbkdMRVMvZ2xleHQuaD4K
KyNkZWZpbmUgR0xfUkdCQTMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVm
aW5lIEdMX1JHQjMyRl9BUkIgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2Vsc2UKKyNk
ZWZpbmUgR0xfRE9fTk9UX1dBUk5fSUZfTVVMVElfR0xfVkVSU0lPTl9IRUFERVJTX0lOQ0xVREVE
CisjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjaW5jbHVkZSA8T3BlbkdML2dsMy5oPgorI2luY2x1
ZGUgPE9wZW5HTC9nbDNleHQuaD4KKyN1bmRlZiBHTF9ET19OT1RfV0FSTl9JRl9NVUxUSV9HTF9W
RVJTSU9OX0hFQURFUlNfSU5DTFVERUQKKyNlbmRpZgorCisjZWxzZQorCisjaWYgVVNFKExJQkVQ
T1hZKQorI2luY2x1ZGUgIkVwb3h5U2hpbXMuaCIKKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5j
bHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjZW5kaWYKKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBUaHJlYWRTcGVjaWZpYzxTaGFkZXJOYW1lSGFzaCo+
JiBnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIoKQoreworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGF0aWMgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhh
c2gqPiogc2hhcmVkTmFtZUhhc2g7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsK
KyAgICAgICAgc2hhcmVkTmFtZUhhc2ggPSBuZXcgVGhyZWFkU3BlY2lmaWM8U2hhZGVyTmFtZUhh
c2gqPjsKKyAgICB9KTsKKworICAgIHJldHVybiAqc2hhcmVkTmFtZUhhc2g7Cit9CisKK3N0YXRp
YyB2b2lkIHNldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcihTaGFkZXJOYW1lSGFzaCogc2hh
ZGVyTmFtZUhhc2gpCit7CisgICAgKmdldEN1cnJlbnROYW1lSGFzaE1hcEZvclNoYWRlcigpID0g
c2hhZGVyTmFtZUhhc2g7Cit9CisKKy8vIEhhc2ggZnVuY3Rpb24gdXNlZCBieSB0aGUgQU5HTEUg
dHJhbnNsYXRvci9jb21waWxlciB0byBkbworLy8gc3ltYm9sIG5hbWUgbWFuZ2xpbmcuIFNpbmNl
IHRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kLCBiZWZvcmUKKy8vIGNhbGxpbmcgY29tcGlsZVNoYWRl
ciB3ZSBzZXQgY3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyCisvLyB0byBwb2ludCB0byB0aGUg
bWFwIGtlcHQgYnkgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wuCisKK3N0YXRpYyB1aW50NjRfdCBuYW1lSGFzaEZvclNoYWRlcihjb25zdCBjaGFyKiBuYW1l
LCBzaXplX3QgbGVuZ3RoKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIENTdHJpbmcgbmFtZUFzQ1N0cmluZyA9IENTdHJpbmcobmFtZSk7CisKKyAgICAvLyBM
b29rIHVwIG5hbWUgaW4gb3VyIGxvY2FsIG1hcC4KKyAgICBTaGFkZXJOYW1lSGFzaComIGN1cnJl
bnROYW1lSGFzaE1hcEZvclNoYWRlciA9ICpnZXRDdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIo
KTsKKyAgICBTaGFkZXJOYW1lSGFzaDo6aXRlcmF0b3IgZmluZFJlc3VsdCA9IGN1cnJlbnROYW1l
SGFzaE1hcEZvclNoYWRlci0+ZmluZChuYW1lQXNDU3RyaW5nKTsKKyAgICBpZiAoZmluZFJlc3Vs
dCAhPSBjdXJyZW50TmFtZUhhc2hNYXBGb3JTaGFkZXItPmVuZCgpKQorICAgICAgICByZXR1cm4g
ZmluZFJlc3VsdC0+dmFsdWU7CisKKyAgICB1bnNpZ25lZCBoYXNoVmFsdWUgPSBuYW1lQXNDU3Ry
aW5nLmhhc2goKTsKKworICAgIC8vIENvbnZlcnQgdGhlIDMyLWJpdCBoYXNoIGZyb20gQ1N0cmlu
Zzo6aGFzaCBpbnRvIGEgNjQtYml0IHJlc3VsdAorICAgIC8vIGJ5IHNoaWZ0aW5nIHRoZW4gYWRk
aW5nIHRoZSBzaXplIG9mIG91ciB0YWJsZS4gT3ZlcmZsb3cgd291bGQKKyAgICAvLyBvbmx5IGJl
IGEgcHJvYmxlbSBpZiB3ZSdyZSBhbHJlYWR5IGhhc2hpbmcgdG8gdGhlIHNhbWUgdmFsdWUgKGFu
ZAorICAgIC8vIHdlJ3JlIGhvcGluZyB0aGF0IG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250
ZXh0IHdlCisgICAgLy8gZG9uJ3QgaGF2ZSB0aGF0IG1hbnkgc3ltYm9scykuCisKKyAgICB1aW50
NjRfdCByZXN1bHQgPSBoYXNoVmFsdWU7CisgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAzMikgKyAo
Y3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyLT5zaXplKCkgKyAxKTsKKworICAgIGN1cnJlbnRO
YW1lSGFzaE1hcEZvclNoYWRlci0+c2V0KG5hbWVBc0NTdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVE
ZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQorewor
ICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgRXh0ZW5zaW9uc0dM
JiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChhdHRycy5zdGVuY2lsKSB7
CisgICAgICAgIGlmIChleHRlbnNpb25zLnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMuZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNp
bCBpcyB0cnVlLgorICAgICAgICAgICAgYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGF0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgc2V0Q29udGV4
dEF0dHJpYnV0ZXMoYXR0cnMpOworICAgIH0KKyAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmICFt
X2lzRm9yV2ViR0wyKSB7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy5zdXBwb3J0cygiR0xfQU5H
TEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkgeworICAgICAgICAgICAgYXR0cnMuYW50aWFs
aWFzID0gZmFsc2U7CisgICAgICAgICAgICBzZXRDb250ZXh0QXR0cmlidXRlcyhhdHRycyk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5lbnN1cmVFbmFibGVkKCJHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZm
ZXIqIGltYWdlQnVmZmVyKQoreworICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gcm93
Qnl0ZXMgPSBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIDQ7
CisgICAgaWYgKHJvd0J5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IHJvd0J5
dGVzICogbV9jdXJyZW50SGVpZ2h0OworICAgIGlmICh0b3RhbEJ5dGVzQ2hlY2tlZC5oYXNPdmVy
Zmxvd2VkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHRvdGFsQnl0
ZXNDaGVja2VkLnVuc2FmZUdldCgpOworCisgICAgYXV0byBwaXhlbHMgPSBtYWtlVW5pcXVlQXJy
YXk8dW5zaWduZWQgY2hhcj4odG90YWxCeXRlcyk7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAg
IHJldHVybjsKKworICAgIHJlYWRSZW5kZXJpbmdSZXN1bHRzKHBpeGVscy5nZXQoKSwgdG90YWxC
eXRlcyk7CisKKyAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhh
KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7Cisg
ICAgICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYS4KKyAgICAgICAgICAgIHBpeGVsc1tpICsg
MF0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsK
KyAgICAgICAgICAgIHBpeGVsc1tpICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0g
KiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6
Om1pbigyNTUsIHBpeGVsc1tpICsgMl0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCks
IGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShP
UEVOR0xfRVMpCisgICAgcHJlc2VudFJlbmRlcmJ1ZmZlcigpOworI2VuZGlmCit9CisKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJ
bWFnZUJ1ZmZlciopCit7CisgICAgLy8gTm90IG5lZWRlZCBhdCB0aGUgbW9tZW50LCBzbyByZXR1
cm4gdGhhdCBub3RoaW5nIHdhcyBkb25lLgorICAgIHJldHVybiBmYWxzZTsKK30KKworUmVmUHRy
PEltYWdlRGF0YT4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvSW1hZ2VEYXRhKCkKK3sKKyAgICAvLyBSZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291
bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5nLCB3aGljaCBpcworICAgIC8vIGxvc3N5LgorICAg
IGlmIChjb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBoYSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKElu
dFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOworICAgIHVuc2lnbmVkIGNo
YXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgQ2hlY2tlZDxpbnQs
IFJlY29yZE92ZXJmbG93PiB0b3RhbEJ5dGVzQ2hlY2tlZCA9IDQgKiBDaGVja2VkPGludCwgUmVj
b3JkT3ZlcmZsb3c+KG1fY3VycmVudFdpZHRoKSAqIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxv
dz4obV9jdXJyZW50SGVpZ2h0KTsKKyAgICBpZiAodG90YWxCeXRlc0NoZWNrZWQuaGFzT3ZlcmZs
b3dlZCgpKQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworICAgIGludCB0b3RhbEJ5dGVzID0g
dG90YWxCeXRlc0NoZWNrZWQudW5zYWZlR2V0KCk7CisKKyAgICByZWFkUmVuZGVyaW5nUmVzdWx0
cyhwaXhlbHMsIHRvdGFsQnl0ZXMpOworCisgICAgLy8gQ29udmVydCB0byBSR0JBLgorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAo
cGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBp
ZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworCisjaWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBUZW1wb3Jh
cnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7
CisgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWREaXRoZXIoR0xfRElUSEVSLCBHTF9G
QUxTRSk7CisjZW5kaWYKKworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcykK
KyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOworCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1fY29tcG9zaXRv
clRleHR1cmUpOworICAgIHN0ZDo6c3dhcChtX3RleHR1cmUsIG1faW50ZXJtZWRpYXRlVGV4dHVy
ZSk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAg
IDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEZs
dXNoKCk7CisKKyAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3Rh
dGUuYm91bmRGQk8pOworICAgIGVsc2UKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICByZXR1cm47CisjZW5k
aWYKKworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9zdGF0ZS5ib3VuZFRhcmdldChHTF9URVhUVVJFMCkgPT0g
R0xfVEVYVFVSRV8yRCA/IG1fc3RhdGUuYm91bmRUZXh0dXJlKEdMX1RFWFRVUkUwKSA6IDApOwor
ICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQpOworICAgIGlm
IChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUiwgbV9zdGF0ZS5ib3VuZEZCTyk7Cisg
ICAgOjpnbEZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRS
ZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUpCit7
CisgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAq
IDQpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAg
Ym9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcygp
LmFudGlhbGlhcykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KCk7
CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1F
QlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAobV9zdGF0ZS5ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICAg
ICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OworICAgIGJvb2wgbXVzdFJlc3Rv
cmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgOjpnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJ
R05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0KSB7Cisg
ICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7CisgICAgICAgIG11
c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorCisgICAgcmVhZFBpeGVsc0Fu
ZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeSgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LCBwaXhlbHMpOworCisgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAg
ICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsK
KworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUuYm91bmRGQk8pOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBt
X2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh3aWR0aCA+PSAw
ICYmIGhlaWdodCA+PSAwKTsKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworCisgICAgbV9jdXJyZW50
V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIFRlbXBv
cmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNF
KTsKKyAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZERpdGhlcihHTF9ESVRIRVIsIEdM
X0ZBTFNFKTsKKyAgICAKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaGFwZUZCT3MoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMg
dG8gMC4KKyAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0
aCA9IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJvb2xlYW4gY29sb3JN
YXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9
IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZiwgc3RlbmNpbE1h
c2tCYWNrID0gMHhmZmZmZmZmZjsKKyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9S
X0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xl
YXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgOjpnbEdldEJv
b2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICA6OmdsQ29sb3JNYXNr
KEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworCisgICAgYXV0byBhdHRycyA9
IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cnMuZGVwdGgpIHsKKyAgICAgICAg
OjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAg
ICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKKyAgICAgICAgOjpnbEdl
dEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIDo6Z2xE
ZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJf
QklUOworICAgIH0KKyAgICBpZiAoYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6
Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX1dS
SVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOworICAgICAg
ICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSywgcmVpbnRlcnByZXRf
Y2FzdDxHTGludCo+KCZzdGVuY2lsTWFza0JhY2spKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZShHTF9CQUNLLCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NU
RU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKKwor
ICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29s
b3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBj
b2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAoYXR0cnMu
ZGVwdGgpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoY2xl
YXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAg
aWYgKGF0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbChjbGVhclN0ZW5j
aWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNpbE1h
c2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9CQUNLLCBzdGVuY2lsTWFz
a0JhY2spOworICAgIH0KKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIsIG1fc3RhdGUu
Ym91bmRGQk8pOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNoZWNrVmFyeWluZ3NQYWNraW5nKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hh
ZGVyLCBQbGF0Zm9ybTNET2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VS
VChtX3NoYWRlclNvdXJjZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQo
bV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBh
dXRvJiB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+
dmFsdWU7CisgICAgY29uc3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6
U2hhZGVyVmFyaWFibGU+IGNvbWJpbmVkVmFyeWluZ3M7CisgICAgZm9yIChjb25zdCBhdXRvJiB2
ZXJ0ZXhTeW1ib2wgOiB2ZXJ0ZXhFbnRyeS52YXJ5aW5nTWFwKSB7CisgICAgICAgIGNvbnN0IFN0
cmluZyYgc3ltYm9sTmFtZSA9IHZlcnRleFN5bWJvbC5rZXk7CisgICAgICAgIC8vIFRoZSB2YXJ5
aW5nIG1hcCBpbmNsdWRlcyB2YXJpYWJsZXMgZm9yIGVhY2ggaW5kZXggb2YgYW4gYXJyYXkgdmFy
aWFibGUuCisgICAgICAgIC8vIFdlIG9ubHkgd2FudCBhIHNpbmdsZSB2YXJpYWJsZSB0byByZXBy
ZXNlbnQgdGhlIGFycmF5LgorICAgICAgICBpZiAoc3ltYm9sTmFtZS5lbmRzV2l0aCgiXSIpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRG9uJ3QgY291bnQgYnVpbHQgaW4g
dmFyeWluZ3MuCisgICAgICAgIGlmIChzeW1ib2xOYW1lID09ICJnbF9GcmFnQ29vcmQiIHx8IHN5
bWJvbE5hbWUgPT0gImdsX0Zyb250RmFjaW5nIiB8fCBzeW1ib2xOYW1lID09ICJnbF9Qb2ludENv
b3JkIikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGF1dG8mIGZyYWdt
ZW50U3ltYm9sID0gZnJhZ21lbnRFbnRyeS52YXJ5aW5nTWFwLmZpbmQoc3ltYm9sTmFtZSk7Cisg
ICAgICAgIGlmIChmcmFnbWVudFN5bWJvbCAhPSBmcmFnbWVudEVudHJ5LnZhcnlpbmdNYXAuZW5k
KCkpCisgICAgICAgICAgICBjb21iaW5lZFZhcnlpbmdzLmFkZChzeW1ib2xOYW1lLCBmcmFnbWVu
dFN5bWJvbC0+dmFsdWUpOworICAgIH0KKworICAgIHNpemVfdCBudW1WYXJ5aW5ncyA9IGNvbWJp
bmVkVmFyeWluZ3Muc2l6ZSgpOworICAgIGlmICghbnVtVmFyeWluZ3MpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiB2YXJpYWJsZXM7
CisgICAgdmFyaWFibGVzLnJlc2VydmUoY29tYmluZWRWYXJ5aW5ncy5zaXplKCkpOworICAgIGZv
ciAoY29uc3QgYXV0byYgdmFyeWluZ1N5bWJvbCA6IGNvbWJpbmVkVmFyeWluZ3MudmFsdWVzKCkp
CisgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyeWluZ1N5bWJvbCk7CisKKyAgICBHQzNE
aW50IG1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xH
ZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmbWF4VmFyeWluZ1ZlY3RvcnMpOworI2Vs
c2UKKyAgICBpZiAobV9pc0ZvcldlYkdMMikKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01B
WF9WQVJZSU5HX1ZFQ1RPUlMsICZtYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgZWxzZSB7CisgICAg
ICAgIEdDM0RpbnQgbWF4VmFyeWluZ0Zsb2F0cyA9IDA7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9NQVhfVkFSWUlOR19GTE9BVFMsICZtYXhWYXJ5aW5nRmxvYXRzKTsKKyAgICAgICAgbWF4
VmFyeWluZ1ZlY3RvcnMgPSBtYXhWYXJ5aW5nRmxvYXRzIC8gNDsKKyAgICB9CisjZW5kaWYKKyAg
ICByZXR1cm4gc2g6OkNoZWNrVmFyaWFibGVzV2l0aGluUGFja2luZ0xpbWl0cyhtYXhWYXJ5aW5n
VmVjdG9ycywgdmFyaWFibGVzKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtM0RPYmplY3QgdmVydGV4U2hhZGVyLCBQbGF0Zm9ybTNE
T2JqZWN0IGZyYWdtZW50U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NoYWRlclNvdXJj
ZU1hcC5jb250YWlucyh2ZXJ0ZXhTaGFkZXIpKTsKKyAgICBBU1NFUlQobV9zaGFkZXJTb3VyY2VN
YXAuY29udGFpbnMoZnJhZ21lbnRTaGFkZXIpKTsKKyAgICBjb25zdCBhdXRvJiB2ZXJ0ZXhFbnRy
eSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7CisgICAgY29u
c3QgYXV0byYgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRT
aGFkZXIpLT52YWx1ZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzaDo6R0xlbnVtPiB2ZXJ0ZXhT
eW1ib2xQcmVjaXNpb25NYXA7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdmVydGV4
RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWFwcGVkTmFt
ZSA9IGVudHJ5LnZhbHVlLm1hcHBlZE5hbWU7CisgICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lv
bk1hcC5hZGQoU3RyaW5nKG1hcHBlZE5hbWUuY19zdHIoKSwgbWFwcGVkTmFtZS5sZW5ndGgoKSks
IGVudHJ5LnZhbHVlLnByZWNpc2lvbik7CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBl
bnRyeSA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyYgbWFwcGVkTmFtZSA9IGVudHJ5LnZhbHVlLm1hcHBlZE5hbWU7CisgICAgICAgIGNvbnN0
IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5maW5kKFN0cmlu
ZyhtYXBwZWROYW1lLmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpKTsKKyAgICAgICAgaWYg
KHZlcnRleFN5bWJvbCAhPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4
U3ltYm9sLT52YWx1ZSAhPSBlbnRyeS52YWx1ZS5wcmVjaXNpb24pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ludFNpemUgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0
ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fc3RhdGUuYWN0aXZl
VGV4dHVyZVVuaXQgPSB0ZXh0dXJlOworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQo
cHJvZ3JhbSk7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOworICAg
IDo6Z2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQocHJv
Z3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFt
ZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVU
RSwgbmFtZSk7CisgICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGlu
ZyAlcyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKKyAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBtYXBwZWROYW1l
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5k
QnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBHTHVpbnQgZmJvOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGZi
byA9IGJ1ZmZlcjsKKyAgICBlbHNlCisgICAgICAgIGZibyA9IChjb250ZXh0QXR0cmlidXRlcygp
LmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7CisgICAgaWYgKGZibyAhPSBt
X3N0YXRlLmJvdW5kRkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0
LCBmYm8pOworICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gZmJvOworICAgIH0KK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVy
KTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRl
eHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQs
IHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9y
KEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0Rj
bGFtcGYgYWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5k
Q29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbEJsZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2Rl
UkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9y
LCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9ICAgICAgIAorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0Rl
bnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBH
QzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVm
ZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXpl
LCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsQnVmZmVyU3Vi
RGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Cit9CisKKyNpZiBQTEFURk9STShDT0NP
QSkgfHwgUExBVEZPUk0oV1BFKQordm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcEJ1
ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0
ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgcmV0dXJuIDo6Z2xNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgbGVuZ3Ro
LCBhY2Nlc3MpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5t
YXBCdWZmZXIoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiA6OmdsVW5tYXBCdWZmZXIodGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gcmVhZFRhcmdldCwgR0Mz
RGVudW0gd3JpdGVUYXJnZXQsIEdDM0RpbnRwdHIgcmVhZE9mZnNldCwgR0MzRGludHB0ciB3cml0
ZU9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbENvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFk
T2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RzaXplaSBidWZTaXplLCBHQzNEaW50KiBw
YXJhbXMpCit7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgYnVmU2l6ZSwgcGFyYW1zKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKKyAgICBVTlVTRURfUEFSQU0ocG5hbWUp
OworICAgIFVOVVNFRF9QQVJBTShidWZTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1zKTsK
KyNlbmRpZgorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgc2FtcGxlcywgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbGV2ZWxzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xUZXhTdG9yYWdlMkQodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1f
c3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpIGxldmVscywg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRHNpemVpIGRlcHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xUZXhTdG9yYWdlM0QodGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9y
PEdDM0R1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDM0RlbnVtIHBuYW1lLCBWZWN0b3I8R0MzRGlu
dD4mIHBhcmFtcykKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5k
aWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBhcmFtcy5kYXRhKCkp
OworfQorI2VuZGlmCisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBm
IHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhcihtYXNrKTsKKyAgICBj
aGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
clN0ZW5jaWwoR0MzRGludCBzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBi
bHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIC8vIFR1cm4gb24gbmFtZSBtYXBwaW5nLiBEdWUgdG8gdGhlIHdheSBBTkdMRSBuYW1lIGhh
c2hpbmcgd29ya3MsIHdlCisgICAgLy8gcG9pbnQgYSBnbG9iYWwgaGFzaG1hcCB0byB0aGUgbWFw
IG93bmVkIGJ5IHRoaXMgY29udGV4dC4KKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNv
dXJjZXMgPSBtX2NvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgIFNoSGFzaEZ1bmN0aW9uNjQg
cHJldmlvdXNIYXNoRnVuY3Rpb24gPSBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb247CisgICAg
QU5HTEVSZXNvdXJjZXMuSGFzaEZ1bmN0aW9uID0gbmFtZUhhc2hGb3JTaGFkZXI7CisKKyAgICBp
ZiAoIW5hbWVIYXNoTWFwRm9yU2hhZGVycykKKyAgICAgICAgbmFtZUhhc2hNYXBGb3JTaGFkZXJz
ID0gbWFrZVVuaXF1ZTxTaGFkZXJOYW1lSGFzaD4oKTsKKyAgICBzZXRDdXJyZW50TmFtZUhhc2hN
YXBGb3JTaGFkZXIobmFtZUhhc2hNYXBGb3JTaGFkZXJzLmdldCgpKTsKKyAgICBtX2NvbXBpbGVy
LnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNo
YWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KHNoYWRlcik7CisKKyAgICBBTkdMRVJlc291cmNlcy5IYXNoRnVuY3Rpb24gPSBwcmV2aW91c0hh
c2hGdW5jdGlvbjsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7
CisgICAgc2V0Q3VycmVudE5hbWVIYXNoTWFwRm9yU2hhZGVyKG51bGxwdHIpOworCisgICAgaWYg
KCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJQdHIgPSB0
cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5kYXRhKCk7CisgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJM
ZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZy5sZW5ndGgoKTsKKworICAgIExPRyhXZWJH
TCwgIi0tLSBiZWdpbiBvcmlnaW5hbCBzaGFkZXIgc291cmNlIC0tLVxuJXNcbi0tLSBlbmQgb3Jp
Z2luYWwgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIGdldFNoYWRlclNvdXJjZShzaGFkZXIpLnV0Zjgo
KS5kYXRhKCkpOworICAgIExPRyhXZWJHTCwgIi0tLSBiZWdpbiB0cmFuc2xhdGVkIHNoYWRlciBz
b3VyY2UgLS0tXG4lc1xuLS0tIGVuZCB0cmFuc2xhdGVkIHNoYWRlciBzb3VyY2UgLS0tIiwgdHJh
bnNsYXRlZFNoYWRlclB0cik7CisKKyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRy
YW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKKyAgICAKKyAgICA6
OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIAorICAgIGludCBjb21waWxlU3RhdHVzOwor
ICAgIAorICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmY29tcGls
ZVN0YXR1cyk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkg
PSByZXN1bHQtPnZhbHVlOworCisgICAgLy8gUG9wdWxhdGUgdGhlIHNoYWRlciBsb2cKKyAgICBH
TGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxlbmd0aCk7CisKKyAgICBpZiAobGVuZ3RoKSB7CisgICAgICAgIEdMc2l6ZWkg
c2l6ZSA9IDA7CisgICAgICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsKKyAgICAgICAg
OjpnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7
CisKKyAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdID0geyBzaGFkZXIsIDAgfTsK
KyAgICAgICAgZW50cnkubG9nID0gZ2V0VW5tYW5nbGVkSW5mb0xvZyhzaGFkZXJzLCAxLCBTdHJp
bmcoaW5mby5kYXRhKCksIHNpemUpKTsKKyAgICB9CisKKyAgICBpZiAoY29tcGlsZVN0YXR1cyAh
PSBHTF9UUlVFKSB7CisgICAgICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgTE9H
KFdlYkdMLCAiRXJyb3I6IHNoYWRlciB0cmFuc2xhdG9yIHByb2R1Y2VkIGEgc2hhZGVyIHRoYXQg
T3BlbkdMIHdvdWxkIG5vdCBjb21waWxlLiIpOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBT
aGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnZhbHVlOworCisgICAgY29uc3QgQ1N0
cmluZyYgc2hhZGVyU291cmNlQ1N0cmluZyA9IGVudHJ5LnNvdXJjZS51dGY4KCk7CisgICAgY29u
c3QgY2hhciogc2hhZGVyU291cmNlUHRyID0gc2hhZGVyU291cmNlQ1N0cmluZy5kYXRhKCk7Cisg
ICAgaW50IHNoYWRlclNvdXJjZUxlbmd0aCA9IHNoYWRlclNvdXJjZUNTdHJpbmcubGVuZ3RoKCk7
CisKKyAgICBMT0coV2ViR0wsICItLS0gYmVnaW4gZGlyZWN0IHNoYWRlciBzb3VyY2UgLS0tXG4l
c1xuLS0tIGVuZCBkaXJlY3Qgc2hhZGVyIHNvdXJjZSAtLS1cbiIsIHNoYWRlclNvdXJjZVB0cik7
CisKKyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNvdXJjZVB0ciwgJnNo
YWRlclNvdXJjZUxlbmd0aCk7CisKKyAgICA6OmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisg
ICAgaW50IGNvbXBpbGVTdGF0dXM7CisKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBDT01Q
SUxFX1NUQVRVUywgJmNvbXBpbGVTdGF0dXMpOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgPT0g
R0xfVFJVRSkgeworICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgTE9HKFdl
YkdMLCAiRGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBzdWNjZWVkZWQuIik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICBMT0coV2ViR0ws
ICJFcnJvcjogZGlyZWN0IGNvbXBpbGF0aW9uIG9mIHNoYWRlciBmYWlsZWQuIik7CisgICAgfQor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBhdXRvIGF0dHJzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0
ZS5ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoSW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAoYXR0cnMu
YW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJzLmFu
dGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAg
ICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHRH
TDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEN1bGxGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7Cisg
ICAgQVNTRVJUKHNoYWRlcik7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOworICAgIDo6Z2xEZXRhY2hT
aGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIGNo
ZWNrR1BVU3RhdHVzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdF
bGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnRwdHIgb2Zmc2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xE
cmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKKyAgICBjaGVja0dQVVN0YXR1cygpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUoR0MzRGVudW0gY2FwKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xFbmFibGUoY2FwKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0Mz
RHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZmluaXNoKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmlu
aXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGlu
dCBsZXZlbCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRG
YWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2Vu
ZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFt
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50
IG1heEF0dHJpYnV0ZVNpemUgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7CisgICAgVmVj
dG9yPEdMY2hhcj4gbmFtZShtYXhBdHRyaWJ1dGVTaXplKTsgLy8gR0xfQUNUSVZFX0FUVFJJQlVU
RV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBuYW1l
TGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7Cisg
ICAgOjpnbEdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgbWF4QXR0cmlidXRlU2l6ZSwg
Jm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5kYXRhKCkpOworICAgIGlmICghbmFtZUxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFN0cmluZyBvcmlnaW5hbE5h
bWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJ
QlVURSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAgCisjaWZuZGVmIE5E
RUJVRworICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFtZUxlbmd0aCk7Cisg
ICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQg
ZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgpLmRh
dGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKKyAgICBpbmZvLm5h
bWUgPSBvcmlnaW5hbE5hbWU7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZvLnNpemUg
PSBzaXplOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBHQzNEaW50IHN5bWJvbENvdW50OworICAg
IGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFt
KTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgp
KSB7CisgICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChwcm9ncmFtLCBHcmFw
aGljc0NvbnRleHRHTDo6QUNUSVZFX0FUVFJJQlVURVMsICZzeW1ib2xDb3VudCk7CisgICAgICAg
IHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7Cisg
ICAgfQorICAgIAorICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRzID0g
cmVzdWx0LT52YWx1ZTsKKyAgICBHQzNEdWludCByYXdJbmRleCA9IChpbmRleCA8IHN5bWJvbENv
dW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAuc2l6ZSgpKSA/IHN5bWJvbENv
dW50cy5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXBbaW5kZXhdIDogLTE7CisKKyAg
ICByZXR1cm4gZ2V0QWN0aXZlQXR0cmliSW1wbChwcm9ncmFtLCByYXdJbmRleCwgaW5mbyk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8p
Cit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOworICAgIDo6Z2xHZXRQ
cm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZv
cm1TaXplKTsKKworICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4VW5pZm9ybVNpemUpOyAvLyBH
TF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisg
ICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVu
dW0gdHlwZSA9IDA7CisgICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1h
eFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmRhdGEoKSk7Cisg
ICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgU3Ry
aW5nIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lN
Qk9MX1RZUEVfVU5JRk9STSwgU3RyaW5nKG5hbWUuZGF0YSgpLCBuYW1lTGVuZ3RoKSk7CisgICAg
CisjaWZuZGVmIE5ERUJVRworICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmRhdGEoKSwgbmFt
ZUxlbmd0aCk7CisgICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSB1
bmlmb3JtICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5kZXgsIHVuaWZvcm1OYW1l
LnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAg
IAorICAgIGluZm8ubmFtZSA9IG9yaWdpbmFsTmFtZTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOwor
ICAgIGluZm8uc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBHQzNEaW50IHN5
bWJvbENvdW50OworICAgIGF1dG8gcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRN
YXAuZmluZChwcm9ncmFtKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLmVuZCgpKSB7CisgICAgICAgIGdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3Vu
dChwcm9ncmFtLCBHcmFwaGljc0NvbnRleHRHTDo6QUNUSVZFX1VOSUZPUk1TLCAmc3ltYm9sQ291
bnQpOworICAgICAgICByZXN1bHQgPSBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5maW5k
KHByb2dyYW0pOworICAgIH0KKyAgICAKKyAgICBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMmIHN5
bWJvbENvdW50cyA9IHJlc3VsdC0+dmFsdWU7CisgICAgR0MzRHVpbnQgcmF3SW5kZXggPSAoaW5k
ZXggPCBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5zaXplKCkp
ID8gc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlmb3JtSW5kZXhNYXBbaW5kZXhdIDog
LTE7CisgICAgCisgICAgcmV0dXJuIGdldEFjdGl2ZVVuaWZvcm1JbXBsKHByb2dyYW0sIHJhd0lu
ZGV4LCBpbmZvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBH
QzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQoreworICAgIGlmICgh
cHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7Cit9
CisKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVIYXNoZWROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuYW1lOworICAgIHVp
bnQ2NF90IG51bWJlciA9IG5hbWVIYXNoRm9yU2hhZGVyKG5hbWUudXRmOCgpLmRhdGEoKSwgbmFt
ZS5sZW5ndGgoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIndlYmdsXyIsIGhleChudW1iZXIs
IExvd2VyY2FzZSkpOworfQorCitPcHRpb25hbDxTdHJpbmc+IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptYXBwZWRTeW1ib2xJblNoYWRlclNvdXJjZU1hcChQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
ciwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBhdXRvIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgY29uc3QgYXV0byYgc3ltYm9sTWFwID0gcmVzdWx0LT52YWx1
ZS5zeW1ib2xNYXAoc3ltYm9sVHlwZSk7CisgICAgYXV0byBzeW1ib2xFbnRyeSA9IHN5bWJvbE1h
cC5maW5kKG5hbWUpOworICAgIGlmIChzeW1ib2xFbnRyeSA9PSBzeW1ib2xNYXAuZW5kKCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvJiBtYXBwZWROYW1lID0gc3lt
Ym9sRW50cnktPnZhbHVlLm1hcHBlZE5hbWU7CisgICAgcmV0dXJuIFN0cmluZyhtYXBwZWROYW1l
LmNfc3RyKCksIG1hcHBlZE5hbWUubGVuZ3RoKCkpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBB
TkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIEdDM0RzaXplaSBjb3VudCA9IDA7CisgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJd
ID0geyB9OworICAgIGdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRl
cnMpOworCisgICAgZm9yIChHQzNEc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgIGF1dG8gbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hhZGVyU291cmNlTWFwKHNoYWRl
cnNbaV0sIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBpZiAobWFwcGVkTmFtZSkKKyAgICAg
ICAgICAgIHJldHVybiBtYXBwZWROYW1lLnZhbHVlKCk7CisgICAgfQorCisgICAgLy8gV2UgbWln
aHQgaGF2ZSBkZXRhY2hlZCBvciBkZWxldGVkIHRoZSBzaGFkZXJzIGFmdGVyIGxpbmtpbmcuCisg
ICAgYXV0byByZXN1bHQgPSBtX2xpbmtlZFNoYWRlck1hcC5maW5kKHByb2dyYW0pOworICAgIGlm
IChyZXN1bHQgIT0gbV9saW5rZWRTaGFkZXJNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBsaW5r
ZWRTaGFkZXJzID0gcmVzdWx0LT52YWx1ZTsKKyAgICAgICAgYXV0byBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sSW5TaGFkZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlw
ZSwgbmFtZSk7CisgICAgICAgIGlmIChtYXBwZWROYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1h
cHBlZE5hbWUudmFsdWUoKTsKKyAgICAgICAgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbEluU2hh
ZGVyU291cmNlTWFwKGxpbmtlZFNoYWRlcnMuc2Vjb25kLCBzeW1ib2xUeXBlLCBuYW1lKTsKKyAg
ICAgICAgaWYgKG1hcHBlZE5hbWUpCisgICAgICAgICAgICByZXR1cm4gbWFwcGVkTmFtZS52YWx1
ZSgpOworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9B
VFRSSUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJl
IGEgc3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJz
IGhhdmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVk
IHRvIGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorICAgICAgICBpZiAoIW5hbWVIYXNo
TWFwRm9yU2hhZGVycykKKyAgICAgICAgICAgIG5hbWVIYXNoTWFwRm9yU2hhZGVycyA9IG1ha2VV
bmlxdWU8U2hhZGVyTmFtZUhhc2g+KCk7CisgICAgICAgIHNldEN1cnJlbnROYW1lSGFzaE1hcEZv
clNoYWRlcihuYW1lSGFzaE1hcEZvclNoYWRlcnMuZ2V0KCkpOworCisgICAgICAgIGF1dG8gZ2Vu
ZXJhdGVkTmFtZSA9IGdlbmVyYXRlSGFzaGVkTmFtZShuYW1lKTsKKworICAgICAgICBzZXRDdXJy
ZW50TmFtZUhhc2hNYXBGb3JTaGFkZXIobnVsbHB0cik7CisKKyAgICAgICAgbV9wb3NzaWJseVVu
dXNlZEF0dHJpYnV0ZU1hcC5zZXQoZ2VuZXJhdGVkTmFtZSwgbmFtZSk7CisKKyAgICAgICAgcmV0
dXJuIGdlbmVyYXRlZE5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK09wdGlv
bmFsPFN0cmluZz4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om9yaWdpbmFsU3ltYm9sSW5TaGFk
ZXJTb3VyY2VNYXAoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEFOR0xFU2hhZGVyU3ltYm9sVHlw
ZSBzeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byByZXN1bHQgPSBt
X3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGNv
bnN0IGF1dG8mIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3ltYm9sTWFwKHN5bWJvbFR5cGUp
OworICAgIGZvciAoY29uc3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAg
ICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUubWFwcGVkTmFtZS5jX3N0cigpKQorICAg
ICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LmtleTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpvcmlnaW5hbFN5
bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUg
c3ltYm9sVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDM0RzaXplaSBjb3VudDsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJz
KHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisgICAgCisgICAgZm9yIChHQzNEc2l6ZWkg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gb3JpZ2luYWxOYW1lID0gb3Jp
Z2luYWxTeW1ib2xJblNoYWRlclNvdXJjZU1hcChzaGFkZXJzW2ldLCBzeW1ib2xUeXBlLCBuYW1l
KTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkKKyAgICAgICAgICAgIHJldHVybiBvcmlnaW5h
bE5hbWUudmFsdWUoKTsKKyAgICB9CisKKyAgICAvLyBXZSBtaWdodCBoYXZlIGRldGFjaGVkIG9y
IGRlbGV0ZWQgdGhlIHNoYWRlcnMgYWZ0ZXIgbGlua2luZy4KKyAgICBhdXRvIHJlc3VsdCA9IG1f
bGlua2VkU2hhZGVyTWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX2xpbmtl
ZFNoYWRlck1hcC5lbmQoKSkgeworICAgICAgICBhdXRvIGxpbmtlZFNoYWRlcnMgPSByZXN1bHQt
PnZhbHVlOworICAgICAgICBhdXRvIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFk
ZXJTb3VyY2VNYXAobGlua2VkU2hhZGVycy5maXJzdCwgc3ltYm9sVHlwZSwgbmFtZSk7CisgICAg
ICAgIGlmIChvcmlnaW5hbE5hbWUpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxOYW1lLnZh
bHVlKCk7CisgICAgICAgIG9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sSW5TaGFkZXJTb3Vy
Y2VNYXAobGlua2VkU2hhZGVycy5zZWNvbmQsIHN5bWJvbFR5cGUsIG5hbWUpOworICAgICAgICBp
ZiAob3JpZ2luYWxOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTmFtZS52YWx1ZSgp
OworICAgIH0KKworICAgIGlmIChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRS
SUJVVEUgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMgYXJlIGEg
c3BlY2lhbCBjYXNlOiB0aGV5IG1heSBiZSByZXF1ZXN0ZWQgYmVmb3JlIGFueSBzaGFkZXJzIGhh
dmUgYmVlbiBjb21waWxlZCwKKyAgICAgICAgLy8gYW5kIGFyZW4ndCBldmVuIHJlcXVpcmVkIHRv
IGJlIHVzZWQgaW4gYW55IHNoYWRlciBwcm9ncmFtLgorCisgICAgICAgIGNvbnN0IGF1dG8mIGNh
Y2hlZCA9IG1fcG9zc2libHlVbnVzZWRBdHRyaWJ1dGVNYXAuZmluZChuYW1lKTsKKyAgICAgICAg
aWYgKGNhY2hlZCAhPSBtX3Bvc3NpYmx5VW51c2VkQXR0cmlidXRlTWFwLmVuZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGNhY2hlZC0+dmFsdWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9
CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwcGVkU3ltYm9sTmFtZShQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl0sIHNpemVfdCBjb3VudCwgY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGZvciAoc2l6ZV90IHN5bWJvbFR5cGUgPSAwOyBzeW1ib2xUeXBlIDw9IHN0YXRp
Y19jYXN0PHNpemVfdD4oU0hBREVSX1NZTUJPTF9UWVBFX1ZBUllJTkcpOyArK3N5bWJvbFR5cGUp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAg
ICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyc1tpXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBjb25zdCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFs
dWUuc3ltYm9sTWFwKHN0YXRpY19jYXN0PGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlPihzeW1i
b2xUeXBlKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3lt
Ym9sTWFwKSB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gc3ltYm9sRW50cnkudmFsdWUu
bWFwcGVkTmFtZS5jX3N0cigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sRW50
cnkua2V5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1l
OworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICgh
cHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisgICAgTE9HKFdlYkdMLCAiOjpnbEdl
dEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitpbnQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgcmV0dXJuIC0xOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICByZXR1
cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBtb3ZlZEFu
RXJyb3IgPSBmYWxzZTsKKworICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhl
cmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCisgICAgLy8gYSBwcm9ibGVtIGRyaXZlciBo
YXMgYSBidWcgdGhhdCBjYXVzZXMgaXQgdG8gbmV2ZXIgY2xlYXIgdGhlIGVycm9yLgorICAgIC8v
IE90aGVyd2lzZSwgd2Ugd291bGQganVzdCBsb29wIHVudGlsIHdlIGdvdCBOT19FUlJPUi4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgR0MzRGVudW0g
ZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBOT19FUlJPUikKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOwor
ICAgICAgICBtb3ZlZEFuRXJyb3IgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBtb3ZlZEFu
RXJyb3I7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigp
Cit7CisgICAgaWYgKCFtX3N5bnRoZXRpY0Vycm9ycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
TmVlZCB0byBtb3ZlIHRoZSBjdXJyZW50IGVycm9ycyB0byB0aGUgc3ludGhldGljIGVycm9yIGxp
c3QgaW4gY2FzZQorICAgICAgICAvLyB0aGF0IGVycm9yIGlzIGFscmVhZHkgdGhlcmUsIHNpbmNl
IHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBib3RoCisgICAgICAgIC8vIGdsR2V0RXJyb3IgYW5k
IGdldEVycm9yIGlzIHRvIG9ubHkgcmVwb3J0IGVhY2ggZXJyb3IgY29kZSBvbmNlLgorICAgICAg
ICBtb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAgcmV0dXJuIG1fc3lu
dGhldGljRXJyb3JzLnRha2VGaXJzdCgpOworICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qg
YnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZl
cik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQo
R0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6
OmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAg
aWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVm
ZmVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUHJvZ3Jh
bShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1
cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVy
KQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRl
cikKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkK
K3sKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKHRleHR1cmUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdp
ZHRoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xMaW5lV2lkdGgod2lk
dGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbShQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworCisgICAgR0MzRHNpemVpIGNvdW50ID0gMDsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBpZiAoY291bnQgPT0gMikKKyAgICAgICAg
bV9saW5rZWRTaGFkZXJNYXAuc2V0KHByb2dyYW0sIHN0ZDo6bWFrZV9wYWlyKHNoYWRlcnNbMF0s
IHNoYWRlcnNbMV0pKTsKKworICAgIDo6Z2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQgcGFyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFBpeGVs
U3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5p
dHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFnZShH
QzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5
OworCisgICAgZW50cnkuc291cmNlID0gc3RyaW5nOworCisgICAgbV9zaGFkZXJTb3VyY2VNYXAu
c2V0KHNoYWRlciwgZW50cnkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVm
LCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsU3RlbmNpbEZ1
bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEdWludCBtYXNrKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVu
Y2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVt
IHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xTdGVuY2lsT3Ao
ZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0g
emZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQgdjApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25z
dCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5p
Zm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBH
QzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAyLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3Jt
MmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9h
dCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAs
IEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2Miwg
djMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQorewor
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHYwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwg
Y29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAs
IEdDM0RpbnQgdjEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZv
cm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgY29uc3QgR0Mz
RGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0yaXYo
bG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEsIEdD
M0RpbnQgdjIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFVuaWZvcm0z
aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIGNvbnN0IEdD
M0RpbnQqIGFycmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtM2l2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHYwLCBHQzNEaW50IHYxLCBH
QzNEaW50IHYyLCBHQzNEaW50IHYzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgY29uc3QgR0MzRGludCogYXJyYXkpCit7CisgICAgLy8gRklYTUU6IGxlbmd0aCBu
ZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFy
cmF5KQoreworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0
LgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQorewor
ICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5LgorICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBz
aXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQzNEZmxvYXQqIGFycmF5KQoreworICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJh
bnNwb3NlLCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVBy
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQor
eworICAgIEFTU0VSVChwcm9ncmFtKTsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4
LCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFm
dihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRl
eCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICA6OmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBp
bmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYjRmKGluZGV4LCB2
MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgY29uc3QgR0MzRGZsb2F0KiBhcnJheSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVmVydGV4QXR0cmliNGZ2KGluZGV4LCBh
cnJheSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBv
aW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJv
b2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIo
aW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxH
THZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKworUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBhcnJheSA9IDA7CisjaWYgKCFV
U0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExB
VEZPUk0oQ09DT0EpCisgICAgOjpnbEdlblZlcnRleEFycmF5cygxLCAmYXJyYXkpOworI2VuZGlm
CisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJy
YXkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNp
ZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8
fCBQTEFURk9STShDT0NPQSkKKyAgICA6OmdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7
CisjZW5kaWYKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVy
dGV4QXJyYXkoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAg
ICAgICByZXR1cm4gR0xfRkFMU0U7CisgICAgCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisj
aWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkg
fHwgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFycmF5KGFycmF5KTsK
KyNlbmRpZgorICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCisgICAgOjpnbEJpbmRW
ZXJ0ZXhBcnJheShhcnJheSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhcnJheSk7CisjZW5k
aWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0MzRGVu
dW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKK30KKyAgICAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQ2NCogdmFs
dWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICAqdmFsdWUgPSAwOworICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5n
IHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRp
bmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAu
CisgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGF0dGFj
aG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQorICAgICAgICBhdHRhY2htZW50ID0g
REVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3Mu
CisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwg
YXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5h
bWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAg
IEFTU0VSVChBQ1RJVkVfQVRUUklCVVRFUyA9PSBwbmFtZSB8fCBBQ1RJVkVfVU5JRk9STVMgPT0g
cG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5
bWJvbENvdW50TWFwLmZpbmQocHJvZ3JhbSk7CisgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5lbmQoKSkgeworICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZh
bHVlLmNvdW50Rm9yVHlwZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5zZXQocHJvZ3JhbSwgQWN0aXZlU2hhZGVyU3lt
Ym9sQ291bnRzKCkpOworICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyYgc3ltYm9sQ291bnRz
ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKS0+dmFsdWU7CisK
KyAgICAvLyBSZXRyaWV2ZSB0aGUgYWN0aXZlIGF0dHJpYnV0ZXMsIGJ1aWxkIGEgZmlsdGVyZWQg
Y291bnQsIGFuZCBhIG1hcHBpbmcgb2YKKyAgICAvLyBvdXIgaW50ZXJuYWwgYXR0cmlidXRlcyBp
bmRleGVzIHRvIHRoZSByZWFsIHVuZmlsdGVyZWQgaW5kZXhlcyBpbnNpZGUgT3BlbkdMLgorICAg
IEdDM0RpbnQgYXR0cmlidXRlQ291bnQgPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgQUNUSVZFX0FUVFJJQlVURVMsICZhdHRyaWJ1dGVDb3VudCk7CisgICAgZm9yIChHQzNEaW50
IGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQ7ICsraSkgeworICAgICAgICBBY3RpdmVJbmZvIGlu
Zm87CisgICAgICAgIGdldEFjdGl2ZUF0dHJpYkltcGwocHJvZ3JhbSwgaSwgaW5mbyk7CisgICAg
ICAgIGlmIChpbmZvLm5hbWUuc3RhcnRzV2l0aCgiZ2xfIikpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBzeW1ib2xDb3VudHMuZmlsdGVyZWRUb0FjdHVhbEF0dHJpYnV0ZUluZGV4
TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNhbWUgZm9yIHVuaWZv
cm1zLgorICAgIEdDM0RpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7CisgICAgZm9yIChHQzNE
aW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZlSW5mbyBp
bmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBpbmZvKTsKKyAg
ICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAKKyAgICAgICAgc3ltYm9sQ291bnRzLmZpbHRlcmVkVG9BY3R1YWxVbmlm
b3JtSW5kZXhNYXAuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAqdmFsdWUgPSBzeW1ib2xD
b3VudHMuY291bnRGb3JUeXBlKHBuYW1lKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRVbm1hbmdsZWRJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSwg
R0MzRHNpemVpIGNvdW50LCBjb25zdCBTdHJpbmcmIGxvZykKK3sKKyAgICBMT0coV2ViR0wsICJP
cmlnaW5hbCBTaGFkZXJJbmZvTG9nOlxuJXMiLCBsb2cudXRmOCgpLmRhdGEoKSk7CisKKyAgICBK
U0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uIHJlZ0V4cCgid2ViZ2xfWzAxMjM0NTY3ODlhYmNk
ZWZBQkNERUZdKyIpOworCisgICAgU3RyaW5nQnVpbGRlciBwcm9jZXNzZWRMb2c7CisgICAgCisg
ICAgLy8gQU5HTEUgaW5zZXJ0cyBhICIjZXh0ZW5zaW9uIiBsaW5lIGludG8gdGhlIHNoYWRlciBz
b3VyY2UgdGhhdAorICAgIC8vIGNhdXNlcyBhIHdhcm5pbmcgaW4gc29tZSBjb21waWxlcnMuIFRo
ZXJlIGlzIG5vIHBvaW50IHNob3dpbmcKKyAgICAvLyB0aGlzIHdhcm5pbmcgdG8gdGhlIHVzZXIg
c2luY2UgdGhleSBkaWRuJ3Qgd3JpdGUgdGhlIGNvZGUgdGhhdAorICAgIC8vIGlzIGNhdXNpbmcg
aXQuCisgICAgc3RhdGljIGNvbnN0IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYW5nbGVXYXJuaW5n
IHsgIldBUk5JTkc6IDA6MTogZXh0ZW5zaW9uICdHTF9BUkJfZ3B1X3NoYWRlcjUnIGlzIG5vdCBz
dXBwb3J0ZWRcbiJfcyB9OworICAgIGludCBzdGFydEZyb20gPSBsb2cuc3RhcnRzV2l0aChhbmds
ZVdhcm5pbmcpID8gYW5nbGVXYXJuaW5nLmdldCgpLmxlbmd0aCgpIDogMDsKKyAgICBpbnQgbWF0
Y2hlZExlbmd0aCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGludCBzdGFydCA9IHJlZ0V4cC5t
YXRjaChsb2csIHN0YXJ0RnJvbSwgJm1hdGNoZWRMZW5ndGgpOworICAgICAgICBpZiAoc3RhcnQg
PT0gLTEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwcm9jZXNzZWRMb2cuYXBwZW5k
KGxvZy5zdWJzdHJpbmcoc3RhcnRGcm9tLCBzdGFydCAtIHN0YXJ0RnJvbSkpOworICAgICAgICBz
dGFydEZyb20gPSBzdGFydCArIG1hdGNoZWRMZW5ndGg7CisKKyAgICAgICAgY29uc3QgU3RyaW5n
JiBtYW5nbGVkU3ltYm9sID0gbG9nLnN1YnN0cmluZyhzdGFydCwgbWF0Y2hlZExlbmd0aCk7Cisg
ICAgICAgIGNvbnN0IFN0cmluZyYgbWFwcGVkU3ltYm9sID0gbWFwcGVkU3ltYm9sTmFtZShzaGFk
ZXJzLCBjb3VudCwgbWFuZ2xlZFN5bWJvbCk7CisgICAgICAgIExPRyhXZWJHTCwgIkRlbWFuZ2xp
bmc6ICVzIHRvICVzIiwgbWFuZ2xlZFN5bWJvbC51dGY4KCkuZGF0YSgpLCBtYXBwZWRTeW1ib2wu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHByb2Nlc3NlZExvZy5hcHBlbmQobWFwcGVkU3ltYm9s
KTsKKyAgICB9IHdoaWxlIChzdGFydEZyb20gPCBzdGF0aWNfY2FzdDxpbnQ+KGxvZy5sZW5ndGgo
KSkpOworCisgICAgcHJvY2Vzc2VkTG9nLmFwcGVuZChsb2cuc3Vic3RyaW5nKHN0YXJ0RnJvbSwg
bG9nLmxlbmd0aCgpIC0gc3RhcnRGcm9tKSk7CisKKyAgICBMT0coV2ViR0wsICJVbm1hbmdsZWQg
U2hhZGVySW5mb0xvZzpcbiVzIiwgcHJvY2Vzc2VkTG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIHByb2Nlc3NlZExvZy50b1N0cmluZygpOworfQorCitTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSkKK3sKKyAgICBBU1NFUlQocHJvZ3JhbSk7CisKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBHTGludCBsZW5ndGggPSAwOworICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOyAKKworICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CisgICAgVmVjdG9y
PEdMY2hhcj4gaW5mbyhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFt
LCBsZW5ndGgsICZzaXplLCBpbmZvLmRhdGEoKSk7CisKKyAgICBHQzNEc2l6ZWkgY291bnQ7Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFjaGVkU2hhZGVycyhw
cm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgcmV0dXJuIGdldFVubWFuZ2xlZElu
Zm9Mb2coc2hhZGVycywgY291bnQsIFN0cmluZyhpbmZvLmRhdGEoKSwgc2l6ZSkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZF
WFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKQoreworICAgIEFTU0VSVChzaGFkZXIpOworCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgREVM
RVRFX1NUQVRVUzoKKyAgICBjYXNlIFNIQURFUl9UWVBFOgorICAgICAgICA6OmdsR2V0U2hhZGVy
aXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPTVBJ
TEVfU1RBVFVTOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgp
KSB7CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxp
bnQ+KHJlc3VsdC0+dmFsdWUuaXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5G
T19MT0dfTEVOR1RIOgorICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVu
ZCgpKSB7CisgICAgICAgICAgICAqdmFsdWUgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgICp2YWx1ZSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAg
ICAgKnZhbHVlID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfRU5V
TSk7CisgICAgfQorfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRl
ckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7
CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAorCisgICAgY29u
c3QgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKKyAgICBpZiAoIWVu
dHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRyeS5sb2c7CisKKyAgICBHTGludCBsZW5n
dGggPSAwOworICAgIDo6Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwg
Jmxlbmd0aCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCisK
KyAgICBHTHNpemVpIHNpemUgPSAwOworICAgIFZlY3RvcjxHTGNoYXI+IGluZm8obGVuZ3RoKTsK
KyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8uZGF0
YSgpKTsKKworICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXSA9IHsgc2hhZGVyLCAwIH07
CisgICAgcmV0dXJuIGdldFVubWFuZ2xlZEluZm9Mb2coc2hhZGVycywgMSwgU3RyaW5nKGluZm8u
ZGF0YSgpLCBzaXplKSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBjb25zdCBhdXRvJiByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKKworICAg
IHJldHVybiByZXN1bHQtPnZhbHVlLnNvdXJjZTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6
OmdsR2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRVbmlmb3JtZnYocHJvZ3JhbSwg
bG9jYXRpb24sIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdldFVu
aWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCitHQzNEaW50IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKHByb2dyYW0pOworCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOworICAg
IExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBu
YW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJu
IDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwg
cG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVy
dGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0VmVydGV4QXR0cmli
aXYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK0dDM0RzaXplaXB0ciBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIEdMdm9pZCogcG9p
bnRlciA9IDA7CisgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwg
JnBvaW50ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZiwgR0MzRGludCB5b2ZmLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisjaWYgIVVTRShPUEVOR0xfRVMpCisgICAg
aWYgKHR5cGUgPT0gSEFMRl9GTE9BVF9PRVMpCisgICAgICAgIHR5cGUgPSBHTF9IQUxGX0ZMT0FU
X0FSQjsKKyNlbmRpZgorCisgICAgaWYgKG1fdXNpbmdDb3JlUHJvZmlsZSkgIHsKKyAgICAgICAg
Ly8gVGhlcmUgYXJlIHNvbWUgZm9ybWF0IHZhbHVlcyB1c2VkIGluIFdlYkdMIHRoYXQgYXJlIGRl
cHJlY2F0ZWQgd2hlbiB1c2luZyBhIGNvcmUgcHJvZmlsZSwgc28gd2UgbmVlZAorICAgICAgICAv
LyB0byBhZGFwdCB0aGVtLCBhcyB3ZSBkbyBpbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
SW1hZ2UyRCgpLgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEFMUEhB
OgorICAgICAgICAgICAgLy8gV2UgYXJlIHVzaW5nIEdMX1JFRCB0byBiYWNrIEdMX0FMUEhBLCBz
byBkbyBpdCBoZXJlIGFzIHdlbGwuCisgICAgICAgICAgICBmb3JtYXQgPSBSRUQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAv
LyBXZSBhcmUgdXNpbmcgR0xfUkcgdG8gYmFjayBHTF9MVU1JTkFOQ0VfQUxQSEEsIHNvIGRvIGl0
IGhlcmUgYXMgd2VsbC4KKyAgICAgICAgICAgIGZvcm1hdCA9IFJHOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUg
cGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0
aGUgc3ViaW1hZ2Ugc2l6ZS4KKyAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgbV9z
dGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0Rz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAg
bV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUo
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGlt
YWdlU2l6ZSwgZGF0YSk7CisgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRl
LmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0
dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNy
ZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTHVp
bnQgbyA9IDA7CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOworICAgIHJldHVybiBv
OworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQ
cm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gZ2xDcmVh
dGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgR0x1aW50IG8gPSAwOworICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbyk7CisgICAg
cmV0dXJuIG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8g
R0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7Cit9CisKK1BsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBvID0gMDsKKyAgICBnbEdlblRleHR1cmVz
KDEsICZvKTsKKyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOworICAgIHJldHVy
biBvOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
Z2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0
YXRlLmJvdW5kRkJPKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMg
bm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKKyAgICAgICAgLy8gb3BlcmF0aW9ucyBh
ZnRlciBpdCBnZXRzIGRlbGV0ZWQuCisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihGUkFNRUJVRkZF
UiwgMCk7CisgICAgfQorICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZl
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKKyAgICBnbERl
bGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwg
JnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5y
ZW1vdmVJZihbdGV4dHVyZV0gKGF1dG8mIGtleVZhbHVlKSB7CisgICAgICAgIHJldHVybiBrZXlW
YWx1ZS52YWx1ZS5maXJzdCA9PSB0ZXh0dXJlOworICAgIH0pOworICAgIGdsRGVsZXRlVGV4dHVy
ZXMoMSwgJnRleHR1cmUpOworICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5yZW1vdmVBbGwo
dGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN5bnRoZXNpemVH
TEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIC8vIE5lZWQgdG8gbW92ZSB0aGUgY3VycmVu
dCBlcnJvcnMgdG8gdGhlIHN5bnRoZXRpYyBlcnJvciBsaXN0IHRvCisgICAgLy8gcHJlc2VydmUg
dGhlIG9yZGVyIG9mIGVycm9ycywgc28gYSBjYWxsZXIgdG8gZ2V0RXJyb3Igd2lsbCBnZXQKKyAg
ICAvLyBhbnkgZXJyb3JzIGZyb20gZ2xFcnJvciBiZWZvcmUgdGhlIGVycm9yIHdlIGFyZSBzeW50
aGVzaXppbmcuCisgICAgbW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9z
eW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZh
bHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXJrTGF5ZXJDb21wb3Np
dGVkKCkKK3sKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CisKKyAgICBmb3IgKGF1dG8q
IGNsaWVudCA6IGNvcHlUb1ZlY3RvcihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPmRpZENv
bXBvc2l0ZSgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpsYXllckNvbXBv
c2l0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zm9yY2VDb250ZXh0TG9zdCgpCit7CisgICAgZm9y
IChhdXRvKiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKKyAgICAgICAgY2xpZW50
LT5mb3JjZUNvbnRleHRMb3N0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlY3ljbGVDb250ZXh0KCkKK3sKKyAgICBmb3IgKGF1dG8qIGNsaWVudCA6IGNvcHlUb1ZlY3Rv
cihtX2NsaWVudHMpKQorICAgICAgICBjbGllbnQtPnJlY3ljbGVDb250ZXh0KCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmlj
YXRpb24oKQoreworICAgIGZvciAoYXV0byogY2xpZW50IDogY29weVRvVmVjdG9yKG1fY2xpZW50
cykpCisgICAgICAgIGNsaWVudC0+ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
KyAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4
dHVyZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RzaXplaSBwcmltY291bnQpCit7CisgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0
YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAgIGNoZWNrR1BVU3RhdHVz
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rp
bnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGdldEV4dGVuc2lvbnMo
KS5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNv
dW50KTsKKyAgICBjaGVja0dQVVN0YXR1cygpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZp
c29yKQoreworICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBk
aXZpc29yKTsKK30KKworI2lmIFVTRShPUEVOR0wpICYmIEVOQUJMRShXRUJHTDIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0MzRHVpbnQgaW5k
ZXgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFByaW1pdGl2ZVJlc3Rh
cnRJbmRleChpbmRleCk7Cit9CisjZW5kaWYKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGRiNjc4ZGFi
NjU2YjE1ZWJkYThkOTkzM2MxMTVlNmQzMThkNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
RVMuY3BwCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2Vv
ayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKSAmJiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5j
bHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIg
YnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMg
c2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgorICAgIDo6Z2xGbHVzaCgpOwor
ICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX3N0YXRlLmJvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJ
bnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
cihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOworICAgICAgICA6OmdsRmx1c2goKTsKKyAgICB9CisK
KyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRh
dGEpOworCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fc3RhdGUuYm91bmRGQk8g
PT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3sKKyAgICA6
OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpOworICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0Owor
ICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBw
aXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBCR1JBLgorICAgIH0KK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgY29uc3QgaW50IGhlaWdo
dCA9IHNpemUuaGVpZ2h0KCk7CisgICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMDsKKyAgICBhdXRv
IGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0dHJpYnV0ZXMu
YWxwaGEpIHsKKyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICAg
ICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faW50ZXJu
YWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7Cisg
ICAgfQorCisgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMg
cmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcy4KKyAgICBib29sIHN1cHBvcnRQYWNrZWREZXB0aFN0
ZW5jaWxCdWZmZXIgPSAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpICYm
IGdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7
CisKKyAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IGZhbHNlOworICAgIGlmIChtX3N0YXRlLmJvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgIG11
c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgbV9mYm8pOworICAgIH0KKworICAgIEFTU0VSVChtX3RleHR1cmUpOworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgICAgICA6OmdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIH0KKworICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyNlbmRpZgorCisgICAgRXh0ZW5zaW9uc0dMT3BlbkdM
RVMmIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zR0xPcGVuR0xFUyY+KGdldEV4
dGVuc2lvbnMoKSk7CisgICAgaWYgKGV4dGVuc2lvbnMuaXNJbWFnaW5hdGlvbigpICYmIGF0dHJp
YnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAg
ICA6OmdsR2V0SW50ZWdlcnYoRXh0ZW5zaW9uc0dMOjpNQVhfU0FNUExFU19JTUcsICZtYXhTYW1w
bGVDb3VudCk7IAorICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNh
bXBsZUNvdW50KTsKKworICAgICAgICBleHRlbnNpb25zLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUcoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhU
VVJFXzJELCBtX3RleHR1cmUsIDAsIHNhbXBsZUNvdW50KTsKKworICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIC8vIFVzZSBh
IDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgorICAgICAgICAg
ICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgICAgICAg
ICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRo
KQorICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVy
YnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgZXh0ZW5zaW9ucy5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVS
QlVGRkVSLCBzYW1wbGVDb3VudCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxC
dWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cy5kZXB0aCkgeworICAgICAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlcihHTF9S
RU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICBleHRlbnNp
b25zLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIsIHNhbXBs
ZUNvdW50LCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAg
ICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xf
REVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlcihHTF9SRU5ERVJCVUZGRVIsIDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAg
ICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBp
dC4KKyAgICAgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0xfUkVOREVSQlVGRkVSLCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAg
ICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAg
ICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRI
X0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2ls
KSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJV
RkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgsIGhl
aWdodCk7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG1f
c3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChh
dHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAg
IDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9O
RU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JF
TkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCAw
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdM
X0ZSQU1FQlVGRkVSKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAvLyBG
SVhNRTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIHJl
dHVybiBtdXN0UmVzdG9yZUZCTzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JikKK3sKKyAgICAv
LyBGSVhNRTogV2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0LgorICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRl
Z2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51
bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0Mz
RGludCogcHJlY2lzaW9uKQoreworICAgIEFTU0VSVChyYW5nZSk7CisgICAgQVNTRVJUKHByZWNp
c2lvbik7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCBwcmVjaXNpb24p
OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIGlmICh3aWR0aCAm
JiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRleEltYWdlMkRE
aXJlY3QodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIHZhbGlk
YXRlRGVwdGhTdGVuY2lsKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKworICAgIGF1
dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRl
cy5hbnRpYWxpYXMgJiYgIWdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfSU1HX211bHRpc2Ft
cGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpKSB7CisgICAgICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFz
ID0gZmFsc2U7CisgICAgICAgIHNldENvbnRleHRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAg
IH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQzNEY2xh
bXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7Cit9CisKKyNpZiAh
UExBVEZPUk0oR1RLKQorRXh0ZW5zaW9uc0dMJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5z
aW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMsIGlzR0xFUzJDb21w
bGlhbnQoKSk7CisgICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKFdJTikgJiYgVVNFKENBKQorUmVmUHRyPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMPiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRl
cyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24pCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRh
dGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUg
SG9zdFdpbmRvdy4KKyAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5
VG9Ib3N0V2luZG93KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVl
OworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICAgICAg
c3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOworI2VuZGlmCisgICAgICAgIGluaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlclN0eWxlKSk7Cit9CisKK0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
IHNoYXJlZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1dGVzLCBkZXN0
aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKKyAgICAsIG1fY29tcGlsZXIoaXNHTEVTMkNvbXBsaWFu
dCgpID8gU0hfRVNTTF9PVVRQVVQgOiBTSF9HTFNMX0NPTVBBVElCSUxJVFlfT1VUUFVUKQorICAg
ICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlPih0
aGlzLCBkZXN0aW5hdGlvbikpCit7CisgICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAh
c2hhcmVkQ29udGV4dCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgCisgICAgdmFs
aWRhdGVBdHRyaWJ1dGVzKCk7CisgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7
IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KKworICAgIGlmIChk
ZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKSB7CisgICAgICAgIC8vIENyZWF0
ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgICAgIDo6Z2xHZW5UZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4
dHVyZSk7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgICAgICA6
OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgICAgICAKKyAgICAgICAgLy8gQ3JlYXRlIGFuIEZC
Ty4KKyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIAorICAgICAg
ICBtX3N0YXRlLmJvdW5kRkJPID0gbV9mYm87CisgICAgICAgIGlmICghYXR0cmlidXRlcy5hbnRp
YWxpYXMgJiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkKKyAgICAg
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCisgICAgICAgIGlm
IChhdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIG1fc3RhdGUu
Ym91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1
ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAg
IFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVz
b3VyY2VzKCZBTkdMRVJlc291cmNlcyk7CisgICAgCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZl
cnRleEF0dHJpYnMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpN
QVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZv
cm1WZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFY
X1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMp
OworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfQ09NQklORURf
VEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRz
KTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZSQUdNRU5U
X1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3Rv
cnMpOworICAgIAorICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFO
R0xFUmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICAKKyAgICBHQzNEaW50IHJhbmdl
WzJdLCBwcmVjaXNpb247CisgICAgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpGUkFHTUVOVF9TSEFERVIsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpI
SUdIX0ZMT0FULCByYW5nZSwgJnByZWNpc2lvbik7CisgICAgQU5HTEVSZXNvdXJjZXMuRnJhZ21l
bnRQcmVjaXNpb25IaWdoID0gKHJhbmdlWzBdIHx8IHJhbmdlWzFdIHx8IHByZWNpc2lvbik7Cisg
ICAgCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIAor
I2lmICFVU0UoT1BFTkdMX0VTKQorICAgIDo6Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9J
TlRfU0laRSk7CisgICAgOjpnbEVuYWJsZShHTF9QT0lOVF9TUFJJVEUpOworI2VuZGlmCisgICAg
CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworICAgIGF1
dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAoYXR0cmlidXRl
cy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwg
YXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAg
OjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9
CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6dW5pcXVlX3B0
cjxDb250ZXh0TG9zdENhbGxiYWNrPikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPEVycm9yTWVzc2Fn
ZUNhbGxiYWNrPikKK3sKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFrZUNv
bnRleHRDdXJyZW50KCkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0dQVVN0YXR1cygpCit7Cit9CisKK1Bs
YXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0R0woKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRmb3JtQ29u
dGV4dCgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpw
bGF0Zm9ybVRleHR1cmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHR1cmU7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAorewor
I2lmIFVTRShPUEVOR0xfRVMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorfQorCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViR0xMYXllci0+cGxh
dGZvcm1MYXllcigpOworfQorI2VuZGlmCisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElD
U19DT05URVhUX0dMKSAmJiBVU0UoT1BFTkdMX0VTKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWIwMjdjYTc0OGRiNWM4MjA0MzFiN2Y5NDgxODFiOTk5ZDBiMzlhMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2lm
IEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShPUEVOR0wpIHx8IFVTRShBTkdMRSkp
CisjaW5jbHVkZSAiU3dpdGNoaW5nR1BVQ2xpZW50LmgiCisjaW5jbHVkZSA8T3BlbkdML09wZW5H
TC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEhBVkUoQVBQTEVfR1JB
UEhJQ1NfQ09OVFJPTCkKKworZW51bSB7CisgICAga0FHQ09wZW4sCisgICAga0FHQ0Nsb3NlCit9
OworCitzdGF0aWMgaW9fY29ubmVjdF90IGF0dGFjaFRvQXBwbGVHcmFwaGljc0NvbnRyb2woKQor
eworICAgIG1hY2hfcG9ydF90IG1hc3RlclBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAKKyAg
ICBpZiAoSU9NYXN0ZXJQb3J0KE1BQ0hfUE9SVF9OVUxMLCAmbWFzdGVyUG9ydCkgIT0gS0VSTl9T
VUNDRVNTKQorICAgICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGNsYXNzVG9NYXRjaCA9IElPU2VydmljZU1hdGNoaW5nKCJBcHBsZUdyYXBoaWNz
Q29udHJvbCIpOworICAgIGlmICghY2xhc3NUb01hdGNoKQorICAgICAgICByZXR1cm4gTUFDSF9Q
T1JUX05VTEw7CisgICAgCisgICAga2Vybl9yZXR1cm5fdCBrZXJuUmVzdWx0OworICAgIGlvX2l0
ZXJhdG9yX3QgaXRlcmF0b3I7CisgICAgaWYgKChrZXJuUmVzdWx0ID0gSU9TZXJ2aWNlR2V0TWF0
Y2hpbmdTZXJ2aWNlcyhtYXN0ZXJQb3J0LCBjbGFzc1RvTWF0Y2gsICZpdGVyYXRvcikpICE9IEtF
Uk5fU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE1BQ0hfUE9SVF9OVUxMOworICAgIAorICAgIGlv
X3NlcnZpY2VfdCBzZXJ2aWNlT2JqZWN0ID0gSU9JdGVyYXRvck5leHQoaXRlcmF0b3IpOworICAg
IElPT2JqZWN0UmVsZWFzZShpdGVyYXRvcik7CisgICAgaWYgKCFzZXJ2aWNlT2JqZWN0KQorICAg
ICAgICByZXR1cm4gTUFDSF9QT1JUX05VTEw7CisgICAgCisgICAgaW9fY29ubmVjdF90IGRhdGFQ
b3J0OworICAgIElPT2JqZWN0UmV0YWluKHNlcnZpY2VPYmplY3QpOworICAgIGtlcm5SZXN1bHQg
PSBJT1NlcnZpY2VPcGVuKHNlcnZpY2VPYmplY3QsIG1hY2hfdGFza19zZWxmKCksIDAsICZkYXRh
UG9ydCk7CisgICAgSU9PYmplY3RSZWxlYXNlKHNlcnZpY2VPYmplY3QpOworICAgIAorICAgIHJl
dHVybiAoa2VyblJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpID8gZGF0YVBvcnQgOiBNQUNIX1BPUlRf
TlVMTDsKK30KKworc3RhdGljIGJvb2wgaGFzTXV4Q2FwYWJpbGl0eSgpCit7CisgICAgaW9fY29u
bmVjdF90IGRhdGFQb3J0ID0gYXR0YWNoVG9BcHBsZUdyYXBoaWNzQ29udHJvbCgpOworICAgIAor
ICAgIGlmIChkYXRhUG9ydCA9PSBNQUNIX1BPUlRfTlVMTCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChJT0Nvbm5lY3RDYWxsU2NhbGFyTWV0
aG9kKGRhdGFQb3J0LCBrQUdDT3BlbiwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cikgPT0g
S0VSTl9TVUNDRVNTKSB7CisgICAgICAgIElPQ29ubmVjdENhbGxTY2FsYXJNZXRob2QoZGF0YVBv
cnQsIGtBR0NDbG9zZSwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJl
c3VsdCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIAor
ICAgIElPU2VydmljZUNsb3NlKGRhdGFQb3J0KTsKKyAgICAKKyAgICBpZiAocmVzdWx0KSB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgZGV0ZWN0aW5nIE1hYyBoYXJkd2FyZSB3aXRoIGFuIEludGVsIGc1
NzUgR1BVLCB3aGljaAorICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIG1ha2UgYXZhaWxhYmxl
IHRvIG11eGluZy4KKyAgICAgICAgLy8gQmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBBcHBsZSdz
IE9wZW5HTCB0ZWFtLCBzdWNoIGRldmljZXMKKyAgICAgICAgLy8gaGF2ZSBmb3VyIG9yIGZld2Vy
IHByb2Nlc3NvcnMuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zMDA2MDM3OD4KKyAgICAg
ICAgaW50IG5hbWVzWzJdID0geyBDVExfSFcsIEhXX05DUFUgfTsKKyAgICAgICAgaW50IGNwdUNv
dW50OworICAgICAgICBzaXplX3QgY3B1Q291bnRMZW5ndGggPSBzaXplb2YoY3B1Q291bnQpOwor
ICAgICAgICBzeXNjdGwobmFtZXMsIDIsICZjcHVDb3VudCwgJmNwdUNvdW50TGVuZ3RoLCBudWxs
cHRyLCAwKTsKKyAgICAgICAgcmVzdWx0ID0gY3B1Q291bnQgPiA0OworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGhhc0xvd0FuZEhpZ2hQb3dlckdQVXMoKQorewor
ICAgIHN0YXRpYyBib29sIGNhbk11eCA9IGhhc011eENhcGFiaWxpdHkoKTsKKyAgICByZXR1cm4g
Y2FuTXV4OworfQorI2VuZGlmIC8vIEhBVkUoQVBQTEVfR1JBUEhJQ1NfQ09OVFJPTCkKKworR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXI6OnNoYXJlZE1hbmFnZXIoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI+IHNfbWFuYWdlcjsKKyAgICByZXR1cm4gc19tYW5hZ2Vy
OworfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1h
bmFnZXI6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxh
eUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9pZCopCit7CisgICAgTE9HKFdlYkdMLCAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkIik7Cisg
ICAgaWYgKGZsYWdzICYga0NHRGlzcGxheVNldE1vZGVGbGFnKQorICAgICAgICBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTE1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS51cGRhdGVBbGxDb250ZXh0cygp
OworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjp1cGRh
dGVBbGxDb250ZXh0cygpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAoVVNFKE9QRU5HTCkgfHwg
VVNFKEFOR0xFKSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHQgOiBtX2NvbnRleHRzKSB7
CisgICAgICAgIGNvbnRleHQtPnVwZGF0ZUNHTENvbnRleHQoKTsKKyAgICAgICAgY29udGV4dC0+
ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIH0KKyNlbmRpZgorfQor
CisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6
OnNjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIGNvbnN0IEhvc3RX
aW5kb3cqIHdpbmRvdykKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHRBbmRXaW5kb3cg
OiBtX2NvbnRleHRXaW5kb3dNYXApIHsKKyAgICAgICAgaWYgKGNvbnRleHRBbmRXaW5kb3cudmFs
dWUgPT0gd2luZG93KSB7CisgICAgICAgICAgICBjb250ZXh0QW5kV2luZG93LmtleS0+c2NyZWVu
RGlkQ2hhbmdlKGRpc3BsYXlJRCk7CisgICAgICAgICAgICBMT0coV2ViR0wsICJDaGFuZ2luZyBj
b250ZXh0ICglcCkgdG8gZGlzcGxheSAoJWQpLiIsIGNvbnRleHRBbmRXaW5kb3cua2V5LCBkaXNw
bGF5SUQpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyOjphZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBj
b250ZXh0LCBIb3N0V2luZG93KiB3aW5kb3cpCit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
RU5BQkxFKFdFQlBST0NFU1NfV0lORE9XU0VSVkVSX0JMT0NLSU5HKQorICAgIGlmICghbV9jb250
ZXh0cy5zaXplKCkpCisgICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2Fs
bGJhY2soZGlzcGxheVdhc1JlY29uZmlndXJlZCwgbnVsbHB0cik7CisjZW5kaWYKKworICAgIEFT
U0VSVCghbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSk7CisgICAgbV9jb250ZXh0cy5hcHBl
bmQoY29udGV4dCk7CisgICAgbV9jb250ZXh0V2luZG93TWFwLnNldChjb250ZXh0LCB3aW5kb3cp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6cmVtb3ZlQ29udGV4
dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCogY29udGV4dCkKK3sKKyAgICBpZiAoIW1fY29udGV4
dHMuY29udGFpbnMoY29udGV4dCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHRzLnJl
bW92ZUZpcnN0KGNvbnRleHQpOworICAgIG1fY29udGV4dFdpbmRvd01hcC5yZW1vdmUoY29udGV4
dCk7CisgICAgcmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShjb250ZXh0KTsK
KyAgICAKKyNpZiBQTEFURk9STShNQUMpICYmICFFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJW
RVJfQkxPQ0tJTkcpCisgICAgaWYgKCFtX2NvbnRleHRzLnNpemUoKSkKKyAgICAgICAgQ0dEaXNw
bGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVdhc1JlY29uZmlndXJlZCwg
bnVsbHB0cik7CisjZW5kaWYKK30KKworSG9zdFdpbmRvdyogR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0xNYW5hZ2VyOjpob3N0V2luZG93Rm9yQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCog
Y29udGV4dCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0V2luZG93TWFwLmNvbnRhaW5z
KGNvbnRleHQpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0V2luZG93TWFwLmdldChjb250ZXh0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmFkZENvbnRleHRSZXF1
aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIGNvbnRleHQpCit7
CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIEFTU0VSVChtX2NvbnRleHRzLmNvbnRhaW5zKGNvbnRleHQpKTsKKyAgICBB
U1NFUlQoIW1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UuY29udGFpbnMoY29udGV4
dCkpOworICAgIAorICAgIExPRyhXZWJHTCwgIlRoaXMgY29udGV4dCAoJXApIHJlcXVpcmVzIHRo
ZSBoaWdoLXBlcmZvcm1hbmNlIEdQVS4iLCBjb250ZXh0KTsKKyAgICBtX2NvbnRleHRzUmVxdWly
aW5nSGlnaFBlcmZvcm1hbmNlLmFkZChjb250ZXh0KTsKKyAgICAKKyAgICB1cGRhdGVIaWdoUGVy
Zm9ybWFuY2VTdGF0ZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdl
cjo6cmVtb3ZlQ29udGV4dFJlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5jb250YWlucyhj
b250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIExPRyhXZWJHTCwgIlRoaXMgY29u
dGV4dCAoJXApIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUuIiwg
Y29udGV4dCk7CisgICAgbV9jb250ZXh0c1JlcXVpcmluZ0hpZ2hQZXJmb3JtYW5jZS5yZW1vdmUo
Y29udGV4dCk7CisgICAgCisgICAgdXBkYXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnVwZGF0ZUhpZ2hQZXJmb3JtYW5j
ZVN0YXRlKCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIChVU0UoT1BFTkdMKSB8fCBVU0UoQU5H
TEUpKQorICAgIGlmICghaGFzTG93QW5kSGlnaFBvd2VyR1BVcygpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKG1fY29udGV4dHNSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2Uuc2l6ZSgp
KSB7CisgICAgICAgIAorICAgICAgICBpZiAobV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGlt
ZXIuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgTE9HKFdlYkdMLCAiQ2FuY2VsIHBlbmRpbmcg
dGltZXIgZm9yIHR1cm5pbmcgb2ZmIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOworICAgICAgICAg
ICAgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuc3RvcCgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFtX3JlcXVlc3RpbmdIaWdoUGVyZm9ybWFuY2UpIHsKKyAgICAgICAgICAg
IExPRyhXZWJHTCwgIlJlcXVlc3QgdGhlIGhpZ2gtcGVyZm9ybWFuY2UgR1BVLiIpOworICAgICAg
ICAgICAgbV9yZXF1ZXN0aW5nSGlnaFBlcmZvcm1hbmNlID0gdHJ1ZTsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgICAgICAgICBTd2l0Y2hpbmdHUFVDbGllbnQ6OnNpbmdsZXRvbigpLnJlcXVlc3RI
aWdoUGVyZm9ybWFuY2VHUFUoKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBEb24ndCBpbW1lZGlhdGVseSB0dXJuIG9mZiB0aGUgaGlnaC1wZXJmb3JtYW5j
ZSBHUFUuIFRoZSB1c2VyIG1pZ2h0IGJlCisgICAgICAgIC8vIHN3YXBwaW5nIGJhY2sgYW5kIGZv
cnRoIGJldHdlZW4gdGFicyBvciB3aW5kb3dzLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQor
ICAgICAgICAvLyBjaHVybiBpZiB3ZSBjYW4gYXZvaWQgaXQuCisgICAgICAgIGlmICghbV9kaXNh
YmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgTE9H
KFdlYkdMLCAiU2V0IGEgdGltZXIgdG8gcmVsZWFzZSB0aGUgaGlnaC1wZXJmb3JtYW5jZSBHUFUu
Iik7CisgICAgICAgICAgICAvLyBGSVhNRTogRXhwb3NlIHRoaXMgdmFsdWUgYXMgYSBTZXR0aW5n
LCB3aGljaCB3b3VsZCByZXF1aXJlIHRoaXMgY2xhc3MKKyAgICAgICAgICAgIC8vIHRvIHJlZmVy
ZW5jZSBhIGZyYW1lLCBwYWdlIG9yIGRvY3VtZW50LgorICAgICAgICAgICAgc3RhdGljIGNvbnN0
IFNlY29uZHMgdGltZVRvS2VlcEhpZ2hQZXJmb3JtYW5jZUdQVUFsaXZlIHsgMTBfcyB9OworICAg
ICAgICAgICAgbV9kaXNhYmxlSGlnaFBlcmZvcm1hbmNlR1BVVGltZXIuc3RhcnRPbmVTaG90KHRp
bWVUb0tlZXBIaWdoUGVyZm9ybWFuY2VHUFVBbGl2ZSk7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OmRpc2FibGVIaWdo
UGVyZm9ybWFuY2VHUFVUaW1lckZpcmVkKCkKK3sKKyAgICBpZiAobV9jb250ZXh0c1JlcXVpcmlu
Z0hpZ2hQZXJmb3JtYW5jZS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVxdWVz
dGluZ0hpZ2hQZXJmb3JtYW5jZSA9IGZhbHNlOworI2lmIFBMQVRGT1JNKE1BQykgJiYgKFVTRShP
UEVOR0wpIHx8IFVTRShBTkdMRSkpCisgICAgU3dpdGNoaW5nR1BVQ2xpZW50OjpzaW5nbGV0b24o
KS5yZWxlYXNlSGlnaFBlcmZvcm1hbmNlR1BVKCk7CisjZW5kaWYKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTE1hbmFnZXI6OnJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKQorewor
ICAgIGlmIChoYXNUb29NYW55Q29udGV4dHMoKSkgeworICAgICAgICBMT0coV2ViR0wsICJHcmFw
aGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIgcmVjeWNsZWQgY29udGV4dCAoJXApLiIsIG1fY29u
dGV4dHNbMF0pOworICAgICAgICBtX2NvbnRleHRzWzBdLT5yZWN5Y2xlQ29udGV4dCgpOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBI
SUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5h
Z2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWMzOWE3MzBkZDMwYWIwYzdiMThkM2RmOWJjNWRiY2U2MzQ2ODYz
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaApAQCAtMCwwICsxLDkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2lmIFBMQVRGT1JN
KE1BQykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5Q29uZmlndXJhdGlvbi5oPgor
I2luY2x1ZGUgPE9wZW5HTC9DR0xUeXBlcy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY29uc3QgdW5zaWduZWQgTWF4Q29udGV4dHMgPSAxNjsKKworY2xhc3MgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w7CitjbGFzcyBIb3N0V2luZG93OworCit1c2luZyBQbGF0Zm9ybURpc3Bs
YXlJRCA9IHVpbnQzMl90OworCisjaWYgSEFWRShBUFBMRV9HUkFQSElDU19DT05UUk9MKQorV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYXNMb3dBbmRIaWdoUG93ZXJHUFVzKCk7CisjZW5kaWYKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyIHsKKyAgICBmcmllbmQgTmV2ZXJEZXN0
cm95ZWQ8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyPjsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyJiBzaGFyZWRNYW5hZ2VyKCk7CisgICAg
CisgICAgdm9pZCBhZGRDb250ZXh0KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgSG9zdFdpbmRv
dyopOworICAgIHZvaWQgcmVtb3ZlQ29udGV4dChHcmFwaGljc0NvbnRleHRHTE9wZW5HTCopOwor
CisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvd0ZvckNvbnRleHQoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wqKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGFkZENvbnRleHRSZXF1aXJpbmdIaWdoUGVy
Zm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRl
eHRSZXF1aXJpbmdIaWdoUGVyZm9ybWFuY2UoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqKTsKKyAg
ICAKKyAgICB2b2lkIHJlY3ljbGVDb250ZXh0SWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGhhc1Rv
b01hbnlDb250ZXh0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dHMuc2l6ZSgpID49IE1heENv
bnRleHRzOyB9CisgICAgCisgICAgdm9pZCB1cGRhdGVBbGxDb250ZXh0cygpOworCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIHZvaWQgc2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlELCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGxh
eVdhc1JlY29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFy
eUZsYWdzLCB2b2lkKik7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xNYW5hZ2VyKCkKKyAgICAgICAgOiBtX2Rpc2FibGVIaWdoUGVyZm9ybWFuY2VH
UFVUaW1lcigqdGhpcywgJkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6ZGlzYWJsZUhp
Z2hQZXJmb3JtYW5jZUdQVVRpbWVyRmlyZWQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgdXBk
YXRlSGlnaFBlcmZvcm1hbmNlU3RhdGUoKTsKKyAgICB2b2lkIGRpc2FibGVIaWdoUGVyZm9ybWFu
Y2VHUFVUaW1lckZpcmVkKCk7CisKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wq
PiBtX2NvbnRleHRzOworICAgIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBIb3N0
V2luZG93Kj4gbV9jb250ZXh0V2luZG93TWFwOworICAgIEhhc2hTZXQ8R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqPiBtX2NvbnRleHRzUmVxdWlyaW5nSGlnaFBlcmZvcm1hbmNlOworICAgIAorICAg
IFRpbWVyIG1fZGlzYWJsZUhpZ2hQZXJmb3JtYW5jZUdQVVRpbWVyOworICAgIGJvb2wgbV9yZXF1
ZXN0aW5nSGlnaFBlcmZvcm1hbmNlIHsgZmFsc2UgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9w
ZW5HTFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Y4MmFiMTRk
NDhlNmQ3ZDQ0ZTZjMmE2ZDEyMGUxOWU4NTk0ZDMzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TFByaXZhdGUuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworCisjaWYgVVNFKExJ
QkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2Vsc2UKKyNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
UHJpdmF0ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb246Ok9mZnNjcmVl
bjoKKyAgICAgICAgbV9nbENvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRl
eHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlv
bjo6RGlyZWN0bHlUb0hvc3RXaW5kb3c6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0
ZTo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSgpID0gZGVmYXVsdDsKKworYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGU6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7Cisg
ICAgcmV0dXJuIG1fZ2xDb250ZXh0ID8gbV9nbENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
IDogZmFsc2U7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xQcml2YXRlOjpwbGF0Zm9ybUNvbnRleHQoKQoreworICAgIHJldHVybiBtX2dsQ29u
dGV4dCA/IG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IEdMQ29udGV4dDo6Y3VycmVu
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDdhZmY0Njc2MTJkMTA1Y2M2
M2U2MzI2OWIzMmZjZGQ4YzJlMWE3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUu
aApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqICBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwVGV4dHVyZUdMOworCitjbGFz
cyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTFByaXZhdGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZShHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCosIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlv
bik7CisgICAgfkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZSgpOworICAgIGJvb2wgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9y
bUNvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBt
X2dsQ29udGV4dDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmNwcApp
bmRleCBiY2Q3MjQ2OGUwNWM3MjRiMzBmZTVlZjRkMWMyMzliYjdhNTdmNGU5Li42ODFiOThhMGY5
OTNjZTM3MjhiOTgzMjNkNTA2MGQwZjI4YmI0NTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5H
TFNldHRpbmcuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAot
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiAoVVNFKE9QRU5HTCkgfHwgVVNFKE9Q
RU5HTF9FUykpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIChVU0UoT1BFTkdM
KSB8fCBVU0UoT1BFTkdMX0VTKSkKICNpbmNsdWRlICJUZW1wb3JhcnlPcGVuR0xTZXR0aW5nLmgi
CiAKICNpZiBVU0UoTElCRVBPWFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RlbXBvcmFyeU9wZW5HTFNldHRpbmcuaAppbmRl
eCAzYjg1NDMxMjk2YzM4MWFkNGI1ZDE0YWVlZTE2MmM5ODJlNTA1ZTYyLi5mMzk0M2E5NjlmOWYz
ZWE1YTRlNmVmYTNiNmM2ZTY4NmYwZGRiNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGVtcG9yYXJ5T3BlbkdMU2V0dGluZy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZW1wb3JhcnlPcGVuR0xTZXR0
aW5nLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgog
Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIChVU0UoT1BFTkdMKSB8fCBVU0Uo
T1BFTkdMX0VTKSkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgKFVTRShPUEVO
R0wpIHx8IFVTRShPUEVOR0xfRVMpKQogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRt
YXBUZXh0dXJlR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0JpdG1hcFRleHR1cmVHTC5jcHAKaW5kZXggNjQyYmYwZTk2MDEwOWJkMzQ3NjM3YzhkYzBmZmY0
Mzg4NDRkNjFkMC4uODI2ZDJkYTViZGVlYjY3OTVmZDA3ZjE1MTQyNDE4MGM4YWI1ZDBjOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0JpdG1hcFRleHR1cmVHTC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKIAogI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVu
c2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMZW5n
dGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dDNEVGV4
dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWEyZTA2NGUyMDBhZGEzN2U0MzNiNWNiNjQ0NGRiMzEzYzVhZTU5NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDUyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQot
I2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0K
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotI2luY2x1ZGUgPEFOR0xFL1NoYWRlckxhbmcu
aD4KLQotI2lmIFVTRShBTkdMRSkKLSNkZWZpbmUgRUdMX0VHTF9QUk9UT1RZUEVTIDAKLS8vIFNr
aXAgdGhlIGluY2x1c2lvbiBvZiBBTkdMRSdzIGV4cGxpY2l0IGNvbnRleHQgZW50cnkgcG9pbnRz
IGZvciBub3cuCi0jZGVmaW5lIEdMX0FOR0xFX2V4cGxpY2l0X2NvbnRleHQKLSNkZWZpbmUgR0xf
QU5HTEVfZXhwbGljaXRfY29udGV4dF9nbGVzMQotdHlwZWRlZiB2b2lkKiBHTGVnbENvbnRleHQ7
Ci0jaW5jbHVkZSA8QU5HTEUvZWdsLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZWdsZXh0Lmg+Ci0jaW5j
bHVkZSA8QU5HTEUvZWdsZXh0X2FuZ2xlLmg+Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRz
X2VnbC5oPgotI2luY2x1ZGUgPEFOR0xFL2VudHJ5X3BvaW50c19nbGVzXzJfMF9hdXRvZ2VuLmg+
Ci0jaW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaD4KLSNpbmNs
dWRlIDxBTkdMRS9nbDJleHQuaD4KLSNpbmNsdWRlIDxBTkdMRS9nbDJleHRfYW5nbGUuaD4KLSNp
ZiBkZWZpbmVkKEFib3ZlKQotI3VuZGVmIEFib3ZlCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEJlbG93
KQotI3VuZGVmIEJlbG93Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKE5vbmUpCi0jdW5kZWYgTm9uZQot
I2VuZGlmCi0jZWxpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlm
ICFVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2lm
IFVTRShBTkdMRSkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RBTkdMRS5oIgotI2VsaWYgVVNFKE9Q
RU5HTF9FUykKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgotI2Vsc2UKLSNpbmNs
dWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNlbmRpZgotCi0jaWYgVVNFKE5JQ09TSUEpCi0j
aWYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIk5pY29zaWFHQzNEQU5HTEVMYXllci5oIgotI2Vsc2UK
LSNpbmNsdWRlICJOaWNvc2lhR0MzRExheWVyLmgiCi0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgTWF4QWN0aXZlQ29udGV4dHMgPSAx
NjsKLXN0YXRpYyBEZXF1ZTxHcmFwaGljc0NvbnRleHQzRCosIE1heEFjdGl2ZUNvbnRleHRzPiYg
YWN0aXZlQ29udGV4dHMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTxHcmFw
aGljc0NvbnRleHQzRCosIE1heEFjdGl2ZUNvbnRleHRzPj4gc19hY3RpdmVDb250ZXh0czsKLSAg
ICByZXR1cm4gc19hY3RpdmVDb250ZXh0czsKLX0KLQotUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBh
dHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6RGVz
dGluYXRpb24gZGVzdGluYXRpb24pCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vz
bid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0byB0aGUgSG9zdFdpbmRv
dy4KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGluYXRpb246OkRpcmVjdGx5VG9Ib3N0V2lu
ZG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHN0YXRpYyBib29sIGluaXRpYWxp
emVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaWYgKCFp
bml0aWFsaXplZCkgewotI2lmICFVU0UoT1BFTkdMX0VTKSAmJiAhVVNFKExJQkVQT1hZKSAmJiAh
VVNFKEFOR0xFKQotICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7Ci0j
ZW5kaWYKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIXN1Y2Nl
c3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgY29udGV4dHMgPSBhY3Rp
dmVDb250ZXh0cygpOwotICAgIGlmIChjb250ZXh0cy5zaXplKCkgPj0gTWF4QWN0aXZlQ29udGV4
dHMpCi0gICAgICAgIGNvbnRleHRzLmZpcnN0KCktPnJlY3ljbGVDb250ZXh0KCk7Ci0KLSAgICAv
LyBDYWxsaW5nIHJlY3ljbGVDb250ZXh0KCkgYWJvdmUgc2hvdWxkIGhhdmUgbGVhZCB0byB0aGUg
Z3JhcGhpY3MgY29udGV4dCBiZWluZwotICAgIC8vIGRlc3Ryb3llZCBhbmQgdGh1cyByZW1vdmVk
IGZyb20gdGhlIGFjdGl2ZSBjb250ZXh0cyBsaXN0LgotICAgIGlmIChjb250ZXh0cy5zaXplKCkg
Pj0gTWF4QWN0aXZlQ29udGV4dHMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
Q3JlYXRlIHRoZSBHcmFwaGljc0NvbnRleHQzRCBvYmplY3QgZmlyc3QgaW4gb3JkZXIgdG8gZXN0
YWJsaXN0IGEgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgdGhyZWFkLgotICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCBob3N0V2luZG93
LCBkZXN0aW5hdGlvbikpOwotCi0jaWYgVVNFKExJQkVQT1hZKSAmJiBVU0UoT1BFTkdMX0VTKQot
ICAgIC8vIEJhaWwgaWYgR0xFUzMgd2FzIHJlcXVlc3RlZCBidXQgY2Fubm90IGJlIHByb3ZpZGVk
LgotICAgIGlmIChhdHRyaWJ1dGVzLmlzV2ViR0wyICYmICFlcG94eV9pc19kZXNrdG9wX2dsKCkg
JiYgZXBveHlfZ2xfdmVyc2lvbigpIDwgMzApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2Vu
ZGlmCi0KLSAgICBjb250ZXh0cy5hcHBlbmQoY29udGV4dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGNv
bnRleHQ7Ci19Ci0KLSNpZiBVU0UoQU5HTEUpCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0RBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5k
b3cqLCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRpb24gZGVzdGluYXRpb24sIEdyYXBoaWNz
Q29udGV4dDNEKiBzaGFyZWRDb250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0M0RCYXNlKGF0
dHJpYnV0ZXMsIGRlc3RpbmF0aW9uLCBzaGFyZWRDb250ZXh0KQotewotICAgIEFTU0VSVF9VTlVT
RUQoc2hhcmVkQ29udGV4dCwgIXNoYXJlZENvbnRleHQpOwotI2lmIFVTRShOSUNPU0lBKQotICAg
IG1fbmljb3NpYUxheWVyID0gV1RGOjptYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RBTkdMRUxheWVy
PigqdGhpcywgZGVzdGluYXRpb24pOwotI2Vsc2UKLSAgICBtX3RleG1hcExheWVyID0gV1RGOjpt
YWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3RpbmF0
aW9uKTsKLSNlbmRpZgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgdmFsaWRhdGVB
dHRyaWJ1dGVzKCk7Ci0gICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRo
ZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KLQotICAgIGlmIChkZXN0aW5h
dGlvbiA9PSBEZXN0aW5hdGlvbjo6T2Zmc2NyZWVuKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIHRl
eHR1cmUgdG8gcmVuZGVyIGludG8uCi0gICAgICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV90ZXh0
dXJlKTsKLSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xF
LCBtX3RleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RB
TkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBn
bDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9N
SU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0Up
OwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6QmluZFRl
eHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOwotCi0gICAgICAgIC8vIENyZWF0
ZSBhbiBGQk8uCi0gICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsKLSAgICAg
ICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fY29t
cG9zaXRvclRleHR1cmUpOwotICAgICAgICBnbDo6QmluZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQU5HTEUsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdM
RV9BTkdMRSwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OwotCi0gICAgICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsK
LSAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCBtX2lu
dGVybWVkaWF0ZVRleHR1cmUpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
X1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAg
ICAgICBnbDo6VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgICAgICBnbDo6VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFX1JFQ1RBTkdMRV9B
TkdMRSwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAgICAgIGds
OjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgMCk7Ci0jZW5kaWYKLQot
ICAgICAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgICAgIGlmIChhdHRyaWJ1
dGVzLmFudGlhbGlhcykgewotICAgICAgICAgICAgZ2w6OkdlbkZyYW1lYnVmZmVycygxLCAmbV9t
dWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgICAgICBnbDo6QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8g
PSBtX211bHRpc2FtcGxlRkJPOwotICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5z
dGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gQmluZCBjYW52YXMgRkJPLgotICAgICAgICAgICAgZ2w6
OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICAgICAgbV9z
dGF0ZS5ib3VuZEZCTyA9IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2ls
KQotICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZm
ZXIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJp
YnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwgJm1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdsOjpDbGVhckNv
bG9yKDAsIDAsIDAsIDApOwotfQotI2Vsc2UKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzREF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRv
dyosIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3ND
b250ZXh0M0QqIHNoYXJlZENvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHQzREJhc2UoYXR0
cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCi17Ci0gICAgQVNTRVJUX1VOVVNF
RChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
bV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RMYXllcj4oKnRoaXMsIGRl
c3RpbmF0aW9uKTsKLSNlbHNlCi0gICAgbV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOwotI2VuZGlmCi0K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwot
ICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNo
YW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCi0KLSAgICBpZiAoZGVzdGluYXRpb24gPT0gRGVzdGlu
YXRpb246Ok9mZnNjcmVlbikgewotICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRl
ciBpbnRvLgotICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgICAgICA6Omds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAg
ICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKLQotICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgotICAgICAgICA6OmdsR2VuRnJhbWVidWZm
ZXJzKDEsICZtX2Zibyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIG1fZmJvKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAgICAgOjpn
bEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICAgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgICAgICA6Omds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAg
ICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7Ci0KLSAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2ludGVybWVk
aWF0ZVRleHR1cmUpOwotICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9p
bnRlcm1lZGlhdGVUZXh0dXJlKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICA6OmdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotCi0gICAg
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSNlbmRpZgotCi0gICAgICAg
IC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuYW50
aWFsaWFzKSB7Ci0gICAgICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX211bHRpc2Ft
cGxlRkJPKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICAgICAgbV9zdGF0ZS5ib3VuZEZCTyA9IG1fbXVs
dGlzYW1wbGVGQk87Ci0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVy
cygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCi0gICAgICAgICAgICBnbEJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICAgICAg
ICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxC
dWZmZXIpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0
dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZt
X2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiAhVVNFKE9QRU5H
TF9FUykKLSAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJWkUpOwotCi0g
ICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKSB7Ci0gICAgICAg
IG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICAgICAgLy8gRnJvbSB2ZXJzaW9uIDMu
MiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUsIHNvIHJlcXVlc3QgdGhhdCBvdXB1
dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgotICAgICAgICAvLyBPcGVuR0wgdmVyc2lvbiAzLjIg
dXNlcyBHTFNMIHZlcnNpb24gMS41MC4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKLQotICAgICAgICAvLyBGcm9tIHZlcnNp
b24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJvZmlsZSwgYW5kIHdlIG5lZWQgYSBW
QU8gZm9yIHJlbmRlcmluZy4KLSAgICAgICAgLy8gQSBWQU8gY291bGQgYmUgY3JlYXRlZCBhbmQg
Ym91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVuZGVyaW5nIChUZXh0dXJlTWFwcGVy
LCBXZWJHTCwgZXRjKS4gVGhpcyBpcwotICAgICAgICAvLyBhIHNpbXBsZXIgc29sdXRpb246IHRo
ZSBmaXJzdCBHcmFwaGljc0NvbnRleHQzRCBjcmVhdGVkIG9uIGEgR0xDb250ZXh0IHdpbGwgY3Jl
YXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNvbnRleHQuCi0gICAgICAgIEdDM0RpbnQgY3Vy
cmVudFZBTyA9IDA7Ci0gICAgICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfQVJSQVlfQklORElORywgJmN1cnJlbnRWQU8pOwotICAgICAgICBpZiAoIWN1cnJlbnRWQU8p
IHsKLSAgICAgICAgICAgIG1fdmFvID0gY3JlYXRlVmVydGV4QXJyYXkoKTsKLSAgICAgICAgICAg
IGJpbmRWZXJ0ZXhBcnJheShtX3Zhbyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBGb3IgbG93ZXIgdmVyc2lvbnMgcmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQg
dG8gdGhlIHNoYWRlciBjb21waWxlci4KLSAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0
QnJpZGdlKFNIX0dMU0xfQ09NUEFUSUJJTElUWV9PVVRQVVQpOwotCi0gICAgICAgIC8vIEdMX1BP
SU5UX1NQUklURSBpcyBuZWVkZWQgaW4gbG93ZXIgdmVyc2lvbnMuCi0gICAgICAgIDo6Z2xFbmFi
bGUoR0xfUE9JTlRfU1BSSVRFKTsKLSAgICB9Ci0jZWxzZQotICAgIC8vIEFkanVzdCB0aGUgc2hh
ZGVyIHNwZWNpZmljYXRpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wy
IHN1cHBvcnQpIHdhcyByZXF1ZXN0ZWQuCi0gICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJp
ZGdlKFNIX0VTU0xfT1VUUFVULCBhdHRyaWJ1dGVzLmlzV2ViR0wyID8gU0hfV0VCR0wyX1NQRUMg
OiBTSF9XRUJHTF9TUEVDKTsKLSNlbmRpZgotCi0gICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24u
Ci0gICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzOwotICAgIHNoOjpJbml0QnVp
bHRJblJlc291cmNlcygmQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgZ2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eEF0dHJpYnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVY
X1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3Jz
KTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9S
UywgJkFOR0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xF
UmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3Vy
Y2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMpOwotCi0gICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVu
R0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSAxOwotCi0gICAgR0Mz
RGludCByYW5nZVsyXSwgcHJlY2lzaW9uOwotICAgIGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChH
cmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSLCBHcmFwaGljc0NvbnRleHQzRDo6SElH
SF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50
UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOwotCi0g
ICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbENs
ZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0jZW5kaWYKLQotI2lmIFVTRShBTkdMRSkKLUdyYXBo
aWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1f
Y29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21w
b3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRB
dHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAg
Z2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAg
ICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKLSAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNh
bXBsZUZCTyk7Ci0gICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRl
cy5kZXB0aCkgewotI2lmIFVTRShPUEVOR0xfRVMpCi0gICAgICAgIGlmIChtX2RlcHRoQnVmZmVy
KQotICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsK
LQotICAgICAgICBpZiAobV9zdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgZ2xEZWxldGVSZW5k
ZXJidWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOwotI2VuZGlmCi0gICAgICAgIGlmIChtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcikKLSAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEs
ICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZl
cnMoMSwgJm1fZmJvKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgZ2w6OkRl
bGV0ZVRleHR1cmVzKDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOwotI2VuZGlmCi0KLSNpZiBV
U0UoQ0FJUk8pCi0gICAgaWYgKG1fdmFvKQotICAgICAgICBkZWxldGVWZXJ0ZXhBcnJheShtX3Zh
byk7Ci0jZW5kaWYKLQotICAgIGF1dG8qIGFjdGl2ZUNvbnRleHQgPSBhY3RpdmVDb250ZXh0cygp
LnRha2VMYXN0KFt0aGlzXShhdXRvKiBpdCkgewotICAgICAgICByZXR1cm4gaXQgPT0gdGhpczsK
LSAgICB9KTsKLSAgICBBU1NFUlRfVU5VU0VEKGFjdGl2ZUNvbnRleHQsICEhYWN0aXZlQ29udGV4
dCk7Ci19Ci0jZWxzZQotR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCi17
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAg
OjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgOjpnbERlbGV0
ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgYXV0byBh
dHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVzLmFu
dGlhbGlhcykgewotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRy
aWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICA6OmdsRGVsZXRlRnJhbWVi
dWZmZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICAg
ICAgaWYgKG1fZGVwdGhCdWZmZXIpCi0gICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMo
MSwgJm1fZGVwdGhCdWZmZXIpOwotCi0gICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCi0gICAg
ICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7Ci0jZW5k
aWYKLSAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQotICAgICAgICAgICAgOjpnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0gICAg
OjpnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOwotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVy
ZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShDQUlSTykKLSAgICBpZiAobV92YW8pCi0gICAgICAgIGRl
bGV0ZVZlcnRleEFycmF5KG1fdmFvKTsKLSNlbmRpZgotCi0gICAgYXV0byogYWN0aXZlQ29udGV4
dCA9IGFjdGl2ZUNvbnRleHRzKCkudGFrZUxhc3QoW3RoaXNdKGF1dG8qIGl0KSB7Ci0gICAgICAg
IHJldHVybiBpdCA9PSB0aGlzOwotICAgIH0pOwotICAgIEFTU0VSVF9VTlVTRUQoYWN0aXZlQ29u
dGV4dCwgISFhY3RpdmVDb250ZXh0KTsKLX0KLSNlbmRpZiAvLyBVU0UoQU5HTEUpCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0jaWYgVVNFKE5JQ09T
SUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNl
bHNlCi0gICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKCkKLXsKLX0K
LQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCgpIGNvbnN0Ci17Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcmV0dXJu
IG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIG1f
dGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29udGV4dCgpOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdGV4dHVyZTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNv
bXBsaWFudCgpIGNvbnN0Ci17Ci0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICByZXR1cm4gdHJ1ZTsK
LSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVBsYXRmb3JtTGF5ZXIqIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBVU0UoTklDT1NJ
QSkKLSAgICByZXR1cm4gJm1fbmljb3NpYUxheWVyLT5jb250ZW50TGF5ZXIoKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXIuZ2V0KCk7Ci0jZW5kaWYKLX0KLQotI2lmIFBMQVRGT1JN
KEdUSykgJiYgIVVTRShBTkdMRSkKLUV4dGVuc2lvbnMzRCYgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25zKSB7Ci0jaWYgVVNFKE9QRU5H
TF9FUykKLSAgICAgICAgLy8gZ2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24gR0xFUzIu
Ci0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMRVM+
KHRoaXMsICBmYWxzZSk7Ci0jZWxzZQotICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIgb24gd2Ug
dXNlIHRoZSBDb3JlIHByb2ZpbGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0cmluZ2ku
Ci0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMPih0
aGlzLCBHTENvbnRleHQ6OmN1cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7Ci0jZW5kaWYKLSAg
ICB9Ci0gICAgcmV0dXJuICptX2V4dGVuc2lvbnM7Ci19Ci0jZW5kaWYKLQotI2lmIChQTEFURk9S
TShHVEspICYmICFVU0UoQU5HTEUpKSB8fCBQTEFURk9STShXSU4pCi12b2lkKiBHcmFwaGljc0Nv
bnRleHQzRDo6bWFwQnVmZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0
ciwgR0MzRGJpdGZpZWxkKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1HQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCi17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQzNEZW51
bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN0b3JhZ2UyRChHQzNEZW51bSwgR0MzRHNpemVpLCBH
QzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFN0b3JhZ2UzRChHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNp
emVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgVmVjdG9yPEdDM0R1
aW50PiYsIEdDM0RlbnVtLCBWZWN0b3I8R0MzRGludD4mKQotewotfQotI2VuZGlmCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNE
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRH
TFRleHR1cmVNYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmYTcyZTBjYWNiM2IzNzA2OTU5NWRkZThk
MmE1MGQwMDUxOThiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAt
MCwwICsxLDUyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCisKKyNpZiBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8QU5HTEUvU2hhZGVyTGFuZy5oPgorI2luY2x1
ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjaWYg
VVNFKEFOR0xFKQorI2RlZmluZSBFR0xfRUdMX1BST1RPVFlQRVMgMAorLy8gU2tpcCB0aGUgaW5j
bHVzaW9uIG9mIEFOR0xFJ3MgZXhwbGljaXQgY29udGV4dCBlbnRyeSBwb2ludHMgZm9yIG5vdy4K
KyNkZWZpbmUgR0xfQU5HTEVfZXhwbGljaXRfY29udGV4dAorI2RlZmluZSBHTF9BTkdMRV9leHBs
aWNpdF9jb250ZXh0X2dsZXMxCit0eXBlZGVmIHZvaWQqIEdMZWdsQ29udGV4dDsKKyNpbmNsdWRl
IDxBTkdMRS9lZ2wuaD4KKyNpbmNsdWRlIDxBTkdMRS9lZ2xleHQuaD4KKyNpbmNsdWRlIDxBTkdM
RS9lZ2xleHRfYW5nbGUuaD4KKyNpbmNsdWRlIDxBTkdMRS9lbnRyeV9wb2ludHNfZWdsLmg+Cisj
aW5jbHVkZSA8QU5HTEUvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaD4KKyNpbmNsdWRl
IDxBTkdMRS9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5oPgorI2luY2x1ZGUgPEFOR0xF
L2dsMmV4dC5oPgorI2luY2x1ZGUgPEFOR0xFL2dsMmV4dF9hbmdsZS5oPgorI2lmIGRlZmluZWQo
QWJvdmUpCisjdW5kZWYgQWJvdmUKKyNlbmRpZgorI2lmIGRlZmluZWQoQmVsb3cpCisjdW5kZWYg
QmVsb3cKKyNlbmRpZgorI2lmIGRlZmluZWQoTm9uZSkKKyN1bmRlZiBOb25lCisjZW5kaWYKKyNl
bGlmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxlcG94eS9nbC5oPgorI2VsaWYgIVVTRShPUEVO
R0xfRVMpCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaWYgVVNFKEFOR0xF
KQorI2luY2x1ZGUgIkV4dGVuc2lvbnNHTEFOR0xFLmgiCisjZWxpZiBVU0UoT1BFTkdMX0VTKQor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTE9wZW5HTEVTLmgiCisjZWxzZQorI2luY2x1ZGUgIkV4dGVu
c2lvbnNHTE9wZW5HTC5oIgorI2VuZGlmCisKKyNpZiBVU0UoTklDT1NJQSkKKyNpZiBVU0UoQU5H
TEUpCisjaW5jbHVkZSAiTmljb3NpYUdDM0RBTkdMRUxheWVyLmgiCisjZWxzZQorI2luY2x1ZGUg
Ik5pY29zaWFHQzNETGF5ZXIuaCIKKyNlbmRpZgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBNYXhBY3RpdmVDb250ZXh0cyA9IDE2Oworc3RhdGlj
IERlcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiwgTWF4QWN0aXZlQ29udGV4dHM+JiBhY3Rp
dmVDb250ZXh0cygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKiwgTWF4QWN0aXZlQ29udGV4dHM+PiBzX2FjdGl2ZUNvbnRleHRzOwor
ICAgIHJldHVybiBzX2FjdGl2ZUNvbnRleHRzOworfQorCitSZWZQdHI8R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w+IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbikKK3sKKyAgICAvLyBUaGlz
IGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVj
dGx5IHRvIHRoZSBIb3N0V2luZG93LgorICAgIGlmIChkZXN0aW5hdGlvbiA9PSBEZXN0aW5hdGlv
bjo6RGlyZWN0bHlUb0hvc3RXaW5kb3cpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisjaWYgIVVTRShPUEVOR0xfRVMpICYm
ICFVU0UoTElCRVBPWFkpICYmICFVU0UoQU5HTEUpCisgICAgICAgIHN1Y2Nlc3MgPSBpbml0aWFs
aXplT3BlbkdMU2hpbXMoKTsKKyNlbmRpZgorICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Cisg
ICAgfQorICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvJiBjb250ZXh0cyA9IGFjdGl2ZUNvbnRleHRzKCk7CisgICAgaWYgKGNvbnRleHRzLnNpemUo
KSA+PSBNYXhBY3RpdmVDb250ZXh0cykKKyAgICAgICAgY29udGV4dHMuZmlyc3QoKS0+cmVjeWNs
ZUNvbnRleHQoKTsKKworICAgIC8vIENhbGxpbmcgcmVjeWNsZUNvbnRleHQoKSBhYm92ZSBzaG91
bGQgaGF2ZSBsZWFkIHRvIHRoZSBncmFwaGljcyBjb250ZXh0IGJlaW5nCisgICAgLy8gZGVzdHJv
eWVkIGFuZCB0aHVzIHJlbW92ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbnRleHRzIGxpc3QuCisgICAg
aWYgKGNvbnRleHRzLnNpemUoKSA+PSBNYXhBY3RpdmVDb250ZXh0cykKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAvLyBDcmVhdGUgdGhlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMIG9i
amVjdCBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc3QgYSBjdXJyZW50IGNvbnRleHQgb24gdGhp
cyB0aHJlYWQuCisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIGRlc3RpbmF0aW9uKSk7CisKKyNpZiBV
U0UoTElCRVBPWFkpICYmIFVTRShPUEVOR0xfRVMpCisgICAgLy8gQmFpbCBpZiBHTEVTMyB3YXMg
cmVxdWVzdGVkIGJ1dCBjYW5ub3QgYmUgcHJvdmlkZWQuCisgICAgaWYgKGF0dHJpYnV0ZXMuaXNX
ZWJHTDIgJiYgIWVwb3h5X2lzX2Rlc2t0b3BfZ2woKSAmJiBlcG94eV9nbF92ZXJzaW9uKCkgPCAz
MCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKKworICAgIGNvbnRleHRzLmFwcGVu
ZChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gY29udGV4dDsKK30KKworI2lmIFVTRShBTkdM
RSkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFw
aGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdpbmRvdyosIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBkZXN0aW5hdGlvbiwgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqIHNoYXJlZENvbnRleHQpCisgICAgOiBHcmFwaGljc0NvbnRleHRHTChhdHRyaWJ1
dGVzLCBkZXN0aW5hdGlvbiwgc2hhcmVkQ29udGV4dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHNo
YXJlZENvbnRleHQsICFzaGFyZWRDb250ZXh0KTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25p
Y29zaWFMYXllciA9IFdURjo6bWFrZVVuaXF1ZTxOaWNvc2lhOjpHQzNEQU5HTEVMYXllcj4oKnRo
aXMsIGRlc3RpbmF0aW9uKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXllciA9IFdURjo6bWFrZVVu
aXF1ZTxUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7
CisjZW5kaWYKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZhbGlkYXRlQXR0cmli
dXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1h
eSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBpZiAoZGVzdGluYXRpb24g
PT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJl
IHRvIHJlbmRlciBpbnRvLgorICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7
CisgICAgICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV90
ZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVf
QU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUlOX0ZJ
TFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFLCAwKTsKKworICAgICAgICAvLyBDcmVhdGUgYW4g
RkJPLgorICAgICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgICAgIGds
OjpCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyAgICAgICAgZ2w6OkdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKKyAgICAgICAgZ2w6OkJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfUkVDVEFOR0xF
X0FOR0xFLCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5H
TEUsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9S
RUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKwor
ICAgICAgICBnbDo6R2VuVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7CisgICAg
ICAgIGdsOjpCaW5kVGV4dHVyZShHTF9URVhUVVJFX1JFQ1RBTkdMRV9BTkdMRSwgbV9pbnRlcm1l
ZGlhdGVUZXh0dXJlKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNU
QU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAg
Z2w6OlRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV9SRUNUQU5HTEVfQU5HTEUsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICAgICAgZ2w6OlRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKworICAgICAgICBnbDo6Qmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEUsIDApOworI2VuZGlmCisKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPLgorICAgICAgICBpZiAoYXR0cmlidXRlcy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsOjpHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fbXVsdGlz
YW1wbGVGQk8pOworICAgICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICBtX3N0YXRlLmJvdW5kRkJPID0gbV9t
dWx0aXNhbXBsZUZCTzsKKyAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIEJpbmQgY2FudmFzIEZCTy4KKyAgICAgICAgICAgIGdsOjpCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1fc3RhdGUu
Ym91bmRGQk8gPSBtX2ZibzsKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgICAgICAgICAgaWYgKGF0
dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2w6OkdlblJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAg
ICAgICAgICAgICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbV9zdGVuY2lsQnVmZmVyKTsK
KyNlbmRpZgorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVz
LmRlcHRoKQorICAgICAgICAgICAgICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbDo6Q2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKK30KKyNlbHNlCitHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhv
c3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RGVzdGluYXRpb24gZGVzdGluYXRp
b24sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250ZXh0KQorICAgIDogR3JhcGhp
Y3NDb250ZXh0R0woYXR0cmlidXRlcywgZGVzdGluYXRpb24sIHNoYXJlZENvbnRleHQpCit7Cisg
ICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7CisjaWYgVVNF
KE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBtYWtlVW5pcXVlPE5pY29zaWE6OkdDM0RM
YXllcj4oKnRoaXMsIGRlc3RpbmF0aW9uKTsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXllciA9IG1h
a2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRp
b24pOworI2VuZGlmCisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHZhbGlkYXRl
QXR0cmlidXRlcygpOworICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBU
aGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCisKKyAgICBpZiAoZGVzdGlu
YXRpb24gPT0gRGVzdGluYXRpb246Ok9mZnNjcmVlbikgeworICAgICAgICAvLyBDcmVhdGUgYSB0
ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgorICAgICAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4
dHVyZSk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKKworICAgICAgICAvLyBDcmVhdGUgYW4gRkJPLgorICAgICAgICA6
OmdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyAgICAgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAg
ICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUp
OworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisKKyAgICAgICAgOjpnbEdlblRleHR1cmVz
KDEsICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9pbnRlcm1lZGlhdGVUZXh0dXJlKTsKKyAgICAgICAgOjpnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOworCisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyNl
bmRpZgorCisgICAgICAgIC8vIENyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTy4KKyAgICAgICAgaWYg
KGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJz
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgbV9zdGF0ZS5i
b3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVm
ZmVycygxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6Omds
R2VuUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCaW5kIGNhbnZhcyBGQk8uCisgICAgICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKKyAgICAgICAgICAgIG1fc3RhdGUuYm91bmRGQk8gPSBtX2ZibzsKKyNpZiBV
U0UoT1BFTkdMX0VTKQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJi
dWZmZXJzKDEsICZtX3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2xH
ZW5SZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAg
ICB9CisKKyNpZiAhVVNFKE9QRU5HTF9FUykKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9H
UkFNX1BPSU5UX1NJWkUpOworCisgICAgaWYgKEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9u
KCkgPj0gMzIwKSB7CisgICAgICAgIG1fdXNpbmdDb3JlUHJvZmlsZSA9IHRydWU7CisKKyAgICAg
ICAgLy8gRnJvbSB2ZXJzaW9uIDMuMiBvbiB3ZSB1c2UgdGhlIE9wZW5HTCBDb3JlIHByb2ZpbGUs
IHNvIHJlcXVlc3QgdGhhdCBvdXB1dCB0byB0aGUgc2hhZGVyIGNvbXBpbGVyLgorICAgICAgICAv
LyBPcGVuR0wgdmVyc2lvbiAzLjIgdXNlcyBHTFNMIHZlcnNpb24gMS41MC4KKyAgICAgICAgbV9j
b21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfMTUwX0NPUkVfT1VUUFVUKTsKKwor
ICAgICAgICAvLyBGcm9tIHZlcnNpb24gMy4yIG9uIHdlIHVzZSB0aGUgT3BlbkdMIENvcmUgcHJv
ZmlsZSwgYW5kIHdlIG5lZWQgYSBWQU8gZm9yIHJlbmRlcmluZy4KKyAgICAgICAgLy8gQSBWQU8g
Y291bGQgYmUgY3JlYXRlZCBhbmQgYm91bmQgYnkgZWFjaCBjb21wb25lbnQgdXNpbmcgR0wgcmVu
ZGVyaW5nIChUZXh0dXJlTWFwcGVyLCBXZWJHTCwgZXRjKS4gVGhpcyBpcworICAgICAgICAvLyBh
IHNpbXBsZXIgc29sdXRpb246IHRoZSBmaXJzdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjcmVh
dGVkIG9uIGEgR0xDb250ZXh0IHdpbGwgY3JlYXRlIGFuZCBiaW5kIGEgVkFPIGZvciB0aGF0IGNv
bnRleHQuCisgICAgICAgIEdDM0RpbnQgY3VycmVudFZBTyA9IDA7CisgICAgICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpWRVJURVhfQVJSQVlfQklORElORywgJmN1cnJl
bnRWQU8pOworICAgICAgICBpZiAoIWN1cnJlbnRWQU8pIHsKKyAgICAgICAgICAgIG1fdmFvID0g
Y3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICAgICAgICAgIGJpbmRWZXJ0ZXhBcnJheShtX3Zhbyk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgbG93ZXIgdmVyc2lvbnMg
cmVxdWVzdCB0aGUgY29tcGF0aWJpbGl0eSBvdXRwdXQgdG8gdGhlIHNoYWRlciBjb21waWxlci4K
KyAgICAgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0dMU0xfQ09NUEFUSUJJ
TElUWV9PVVRQVVQpOworCisgICAgICAgIC8vIEdMX1BPSU5UX1NQUklURSBpcyBuZWVkZWQgaW4g
bG93ZXIgdmVyc2lvbnMuCisgICAgICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKKyAg
ICB9CisjZWxzZQorICAgIC8vIEFkanVzdCB0aGUgc2hhZGVyIHNwZWNpZmljYXRpb24gZGVwZW5k
aW5nIG9uIHdoZXRoZXIgR0xFUzMgKGkuZS4gV2ViR0wyIHN1cHBvcnQpIHdhcyByZXF1ZXN0ZWQu
CisgICAgbV9jb21waWxlciA9IEFOR0xFV2ViS2l0QnJpZGdlKFNIX0VTU0xfT1VUUFVULCBhdHRy
aWJ1dGVzLmlzV2ViR0wyID8gU0hfV0VCR0wyX1NQRUMgOiBTSF9XRUJHTF9TUEVDKTsKKyNlbmRp
ZgorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVzb3VyY2Vz
IEFOR0xFUmVzb3VyY2VzOworICAgIHNoOjpJbml0QnVpbHRJblJlc291cmNlcygmQU5HTEVSZXNv
dXJjZXMpOworCisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Ok1BWF9W
RVJURVhfQVRUUklCUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVD
VE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
JkFOR0xFUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywg
JkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgJkFO
R0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgLy8gQWx3YXlz
IHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAgQU5HTEVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZl
cnMgPSAxOworCisgICAgR0MzRGludCByYW5nZVsyXSwgcHJlY2lzaW9uOworICAgIGdldFNoYWRl
clByZWNpc2lvbkZvcm1hdChHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6RlJBR01FTlRfU0hBREVS
LCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6SElHSF9GTE9BVCwgcmFuZ2UsICZwcmVjaXNpb24p
OworICAgIEFOR0xFUmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IChyYW5nZVswXSB8
fCByYW5nZVsxXSB8fCBwcmVjaXNpb24pOworCisgICAgbV9jb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOworCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Cit9Cisj
ZW5kaWYKKworI2lmIFVTRShBTkdMRSkKK0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
IChtX3RleHR1cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1
cmUpCisgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisjZW5kaWYKKworICAgIGF1dG8gYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CisK
KyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2w6OkRlbGV0ZVJlbmRl
cmJ1ZmZlcnMoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRy
aWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGdsOjpEZWxl
dGVSZW5kZXJidWZmZXJzKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
fSBlbHNlIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworI2lm
IFVTRShPUEVOR0xfRVMpCisgICAgICAgIGlmIChtX2RlcHRoQnVmZmVyKQorICAgICAgICAgICAg
Z2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoQnVmZmVyKTsKKworICAgICAgICBpZiAo
bV9zdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzKDEsICZt
X3N0ZW5jaWxCdWZmZXIpOworI2VuZGlmCisgICAgICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZl
cikKKyAgICAgICAgICAgIGdsOjpEZWxldGVSZW5kZXJidWZmZXJzKDEsICZtX2RlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQorICAgIGdsOjpEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvKTsK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEs
ICZtX2ludGVybWVkaWF0ZVRleHR1cmUpOworI2VuZGlmCisKKyNpZiBVU0UoQ0FJUk8pCisgICAg
aWYgKG1fdmFvKQorICAgICAgICBkZWxldGVWZXJ0ZXhBcnJheShtX3Zhbyk7CisjZW5kaWYKKwor
ICAgIGF1dG8qIGFjdGl2ZUNvbnRleHQgPSBhY3RpdmVDb250ZXh0cygpLnRha2VMYXN0KFt0aGlz
XShhdXRvKiBpdCkgeworICAgICAgICByZXR1cm4gaXQgPT0gdGhpczsKKyAgICB9KTsKKyAgICBB
U1NFUlRfVU5VU0VEKGFjdGl2ZUNvbnRleHQsICEhYWN0aXZlQ29udGV4dCk7Cit9CisjZWxzZQor
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgOjpn
bERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgOjpnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgYXV0byBhdHRy
aWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlh
bGlhcykgeworICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVycygxLCAmbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1
dGVzLmRlcHRoKQorICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAg
aWYgKG1fZGVwdGhCdWZmZXIpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwg
Jm1fZGVwdGhCdWZmZXIpOworCisgICAgICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAg
ICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fc3RlbmNpbEJ1ZmZlcik7CisjZW5kaWYK
KyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgOjpnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnMoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgOjpn
bERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm8pOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1faW50ZXJtZWRpYXRlVGV4dHVyZSk7
CisjZW5kaWYKKworI2lmIFVTRShDQUlSTykKKyAgICBpZiAobV92YW8pCisgICAgICAgIGRlbGV0
ZVZlcnRleEFycmF5KG1fdmFvKTsKKyNlbmRpZgorCisgICAgYXV0byogYWN0aXZlQ29udGV4dCA9
IGFjdGl2ZUNvbnRleHRzKCkudGFrZUxhc3QoW3RoaXNdKGF1dG8qIGl0KSB7CisgICAgICAgIHJl
dHVybiBpdCA9PSB0aGlzOworICAgIH0pOworICAgIEFTU0VSVF9VTlVTRUQoYWN0aXZlQ29udGV4
dCwgISFhY3RpdmVDb250ZXh0KTsKK30KKyNlbmRpZiAvLyBVU0UoQU5HTEUpCisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisjaWYgVVNFKE5J
Q09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
I2VuZGlmCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrR1BVU3RhdHVz
KCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCgpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09T
SUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbHNl
CisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBsYXRmb3JtQ29udGV4dCgpOworI2VuZGlmCit9
CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBsYXRmb3JtVGV4
dHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dHVyZTsKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisjaWYgVVNFKE9Q
RU5HTF9FUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK1BsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwbGF0Zm9y
bUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gJm1fbmljb3Np
YUxheWVyLT5jb250ZW50TGF5ZXIoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXIu
Z2V0KCk7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShBTkdMRSkKK0V4
dGVuc2lvbnNHTCYgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQorewor
ICAgIGlmICghbV9leHRlbnNpb25zKSB7CisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICAgICAgLy8g
Z2xHZXRTdHJpbmdpIGlzIG5vdCBhdmFpbGFibGUgb24gR0xFUzIuCisgICAgICAgIG1fZXh0ZW5z
aW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KHRoaXMsICBmYWxzZSk7Cisj
ZWxzZQorICAgICAgICAvLyBGcm9tIE9wZW5HTCAzLjIgb24gd2UgdXNlIHRoZSBDb3JlIHByb2Zp
bGUsIGFuZCB0aGVyZSB3ZSBtdXN0IHVzZSBnbEdldFN0cmluZ2kuCisgICAgICAgIG1fZXh0ZW5z
aW9ucyA9IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMPih0aGlzLCBHTENvbnRleHQ6OmN1
cnJlbnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuICpt
X2V4dGVuc2lvbnM7Cit9CisjZW5kaWYKKworI2lmIChQTEFURk9STShHVEspICYmICFVU0UoQU5H
TEUpKSB8fCBQTEFURk9STShXSU4pCit2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFw
QnVmZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0ciwgR0MzRGJpdGZp
ZWxkKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCit7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyKQorewor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdD
M0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZShHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkp
Cit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQzNE
ZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQzNEZW51bSwgR0Mz
RHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK3sKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZv
cm0zRE9iamVjdCwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0b3I8R0Mz
RGludD4mKQoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCmluZGV4IDg5
OGVlMzQzNTUyYTYzZDAzZDIxNDQyZmZhYzlhOTQ4YWQ5NWQzYWQuLjBjMmEwMTk2MDU3YjBhODA4
M2Q0MzFkNmFlNmViYmY1MDI3ZjllNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0MzRFBsYXRmb3JtTGF5ZXIuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgiCiAKLSNpZiBF
TkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNF
KE5JQ09TSUEpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVTRShURVhUVVJF
X01BUFBFUikgJiYgIVVTRShOSUNPU0lBKQogCiAjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgi
CiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCkBAIC0zMCwxNCArMzAsMTQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OlRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHQzRCYgY29udGV4dCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRlc3RpbmF0aW9uIGRlc3RpbmF0aW9uKQorVGV4dHVyZU1hcHBlckdDM0RQbGF0
Zm9ybUxheWVyOjpUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wmIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbiBk
ZXN0aW5hdGlvbikKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogewogICAgIHN3aXRjaCAoZGVz
dGluYXRpb24pIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpEZXN0aW5hdGlvbjo6T2Zm
c2NyZWVuOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkRlc3RpbmF0aW9uOjpP
ZmZzY3JlZW46CiAgICAgICAgIG1fZ2xDb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3Jl
ZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRp
b246OkRpcmVjdGx5VG9Ib3N0V2luZG93OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OkRlc3RpbmF0aW9uOjpEaXJlY3RseVRvSG9zdFdpbmRvdzoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYxLDcgKzYxLDcgQEAgYm9v
bCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6Om1ha2VDb250ZXh0Q3VycmVudCgpCiAg
ICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAotUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMIFRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcjo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKICAgICBBU1NF
UlQobV9nbENvbnRleHQpOwogICAgIHJldHVybiBtX2dsQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXI6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmUKICAgICAgICAg
ICAgIG1fY29udGV4dC5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgICAgICBtX2NvbnRleHQu
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgpOwotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0Lm1fc3RhdGUu
Ym91bmRGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpGUkFNRUJVRkZFUiwgbV9jb250ZXh0Lm1fc3RhdGUuYm91bmRGQk8pOwogCiAgICAg
ICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQgJiYgcHJldmlvdXNBY3RpdmVDb250ZXh0ICE9
IG1fZ2xDb250ZXh0LmdldCgpKQogICAgICAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEyMCw0ICsxMjAsNCBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYg
dGV4dHVyZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JB
UEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2VuZGlmIC8vIEVOQUJM
RShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgKaW5kZXggYjhlODFmMTFiMjE4YzA0
ZTA2NTQ0MWZiYjY5Y2RhNGY2OWUzZjVkZi4uMGNmNjBmNTczZDhiZjZlZTg3MmE5MjQzNmQwZjUy
OWY5MDdkOTQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuaApAQCAtMTksOSArMTksOSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShHUkFQ
SElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmICFVU0UoTklDT1NJQSkK
KyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAm
JiAhVVNFKE5JQ09TSUEpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCkBAIC0zNCwxMSArMzQsMTEg
QEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIGNsYXNzIFRleHR1cmVN
YXBwZXJHQzNEUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyR0MzRFBsYXRm
b3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0M0QmLCBHcmFwaGljc0NvbnRleHQzRDo6RGVzdGluYXRp
b24pOworICAgIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpEZXN0aW5hdGlvbik7CiAgICAgdmly
dHVhbCB+VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKCk7CiAKICAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1D
b250ZXh0KCkgY29uc3Q7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHRHTCBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdDsKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlk
ZTsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0QmIG1fY29udGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYg
bV9jb250ZXh0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IG1fZ2xDb250ZXh0Owog
CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNTgsNCArNTgsNCBAQCBwcml2YXRl
OgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2VuZGlmIC8vIEVOQUJMRShHUkFQ
SElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCmluZGV4IDYxNjM1ZTUyYTY3Njk1ODM0MzNlZDBlMzAzMjI5Zjg1YzFlYzA1ZWMuLjZiNDc5
MjU3YTYxODlmOTI1MzYzMDc0NjUzNTU3ODM5Y2FhNGM1OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
Y3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKICNp
bmNsdWRlICJCaXRtYXBUZXh0dXJlUG9vbC5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgor
I2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJHTENvbnRleHQuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHQz
RERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHQzRERpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWIzOTZhNDlmOTMxYTE0ODJhYjgyYmY5MTNlYmZlZWRkYmE2ZDUwZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0M0REaXJlY3QyRC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgotCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShESVJFQ1QyRCkKLQot
I2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSA8ZDJkMS5oPgotI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjp+SW1hZ2VFeHRyYWN0b3Io
KSA9IGRlZmF1bHQ7Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpl
eHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlKQotewotICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdl
UGl4ZWxzLCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1Np
emUsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoIWltYWdlUGl4ZWxzIHx8
IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwgY2FudmFzU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoRElSRUNU
MkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JjZmJm
MjkxNjc2MjUzYWJmNTU2ZjdkMDMxY2E4YjYzZTgzYzlhMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRHTERpcmVj
dDJELmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTC5oIgorCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpICYmIFVT
RShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGQyZDFlZmZlY3RzLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkltYWdlRXh0cmFj
dG9yOjp+SW1hZ2VFeHRyYWN0b3IoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQoreworICAgIGlmICghbV9pbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFRv
Q2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBjb25zdCBJbnRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICBpZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlU2l6ZS5pc0VtcHR5KCkgfHwg
Y2FudmFzU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShH
UkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKaW5kZXggZjFhMTY0ZDE3MzA1ZWRmMWZlNmVkYmExZDhjOTg0MDMzYzhkNTRh
MC4uYmE5NDE4YzUwYzc5ZjAzODk1ZTM3YmM3YjM3N2ZhYTkzYjU1NzNiNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzAyLDcgKzMwMiw3IEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRE1hbmFnZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIuaCIKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCAxNjcxYWRhYTg1NTE2ZGUzMmMz
Mzk2Y2U4OWMwYmVhNzAyNDk2ZTBjLi5mZjUyZDI1MzZmNTY1ZmEyOTViZWI2MjAxMjY4YTBmMzMz
MTcwZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTIzNyw3ICsyMzcsNyBAQCBzZXQoUGx1Z2lu
UHJvY2Vzc19MSUJSQVJJRVMKICAgICBXZWJLaXQKICkKIAotaWYgKEVOQUJMRV9HUkFQSElDU19D
T05URVhUXzNEKQoraWYgKEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMKQogICAgICMgRm9yIHBs
YXRmb3JtcyB0aGF0IHdhbnQgdG8gdXNlIHN5c3RlbS1wcm92aWRlZCBPcGVuR0wgKEVTKSAvIEVH
TCBoZWFkZXJzLAogICAgICMgdGhlc2UgaW5jbHVkZSBkaXJlY3RvcmllcywgbGlicmFyaWVzIG9y
IGRlZmluaXRpb25zIG5lZWQgdG8gYmUKICAgICAjIGFkZGVkIGJlZm9yZSB0aGUgQU5HTEUgZGly
ZWN0b3JpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFu
ZENvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dheWxhbmRDb21w
b3NpdG9yLmNwcAppbmRleCBjMzU0MDk5ZmU5NDk4ZmUwNjI5Nzc1NjlkOGU0ZTRlZGNmNjdhMjAw
Li41MGYwODZlZGUyZWYzM2VjOGQ5YTMyOWQyNDQxMGE2N2U3NGI4YTFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAKQEAgLTQxLDkg
KzQxLDkgQEAKICNpZiBVU0UoT1BFTkdMX0VTKQogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2lu
Y2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRXh0ZW5zaW9uczNET3Bl
bkdMRVMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmg+CiAjZWxz
ZQotI2luY2x1ZGUgPFdlYkNvcmUvRXh0ZW5zaW9uczNET3BlbkdMLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9FeHRlbnNpb25zR0xPcGVuR0wuaD4KICNpbmNsdWRlIDxXZWJDb3JlL09wZW5HTFNoaW1z
Lmg+CiAjZW5kaWYKIApAQCAtNDI3LDkgKzQyNyw5IEBAIGJvb2wgV2F5bGFuZENvbXBvc2l0b3I6
OmluaXRpYWxpemVFR0woKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBVU0UoT1BFTkdM
X0VTKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0xFUz4gZ2xFeHRlbnNp
b25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zM0RPcGVuR0xFUz4obnVsbHB0ciwgIGZhbHNlKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+IGdsRXh0ZW5zaW9ucyA9
IG1ha2VVbmlxdWU8RXh0ZW5zaW9uc0dMT3BlbkdMRVM+KG51bGxwdHIsICBmYWxzZSk7CiAjZWxz
ZQotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHRlbnNpb25zM0RPcGVuR0w+IGdsRXh0ZW5zaW9ucyA9
IG1ha2VVbmlxdWU8RXh0ZW5zaW9uczNET3BlbkdMPihudWxscHRyLCBHTENvbnRleHQ6OmN1cnJl
bnQoKS0+dmVyc2lvbigpID49IDMyMCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4dGVuc2lvbnNH
TE9wZW5HTD4gZ2xFeHRlbnNpb25zID0gbWFrZVVuaXF1ZTxFeHRlbnNpb25zR0xPcGVuR0w+KG51
bGxwdHIsIEdMQ29udGV4dDo6Y3VycmVudCgpLT52ZXJzaW9uKCkgPj0gMzIwKTsKICNlbmRpZgog
ICAgIGlmIChnbEV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfRUdMX2ltYWdlIikgfHwgZ2xF
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKQogICAgICAg
ICBnbEltYWdlVGFyZ2V0VGV4dHVyZTJEID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEVHTElNQUdF
VEFSR0VUVEVYVFVSRTJET0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRUdMSW1hZ2VUYXJn
ZXRUZXh0dXJlMkRPRVMiKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvSGlnaFBlcmZvcm1hbmNlR1BVTWFuYWdlci5jcHAKaW5kZXggYzM1OTNhZjM1NDNlM2Mw
MjVmOTZiYzQzYzE0NDNjNmU0MGY3MWYzYi4uZGU5Mzk2N2VmZGY5MmIzYzhmN2I4MzQ0YzQ5ZDAw
YjY1NmQ5Y2EzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL0hpZ2hQ
ZXJmb3JtYW5jZUdQVU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9IaWdoUGVyZm9ybWFuY2VHUFVNYW5hZ2VyLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlIDxPcGVuR0wvQ0dMVHlwZXMuaD4KICNpbmNsdWRlIDxP
cGVuR0wvT3BlbkdMLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQzRE1hbmFn
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCmlu
ZGV4IDQ3ZmFhZmNjODE2MzQ4YmJmYzJiNDc1OTRlYzZiZDJjNWM2OWJmNzguLjZiODllZjlmYTBk
YWMyOWFjY2JmNDY4YTY3ZDhkYzllMjkzYjA0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90
ZS5jcHAKQEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6
cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29ucwogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51
bSwgYm9vbCwgYm9vbCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjpjb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9y
bTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51
bSwgYm9vbCwgYm9vbCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQ
bGF5ZXJQcml2YXRlUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlh
L01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5oCmluZGV4IGZhYTJlYzlhMzIxYjc4NDlkNDY4NjE0
ZmNlOGJhOTk3MTFhMWQ3MmQuLjVkYWVkNjVmMDdiMTdlOGNjMTk2OWE1NDQ2ODJhOGU2ZjZkYTMy
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQ
bGF5ZXJQcml2YXRlUmVtb3RlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9t
ZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuaApAQCAtMTg0LDcgKzE4NCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBmaW5hbDsKIAogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JikgZmluYWw7Ci0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0Mz
RGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgZmluYWw7Cisg
ICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgZmluYWw7CiAgICAgV2Vi
Q29yZTo6TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIGZpbmFsOwog
CiAgICAgdm9pZCBzZXRQcmVsb2FkKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpQcmVsb2FkKSBmaW5h
bDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXgg
ZWQ0MmJkMTk5OGU0YWRlYzhkMjFmNDVlNjFjYTBlN2RiOTgxZWY5MS4uYTM2MGZlNTY3NGIzMDY1
MTk3ZmZlOWVhYTU4NTNmNTU5YjM1YmU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GdWxsc2NyZWVuTWFuYWdlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0M0QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MQXR0YWNobWVudEVsZW1lbnQuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEltYWdlRWxlbWVudC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCBjMzU4ZWUyYzE0ZTc4YzNiNzI3M2NjNTk3NTExNGMx
NTg5ZWZhOWFkLi4yYWE4ZTc2ZTRjYjg5YTNmZmZiN2QyZTNmYjJiZDg2YmQxMGY5MWNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQpAQCAtNjgsNyArNjgsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dDNELmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxD
b252ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCA1MDNiNTE0ZWRhYmE3NmZh
YjlkNTJmMGYwYjUyNzdiMDgwNTE5MWE2Li5hYzA1YzRiODhiZWM5NjJkZjQ5MjAyODA2YWNmZDBi
OTRmMTY0OTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2Vi
UHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQ
cm9jZXNzQ29jb2EubW0KQEAgLTExMCw3ICsxMTAsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNp
bXBvcnQgIldLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMuaCIKICNpbXBvcnQgIldlYlN3
aXRjaGluZ0dQVUNsaWVudC5oIgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQzRE1h
bmFnZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2Vy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lTWFjLmg+CiAjaW1wb3J0IDxwYWwv
c3BpL21hYy9OU1Njcm9sbGVySW1wU1BJLmg+CiAjZW5kaWYKQEAgLTgwNiw3ICs4MDYsNyBAQCB2
b2lkIFdlYlByb2Nlc3M6OnNjcm9sbGVyU3R5bGVQcmVmZXJlbmNlQ2hhbmdlZChib29sIHVzZU92
ZXJsYXlTY3JvbGxiYXJzKQogCiB2b2lkIFdlYlByb2Nlc3M6OmRpc3BsYXlDb25maWd1cmF0aW9u
Q2hhbmdlZChDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1h
cnlGbGFncyBmbGFncykKIHsKLSAgICBHcmFwaGljc0NvbnRleHQzRE1hbmFnZXI6OmRpc3BsYXlX
YXNSZWNvbmZpZ3VyZWQoZGlzcGxheUlELCBmbGFncywgbnVsbHB0cik7CisgICAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpkaXNwbGF5V2FzUmVjb25maWd1cmVkKGRpc3BsYXlJRCwg
ZmxhZ3MsIG51bGxwdHIpOwogfQogICAgIAogdm9pZCBXZWJQcm9jZXNzOjpkaXNwbGF5V2FzUmVm
cmVzaGVkKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9j
bWFrZS9PcHRpb25zRlRXLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKaW5k
ZXggYWY4ZmI2ZGFlYmM0NTZmMmM2NDE4MjA2OGEyYzg0NTVjZDUyZThjOS4uY2FlYjlkN2ZmZDFj
ODYwZGYwM2Q3MWNiYzQwZjI1ZjI2MTdmMzQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09w
dGlvbnNGVFcuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKQEAgLTI0
Niw3ICsyNDYsNyBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVJf
R0wgT04pCiAjU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VS
VkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSIE9GRikKIAotc2V0KEVOQUJMRV9HUkFQSElDU19D
T05URVhUXzNEIE9OKQorc2V0KEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMIE9OKQogc2V0KFVT
RV9BTkdMRV9FR0wgT04pCiAKIHNldChXVEZfTElCUkFSWV9UWVBFIFNIQVJFRCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNH
VEsuY21ha2UKaW5kZXggYTkxZmMyZDA1MDc0ZTNmNmFjZjllYTZjNDFkOWJkM2VlOTQ5OTExMS4u
YmE3ZjM1MmEyYWRjZjcxODA1MTFjZDBhNDA0YTAxNWMxMzhhZGZkOSAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsu
Y21ha2UKQEAgLTI5Niw3ICsyOTYsNyBAQCBpZiAoRU5BQkxFX09QRU5HTCkKICAgICAgICAgbWVz
c2FnZShGQVRBTF9FUlJPUiAiRWl0aGVyIEdMWCBvciBFR0wgaXMgbmVlZGVkIGZvciBFTkFCTEVf
T1BFTkdMLiIpCiAgICAgZW5kaWYgKCkKIAotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVO
QUJMRV9HUkFQSElDU19DT05URVhUXzNEIFRSVUUpCisgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgVFJVRSkKIAogICAgIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBUUlVFKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc01hYy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zTWFjLmNtYWtl
CmluZGV4IDI2NGNmZjBkZWRlY2U5NmUwZDljYmI1MzA3YTAwYjQ0Mzc2YjZiMjYuLjY3MmQ3Nzc3
MmUyM2NiMzk0NGEzMjc1ZjZlZmU1ZjNlMzEwZGQ1YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZS9PcHRpb25zTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zTWFjLmNtYWtlCkBA
IC0xMTMsNyArMTEzLDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1hTTFQgUFJJVkFURSBPTikKIAogV0VCS0lUX09QVElPTl9FTkQoKQogCi1zZXQoRU5BQkxFX0dS
QVBISUNTX0NPTlRFWFRfM0QgT04pCitzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04p
CiBzZXQoRU5BQkxFX1dFQktJVF9MRUdBQ1kgT04pCiBzZXQoRU5BQkxFX1dFQktJVCBPTikKIApk
aWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZSBiL1NvdXJj
ZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UKaW5kZXggNTkzNTkxMWRkOWQ1NDhlYmJh
YTk2OTE5NDI1MzY1YTk0NWIyNzA2MS4uYzcwZTA0MWIwZGNjNGZiYWQ2MWIxYzkyZGViOWY0MDVj
ODEwZTYzYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFr
ZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlCkBAIC0xMTMsNyAr
MTEzLDcgQEAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VS
VkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQo
VVNFX1VOSVhfRE9NQUlOX1NPQ0tFVFMgT04pCiAKICMgUmVuZGVyaW5nIG9wdGlvbnMKLVNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIE9OKQorU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04pCiBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MgT04pCiBTRVRfQU5EX0VY
UE9TRV9UT19CVUlMRChVU0VfRUdMIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX05J
Q09TSUEgVFJVRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlIGIv
U291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKaW5kZXggZDM0OWMyYzM3YzBlODg4ZmRiYTY5
YmZiNjExMDY3Y2Y0MWQ2MTM5ZC4uMmZiYmI1ODFjMDJiNmY0ODM0YWU4YWZmYTU1NGRmMGZiMmUz
MTFlMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTE5NSw3ICsxOTUsNyBAQCBpZiAoV1RGX0NQ
VV9BUk0gT1IgV1RGX0NQVV9NSVBTKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9D
QVBTVE9ORSAke0RFVkVMT1BFUl9NT0RFfSkKIGVuZGlmICgpCiAKLVNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEIFRSVUUpCitTRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCBUUlVFKQogCiBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVIgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9URVhUVVJFX01BUFBFUl9HTCBUUlVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21h
a2UKaW5kZXggZDQ3MWQ1OWNlMTY4MzYxZDU3ZmZkZmUyZjdiYjdjNzI0NTlhMTgwMS4uMDI5YmE0
N2ZmODQ3ODBlZDVmMzBjMGQzZTFkYjM5NGMyOWMzYjA2MCAxMDA2NDQKLS0tIGEvU291cmNlL2Nt
YWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dpbkNh
aXJvLmNtYWtlCkBAIC0zNiw3ICszNiw3IEBAIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9U
RVhUVVJFX01BUFBFUl9HTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9NRURJQV9G
T1VOREFUSU9OIE9OKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NL
RVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9JTlNQRUNUT1J9KQogCi1zZXQoRU5BQkxFX0dSQVBI
SUNTX0NPTlRFWFRfM0QgT04pCitzZXQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04pCiBz
ZXQoRU5BQkxFX1dFQktJVCBPTikKIAogc2V0KFVTRV9BTkdMRV9FR0wgT04pCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmZmOWJkYjg2Yjc3YzY0
OWMyZmU4NjQyYjM4NmJkYTEzYzY5YTRhZS4uZDc0MmUyNWExMDFiODE3YmRmYmZiOGQwZjFiZTlm
MGE3ZmYxM2M5NiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhpY3ND
b250ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGljc0NvbnRl
eHRHTAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19DT05URVhU
XzNEKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMgR3JhcGhp
Y3NDb250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3BlbkdMIGlt
cGxlbWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY29uZmlnL3dhdGNobGlzdDoKKwogMjAyMC0wMS0wNiAgUGVyIEFybmUgVm9sbGFuICA8
cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gSXNzdWUgbWFjaCBsb29rdXAgZXh0
ZW5zaW9uIHRvIGxhdW5jaCBzZXJ2aWNlcyBkYWVtb24gZm9yIE1haWwKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0CmluZGV4IDQyY2E2MDU4ZThjNDYw
YTUwMWRjODg0YTkzMGJlYTY3MTc4Yzc3YzUuLjIzYTMzNDg4MzNlY2EzMGIxM2E2NzI3ZmMwMjI5
Nzc5YjZhMjM5NGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy93YXRjaGxpc3QKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY29uZmln
L3dhdGNobGlzdApAQCAtMTYzLDEwICsxNjMsMTEgQEAKICAgICAgICAgIldlYkdMIjogewogICAg
ICAgICAgICAgImZpbGVuYW1lIjogciJTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy8uKldlYkdM
LioiCiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy8uKldlYkdMLioiCisgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZSIKICAgICAgICAgICAgICAgICAgICAgICAgIHIifFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdSIKICAgICAgICAgICAgICAgICAgICAgICAg
IHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbCIKICAgICAgICAgICAg
ICAgICAgICAgICAgIHIifFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFLioi
Ci0gICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy8uKkdyYXBoaWNzQ29udGV4dDNELioiCisgICAgICAgICAgICAgICAgICAgICAgICByInxT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy8uKkdyYXBoaWNzQ29udGV4dEdMLioiCiAg
ICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRSIsCiAgICAg
ICAgIH0sCiAgICAgICAgICJGaWx0ZXJzIjogewpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hh
bmdlTG9nCmluZGV4IGQ1NWNjZmM3M2U1NjFhNjc4YTBkMmFkYmE1MTkxZjczYjcwNjQwM2QuLmUy
MmZmOTIyYmJmNTk0NzhmNWM0OWI4OWQ3YzE4MmFkM2IzMDNmOTAgMTAwNjQ0Ci0tLSBhL0NoYW5n
ZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wMS0wNSAgRGVhbiBK
YWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIEdyYXBoaWNzQ29udGV4
dDNEIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDU3NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW5hbWUgYWxsIHRoZSBHcmFwaGljc0NvbnRleHQzRCB0aGluZ3Mg
dG8gR3JhcGhpY3NDb250ZXh0R0wKKyAgICAgICAgKGluY2x1ZGVzIEV4dGVuc2lvbnMzRCBhbmQg
R1JBUEhJQ1NfQ09OVEVYVF8zRCkuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RCYXNlIG5v
dyBiZWNvbWVzIEdyYXBoaWNzQ29udGV4dEdMLgorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCBp
cyBub3cgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgKHNpbmNlIGl0IHJlcHJlc2VudHMKKyAgICAg
ICAgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQVBJKS4KKworICAgICAgICAqIFNv
dXJjZS9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5j
bWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZToKKyAgICAgICAg
KiBTb3VyY2UvY21ha2UvT3B0aW9uc01hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Uv
T3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25z
V1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8uY21ha2U6
CisKIDIwMjAtMDEtMDMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIHNvbWUgc2hhcmVkIHNjaGVtZXMgdG8gdGhlIFdlYktpdC54Y3dvcmtzcGFj
ZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5jZVRl
c3RzL0NoYW5nZUxvZwppbmRleCAyY2VhZmVkNmRjZTJkMDNlYWUzYTZmMWYxNTU1NTQ3ZmEzMDY0
NzZkLi4yMDJjYjNkOTk0MDEwMzI2YTUyZWJjMmIxYzk0Nzc0MTM5MTJjOTM3IDEwMDY0NAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhpY3ND
b250ZXh0R0wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNTc3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbmFtZSBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dDNEIHRoaW5ncyB0byBHcmFwaGljc0NvbnRl
eHRHTAorICAgICAgICAoaW5jbHVkZXMgRXh0ZW5zaW9uczNEIGFuZCBHUkFQSElDU19DT05URVhU
XzNEKS4KKworICAgICAgICBHcmFwaGljc0NvbnRleHQzREJhc2Ugbm93IGJlY29tZXMgR3JhcGhp
Y3NDb250ZXh0R0wuCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIGlzIG5vdyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCAoc2luY2UgaXQgcmVwcmVzZW50cworICAgICAgICB0aGUgT3BlbkdMIGlt
cGxlbWVudGF0aW9uIG9mIHRoZSBBUEkpLgorCisgICAgICAgICogU3RpdGNoTWFya2VyL3d0Zi9G
ZWF0dXJlRGVmaW5lcy5oOgorICAgICAgICAqIFN0aXRjaE1hcmtlci93dGYvUGxhdGZvcm0uaDoK
KwogMjAxOS0xMi0xNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIFN0eWxlQmVuY2ggc3VidGVzdCBmb3IgZHluYW1pYyBtZWRpYSBxdWVyeSBwZXJmb3Jt
YW5jZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdGl0Y2hNYXJrZXIvd3RmL0ZlYXR1
cmVEZWZpbmVzLmggYi9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURl
ZmluZXMuaAppbmRleCBhZDRiOTFlZTgyNDVmMTc2OTg3ZjM3YmIyNzVhMGRlNjc2NmU0YjVjLi5l
MWI2ZmZlMGE4Yjg3MWVmMGFmZjlhYWZkOWVmOTM0NjZlYTBkMmQyIDEwMDY0NAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvRmVhdHVyZURlZmluZXMuaApAQCAtNjc2LDgg
KzY3Niw4IEBAIHRoZSBwdWJsaWMgaU9TIFNESy4gV2Ugd2lsbCBhbHNvIG5lZWQgdG8gdXBkYXRl
IHRoZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBmaWxlCiAjZGVmaW5lIEVOQUJMRV9XRUJHTCAw
CiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKEVOQUJMRV9HUkFQSElDU19DT05URVhUXzNEKQotI2Rl
ZmluZSBFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF8zRCBFTkFCTEVfV0VCR0wKKyNpZiAhZGVmaW5l
ZChFTkFCTEVfR1JBUEhJQ1NfQ09OVEVYVF9HTCkKKyNkZWZpbmUgRU5BQkxFX0dSQVBISUNTX0NP
TlRFWFRfR0wgRU5BQkxFX1dFQkdMCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJf
QU5JTUFUSU9OUykKQEAgLTczMCw4ICs3MzAsOCBAQCB0aGUgcHVibGljIGlPUyBTREsuIFdlIHdp
bGwgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgRmVhdHVyZURlZmluZXMueGNjb25maWcgZmlsZQog
I2Vycm9yICJFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykgcmVxdWlyZXMgRU5BQkxFKFRPVUNIX0VW
RU5UUykiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJHTCkgJiYgIUVOQUJMRShHUkFQSElDU19D
T05URVhUXzNEKQotI2Vycm9yICJFTkFCTEUoV0VCR0wpIHJlcXVpcmVzIEVOQUJMRShHUkFQSElD
U19DT05URVhUXzNEKSIKKyNpZiBFTkFCTEUoV0VCR0wpICYmICFFTkFCTEUoR1JBUEhJQ1NfQ09O
VEVYVF9HTCkKKyNlcnJvciAiRU5BQkxFKFdFQkdMKSByZXF1aXJlcyBFTkFCTEUoR1JBUEhJQ1Nf
Q09OVEVYVF9HTCkiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHTDIpICYmICFFTkFCTEUoV0VC
R0wpCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1N0aXRjaE1hcmtlci93dGYvUGxhdGZv
cm0uaCBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCmluZGV4
IDYwYmU4ZjM0ZjBjNDQxYTIwOTgxMWY1MGY2Yzk2NDZmZmNmYWQ5MjQuLjIyMmVkNzc5OTE5NTdk
MDlmZmY3YWU1N2Q3NzZhMWM2MDRiYzJjMGMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3RpdGNoTWFya2VyL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3RpdGNo
TWFya2VyL3d0Zi9QbGF0Zm9ybS5oCkBAIC05OTAsNyArOTkwLDcgQEAKICNkZWZpbmUgVVNFX1RF
WFRVUkVfTUFQUEVSIDEKICNlbmRpZgogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgIWRlZmluZWQoVVNFX1RFWFRVUkVfTUFQUEVSX0dM
KQorI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wp
ICYmICFkZWZpbmVkKFVTRV9URVhUVVJFX01BUFBFUl9HTCkKICNkZWZpbmUgVVNFX1RFWFRVUkVf
TUFQUEVSX0dMIDEKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386908</attachid>
            <date>2020-01-06 16:10:12 -0800</date>
            <delta_ts>2020-01-06 18:52:34 -0800</delta_ts>
            <desc>Build fix</desc>
            <filename>bug-205778.diff</filename>
            <type>text/plain</type>
            <size>14557</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2NDM1ZTdiOWUwOS4uMTI2
YzExOTEwOGMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMSBAQAorMjAyMC0wMS0wNiAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29t
PgorCisgICAgICAgIFJlbmFtZSBHcmFwaGljc0NvbnRleHQzRCB0byBHcmFwaGljc0NvbnRleHRH
TAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1Nzc4
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODMyNzU5Nz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdGhlIGJ1aWxkIGFmdGVyIHIyNTQwNjQg
b24gV2luZG93cyBhbmQgUGxheVN0YXRpb24uCisKKyAgICAgICAgQWRkIFVTRV9PUEVOR0xfRVNf
MyB0byBXaW5kb3dzIGFuZCBXUEUgYnVpbGRzIHRvIHNpbXBsaWZ5IHRoZSBQbGF0Zm9ybSBjaGVj
a3MKKyAgICAgICAgZm9yIEdMIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gT3BlbkdMIEVTIDMuMCsu
IEV4cG9zZSBhZGRpdGlvbmFsIFVTRSBtYWNyb3MgZm9yCisgICAgICAgIFdpbmRvd3MgYnVpbGRz
IHRvIHJlbW92ZSBQbGF0Zm9ybS5oIGVudHJpZXMgYXJvdW5kIEVOQUJMRShXRUJHTCkuCisKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2Uv
Y21ha2UvT3B0aW9uc1dQRS5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1dp
bkNhaXJvLmNtYWtlOgorCiAyMDIwLTAxLTA1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW5hbWUgR3JhcGhpY3NDb250ZXh0M0QgdG8gR3JhcGhpY3NDb250ZXh0
R0wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VM
b2cKaW5kZXggZTdhNDZmMThiNjYuLmIwNWEwNzE1YWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTAxLTA2ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CisKKyAgICAg
ICAgUmVuYW1lIEdyYXBoaWNzQ29udGV4dDNEIHRvIEdyYXBoaWNzQ29udGV4dEdMCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU3NzgKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU4MzI3NTk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERlZmluZSBVU0VfT1BFTkdMXzMgZm9yIE1hYyBhbmQgVVNFX09Q
RU5HTF9FU18zIGZvciBpT1MuIFVzZSBDTWFrZSBjb25maWcgZm9yCisgICAgICAgIFdpbmRvd3Mg
YW5kIFdlYkdMLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMjAtMDEtMDUgIERl
YW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBHcmFwaGljc0Nv
bnRleHQzRCB0byBHcmFwaGljc0NvbnRleHRHTApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggMjdiMGY0ZmY4OTAu
LmEzYWQyYTg4Y2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTExMTAsMTEgKzExMTAsMTUgQEAKICAgIEl0
IHJlcGxhY2VzIFVTRV9PUEVOR0wsIFVTRV9PUEVOR0xfRVMgYW5kIFVTRV9FR0wuICovCiAjaWYg
UExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oTUFDQ0FUQUxZU1QpICYmIF9faGFzX2luY2x1ZGUo
PE9wZW5HTC9PcGVuR0wuaD4pKQogI2RlZmluZSBVU0VfT1BFTkdMIDEKKyNkZWZpbmUgVVNFX09Q
RU5HTF8zIDEKICNkZWZpbmUgVVNFX09QRU5HTF9FUyAwCisjZGVmaW5lIFVTRV9PUEVOR0xfRVNf
MyAwCiAjZGVmaW5lIFVTRV9BTkdMRSAwCiAjZWxzZQogI2RlZmluZSBVU0VfT1BFTkdMIDAKKyNk
ZWZpbmUgVVNFX09QRU5HTF8zIDAKICNkZWZpbmUgVVNFX09QRU5HTF9FUyAxCisjZGVmaW5lIFVT
RV9PUEVOR0xfRVNfMyAxCiAjZGVmaW5lIFVTRV9BTkdMRSAwCiAjZW5kaWYKICNpZiBQTEFURk9S
TShDT0NPQSkKQEAgLTExMzIsMTIgKzExMzYsNiBAQAogCiAjZW5kaWYKIAotI2lmIEVOQUJMRShX
RUJHTCkgJiYgUExBVEZPUk0oV0lOKQotI2RlZmluZSBVU0VfT1BFTkdMIDEKLSNkZWZpbmUgVVNF
X09QRU5HTF9FUyAxCi0jZGVmaW5lIFVTRV9FR0wgMQotI2VuZGlmCi0KICNpZiBFTkFCTEUoV0VC
R0wpCiAjaWYgIWRlZmluZWQoVVNFX0FOR0xFKQogI2RlZmluZSBVU0VfQU5HTEUgMApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGZmYzFjMTgwOWEwLi5iOTg5MGNkZDgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQz
IEBACisyMDIwLTAxLTA2ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CisK
KyAgICAgICAgUmVuYW1lIEdyYXBoaWNzQ29udGV4dDNEIHRvIEdyYXBoaWNzQ29udGV4dEdMCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU3NzgKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4MzI3NTk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9HTCkg
aW5zdGVhZCBvZiBFTkFCTEUoV0VCR0wpIGZvciByZWxldmFudCBmaWxlcy4KKyAgICAgICAgVGhp
cyB3YXMgY2F1c2luZyB0aGUgYnVpbGQgYnJlYWthZ2UuCisKKyAgICAgICAgTW92ZSBtZXRob2Rz
IHdyYXBwaW5nIE9wZW5HTFtFU10gMy4wKyBmdW5jdGlvbnMgaW50byBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTENvbW1vbi5jcHAKKyAgICAgICAgYW5kIHJlbW92ZSB0aGVtIGZyb20gR3JhcGhpY3ND
b250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcC4gQWRkIGEgY2hlY2sgZm9yIE9wZW5HTFtFU10KKyAg
ICAgICAgdmVyc2lvbnMgcmF0aGVyIHRoYW4gZGVwZW5kaW5nIG9uIGEgcGFydGljdWxhciBwbGF0
Zm9ybS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjptYXBCdWZmZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5tYXBCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFn
ZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVVbmlmb3Jtcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
Q29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
SW50ZXJuYWxmb3JtYXRpdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlMkQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRl
eFN0b3JhZ2UzRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOiBEZWxldGVkLgorCiAyMDIwLTAxLTA2ICBQZXIg
QXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIy
NDc2MjYpOiBJbnRyb2R1Y2VkIG1lbW9yeSByZWdyZXNzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAppbmRleCAwNTliN2Ix
NjcxMS4uYzcyZDc3ZDk3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2lmIEVOQUJMRShXRUJHTCkKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF9H
TCkKIAogI2lmIFVTRShMSUJFUE9YWSkKIC8vIGxpYmVwb3h5IGhlYWRlcnMgaGF2ZSB0byBiZSBp
bmNsdWRlZCBiZWZvcmUgPEFOR0xFL1NoYWRlckxhbmcuaD4gaW4gb3JkZXIgdG8gYXZvaWQKQEAg
LTEwOSw0ICsxMDksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCmlu
ZGV4IDgyY2JlZDA2ODE2Li43ZmI5ZWQwZjQzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMLmgi
CiAKLSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAK
ICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKaW5kZXggMDM5MzQ4NTQ2OTkuLjkx
NWM0MDQ0NzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpZiBFTkFCTEUoV0VCR0wpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfR0wpCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJHcmFwaGlj
c1R5cGVzM0QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgKaW5kZXggZTkyNWEzNWNlZjMu
Ljg4NDFhNDVmNmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaApAQCAtMjUsNiArMjUs
OCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUX0dMKQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xQb3dl
clByZWZlcmVuY2UgewpAQCAtNTQsMyArNTYsNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzIHsKIH07CiAKIH0KKworI2VuZGlmIC8vIEVOQUJMRShHUkFQSElDU19DT05URVhU
X0dMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUv
R3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAppbmRleCBjNTFhNTIxYzRiOC4u
YjA0YWNkYWQ4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC0yNyw3
ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09O
VEVYVF9HTCkgJiYgVVNFKEFOR0xFKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0wuaCIKIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFU0lPUy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaAppbmRleCA4ODg4ZDYxZTgzZC4uN2JiODg5NWIxYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCkBAIC0yNSw3ICsyNSw3IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKFdFQkdMKQorI2lmIEVOQUJMRShHUkFQSElDU19D
T05URVhUX0dMKQogCiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRHTC5oIgpAQCAtNzQ2LDQgKzc0Niw0IEBAIHByaXZhdGU6CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEdSQVBISUNTX0NP
TlRFWFRfR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cAppbmRleCA4NTJlOGEwZmViMy4uNTdjOTIwZGY5M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1v
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtNTU4LDcgKzU1OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50cHRyIG9mZnNldCwKICAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6
ZSwgZGF0YSk7CiB9CiAKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oV1BFKQorI2lm
IFVTRShPUEVOR0xfMykgfHwgVVNFKE9QRU5HTF9FU18zKQogdm9pZCogR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZz
ZXQsIEdDM0RzaXplaXB0ciBsZW5ndGgsIEdDM0RiaXRmaWVsZCBhY2Nlc3MpCiB7CiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CkBAIC02MTgsNyArNjE4LDQxIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
Y29uc3QKIAogICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRp
Y2VzLnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7
CiB9Ci0jZW5kaWYKKyNlbHNlCit2b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVm
ZmVyUmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0ciwgR0MzRGJpdGZpZWxk
KQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCit7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyKQoreworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCit7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZShHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQzNEZW51
bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCit7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQzNEZW51bSwgR0MzRHNp
emVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKK3sKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0z
RE9iamVjdCwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0b3I8R0MzRGlu
dD4mKQoreworfQorI2VuZGlmIC8vIFVTRShPUEVOR0xfMykgfHwgVVNFKE9QRU5HTF9FU18zKQog
CiBHQzNEZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHQzNEZW51bSB0YXJnZXQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRl
eHR1cmVNYXBwZXIuY3BwCmluZGV4IDhmYTcyZTBjYWNiLi45MWJmZGI5MTQ2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4
dEdMVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTQ3OSw0MiAr
NDc5LDYgQEAgRXh0ZW5zaW9uc0dMJiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXh0ZW5z
aW9ucygpCiB9CiAjZW5kaWYKIAotI2lmIChQTEFURk9STShHVEspICYmICFVU0UoQU5HTEUpKSB8
fCBQTEFURk9STShXSU4pCi12b2lkKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVy
UmFuZ2UoR0MzRGVudW0sIEdDM0RpbnRwdHIsIEdDM0RzaXplaXB0ciwgR0MzRGJpdGZpZWxkKQot
ewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1HQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5tYXBCdWZmZXIoR0MzRGVudW0pCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDM0RlbnVtLCBH
QzNEZW51bSwgR0MzRGludHB0ciwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyKQotewotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlcm5hbGZvcm1hdGl2KEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGludCopCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
QzNEZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQzNEZW51bSwg
R0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQzNEZW51bSwgR0MzRHNpemVp
LCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMoUGxhdGZvcm0zRE9i
amVjdCwgY29uc3QgVmVjdG9yPEdDM0R1aW50PiYsIEdDM0RlbnVtLCBWZWN0b3I8R0MzRGludD4m
KQotewotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShHUkFQSElDU19DT05URVhUX0dMKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0ZUVy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
RlRXLmNtYWtlCmluZGV4IGNhZWI5ZDdmZmQxLi5mNTJiNDFmZTY5MiAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlL09wdGlvbnNGVFcuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNGVFcu
Y21ha2UKQEAgLTIzOCwxNiArMjM4LDIwIEBAIGZpbmRfcGFja2FnZShMaWJQU0wgMC4yMC4yIFJF
UVVJUkVEKQogIyAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1dFQlAgT04pCiAjIGVu
ZGlmICgpCiAKK3NldChVU0VfQU5HTEVfRUdMIE9OKQorCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfQ1VSTCBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9ESVJFQ1QyRCBPTikK
K1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9FR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChVU0VfRVhQT1JUX01BQ1JPUyBPTikKK1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9P
UEVOR0xfRVMgT04pCitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfT1BFTkdMX0VTXzMgT04p
CiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVIgT04pCiBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVJfR0wgT04pCiAjU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRfU0VSVkVSICR7RU5BQkxFX1JFTU9URV9J
TlNQRUNUT1J9KQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0lOU1BFQ1RPUl9TT0NLRVRf
U0VSVkVSIE9GRikKIAotc2V0KEVOQUJMRV9HUkFQSElDU19DT05URVhUX0dMIE9OKQotc2V0KFVT
RV9BTkdMRV9FR0wgT04pCitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfR1JBUEhJQ1Nf
Q09OVEVYVF9HTCBPTikKIAogc2V0KFdURl9MSUJSQVJZX1RZUEUgU0hBUkVEKQogc2V0KEphdmFT
Y3JpcHRDb3JlX0xJQlJBUllfVFlQRSBTSEFSRUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1dQRS5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmluZGV4IDJm
YmJiNTgxYzAyLi44ZDJmZDQxZjk1OSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNX
UEUuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTE4OCw2ICsx
ODgsNyBAQCBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfR0NSWVBUIFRSVUUpCiBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfTElCRVBPWFkgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9MSUJXUEUgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xf
RVMgVFJVRSkKK1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVNfMyBUUlVFKQog
U0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1dQRV9SRU5ERVJFUiBUUlVFKQogU0VUX0FORF9F
WFBPU0VfVE9fQlVJTEQoVVNFX1hER01JTUUgVFJVRSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL09wdGlvbnNXaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2luQ2Fpcm8u
Y21ha2UKaW5kZXggMDI5YmE0N2ZmODQuLjE3OTZjMjE3NTJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
Y21ha2UvT3B0aW9uc1dpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV2lu
Q2Fpcm8uY21ha2UKQEAgLTIsNiArMiw5IEBAIHNldChXVEZfUExBVEZPUk1fV0lOX0NBSVJPIDEp
CiAKIGluY2x1ZGUoT3B0aW9uc1dpbikKIAorIyBUT0RPOiBNb3ZlIHRoaXMgYWJvdmUgT3B0aW9u
c1dpbiB3aGVuIFdlYktpdExlZ2FjeSBpcyBkZXByZWNhdGVkCitzZXQoRU5BQkxFX1dFQktJVCBP
TikKKwogZmluZF9wYWNrYWdlKENhaXJvIDEuMTUuMTIgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2Uo
Q1VSTCA3LjYwLjAgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoSUNVIFJFUVVJUkVEIENPTVBPTkVO
VFMgZGF0YSBpMThuIHVjKQpAQCAtMjgsMjMgKzMxLDI0IEBAIGlmIChXRUJQX0ZPVU5EKQogICAg
IFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9XRUJQIE9OKQogZW5kaWYgKCkKIAorc2V0KFVT
RV9BTkdMRV9FR0wgT04pCisKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DQUlSTyBPTikK
IFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9DVVJMIE9OKQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0VHTCBPTikKK1NF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9PUEVOR0xfRVMgT04pCitTRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChVU0VfT1BFTkdMX0VTXzMgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
VEVYVFVSRV9NQVBQRVIgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9N
QVBQRVJfR0wgT04pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTUVESUFfRk9VTkRBVElP
TiBPTikKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9JTlNQRUNUT1JfU09DS0VUX1NFUlZF
UiAke0VOQUJMRV9SRU1PVEVfSU5TUEVDVE9SfSkKIAotc2V0KEVOQUJMRV9HUkFQSElDU19DT05U
RVhUX0dMIE9OKQotc2V0KEVOQUJMRV9XRUJLSVQgT04pCi0KLXNldChVU0VfQU5HTEVfRUdMIE9O
KQorU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0dSQVBISUNTX0NPTlRFWFRfR0wgT04p
CitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChFTkFCTEVfREVWRUxPUEVSX01PREUgJHtERVZFTE9Q
RVJfTU9ERX0pCiAKIHNldChDT1JFRk9VTkRBVElPTl9MSUJSQVJZIENGbGl0ZSkKIAotU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoRU5BQkxFX0RFVkVMT1BFUl9NT0RFICR7REVWRUxPUEVSX01PREV9
KQotCiBhZGRfZGVmaW5pdGlvbnMoLURXVEZfUExBVEZPUk1fV0lOX0NBSVJPPTEpCiBhZGRfZGVm
aW5pdGlvbnMoLUROT0NSWVBUKQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>